-
Notifications
You must be signed in to change notification settings - Fork 3
/
model-game.js
83 lines (82 loc) · 2.42 KB
/
model-game.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
var game = {
gameId: null,
board: ['','','','','','','','',''],
gameOver: false,
countBoard: function(str){
return game.board.filter(function(el){return el === str}).length;
},
currentPlayer: function(){
return game.countBoard("X") > game.countBoard("O")? "O" : "X";
},
resetBoard: function(){
board = ['','','','','','','','',''];
},
getListOfGames: function(){
tttapi.listGames(session.token, function(err, data){
if (err) {console.error(err);}
console.log(data);
});
},
loadGame: function(gameId, cb){
tttapi.showGame(gameId, session.token, function(err, data){
if (err) { console.error(err); }
game.board = data.game.cells;
game.gameId = data.game.id;
game.gameOver = data.game.over;
cb();
});
},
createGame: function(cb){
tttapi.createGame(session.token, function(err, data){
if (err) { console.error(err); }
console.log(data);
game.board = data.game.cells;
game.gameId = data.game.id;
game.gameOver = data.game.over;
if(cb) {cb();}
});
},
makeMove: function(index, player, cb){
if (game.board[index] !== '' || game.gameOver) {return;}
game.board[index] = player;
if (game.getWinner() !== null) { game.gameOver = true; }
var moveData = {
"game": {
"cell": {
"index": index,
"value": player
},
"over": game.gameOver
}
};
tttapi.markCell(game.gameId, moveData, session.token, function(err, data){
cb();
});
},
/// GAME LOGIC
getWinner: function(){
if (game.isWinner("X")) { return "X"; }
if (game.isWinner("O")) { return "O"; }
if (game.noMovesLeft()) { return "Tie";}
return null;
},
noMovesLeft: function(){
return game.countBoard('') === 0;
},
isWinner: function(player){
return game.areAllEqualTo(player, 0, 1, 2) ||
game.areAllEqualTo(player, 3, 4, 5) ||
game.areAllEqualTo(player, 6, 7, 8) ||
game.areAllEqualTo(player, 0, 3, 6) ||
game.areAllEqualTo(player, 1, 4, 7) ||
game.areAllEqualTo(player, 2, 5, 8) ||
game.areAllEqualTo(player, 0, 4, 8) ||
game.areAllEqualTo(player, 2, 4, 6);
},
areAllEqualTo: function(player, indexOne, indexTwo, indexThree){
var board = game.board;
return (board[indexOne] === player) &&
(board[indexTwo] === player) &&
(board[indexThree] === player);
}
};