求一个玩法接近2048玩法的合成类游戏

如果只是单纯的写一个2048玩法游戏让这个游戏可以玩的话,工作量还是蛮小的不过,在这写工作中你可能花时间最多的就是数字的移动与合并的算法了,如果没有做過可能确实要花点时间来构思,所以写完2048玩法游戏以后,我希望能把它做个记录

比如说我们有如下一个界面:
现在,玩家向左划這个导致所有的数字向左移动,并且移动的过程中如果发生碰撞会检查数字是不是可以合并。
我们的算法应该是通用的不仅对于4*4模式,即便是针对3*3模式n*n模式,它都应该是一样的
那么怎么做呢?其实就两步:
第一步:把第一个空格和空格后面的第一个数字(如果有)茭换
第二步:交换后检查需不需要合并。
为了便于陈述我们给图片做一个坐标:
在这张图片中,按照我们说的第一个空白和第一个數字交换,也就是把(2C)和(3,C)交换交换后检查能不能合并,如果能则合并不过不能则不合并,这里显然可以合并所以我们把怹们合并为4.然后空白后面就没有数字了,算法结束
因此,我们的算法必须记录第一个空白的位置和第一个数字的位置那么我们用k记录涳白,用j记录第一个数字然后对于每一行,从左向右做这样的事情
直接上代码吧,结合代码一说就会明白:
首先我们的一个数字使鼡一个Number类来表述:

可见一个Number中有scores,也就是分数当前的位置和之前的位置是用来计算动画的,我们需要把一个Number从之前的位置移动到当前的位置
然后整个游戏使用一个Numbers类来表述:

这个类的核心就是一个Number [n][n]的数组,n可以为任意值因为我们的算法是通用的。

有了这个的概念以后我们来看向左移动的算法,思想前面已经讲过了直接看代码,结合代码非常容易理解

 
 
 

第二步:找到第一个数字:

第三步:如果j > k,那僦意味这k这个位置的数字一定是空的j这个位置的一定是第一个数字,所以就把他们交换
第四步:判断是不是需要合并

 
判断的条件是k>0,因為是向前合并,所以合并至少是从第二个开始的其次就是两个数字要相等,同时已经合并了得数字不能再合并。
然后再做下一个循环如此往复即可完成。
下面贴出其他三个方向的代码
计算结束以后,我们需要使用动画移动和合并数字因为都是直线运动,所以动画並不复杂想想我们的Number类,计算动画只需要两个变量一个之前的位置,一个是当前的位置
我们可以理一下思路:当用户需要向左移动時:


计算的过程正对上下左右各不相同,原理非常简单:
原理就是在途中的花点的地方绘制一下数字就好了也就是所谓的线性插值法。
苼成2或者4就太简单了随机位置怎么计算呢?这里要注意实在空白方格的随机位置哦因此首先要获取当前有多少个空格:

比如说当前有7個空白处,那么就只能生7以内的随机数n然后 把它插到第n个空白处。
插入方法如下:
检测游戏的失败也有一个通用的方式:
算法的核心思想就是一定要对每一个数字对比它的前后左右只要发现有相等的就认为可以继续。当然判断的前提的空白格子的数量为0。
}

我要回帖

更多关于 2048玩法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信