【Android】基于GridLayout的Game2048开发
目录
一、2048游戏的玩法
每次可以选择上下左右任何一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块,数字一般是2或4,相同数字的方块会相加成一个数字。不断的叠加最终拼凑出2048这个数字就算成功。
二、 游戏的开发
(一)游戏的布局
总项目结构及主要布局GridLayout:
(二)实现游戏的主类
在初始化一个GameView,继承GradView,并加入一个初始化游戏view的方法initGameView
在layout文件中将gridLayout用自己定义的GameView来绑定。
(三)游戏触控的交互设计
在gameview中重新触控的方法,判读手指滑动的方向。
在initGameView中加上setOnTouchListener
(四)实现卡片类Card.java
1.定义一个Card.java
2、在构造方法中初始化label
3.添加构造方法
4、定义一个num的成员变量,来显示卡片上的值
5、定义一个TextView的标签label在卡片上显示文字
6、在num的set方法中实现label的值显示
7、写一个判断两个卡片是否相同的方法
8、设置不同数字对应的颜色
(五)在GameView中添加游戏卡片
1、计算卡片的宽度
为了让卡片铺满整个gameview,要根据屏幕的大小,动态的计算每个卡片的大小
在gameView中重写onSizeChanged方法:
为了防止手机的旋转导致屏幕的宽高变化,先设置手机屏幕的样式为竖屏
2、增加一个addCards的方法,并在onSizeChange中
并在initGameView中添加,网格每行4列
最后运行后效果如下:
3、.设置GameView的背景色,card的背景色,card的label显示居中,label的margin
在card的初始化中
4、在GameView定义一个二维数据来记录卡片的方阵
并在添加卡片的方法addCards中为卡片矩阵赋值
(六)在GameView中添加随机数
在新建游戏时,会随机在gameView中出现两个卡片,并加上2、4两个值。2和4出现的概率大致是9:1。
1、为了遍历所有的空的卡片,我们在Card.java中设定当num=0是为空
2、在GameView中定义一个集合来存放card的值为0的card的位置
3、在GameView中定义一个addRandomNum的方法
4 在GameView中定义一个startGame的方法
在onSizeChange中引入一个startGame的方法。
(七)在MainActivity中实现重启游戏的按钮功能
这里调用,startGame()函数,所以函数不能为private
(八)实现2048的游戏逻辑
重新写四个滑动函数 swipeLeft等:
(九)游戏的计分
1、利用layout上的TextView显示计分
定义一个计分变量,定义一个清理计分,显示计分,增加计分的方法
2、为了能在GameView类中调用这个方法,定义一个MainActivity的静态对象mainAcitivity,并定义一个get接口。
为了给这个mainActivity设为当前加载的MainActivity的对象,在构造法中增加一个赋值的方法。
3、在GameView中加上,一个计分的方法
在每次滑动后有卡片叠加,就执行一次计分
4、在startGame中的startGame方法中增加一个计分清零代码
5 在每次滑动后,如果有卡片合并或有卡片滑动,再次添加新的卡片。
在每个滑动的方法中加上:
如果有合并加上
(十)检查游戏结束
在GameView中增加一个checkOver的方法,在每次新增随机数后,都要做一次游戏结束检查。
判断依据:当所以card都有数据,请每一个card的前后左右的都不相同
运行效果:
三、Github源码
~