2048小游戏开发
记得14年的时候吧,2040小游戏非常火爆,很多公司也做了个“升级版”,当时我们是使用cocos2d-x(c++)引擎进行开发的,各种换皮玩法。不过由于当时我也是个游戏开发新手,做出来的bug不少。这游戏虽然看着简单玩着也简单,但开发起来发现难点还是有的,比如cell移动动画,必须保证可以快速不间断的操作还得保证cell移动的位置都正确,还要保证新出现的cell位置正确。现在我们来用cocoscreator引擎实现一遍,顺便优化一下逻辑。
一、主要逻辑
我们通过维护两个4x4的数组来实现,数组a存数据(0表示空格子,非0表示对应的值), 每次操作时即时更新数组的值。数组b存真实显示在屏幕上可以做动画的格子节点,每次操作后立即更新节点在数组b中的位置(和数组a对应),但格子节点存在动画,显示的更新有滞后,需要移动动画结束后再根据当前所在的格子位置去数组a取值更新自己的值(比如节点n在数组b中的位置是(0,0),则其值应该是数组a[0] [0]的值)
二、具体实现
主要就是移动和判断是否可以移动的逻辑,当四个方向都不可以移动时则游戏结束。
1. 判断是否可以移动
上下左右的逻辑一样,我们拿向左移动来举例:
假设某一行是0 2 4 8四个格子,我们只需要从左侧第二个格子开始依次和前面的格子进行比较,如果前面的格子是0或者前面的格子的值和当前的格子的值相同,则该方向可以移动,否则不可以移动。因为2左侧是0,所以可以移动,代码如下:
canMoveLeft() {
for (let row = 3; row >= 0; row--) {
for (let col = 1; col <= 3; col++) {
if (this.board[row][col] != 0) {
if (this.board<