大家好,关于轻松掌握Vue开发:打造个性化开心消消乐游戏(源码附送)很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
效果展示#
先在这里放一个最终实现的效果,还是一个比较初级的版本,大家有什么想法欢迎评论哦
游戏规则:
界面设计#
页面的布局比较简单,格子的数据是一个二维数组的形式,说到这里大家应该已经明白界面是怎么做的了。
大家应该注意到了 :class="_item" 的写法,动态命名class,使得其每个种类的方块的颜色都不同,最后可以按照同色消除的玩法就行操作。
.square.A{ background-color: #8D98CA;}.square.S{ background-color: #A9A2F6;}/*其余操作相同*/同时在玩家点击方块的时候方块会左右摆动以表示选中了此方块,还可以提升游戏的灵动性。关于HTML动画的实现方式有很多,在这里我们使用CSS animation进行操作,代码如下:
@keyframes jitter { from, 50%, to { transform: rotate(0deg); } 10%, 30% { transform: rotate(10deg); } 20% { transform: rotate(20deg); } 60%, 80% { transform: rotate(-10deg); } 70% { transform: rotate(-20deg); }}/* 只要是用户点击不动,动画就不会停止 */.square:active{ animation-name: jitter; animation-duration: 0.5s; animation-iteration-count: infinite;}核心算法#
消除算法
上面提到我之前是做过一道题是判断一个二维数组中有没有可消的元素,有的话是多少个。
在这里我们可以这样想,最开始遍历一整个二维数组,每次定义一个 X0 , X1 , Y0, Y1, 然后每次计算其上下左右连续相同方块的位置,在这个过程中要注意边界问题,然后我们记录下这四个变量,只要 |X0-X1|+1>=3 或者 |Y0-Y1|+1>=3,我们就可以将这个方块的坐标加入到 del数组中。

遍历完一整个二维数组之后,我们就可以将 del数组中对应坐标位置的方块内容变为 '0', 由于我们没有对 0 定义样式,所以在没有执行下落算法之前变为 0 的方块为白色。
下落算法
在我们将相应的方块白色之后,其上面的方块应该下落,在这里我的思想是这个样子的。
按照列遍历二维数组,定义一个指针 t,指向上次不为 0 的方块位置,一旦遇到方块不为 0 的格子就将其与t所指的方块就行交换,一次类推,示意图如下:
这样的话我们就可以把为空的上移到最顶层,并且不打乱顺序,然后我们在随机填充顶部的空方块就可以了。做完填充之后我们要再做一次消除算法,直到del数组的长度为空为止,这个道理大家应该都能想得到。
代码如下
clear(): void { const m: number = 10; const n: number = 10; while (true) { const del: any[] = []; for (let i: number = 0; i< m; i++) { for (let j: number = 0; j< n; j++) { if (this.squareData[i][j] === '0') { continue; } let x0: number = i; let x1: number = i; let y0: number = j; let y1: number = j; while (x0 >= 0 && x0 >i - 3 && this.squareData[x0][j] === this.squareData[i][j]) { --x0; } while (x1< m && x1< i + 3 && this.squareData[x1][j] === this.squareData[i][j]) { ++x1; } while (y0 >= 0 && y0 >j - 3 && this.squareData[i][y0] === this.squareData[i][j]) { --y0; } while (y1< n && y1< j + 3 && this.squareData[i][y1] === this.squareData[i][j]) { ++y1; } if (x1 - x0 >3 || y1 - y0 >3) { del.push([i, j]); } } } if (del.length === 0) { break; } this.score += del.length; for (const square of del) { this.$set(this.squareData[square[0]], square[1], '0'); } for (let j: number = 0; j< n; ++j) { let t: number = m - 1; for (let i: number = m - 1; i >= 0; --i) { if (this.squareData[i][j] !== '0') { [this.squareData[t][j], this.squareData[i][j]] = [this.squareData[i][j], this.squareData[t][j]]; t -= 1; } } } }},游戏结束#
分数为 0 的时候游戏结束,此时在执行一遍初始化函数,重新生成一个开心消消乐格子,将分数初始化为10.
if (this.score<= 0) { if (confirm('分数用光了哦~~')) { this.init(); } else { this.init(); } }作者: Jacob98出处:https://www.cnblogs.com/Jacob98/p/11719156.html






























用户评论
终于看到有人把开心消消乐移植到 Vue 上了!感觉学习新技术又有了个活的目标,赶紧下载代码跟着学一学!
有16位网友表示赞同!
看起来还挺不错的,就是个人觉得界面设计可以再丰富一些,毕竟经典游戏还是要考虑用户体验啊。不过开源的真棒,自己改也能更符合自己的喜好。
有17位网友表示赞同!
这个源码太赞了!把消消乐的游戏逻辑用 Vue 写出来确实很巧妙,以前学 Vue 时就觉得它架构清晰容易上手,这下子真的印证了这一点!
有13位网友表示赞同!
学习编程的路上一直觉得游戏开发是个好方向,自己动手实现一个游戏不仅能提升技术水平,还能感受到成就感。这个 Vue 消消乐的源码值得一看啊!
有10位网友表示赞同!
说实话,我并不太喜欢这个界面风格设计的配色方案,有点土气!不过还是要点赞一下作者用心打造开源代码的热情啊!
有14位网友表示赞同!
看了下源码实现,感觉逻辑思路非常清晰。作为入门 Vue 的程序员来说,这样的项目案例学习起来更加直观生动,推荐给大家!
有9位网友表示赞同!
终于有人写了 Vue 版的消消乐游戏啊!我从小玩这个就喜欢到不行,现在可以尝试用自己的代码来实现自己喜欢的风格的游戏了,想想就兴奋得不得了!
有11位网友表示赞同!
代码写的也太复杂了吧?我是想利用代码看看 Vue 打造游戏的玩法。但是这个项目对我来说难度有点大,还是适合有些经验的程序员去学习吧!
有15位网友表示赞同!
作为一位 Vue 爱好者,看到这个开源项目真是激动人心的!赶紧收藏起来,等以后有时间再仔细研讨源码,相信会有很多收获!
有5位网友表示赞同!
这个消消乐游戏玩起来一点意思都没有,而且界面设计太古老了。建议作者可以参考最新的游戏,进行一下升级改造!
有14位网友表示赞同!
这篇博文很不错,介绍清楚,代码注释也很到位,很容易理解。不过我个人感觉游戏难度有点低,希望能加强一些挑战性!
有15位网友表示赞同!
学习 Vue 真是太酷了!这个项目案例真的很棒,可以让我更好地理解 Vue 的应用场景,而且还能实现一个好玩的游戏,简直双重满足!
有9位网友表示赞同!
看完代码后发现,这个开源游戏逻辑很简洁明了。对于初学者来说,这是一个很好的入门练习,推荐大家学习!
有8位网友表示赞同!
感觉这个博文写的有点太过简单,并没有深入讲解 Vue 的实际应用场景。希望作者能写一些更复杂的游戏案例,以便更全面地展示 Vue 的强大的功能!
有9位网友表示赞同!
虽然游戏本身比较老旧,但是源码还是很有价值,可以用来学习Vue框架的基本知识和实现逻辑。总体来说值得推荐!
有5位网友表示赞同!
这个开源游戏玩一下感觉很一般,没有太多新奇的玩法设计。建议作者可以加入一些新的关卡挑战和道具功能,让游戏更具乐趣性!
有18位网友表示赞同!
博主的技术水平真是太棒了,竟然可以把消消乐用 Vue 实现出来!学习他们的代码逻辑,能够让我更快地掌握编程技巧!
有12位网友表示赞同!
这个源码确实非常实用,我尝试修改了一下游戏的音乐效果,感觉效果显著提升了很多。分享一下我的修改经验吧!(然后附上自己的案例截图)
有19位网友表示赞同!
Vue 真是太棒了,它不仅可以开发复杂的Web应用,还能用来编写有趣的游戏。这篇文章让我对 Vue 的可能性有了更深的理解!
有20位网友表示赞同!