-
Notifications
You must be signed in to change notification settings - Fork 2
/
game_loader.js
121 lines (100 loc) · 2.91 KB
/
game_loader.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
var roster = require('./roster.js');
var logic = require('./logic.js');
var games = [];
var findGame = function(req) {
var game_id = parseInt(req.query.game_id) || req.params.game_id;
if (game_id <= games.length) {
var game = games[game_id-1];
game.error = null;
return game;
}
return {'error' : 'Game not found'};
};
var play = function(req) {
account = roster.findAccount(req);
if (account.error) {
return {'error' : account.error };
}
var game = {};
for (var i = 0; i < games.length; i++) {
game = games[i];
if (isPlayersTurn(game, account)){
return game;
}
if (openToPlayer(game, account)) {
game = enterPlayer(game, account);
linkGameToAccount(game, account);
console.log("Linking game to account" + game.game_id + "" + account.name);
return game;
}
}
game = {};
game = startGame(game, account, req);
var gamePlayers = Object.keys(game.players);
console.log("game started, players: " + gamePlayers.length);
game.game_id = games.length + 1; //extract assign game id
game = enterPlayer(game, account);
linkGameToAccount(game, account);
console.log("account games_ids" + account.game_ids);
games.push(game);
return game;
}
var linkGameToAccount = function(game, account) {
if (!account.game_ids) {
account.game_ids = [];
}
account.game_ids.push(game.game_id);
}
//standard
var isPlayersTurn = function(game, account) {
var currentPlayer = game.current_player;
console.log("game current player" + game.current_player);
var gameCurrentPlayer = game.players[currentPlayer];
if (gameCurrentPlayer != undefined) {
var currentPlayerAccount = game.players[currentPlayer].account;
if (currentPlayerAccount.name == account.name) {
console.log("current player matches");
return true;
}
}
return false;
}
var openToPlayer = function(game, account) {
//extract to logic
var playerKeys = Object.keys(game.players);
console.log("player keys" + playerKeys + "" + playerKeys.length);
if (playerKeys.length < 2) {
for (var i = 0; i < playerKeys.length; i++) {
var player = game.players[playerKeys[i]];
console.log('player.account.name' + player.account.name);
console.log('account.name' + account.name);
if (player.account.name === account.name) {
return false;
}
}
console.log('game ' + game.game_id + 'open to player ' + account.name);
return true;
}
return false;
}
//custom override
var enterPlayer = function(game, account) {
console.log(account.name + "entering game" + game.game_id);
if (game.players['X']) {
game.players['O'] = {'account' : account, 'piece' : 'O'};
console.log('game.players.O' + game.players['O']);
} else {
game.players['X'] = {'account' : account, 'piece' : 'X'};
console.log('game.players.X' + game.players['X']);
}
return game;
}
var startGame = function(game, account, req) {
game = logic.setupGame(game, req);
//override broadcast for account
return game;
}
module.exports = {
"findGame": findGame,
"play" : play
};