基于Android实现的2048小游戏
基于android的2048
1 课题介绍
为什么要做这个题目呢?我去回想当初定题目时候。主要就是感兴趣,2048这款游戏刚流行起来的时候,就下过来玩。我记得第一次通关花了我10盘都不到。而且到后来玩的时候,会发现玩前期很拖剧情(因为只会生成2和4)刚有意思一不小心死了又要重来,因此也想要有一些创新。所以,在功能上别于其它的同类2048并不是很多,是在游戏机制上有所调整。使得游戏更加有惊喜和快节奏,也加大了难度,添加随机数比例如下:
数字 | 概率(千分之) |
2 | 800 |
4 | 100 |
8 | 50 |
16 | 20 |
32 | 15 |
64 | 8 |
128 | 4 |
256 | 2 |
512 | 1 |
我花了蛮久时间去玩做好的新2048,并没有通关,有时候好气啊,突然出现的大数字会乱了节奏,但就是这样也变得更想玩了
这里放一张比较接近成功的图:
2 系统概要设计
主布局使用LinearLayout布局,布局走向是垂直。游戏主类Gameview,在安卓上设计交互方式(触控设计),实现卡片类card,然后添加2048游戏卡片,和对卡片属性的设计。再添加随机数,实现游戏逻辑(何种情况叠加,添加)游戏的计分和游戏的判定结束。
3 详细设计
将详细设计分为以下几个步骤:
- 设计2048的游戏布局
主布局使用LinearLayout布局,布局走向是垂直。 - Android平台触控交互设计
先要判断玩家手势意图,要记录开始(手点上去)的位置x,y,结束(手离开)的位置x1,y1。判断用户移动的意图,是向哪个方向,为了防止左上左下这些方向,在判断意图前,先对X=x1-x与Y=y1-y进行绝对值比较,按大的方向来。
难点1:并且,为了防止误操作,若X,Y均小于5,视为误操作,无移动意图。 - 游戏的卡片类
因为2048是4*4=16格子的一个游戏,先要整体布局,并且每一个卡片里对于一个数字,(之后比较是否迭加就是getnum()卡片里的数字)之后是添加游戏卡片,首先要设计卡片宽高,根据不同手机宽高l,h,比较其中较短的,(min-10)/4作为每个格子的宽高。一共4行4列。再对格子和背景之间的颜色进行配置,使得每一个格子都可以分开来(像素间隔都10)
难点2:num是int,直接加入看起来没错,跑起来会报错,应该num+“”加上一个空字符,则变成了字符串不会报错。
难点3:直接设计4*4卡片没用会一排平铺开,setcdumncount(4)设计为4列可以解决。 - 随机数的添加
2048的游戏过程就是一开始随机生成两个位置随机的不同数字,并且在每一次的移动过后再在没有数字的位置随机添加一个随机数。在这上面,我做了创新。首先遍历所有卡片,如果数字是0,则显示空字符(一开始所有格子都先是0)将所有数字放在一个数组emptPoints里,开始前将数组清空数组,然后就是按我设计的概率可以添加随机数去取代0,可以被显示出来。 - 实现游戏逻辑
在触控设计之后,根据玩家意图,当做出游戏选择移动时候,实现游戏逻辑。以向左划为例:从当前位置for(x1=x+1;x1<4;x1++)如果右边有数字(大于0)做出判断a:当前为空,则右边数字替换左边(相当于把右边数字移到左边)b:如果两个卡片数字相同,则右边数字清0,左边乘以2。 - 游戏计分
每一次发生数字的叠加,5中的b。将叠加的数字加入score中,并且在每一次的移动后,都添加随机数。 - 游戏判定结束
-
- 当16个格子都没有空位置
- 任意相邻位置数字均无相同
- 判定游戏结束。
4 实验结果
5 所存在的问题及未来计划
首先,界面的美工,不同数字的颜色并没有区分开来,看起来不够舒服,希望能找到好看的颜色填充进去。其次,想要增加悔步功能,因为一局时间较长,真正好玩的部分在后面。