文章来源:网络整理作者:滴滴速下发布时间:2022-09-18 18:13:09
今天无聊游戏数字,带大家写个黑窗版2048,效果如下:
一、游戏介绍
《2048》是最近比较火的数字游戏之一。最初的 2048 首次发布于 .原作者是。是一款基于《1024》和《小3传奇》(!)的玩法开发的全新数字游戏。
二、游戏规则
游戏规则非常简单。您需要控制所有方块向同一方向移动。两个具有相同数字的正方形碰撞在一起并合并为它们的总和。每次操作后,会在空白方格中生成一个随机方格。 2或4(产生2的概率更高),最后得到一个“2048”方格就是胜利。
三、核心算法
1、方块移动和合并算法。
主要思想:将游戏编号面板抽象成一个4行4列的二维数组a[4][4],值为0的位置代表空方格,另一个代表对应的数字方格对每一行一视同仁,只研究一行的移动合并算法,然后通过遍历行来实现所有行的移动合并算法。在一行中,用b[4]表示一行的一位数组,用两个下标变量遍历列项,这里用j和k,其中j总是在k之后,用来求k items 后面的第一个不为 0 的数字,第 k 个 item 用来表示当前要比较的 item,它总是与第 j 个 item 之间用多个 0 隔开,或者就在它的旁边。不失一般性,在考虑向左滑动时,在初始情况下,j等于1,k等于0,然后判断第j项的个数是否大于0。如果是,则判断item j 和 item k 的关系,分为 3 种情况。处理,分别为P1: , P2: b[k]==0 and P3: b[k]!=0 and b[k]!=b[j];如果不是,则 j 加 1,然后继续搜索第 k 项后的第一个非零数。其中,P1、P2、P3分别对应如下:
P1:b[k]==b[j],则b[k] = 2 * b[k](表示两个数合并),b[j] = 0(合并后,剩余的第j项的值清零),然后k加1,然后进行下一个循环。
P2:b[k]==0,表示b[j]中全是空格。此时直接将b[j]移动到k的位置,即b[k] = b[j],则b[j] = 0(移动后剩余j值清零),则k值不变,然后进行下一个循环。
P3:b[k]!=0 and b[k]!=b[j],表示两个数不相等,也不为0。此时,把两个数放在一起游戏数字,即, b[k +1] = b[j]。然后是两个小案例。若j!=k+1,则b[j] = 0(移动后剩余j值清零);如果不是,则说明这两个数本来就靠得很近,那么就没有特殊处理(相当于不动)。然后k加1,然后进行下一个循环。
以P1为例,流程如下:
行内移动合并的算法描述如下(本例为左移的情况,其他方向类似,区别仅在于遍历两者的行项和列项的方式——维数组):
2、判断游戏是否结束的算法
核心思想:遍历二维数组,看是否有两个横向和纵向相邻的元素相等,如果有,游戏没有结束,如果没有,游戏结束。小编推荐一条学习C语言/C++的学习裙【627,012,464】,无论你是大牛还是新手,无论是想转行还是想进入这个行业,都可以来学习进步一起学习!裙子里有开发工具,很多干货和技术资料分享!
算法代码描述如下(棋盘代表真实游戏源码中使用的二维数组):
3、生成随机数算法
核心思想:根据生成的随机数,对某个值取模,以一定的概率生成一个数。在这个游戏中,2的出现概率设置为4的2倍,所以可以使用系统提供的随机数函数生成一个数,然后取3的余数。如果得到的数小于大于 2 时,游戏面板的空白处会生成一个数字。 2,如果余数等于2,则生成4。在选择哪个空间生成数的时候,也是根据系统提供的随机函数生成一个数,然后取空格数的余数,然后在剩余空间中生成数字。
4、绘制界面的算法
核心思想:利用系统提供的控制台界面清空功能实现界面刷新的效果,利用控制tab位置实现绘制游戏数字面板的效果。
由于绘制界面不是这个游戏的精髓,而且代码段比较长,所以这里省略算法描述,读者可以参考完整的源码。
四、完整源码如下,动画太多无法展示代码,有兴趣可以在简陋屋里获取:
大话西游小Y手游(173.0MB)下载_大话西游小Y手游APP下载
173.0MB
热门手游
决战喵星中文版(34.3MB)下载_决战喵星中文版APP下载
34.3MB
热门手游
白日恐怖学校(93.0MB)下载_白日恐怖学校官方APP下载
93.0MB
热门手游
在浙学
20.79MB
教育学习
猫郎乐园安卓版
396.00M
热门手游
美国队长英雄中文版
99.85M
动作格斗
无其他棋牌官网版(46.5MB)下载_无其他棋牌官网版正版APP下载
46.5MB
热门手游
老奶奶vs冒名顶替的间谍大师(98.7MB)下载_老奶奶vs冒名顶替的间谍大师APP下载
98.7MB
热门手游
神奇星球帆船(189.9MB)下载_神奇星球帆船APP下载
189.9MB
热门手游
昆明西苑棋(46.5MB)下载_昆明西苑棋正版APP下载No.1
昆明西元棋牌正版为广大用
昆明西元棋牌正版
迷你球(36.0MB)下载_迷你球APP下载No.2
迷你球球是一款很精彩有趣
迷你球球
甩斧之战(42.3MB)下载_甩斧之战APP下载No.3
扔斧头大作战是一款非常不
扔斧头大作战
西域鬼子(448.2MB)下载_西域鬼子APP下载No.4
西游故事一直都是非常精彩
西域降魔
七龙印(174.4MB)下载_七龙印APP下载No.5
七龙印是一款Q萌的休闲益
七龙印
水晶岛(149.5MB)下载_水晶岛APP下载No.6
晶岛游戏是一款休闲剧情解
晶岛
艺术故事水晶拼图(34.0MB)下载_艺术故事水晶拼图APP下载No.7
艺术故事 水晶拼图一款非
艺术故事水晶拼图
轧机(61.1MB)下载_轧机APP下载No.8
碾压粉碎机是款非常减压的
碾压粉碎机
丽江西苑象棋(46.5MB)下载_最新版丽江西苑象棋APP下载No.9
丽江西元棋牌最新版整体界
丽江西元棋牌最新版
湿软表情符号微笑(22.4MB)下载_湿软表情符号微笑应用程序下载No.10
Squishy Emoji smile是一
Squishy Emoji smile