-
Notifications
You must be signed in to change notification settings - Fork 13
/
bomb.play.js
99 lines (71 loc) · 1.83 KB
/
bomb.play.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
'use strict';
const games = {};
const init = (id, player, text, image, onGameInit, onGameExist) => {
if (games[id]) {
return onGameExist(games[id]);
}
games[id] = {
text: text,
image: image,
player: player,
history: [[player.id, 30]],
};
return onGameInit(games[id]);
};
const verify = (id, player, image, onValid, onWrongPlayer, onNotValid, onGameNotExist) => {
if (!games[id]) {
return onGameNotExist();
}
const game = games[id];
if (image === game.image) {
if (player.id === game.player.id) {
return onValid();
}
return onWrongPlayer();
}
return onNotValid();
};
const next = (id, player, onGameContinue, onGameEnd, onGameNotExist) => {
if (!games[id]) {
return onGameNotExist();
}
const game = games[id];
if (player !== null) {
game.player = player;
}
game.history.push([game.player.id, game.history[game.history.length - 1][1]]);
onGameContinue(game);
};
const end = (id, player, onGameEnd, onGameNotExist) => {
if (!games[id]) {
return onGameNotExist();
}
const game = games[id];
game.history.push([player.id]);
delete game.player;
delete games[id];
return onGameEnd(game);
};
const tick = (onGameEnd) => {
for (const i in games) {
const game = games[i];
game.history[game.history.length - 1][1] -= 1;
if (game.history[game.history.length - 1][1] === 0) {
const player = game.player;
delete game.player;
delete games[i];
onGameEnd(i, game, player);
}
}
};
const count = () => {
return Object.keys(games).length;
};
module.exports = {
init: init,
verify: verify,
next: next,
end: end,
tick: tick,
count: count,
};