美文网首页Cocos CreatorCocos2d-X与游戏开发征服Unity3d
Cocos creator---扫雷游戏核心算法思想

Cocos creator---扫雷游戏核心算法思想

作者: Thomas游戏圈 | 来源:发表于2019-11-08 19:21 被阅读0次

一、 扫雷游戏实现核心思路解析

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

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

1. Cell.js单元格类

2. MineField.js雷场类

【1】画格子

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

【2】藏地雷

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

【3】留暗号

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

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

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

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

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

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

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

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

四、 数据校验测试

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

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

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

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

五、 数据与视图绑定

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

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

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

编译运行,结果如下:

将信息显示到地砖上:

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

// 显示地砖内部信息

this.showBlockInnerInfo(block);

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

// 显示地砖内部信息

showBlockInnerInfo(block){

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

},

编译运行结果如下:

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

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/flvwbctx.html