当前位置: 代码迷 >> Android >> 屌丝也会开发安卓版2048(App Inventor)
  详细解决方案

屌丝也会开发安卓版2048(App Inventor)

热度:65   发布时间:2016-04-28 05:43:20.0
屌丝也能开发安卓版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