屌丝也能开发安卓版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


posted @ 2017-06-13 10:01  llguanli  阅读(3027)  评论(1编辑  收藏  举报