想编写安卓游戏。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

最新文章

  1. homework-01
  2. Linux命令總結
  3. WdatePicker 没有权限 不能执行已释放 Script 的代码
  4. 使用UG UISTYLER 窗体编辑器,创建对话框 part 2
  5. Flash Builder中“Error: #2036 加载未完成”错误的解决方法
  6. SecondaryNamenode配置与NameNode故障恢复
  7. SGU 194 Reactor Cooling Dinic求解 无源无汇有上下界的可行流
  8. 判断两个View的GRect是否相等
  9. 刚开始学python——数据结构——“自定义队列结构“
  10. Linux socket网络编程基础 tcp和udp
  11. day-6 机器学习概念及应用
  12. C# - 如何让类型可以比较
  13. JS Fetch
  14. 关键字(6):trigger触发器
  15. Oracle存储过程in、out、in out 模式参数
  16. bzoj千题计划277:bzoj4513: [Sdoi2016]储能表
  17. Go文件右键编译
  18. P1183 多边形的面积
  19. (转)引用---FFMPEG解码过程
  20. css-stylus

热门文章

  1. linux下測试硬盘读写速度
  2. Log4net根据日志等级输出到不同文件
  3. 脚本_求和100以内的正整数.sh
  4. Pyhton学习——Day40
  5. maven的pom.xml配置json依赖
  6. 关于npm警告fsevents和vue-cli项目中的一些问题,持续更新
  7. Github添加SSHkey
  8. [Codeforces 226E]Noble Knight's Path
  9. BZOJ 1014 [JSOI2008]火星人prefix (splay+二分答案+字符串hash)
  10. 六、利用frp穿透连接内网的linx系统和windows系统