新浪博客

[转载]App Inventor 开发2048游戏

2017-02-27 23:53阅读:
原文作者:appinventor


设计思路:
最开始想到是imagespirt 拖动,发现位置变化太复杂,参考了一下其他程序语言的思路,0代替空格,这种方法较好。
整个游戏有几个模块:
一、游戏初始化
二、计分模块
三、移动模块(核心)
四、合并模块
五、随机增加2或4模块
六、游戏结束判断
虽然游戏是从开始到结束的顺序进行,但是程序编写应该从最核心的开始,在编写时最后才转到canvas上,开始调试时一直是用4个button来代表方向,并且使用lable输出list进行判断,最后再进行图形化。
三、移动模块
移动模块是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循环。
半小时前 上传
下载附件 (131.48 KB)
解决了左右移动,开始解决上下移动。左右移动本质上是矩阵的旋转。如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

二 计分模块
一般计分在合并处增加,最高分用了tiny db,游戏结束时进行判断。游戏开始时计分清0。
一、游戏初始化
将以上数列转化为图形,使用了canvas和精灵,相对应list,这里注意精灵位置是固定的,只是更改图片,多少分,就对于n.jpg,0分是底色图片。

左右移动,使用了flung判断,绝对值判断,水平速度和垂直速度哪个大,用来判断是左右移动还是上下移动。

至此整个游戏编写完成。
半小时前 上传
下载附件 (156.18 KB)

我的更多文章

下载客户端阅读体验更佳

APP专享