生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想

原标题:Cocos creator---扫雷游戏核心算法思想

一、 扫雷游戏实现核心思路解析(学习交流群:872282999)

数据和视图尽量分离。采用面向对象的实现设计数据模块。格子作为一类对象,雷场作为一类对象,雷场由格子构成。

二、 扫雷游戏核心数据模块

1. Cell.js单元格类

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第1张图片

2. MineField.js雷场类

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第2张图片

【1】画格子

雷场由Cell的对象构成的数组组成,实质就是给雷场的cells数组赋值。

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第3张图片

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第4张图片

【2】藏地雷

实质就是修改雷场的cells数组中的随机一些索引的cell的info属性值。

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第5张图片

【3】留暗号

实质就是在地雷周边8个格子中标上数字,数值为此单元格周边8个单元格中雷的数量。如下图所示:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第6张图片

【3-1】获取某颗地雷周围所有单元格

如下图所示,假如要获取(0,0)周围8个单元格,则偏移量就

是其周边8个单元格的坐标:

73dc9892582dcd98b3b1a6622f5e2d2f.png

同时,偏移后,我们还要判断这个格子是否超出雷场。即便宜后x、y值不能小于0,且不能大于行或列的最大值。

偏移量offset和判断是否超出雷场区域的方法如下:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第7张图片

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第8张图片

【3-2】更新所有地雷周围所有非雷(数字)单元格的数字标记

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第9张图片

三、 ArrayUtils.js数组工具类(直接使用)

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第10张图片

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第11张图片

四、 数据校验测试

1. Game_mgr.js挂载到Canvas节点上

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第12张图片

挂载到Canvas节点上,运行测试结果如下:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第13张图片

2. 优化测试-验证数据正确与否

发现显示结果不便于核实数据是否正确,我们优化下,在MineField中添加printResult方法:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第14张图片

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第15张图片

五、 数据与视图绑定

新建一个空节点MineField作为雷场,将res中的block拖到MineField内,作为地砖,在block节点内新建空节点around_bombs,在此节点上添加Label组件,用于显示此地砖的信息info。之后将block做成预制体,便于动态生成雷场所有地砖。

动态生成的过程中,将每个地砖跟MineField的cells数组中的元素绑定。

在Game_mgr.js的properties中添加属性,同时通过编辑器绑定属性值:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第16张图片

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第17张图片

编译运行,结果如下:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第18张图片

将信息显示到地砖上:

block.cell = this.mineField.cells[index];

// 显示地砖内部信息

this.showBlockInnerInfo(block);

信息显示到地砖上的实现方法(便于后续触摸调用):

// 显示地砖内部信息

showBlockInnerInfo(block){

block.getChildByName("around_bombs").getComponent(cc.Label).string = block.cell.info;

},

编译运行结果如下:

生成雷场的原理java_Cocos creator---扫雷游戏核心算法思想_第19张图片

仔细思考,发现刚才Game_mgr.js其实就是控制MineField这个节点的,故我们将其修改为MineField_Ctrl.js。将Canvas上的用户自定义组件remove,在MineField节点上添加MineField_Ctrl组件,将其中block_root属性去掉,将代码中this.block_root替换为this.node。

学习交流群:872282999返回搜狐,查看更多

责任编辑:

你可能感兴趣的:(生成雷场的原理java)