Cocos扫雷游戏核心算法思想

Cocos扫雷游戏核心算法思想

关键词:Cocos游戏开发,扫雷游戏,算法,JS面向对象

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀~

  1. 扫雷游戏实现核心思路解析

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

  1. 扫雷游戏核心数据模块
  2. Cell.js单元格类

// 单个单元格,用于保存数据
// x,y,坐标,或者行和列,
// info显示文本,空表示什么都没有,周边也没有地雷
// *表示此处是一颗地雷,数字表示其周边有几颗地雷
function Cell(x, y, info){
this.x = x;
this.y = y;
http://this.info = info;
};

module.exports = Cell;

  1. MineField.js雷场类

// 雷场(行数,列数,地雷数)
function MineField(rowNum, colNum, mineNum){
this.rowNum = rowNum;
this.colNum = colNum;
this.mineNum = mineNum;
// 调用【1】画格子
this.init();
// 调用【2】藏地雷
this.hideMine();
// 调用【3】留暗号
this.markNumber();
};

module.exports = MineField;

【1】画格子

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

// 【1】利用原型扩展方法:初始化雷场的所有格子数据
MineField.prototype.init = function(){
let cellsNum = this.rowNum * this.colNum;
this.cells = new Array(cellsNum);
for(let i=0; i<this.rowNum; i++){
for(let j=0; j<this.colNum; j++){
let index = this.getIndexByXY(i,j);//this.colNum * i + j;
this.cells[index] = new Cell(i, j, "");
}
}
};

补充提炼通过坐标获取格子索引的方法,以供后续其它地方用:

// 【1-1】通过坐标获取单元格的所处格子的索引
MineField.prototype.getIndexByXY = function(x, y){
return x * this.colNum + y;
}
// 通过单元格对象获取单元格所处格子的索引
MineField.prototype.getIndexByCell = function(cell){
return this.getIndexByXY(cell.x, cell.y);
}

在此文件头部引入Cell类:

var Cell = require("Cell");

【2】藏地雷

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

// 【2】藏地雷:将地雷数据设置到this.cells中的Cell的info中去
MineField.prototype.hideMine = function(){
// 随机无重复元素的数组,且范围限定在[0,this.rowNum*this.colNum);
let end = this.colNum * this.rowNum;
// 记录所有地雷所在的cells的索引
this.mineIndexs = ArrayUtils.randChoiseFromTo(0, end, this.mineNum);

consol

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值