-
Notifications
You must be signed in to change notification settings - Fork 0
/
BoardModel.js
92 lines (77 loc) · 2.77 KB
/
BoardModel.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
var _ = require('lodash');
var Board = function Board(height, width, numBombs){
this.cells = [];
this.height = height || 3;
this.width = width || 3;
this.numBombs = numBombs || 3;
this.getBoardCells();
this.mapBombsToCells();
this.getCounts();
return this.board;
};
Board.prototype.getBoardCells = function(){
_.times(this.width, _.bind(function(x){
_.times(this.height, _.bind(function(y){
this.cells.push(this.makeCell(x, y));
}, this));
}, this));
};
Board.prototype.getBombCells = function(){
var bombArray = new Array(this.cells.length);
_.times(this.numBombs, function(idx){
bombArray[idx] = true;
});
return _.shuffle(bombArray);
};
Board.prototype.mapBombsToCells = function(){
_.each(this.getBombCells(), _.bind(function(isBomb, idx){
this.cells[idx].bomb = isBomb || false;
}, this));
};
Board.prototype.getNonBombNeighbors = function(xCoord, yCoord, boardCells){
var neighborsWhichAreNotBombs = boardCells.filter(function(cell){
return (
cell.xPos === xCoord && cell.yPos === yCoord + 1 ||
cell.xPos === xCoord && cell.yPos === yCoord - 1 ||
cell.yPos === yCoord && cell.xPos === xCoord + 1 ||
cell.yPos === yCoord && cell.xPos === xCoord - 1 ||
cell.xPos === xCoord + 1 && cell.yPos === yCoord + 1 ||
cell.xPos === xCoord - 1 && cell.yPos === yCoord - 1 ||
cell.xPos === xCoord + 1 && cell.yPos === yCoord - 1 ||
cell.xPos === xCoord - 1 && cell.yPos === yCoord + 1
) && !cell.bomb;
});
return neighborsWhichAreNotBombs;
};
Board.prototype.getNeighbors = function(xCoord, yCoord, boardCells){
var neighborsWhichAreBombs = boardCells.filter(function(cell){
return (
cell.xPos === xCoord && cell.yPos === yCoord + 1 ||
cell.xPos === xCoord && cell.yPos === yCoord - 1 ||
cell.yPos === yCoord && cell.xPos === xCoord + 1 ||
cell.yPos === yCoord && cell.xPos === xCoord - 1 ||
cell.xPos === xCoord + 1 && cell.yPos === yCoord + 1 ||
cell.xPos === xCoord - 1 && cell.yPos === yCoord - 1 ||
cell.xPos === xCoord + 1 && cell.yPos === yCoord - 1 ||
cell.xPos === xCoord - 1 && cell.yPos === yCoord + 1
) && cell.bomb;
});
return neighborsWhichAreBombs;
};
Board.prototype.getBombsAroundCellCount = function(xCoord,yCoord, boardCells){
return this.getNeighbors(xCoord, yCoord, boardCells).length;
};
Board.prototype.getCounts = function(){
_.each(this.cells, _.bind(function(cell, index, boardCells){
cell.adjacentBombs = this.getBombsAroundCellCount(cell.xPos, cell.yPos, boardCells);
}, this));
};
Board.prototype.makeCell = function MakeCell(xPos, yPos){
return {
xPos: xPos,
yPos: yPos,
bomb: false,
covered: true
};
};
module.exports = Board;