屌丝也能开发安卓版2048(App Inventor)
想编写安卓游戏,java太难,来试试App Inventor,虽然有人认为他是中学生的玩具,但是也能编写2048这样的火爆游戏,不需要太复杂的算法。
整个游戏有几个模块:
一、游戏初始化
数列转化为图形,使用了canvas和精灵,相对应list,这里注意精灵位置是固定的,只是更改图片,多少分,就对于n.jpg,0分是底色图片。左右移动,使用了flung判断,绝对值判断,水平速度和垂直速度哪个大,用来判断是左右移动还是上下移动。
二、计分模块
一般计分在合并处增加,最高分用了tiny db,游戏结束时进行判断。游戏开始时计分清0
三、移动模块(核心)
移动模块是4*4矩阵的移动,先简化解决左右移动,进一步简化为4*1的矩阵,这里用到list。
首先判断0000,不移动,true、false判断。
其次判断向右移动,通过观察发现规律,2000变为0002,2480变为0248,2040变为0024,第4位是0,去掉后放到第1位。循环最多3次。如果第4位不是0,从第3位是0,最多循环2次,第2位是0,1次。同样的可以解决向左移动。然后扩展到4*4.用foreach循环。
解决了左右移动,开始解决上下移动。左右移动本质上是矩阵的旋转。如1234 1234 1234 1234 变为 4444 3333 2222 1111 因此可以通过行和列的转换,得到新的list,上下移动变成左右移动。注意的是每个方向移动都会同时影响列数组和行数组,因此要相互转换。 |
四、合并模块
合并模块注意以下规则,每次只合并一次,如2222,向右合并为0044,不是合并为8。0222向右合并为0024。合并主要是判断12,23,34位的list是否相同。
如34位相同的向右合并,4位翻倍,3位移除,然后再1位上加0。这里需要和后面的积分模块相关联,合并的分数加上。
五、随机增加2或4模块
2和4的选取可以通过概率设置,比较简单
插入位置的选取实际上在所有0的位置随机选取,这里设置zerolist保存所有为0的位置,保存按照1-16号设置,模块为list0。如5号表示第2行第1列为0,用到了商和余数的判断,模块为add。
六、游戏结束判断
这里没有设置游戏胜利,即达到2048游戏仍然继续,游戏结束的条件有3个。
1是没有空格,即zerolist为空
2横向不能合并
3纵向不能合并
都为真时弹出选择框。
模块对于为nomerge和gameover
aia文件和apk下载http://bbs.appinventor.com.cn/thread-3604-1-1.html