ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我也来开发2048之确定思路

2021-05-20 07:06:22  阅读:153  来源: 互联网

标签:数字 16 list 2048 开发 滑动 思路 方块


以下内容拔自百度:

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 源码正在完善中,需要源码的请留言,完成后会发给需要的朋友

标签:数字,16,list,2048,开发,滑动,思路,方块
来源: https://blog.51cto.com/u_9894631/2790729

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有