![](https://img.haomeiwen.com/i11209424/bae4c2c45c502916.png)
为了方便理解,我们使用二维数组来进行分析 2048 的算法逻辑。
首先我们简单的了解一下游戏玩法:
简言之,就是通过上、下、左、右移动,使相邻的相同元素进行合并,进而数字相加得到 2048的结果的游戏。
(如果费解的话,可以下载一个2048的游戏体验一下)
注:这里的相邻,指忽略掉两个元素中间的空元素的情况。(下图所示都是相邻情况)
![](https://img.haomeiwen.com/i11209424/b14ecdc0e3c855d6.png)
好了,我们来分析一下移动的逻辑处理:
以向右移动为例吧:那我们怎么来处理这种情况呢,我们的算法应该怎么实现呢? (注:空的地方其实是0)
![](https://img.haomeiwen.com/i11209424/91d0f9a837a6dbd1.png)
我们先判断能否向右移动: (移动条件 1.相邻元素相同 或者 2.当前元素的右侧元素为空)
下面的 board 使我们定义的二维数组。
![](https://img.haomeiwen.com/i11209424/3a235926f9f8910b.png)
如果,上面的函数返回 false, 则不能够进行移动,如果返回 true, 则我们需要进行下一步
合并操作:
![](https://img.haomeiwen.com/i11209424/170353f715084f91.png)
![](https://img.haomeiwen.com/i11209424/e9eb353dd90d13ee.png)
if (board[i][k] == 0) 描述的是 移动情况1
else if (board[i][k] == board[i][j]) 描述的是 移动情况2 两种移动情况需要检测中间块是否包非0元素。
![](https://img.haomeiwen.com/i11209424/61e6e65ec7167ae2.png)
这就是 2048 小游戏的基本逻辑,其他方向的移动都是这个思路。我这里使用的 js 整理的思路,你也可以按照这个思路转换成你所使用的语言。如有问题,请留言,希望能够对你有所帮助。
网友评论