以下内容拔自百度:
2048是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于《1024》和《小3传奇》的玩法开发
而成的新型数字游戏。随后2048便出现各种版本,走各大平台。由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟
原版一模一样。衍生版中最出名的是《2048六边形》版本,先后在全球81个国家中的board game中排进了前200。安卓版非常火爆的有《挑战2048》,其2.0.0版以后还加入了双人对战。其次比较特别的有2048中国朝代版。更有2048自定义版,可以自己定义文字和图片。《2048~》是
IOS中流行的一款。
游戏规则很简单,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白
的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围
中凑出“2048”这个数字方块。游戏的画面很简单,一开始整体16个方格大部分都是灰色的,当玩家拼图出现数字之后就会改变颜色,整体格调
很是简单。在玩法规则也非常的简单,一开始方格内会出现2或者4等这两个小数字,玩家只需要上下左右其中一个方向来移动出现的数字,所
有的数字就会向滑动的方向靠拢,而滑出的空白方块就会随机出现一个数字,相同的数字相撞时会叠加靠拢,然后一直这样,不断的叠加最
终拼凑出2048这个数字就算成功。如果你是一个数字爱好者,或者是比较有天赋的数学天才,就算不是数学天才,一般的玩家也能够玩转这
款游戏,感兴趣的话就去下载体验一番。
CSDN上已经有很多关于2048的博文了,但是基本上都是基于cocos2d的版本,其实,作为一个游戏,用cocos2d开发确实快,说白了就
是一个三消类游戏的翻版。但是本文介绍的是直接基于Android的开发思路,比较适用于做Android项目的朋友学习。
如何去实现呢?我们先看看2048的截图:
核心是中间的面板,就是一个NXN的格子,移动的时候,会计算合并、新增单元格。
一、确定View实现
1、布局首选GridLayout,不得不说,4.0的这个新控件真是Android开发的福音,不了解的朋友请Google之。
2、单元格布局首选FrameLayout,去做一个小格子,里面包含一个TextView或者ImageView
二、算法实现
1、生成数字为0、2、4、8……如果是0则不显示数字,如果是其他数字则根据数字判断底色
2、实现上下左右滑动事件,基本原理是这样,先去判断每行(列),以为移动后的序列,一定是中间不会有0的,讲这4个值存入一个list,
根据游戏规则计算,再返回到这行(列),说的比较抽象,我们可以这样看:
2 2 0 4 假如这是某行,我们现在左移,首先将2 2 0 4 存入一个list(去掉0),即list为 2 2 4 然后根据规则2和2合并,则list为 4 4,
最后返回到这一行(列),这样解释不知道是不是清楚了点。
为什么要这样做呢?其实2048的算法有很多,大家也可以想想,我也看过那些cocos2d的算法,发现有些问题就是:循环太多,
判断次数太多,这容易造成的一个最大的问题就是——卡,有些人可能玩过一个Android版本的2048,那个流畅度跟iOS的实在
是差了不止一点,所以我们需要提高算法的效率,这种算法每次判断最多只需要16次循环和16次读写,相比某版本在16次循环
中再循环判断的算法要提高不少效率
3、添加随机生成Item,滑动时记录一个滑动前的矩阵状态,有两个作用,一个是判断是否滑动过,一个是为了做撤销功能,
程序控制一个记录空格的list,每次都会重新计算存在的空格
4、判断结束,若空格不为0,游戏一定没有结束,若为0,则判断每行——相邻是否存在相同数字,每列——相邻是否存在相同数字
三、其他
1、New Game
2、分数记录
3、撤销上次移动
4、自定义2048背景图
以上,基本的思路以及梳理好了,下面就开始一步步按思路实现了。
PS 源码正在完善中,需要源码的请留言,完成后会发给需要的朋友