react-raphael-mine-sweeping
Version:
so easy! create mine sweeping game with react-raphael!
106 lines (102 loc) • 2.53 kB
JavaScript
;
var Model = require('./model');
var Utils = {
xSum: 24,
ySum: 24,
mineCount: 25,
models: [],
mines: [],
NONE: "",
MINE: require('../images/mine.gif'),
gameOver: false,
Init: function Init(xSum, ySum, mineCount) {
Utils.xSum = xSum || Utils.xSum;
Utils.ySum = ySum || Utils.ySum;
Utils.mineCount = mineCount || Utils.mineCount;
Utils.gameOver = false;
var sum = Utils.xSum * Utils.ySum;
var rIndexs = [];
var i = 0;
while (i <= Utils.mineCount - 1) {
var r = parseInt(Math.random() * 100000) % sum;
if (rIndexs.indexOf(r) == -1) {
rIndexs.push(r);
i = i + 1;
}
}
Utils.models = [];
for (var i = 0; i < Utils.ySum; i++) {
Utils.models[i] = [];
for (var j = 0; j < Utils.xSum; j++) {
var value = rIndexs.indexOf(i * Utils.xSum + j) == -1 ? Utils.NONE : Utils.MINE;
Utils.models[i][j] = new Model(j, i, value, false);
}
}
for (var i = 0; i < Utils.ySum; i++) {
for (var j = 0; j < Utils.xSum; j++) {
Utils.models[i][j].mineCount = Utils.CountMine(j, i);
}
}
return Utils.models;
},
Fill: function Fill(x, y) {
var mine = 0;
if (Utils.models[y][x].value != Utils.MINE) {
// Continue
Utils.models[y][x].open = true;
mine = Utils.models[y][x].mineCount;
if (mine == 0) {
for (var i = y - 1; i <= y + 1; i++) {
for (j = x - 1; j <= x + 1; j++) {
//越界
if (!Utils.models[i] || !Utils.models[i][j]) {
continue;
}
//自己
if (i == y && j == x) {
continue;
}
//已遍历
if (Utils.models[i][j].open == true) {
continue;
}
Utils.Fill(Utils.models[i][j].x, Utils.models[i][j].y);
}
}
} else {
Utils.models[y][x].value = String(mine);
}
} else {
// Game Over
Utils.gameOver = true;
for (var i = 0; i < Utils.ySum; i++) {
for (var j = 0; j < Utils.xSum; j++) {
if (Utils.models[i][j].value == Utils.MINE) {
Utils.models[i][j].open = true;
} else {
var mine = Utils.models[i][j].mineCount;
if (mine > 0) {
Utils.models[i][j].value = String(mine);
Utils.models[i][j].open = true;
}
}
}
}
}
return Utils.models;
},
CountMine: function CountMine(x, y) {
var count = 0;
for (var i = y - 1; i <= y + 1; i++) {
for (var j = x - 1; j <= x + 1; j++) {
if (Utils.models[i] && Utils.models[i][j]) {
if (Utils.models[i][j].value == Utils.MINE) {
count++;
}
}
}
}
return count;
}
};
module.exports = Utils;