jp.ms.common.engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base/game-control-player-turn.d.ts +12 -0
- package/dist/base/game-control-player-turn.d.ts.map +1 -0
- package/dist/base/game-control-player-turn.js +27 -0
- package/dist/base/game-control-player-turn.js.map +1 -0
- package/dist/base/game-control-restart.d.ts +10 -0
- package/dist/base/game-control-restart.d.ts.map +1 -0
- package/dist/base/game-control-restart.js +21 -0
- package/dist/base/game-control-restart.js.map +1 -0
- package/dist/base/game-master.d.ts +34 -0
- package/dist/base/game-master.d.ts.map +1 -0
- package/dist/base/game-master.js +83 -0
- package/dist/base/game-master.js.map +1 -0
- package/dist/base/game-player-move.d.ts +13 -0
- package/dist/base/game-player-move.d.ts.map +1 -0
- package/dist/base/game-player-move.js +28 -0
- package/dist/base/game-player-move.js.map +1 -0
- package/dist/base/game-player.d.ts +61 -0
- package/dist/base/game-player.d.ts.map +1 -0
- package/dist/base/game-player.js +140 -0
- package/dist/base/game-player.js.map +1 -0
- package/dist/base/game-room.d.ts +47 -0
- package/dist/base/game-room.d.ts.map +1 -0
- package/dist/base/game-room.js +80 -0
- package/dist/base/game-room.js.map +1 -0
- package/dist/base/game-round.d.ts +28 -0
- package/dist/base/game-round.d.ts.map +1 -0
- package/dist/base/game-round.js +37 -0
- package/dist/base/game-round.js.map +1 -0
- package/dist/base/game-state-machine.d.ts +13 -0
- package/dist/base/game-state-machine.d.ts.map +1 -0
- package/dist/base/game-state-machine.js +21 -0
- package/dist/base/game-state-machine.js.map +1 -0
- package/dist/base/game-table-seat.d.ts +15 -0
- package/dist/base/game-table-seat.d.ts.map +1 -0
- package/dist/base/game-table-seat.js +32 -0
- package/dist/base/game-table-seat.js.map +1 -0
- package/dist/base/game-table-seats.d.ts +21 -0
- package/dist/base/game-table-seats.d.ts.map +1 -0
- package/dist/base/game-table-seats.js +67 -0
- package/dist/base/game-table-seats.js.map +1 -0
- package/dist/base/game-table.d.ts +87 -0
- package/dist/base/game-table.d.ts.map +1 -0
- package/dist/base/game-table.js +130 -0
- package/dist/base/game-table.js.map +1 -0
- package/dist/base/index.d.ts +13 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +26 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/standard-game-state.d.ts +20 -0
- package/dist/base/standard-game-state.d.ts.map +1 -0
- package/dist/base/standard-game-state.js +57 -0
- package/dist/base/standard-game-state.js.map +1 -0
- package/dist/base-rooms/fast-tournament-room.d.ts +14 -0
- package/dist/base-rooms/fast-tournament-room.d.ts.map +1 -0
- package/dist/base-rooms/fast-tournament-room.js +53 -0
- package/dist/base-rooms/fast-tournament-room.js.map +1 -0
- package/dist/base-rooms/index.d.ts +10 -0
- package/dist/base-rooms/index.d.ts.map +1 -0
- package/dist/base-rooms/index.js +14 -0
- package/dist/base-rooms/index.js.map +1 -0
- package/dist/base-rooms/scheduled-tournament-room.d.ts +28 -0
- package/dist/base-rooms/scheduled-tournament-room.d.ts.map +1 -0
- package/dist/base-rooms/scheduled-tournament-room.js +166 -0
- package/dist/base-rooms/scheduled-tournament-room.js.map +1 -0
- package/dist/base-rooms/simple-room.d.ts +9 -0
- package/dist/base-rooms/simple-room.d.ts.map +1 -0
- package/dist/base-rooms/simple-room.js +13 -0
- package/dist/base-rooms/simple-room.js.map +1 -0
- package/dist/base-rooms/tournament-participant.d.ts +6 -0
- package/dist/base-rooms/tournament-participant.d.ts.map +1 -0
- package/dist/base-rooms/tournament-participant.js +3 -0
- package/dist/base-rooms/tournament-participant.js.map +1 -0
- package/dist/base-rooms/tournament-prize.d.ts +7 -0
- package/dist/base-rooms/tournament-prize.d.ts.map +1 -0
- package/dist/base-rooms/tournament-prize.js +3 -0
- package/dist/base-rooms/tournament-prize.js.map +1 -0
- package/dist/base-rooms/tournament-room.d.ts +47 -0
- package/dist/base-rooms/tournament-room.d.ts.map +1 -0
- package/dist/base-rooms/tournament-room.js +111 -0
- package/dist/base-rooms/tournament-room.js.map +1 -0
- package/dist/base-rooms/tournament-state.d.ts +23 -0
- package/dist/base-rooms/tournament-state.d.ts.map +1 -0
- package/dist/base-rooms/tournament-state.js +63 -0
- package/dist/base-rooms/tournament-state.js.map +1 -0
- package/dist/base-rooms/tournament-winner.d.ts +8 -0
- package/dist/base-rooms/tournament-winner.d.ts.map +1 -0
- package/dist/base-rooms/tournament-winner.js +3 -0
- package/dist/base-rooms/tournament-winner.js.map +1 -0
- package/dist/board-game/base/board-cell.d.ts +16 -0
- package/dist/board-game/base/board-cell.d.ts.map +1 -0
- package/dist/board-game/base/board-cell.js +42 -0
- package/dist/board-game/base/board-cell.js.map +1 -0
- package/dist/board-game/base/board-figure.d.ts +16 -0
- package/dist/board-game/base/board-figure.d.ts.map +1 -0
- package/dist/board-game/base/board-figure.js +38 -0
- package/dist/board-game/base/board-figure.js.map +1 -0
- package/dist/board-game/base/board-game-master.d.ts +19 -0
- package/dist/board-game/base/board-game-master.d.ts.map +1 -0
- package/dist/board-game/base/board-game-master.js +36 -0
- package/dist/board-game/base/board-game-master.js.map +1 -0
- package/dist/board-game/base/board-player-move.d.ts +11 -0
- package/dist/board-game/base/board-player-move.d.ts.map +1 -0
- package/dist/board-game/base/board-player-move.js +30 -0
- package/dist/board-game/base/board-player-move.js.map +1 -0
- package/dist/board-game/base/board-player.d.ts +13 -0
- package/dist/board-game/base/board-player.d.ts.map +1 -0
- package/dist/board-game/base/board-player.js +31 -0
- package/dist/board-game/base/board-player.js.map +1 -0
- package/dist/board-game/base/board-table.d.ts +17 -0
- package/dist/board-game/base/board-table.d.ts.map +1 -0
- package/dist/board-game/base/board-table.js +35 -0
- package/dist/board-game/base/board-table.js.map +1 -0
- package/dist/board-game/d1-board-game/d1-board-table.d.ts +19 -0
- package/dist/board-game/d1-board-game/d1-board-table.d.ts.map +1 -0
- package/dist/board-game/d1-board-game/d1-board-table.js +41 -0
- package/dist/board-game/d1-board-game/d1-board-table.js.map +1 -0
- package/dist/board-game/d2-board-game/d2-board-cell.d.ts +12 -0
- package/dist/board-game/d2-board-game/d2-board-cell.d.ts.map +1 -0
- package/dist/board-game/d2-board-game/d2-board-cell.js +26 -0
- package/dist/board-game/d2-board-game/d2-board-cell.js.map +1 -0
- package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.d.ts +29 -0
- package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.d.ts.map +1 -0
- package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.js +51 -0
- package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.js.map +1 -0
- package/dist/board-game/d2-board-game/d2-board-table.d.ts +49 -0
- package/dist/board-game/d2-board-game/d2-board-table.d.ts.map +1 -0
- package/dist/board-game/d2-board-game/d2-board-table.js +184 -0
- package/dist/board-game/d2-board-game/d2-board-table.js.map +1 -0
- package/dist/board-game/d2-board-game/types.d.ts +5 -0
- package/dist/board-game/d2-board-game/types.d.ts.map +1 -0
- package/dist/board-game/d2-board-game/types.js +3 -0
- package/dist/board-game/d2-board-game/types.js.map +1 -0
- package/dist/board-game/dice.d.ts +5 -0
- package/dist/board-game/dice.d.ts.map +1 -0
- package/dist/board-game/dice.js +14 -0
- package/dist/board-game/dice.js.map +1 -0
- package/dist/board-game/index.d.ts +13 -0
- package/dist/board-game/index.d.ts.map +1 -0
- package/dist/board-game/index.js +26 -0
- package/dist/board-game/index.js.map +1 -0
- package/dist/cards-game/cards/card.d.ts +25 -0
- package/dist/cards-game/cards/card.d.ts.map +1 -0
- package/dist/cards-game/cards/card.js +45 -0
- package/dist/cards-game/cards/card.js.map +1 -0
- package/dist/cards-game/cards/cards.d.ts +55 -0
- package/dist/cards-game/cards/cards.d.ts.map +1 -0
- package/dist/cards-game/cards/cards.js +63 -0
- package/dist/cards-game/cards/cards.js.map +1 -0
- package/dist/cards-game/cards/deck36.d.ts +2 -0
- package/dist/cards-game/cards/deck36.d.ts.map +1 -0
- package/dist/cards-game/cards/deck36.js +43 -0
- package/dist/cards-game/cards/deck36.js.map +1 -0
- package/dist/cards-game/cards/deck52.d.ts +2 -0
- package/dist/cards-game/cards/deck52.d.ts.map +1 -0
- package/dist/cards-game/cards/deck52.js +59 -0
- package/dist/cards-game/cards/deck52.js.map +1 -0
- package/dist/cards-game/cards/ranks.d.ts +18 -0
- package/dist/cards-game/cards/ranks.d.ts.map +1 -0
- package/dist/cards-game/cards/ranks.js +23 -0
- package/dist/cards-game/cards/ranks.js.map +1 -0
- package/dist/cards-game/cards/suits.d.ts +8 -0
- package/dist/cards-game/cards/suits.d.ts.map +1 -0
- package/dist/cards-game/cards/suits.js +13 -0
- package/dist/cards-game/cards/suits.js.map +1 -0
- package/dist/cards-game/cards-game-master.d.ts +24 -0
- package/dist/cards-game/cards-game-master.d.ts.map +1 -0
- package/dist/cards-game/cards-game-master.js +65 -0
- package/dist/cards-game/cards-game-master.js.map +1 -0
- package/dist/cards-game/cards-player.d.ts +12 -0
- package/dist/cards-game/cards-player.d.ts.map +1 -0
- package/dist/cards-game/cards-player.js +29 -0
- package/dist/cards-game/cards-player.js.map +1 -0
- package/dist/cards-game/cards-table.d.ts +11 -0
- package/dist/cards-game/cards-table.d.ts.map +1 -0
- package/dist/cards-game/cards-table.js +20 -0
- package/dist/cards-game/cards-table.js.map +1 -0
- package/dist/cards-game/index.d.ts +11 -0
- package/dist/cards-game/index.d.ts.map +1 -0
- package/dist/cards-game/index.js +55 -0
- package/dist/cards-game/index.js.map +1 -0
- package/dist/const.d.ts +3 -0
- package/dist/const.d.ts.map +1 -0
- package/dist/const.js +6 -0
- package/dist/const.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/circle-list.d.ts +29 -0
- package/dist/utils/circle-list.d.ts.map +1 -0
- package/dist/utils/circle-list.js +103 -0
- package/dist/utils/circle-list.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/shuffle.d.ts +3 -0
- package/dist/utils/shuffle.d.ts.map +1 -0
- package/dist/utils/shuffle.js +16 -0
- package/dist/utils/shuffle.js.map +1 -0
- package/dist/utils/tests/circle-list.test.d.ts +2 -0
- package/dist/utils/tests/circle-list.test.d.ts.map +1 -0
- package/dist/utils/tests/circle-list.test.js +60 -0
- package/dist/utils/tests/circle-list.test.js.map +1 -0
- package/package.json +54 -0
- package/readme.md +3 -0
- package/src/base/game-control-player-turn.ts +39 -0
- package/src/base/game-control-restart.ts +30 -0
- package/src/base/game-master.ts +109 -0
- package/src/base/game-player-move.ts +33 -0
- package/src/base/game-player.ts +184 -0
- package/src/base/game-room.ts +127 -0
- package/src/base/game-round.ts +62 -0
- package/src/base/game-state-machine.ts +25 -0
- package/src/base/game-table-seat.ts +37 -0
- package/src/base/game-table-seats.ts +78 -0
- package/src/base/game-table.ts +237 -0
- package/src/base/index.ts +25 -0
- package/src/base/standard-game-state.ts +69 -0
- package/src/base-rooms/fast-tournament-room.ts +59 -0
- package/src/base-rooms/index.ts +19 -0
- package/src/base-rooms/scheduled-tournament-room.ts +181 -0
- package/src/base-rooms/simple-room.ts +15 -0
- package/src/base-rooms/tournament-participant.ts +5 -0
- package/src/base-rooms/tournament-prize.ts +7 -0
- package/src/base-rooms/tournament-room.ts +169 -0
- package/src/base-rooms/tournament-state.ts +78 -0
- package/src/base-rooms/tournament-winner.ts +7 -0
- package/src/board-game/base/board-cell.ts +50 -0
- package/src/board-game/base/board-figure.ts +49 -0
- package/src/board-game/base/board-game-master.ts +56 -0
- package/src/board-game/base/board-player-move.ts +29 -0
- package/src/board-game/base/board-player.ts +43 -0
- package/src/board-game/base/board-table.ts +52 -0
- package/src/board-game/d1-board-game/d1-board-table.ts +56 -0
- package/src/board-game/d2-board-game/d2-board-cell.ts +30 -0
- package/src/board-game/d2-board-game/d2-board-pattern-move-figure.ts +79 -0
- package/src/board-game/d2-board-game/d2-board-table.ts +262 -0
- package/src/board-game/d2-board-game/types.ts +4 -0
- package/src/board-game/dice.ts +9 -0
- package/src/board-game/index.ts +28 -0
- package/src/cards-game/cards/card.ts +60 -0
- package/src/cards-game/cards/cards.ts +86 -0
- package/src/cards-game/cards/deck36.ts +80 -0
- package/src/cards-game/cards/deck52.ts +112 -0
- package/src/cards-game/cards/ranks.ts +19 -0
- package/src/cards-game/cards/suits.ts +10 -0
- package/src/cards-game/cards-game-master.ts +83 -0
- package/src/cards-game/cards-player.ts +40 -0
- package/src/cards-game/cards-table.ts +28 -0
- package/src/cards-game/index.ts +21 -0
- package/src/const.ts +3 -0
- package/src/index.ts +5 -0
- package/src/utils/circle-list.ts +130 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/shuffle.ts +12 -0
- package/src/utils/tests/circle-list.test.ts +72 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {
|
|
2
|
+
club_6,
|
|
3
|
+
club_7,
|
|
4
|
+
club_8,
|
|
5
|
+
club_9,
|
|
6
|
+
club_10,
|
|
7
|
+
club_ace,
|
|
8
|
+
club_jack,
|
|
9
|
+
club_king,
|
|
10
|
+
club_queen,
|
|
11
|
+
diamond_6,
|
|
12
|
+
diamond_7,
|
|
13
|
+
diamond_8,
|
|
14
|
+
diamond_9,
|
|
15
|
+
diamond_10,
|
|
16
|
+
diamond_ace,
|
|
17
|
+
diamond_jack,
|
|
18
|
+
diamond_king,
|
|
19
|
+
diamond_queen,
|
|
20
|
+
heart_6,
|
|
21
|
+
heart_7,
|
|
22
|
+
heart_8,
|
|
23
|
+
heart_9,
|
|
24
|
+
heart_10,
|
|
25
|
+
heart_ace,
|
|
26
|
+
heart_jack,
|
|
27
|
+
heart_king,
|
|
28
|
+
heart_queen,
|
|
29
|
+
spade_6,
|
|
30
|
+
spade_7,
|
|
31
|
+
spade_8,
|
|
32
|
+
spade_9,
|
|
33
|
+
spade_10,
|
|
34
|
+
spade_queen,
|
|
35
|
+
spade_jack,
|
|
36
|
+
spade_king,
|
|
37
|
+
spade_ace,
|
|
38
|
+
} from './cards';
|
|
39
|
+
|
|
40
|
+
export const deck36 = [
|
|
41
|
+
heart_6,
|
|
42
|
+
heart_7,
|
|
43
|
+
heart_8,
|
|
44
|
+
heart_9,
|
|
45
|
+
heart_10,
|
|
46
|
+
heart_jack,
|
|
47
|
+
heart_queen,
|
|
48
|
+
heart_king,
|
|
49
|
+
heart_ace,
|
|
50
|
+
|
|
51
|
+
diamond_6,
|
|
52
|
+
diamond_7,
|
|
53
|
+
diamond_8,
|
|
54
|
+
diamond_9,
|
|
55
|
+
diamond_10,
|
|
56
|
+
diamond_jack,
|
|
57
|
+
diamond_queen,
|
|
58
|
+
diamond_king,
|
|
59
|
+
diamond_ace,
|
|
60
|
+
|
|
61
|
+
club_6,
|
|
62
|
+
club_7,
|
|
63
|
+
club_8,
|
|
64
|
+
club_9,
|
|
65
|
+
club_10,
|
|
66
|
+
club_jack,
|
|
67
|
+
club_queen,
|
|
68
|
+
club_king,
|
|
69
|
+
club_ace,
|
|
70
|
+
|
|
71
|
+
spade_6,
|
|
72
|
+
spade_7,
|
|
73
|
+
spade_8,
|
|
74
|
+
spade_9,
|
|
75
|
+
spade_10,
|
|
76
|
+
spade_jack,
|
|
77
|
+
spade_queen,
|
|
78
|
+
spade_king,
|
|
79
|
+
spade_ace,
|
|
80
|
+
];
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import {
|
|
2
|
+
club_2,
|
|
3
|
+
club_3,
|
|
4
|
+
club_4,
|
|
5
|
+
club_5,
|
|
6
|
+
club_6,
|
|
7
|
+
club_7,
|
|
8
|
+
club_8,
|
|
9
|
+
club_9,
|
|
10
|
+
club_10,
|
|
11
|
+
club_ace,
|
|
12
|
+
club_jack,
|
|
13
|
+
club_king,
|
|
14
|
+
club_queen,
|
|
15
|
+
diamond_2,
|
|
16
|
+
diamond_3,
|
|
17
|
+
diamond_4,
|
|
18
|
+
diamond_5,
|
|
19
|
+
diamond_6,
|
|
20
|
+
diamond_7,
|
|
21
|
+
diamond_8,
|
|
22
|
+
diamond_9,
|
|
23
|
+
diamond_10,
|
|
24
|
+
diamond_ace,
|
|
25
|
+
diamond_jack,
|
|
26
|
+
diamond_king,
|
|
27
|
+
diamond_queen,
|
|
28
|
+
heart_2,
|
|
29
|
+
heart_3,
|
|
30
|
+
heart_4,
|
|
31
|
+
heart_5,
|
|
32
|
+
heart_6,
|
|
33
|
+
heart_7,
|
|
34
|
+
heart_8,
|
|
35
|
+
heart_9,
|
|
36
|
+
heart_10,
|
|
37
|
+
heart_ace,
|
|
38
|
+
heart_jack,
|
|
39
|
+
heart_king,
|
|
40
|
+
heart_queen,
|
|
41
|
+
spade_10,
|
|
42
|
+
spade_2,
|
|
43
|
+
spade_3,
|
|
44
|
+
spade_4,
|
|
45
|
+
spade_5,
|
|
46
|
+
spade_6,
|
|
47
|
+
spade_7,
|
|
48
|
+
spade_8,
|
|
49
|
+
spade_9,
|
|
50
|
+
spade_ace,
|
|
51
|
+
spade_jack,
|
|
52
|
+
spade_king,
|
|
53
|
+
spade_queen,
|
|
54
|
+
} from './cards';
|
|
55
|
+
|
|
56
|
+
export const deck52 = [
|
|
57
|
+
heart_2,
|
|
58
|
+
heart_3,
|
|
59
|
+
heart_4,
|
|
60
|
+
heart_5,
|
|
61
|
+
heart_6,
|
|
62
|
+
heart_7,
|
|
63
|
+
heart_8,
|
|
64
|
+
heart_9,
|
|
65
|
+
heart_10,
|
|
66
|
+
heart_jack,
|
|
67
|
+
heart_queen,
|
|
68
|
+
heart_king,
|
|
69
|
+
heart_ace,
|
|
70
|
+
|
|
71
|
+
diamond_2,
|
|
72
|
+
diamond_3,
|
|
73
|
+
diamond_4,
|
|
74
|
+
diamond_5,
|
|
75
|
+
diamond_6,
|
|
76
|
+
diamond_7,
|
|
77
|
+
diamond_8,
|
|
78
|
+
diamond_9,
|
|
79
|
+
diamond_10,
|
|
80
|
+
diamond_jack,
|
|
81
|
+
diamond_queen,
|
|
82
|
+
diamond_king,
|
|
83
|
+
diamond_ace,
|
|
84
|
+
|
|
85
|
+
club_2,
|
|
86
|
+
club_3,
|
|
87
|
+
club_4,
|
|
88
|
+
club_5,
|
|
89
|
+
club_6,
|
|
90
|
+
club_7,
|
|
91
|
+
club_8,
|
|
92
|
+
club_9,
|
|
93
|
+
club_10,
|
|
94
|
+
club_jack,
|
|
95
|
+
club_queen,
|
|
96
|
+
club_king,
|
|
97
|
+
club_ace,
|
|
98
|
+
|
|
99
|
+
spade_2,
|
|
100
|
+
spade_3,
|
|
101
|
+
spade_4,
|
|
102
|
+
spade_5,
|
|
103
|
+
spade_6,
|
|
104
|
+
spade_7,
|
|
105
|
+
spade_8,
|
|
106
|
+
spade_9,
|
|
107
|
+
spade_10,
|
|
108
|
+
spade_jack,
|
|
109
|
+
spade_queen,
|
|
110
|
+
spade_king,
|
|
111
|
+
spade_ace,
|
|
112
|
+
];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
2
|
+
|
|
3
|
+
export enum Ranks {
|
|
4
|
+
UNKNOWN_RANK = 0,
|
|
5
|
+
MIN_ACE = 1,
|
|
6
|
+
TWO = 2,
|
|
7
|
+
THREE = 3,
|
|
8
|
+
FOUR = 4,
|
|
9
|
+
FIVE = 5,
|
|
10
|
+
SIX = 6,
|
|
11
|
+
SEVEN = 7,
|
|
12
|
+
EIGHT = 8,
|
|
13
|
+
NINE = 9,
|
|
14
|
+
TEN = 10,
|
|
15
|
+
JACK = 11,
|
|
16
|
+
QUEEN = 12,
|
|
17
|
+
KING = 13,
|
|
18
|
+
ACE = 14,
|
|
19
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { GameMaster } from '../base';
|
|
2
|
+
import { IGameTable } from '../base/game-table';
|
|
3
|
+
import { IGameRound } from '../base/game-round';
|
|
4
|
+
|
|
5
|
+
import { CardsPlayer } from './cards-player';
|
|
6
|
+
import { Card } from './cards/card';
|
|
7
|
+
|
|
8
|
+
const ONE_CARD = 1;
|
|
9
|
+
const TWO_CARDS = 2;
|
|
10
|
+
const SIX_CARDS = 6;
|
|
11
|
+
|
|
12
|
+
export abstract class CardsGameMaster<GT extends IGameTable<GP>, GR extends IGameRound<GP>, GP extends CardsPlayer, GSR> extends GameMaster<GT, GR, GP, GSR> {
|
|
13
|
+
private deck: Array<Card>;
|
|
14
|
+
private readonly gameCards: Array<Card>;
|
|
15
|
+
|
|
16
|
+
protected constructor (table: GT) {
|
|
17
|
+
super(table);
|
|
18
|
+
this.deck = [];
|
|
19
|
+
this.gameCards = [];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getDeck () {
|
|
23
|
+
return this.deck;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
takeNewDeck (deck: Array<Card>) {
|
|
27
|
+
this.deck = deck;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
getGameCards () {
|
|
31
|
+
return this.gameCards;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
putCardsOnTheTableFromDeck () {
|
|
35
|
+
const popCard = this.deck.pop();
|
|
36
|
+
if (popCard) {
|
|
37
|
+
this.gameCards.push(popCard);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
putCardOnTheTable (card: Card) {
|
|
42
|
+
this.gameCards.push(card);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
popCardFromDeck () {
|
|
46
|
+
return this.deck.pop();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
pushCardToDeck (card: Card, position: number) {
|
|
50
|
+
this.deck.splice(position, 0, card);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
pushCardToBeggingOfTheDeck (card: Card) {
|
|
54
|
+
this.pushCardToDeck(card, 0);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
give2CardsToAllPlayers () {
|
|
58
|
+
this.giveCardsToAllPlayers(TWO_CARDS);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
give6CardsToAllPlayers () {
|
|
62
|
+
this.giveCardsToAllPlayers(SIX_CARDS);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
giveCardsToAllPlayers (count: number) {
|
|
66
|
+
this.table.getPlayers().forEach((player) => {
|
|
67
|
+
this.giveCardsToPlayer(player, count);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
give1CardsToPlayer (player: CardsPlayer) {
|
|
72
|
+
this.giveCardsToPlayer(player, ONE_CARD)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
giveCardsToPlayer (player: CardsPlayer, count: number) {
|
|
76
|
+
for (let i = 0; i < count; i += 1) {
|
|
77
|
+
const popCard = this.popCardFromDeck();
|
|
78
|
+
if (popCard) {
|
|
79
|
+
player.takeCard(popCard);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { GamePlayer } from '../base';
|
|
2
|
+
|
|
3
|
+
import { Card } from './cards/card';
|
|
4
|
+
import { first, remove } from 'lodash';
|
|
5
|
+
|
|
6
|
+
export abstract class CardsPlayer extends GamePlayer {
|
|
7
|
+
private cards: Array<Card>;
|
|
8
|
+
|
|
9
|
+
protected constructor (
|
|
10
|
+
id: string,
|
|
11
|
+
fullName: string,
|
|
12
|
+
avatarUrl: string,
|
|
13
|
+
balance: number,
|
|
14
|
+
) {
|
|
15
|
+
super(id, fullName, avatarUrl, balance);
|
|
16
|
+
this.cards = [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
getCards (): Array<Card> {
|
|
20
|
+
return this.cards;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
hasCards (): boolean {
|
|
24
|
+
return this.cards.length > 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
clearCards (): void {
|
|
28
|
+
this.cards = [];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
takeCard (card: Card): void {
|
|
32
|
+
this.cards.push(card);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
putCard (cardId: number): Card | undefined {
|
|
36
|
+
const removedCard = remove(this.cards, (card) => card.getId() === cardId);
|
|
37
|
+
|
|
38
|
+
return first(removedCard);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { cloneDeep } from 'lodash';
|
|
2
|
+
|
|
3
|
+
import { GameTable } from '../base';
|
|
4
|
+
import { GamePlayer } from '../base';
|
|
5
|
+
import { superShuffle } from '../utils';
|
|
6
|
+
import { GameTableConfig } from '../base/game-table';
|
|
7
|
+
|
|
8
|
+
import { Card } from './cards/card';
|
|
9
|
+
|
|
10
|
+
export abstract class CardsTable<GP extends GamePlayer, GM, GSR> extends GameTable<GP, GM, GSR> {
|
|
11
|
+
private deck: Array<Card>;
|
|
12
|
+
|
|
13
|
+
protected constructor (
|
|
14
|
+
config: GameTableConfig<GP>,
|
|
15
|
+
deck: Array<Card>,
|
|
16
|
+
) {
|
|
17
|
+
super(config);
|
|
18
|
+
this.deck = deck;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
shuffleDeck () {
|
|
22
|
+
this.deck = superShuffle(this.deck);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getDeck () {
|
|
26
|
+
return cloneDeep(this.deck);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as cards from './cards/cards';
|
|
2
|
+
import { Card } from './cards/card';
|
|
3
|
+
import { deck36 } from './cards/deck36';
|
|
4
|
+
import { deck52 } from './cards/deck52';
|
|
5
|
+
import { Ranks } from './cards/ranks';
|
|
6
|
+
import { Suits } from './cards/suits';
|
|
7
|
+
import { CardsGameMaster } from './cards-game-master';
|
|
8
|
+
import { CardsPlayer } from './cards-player';
|
|
9
|
+
import { CardsTable } from './cards-table';
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
cards,
|
|
13
|
+
Card,
|
|
14
|
+
deck36,
|
|
15
|
+
deck52,
|
|
16
|
+
Ranks,
|
|
17
|
+
Suits,
|
|
18
|
+
CardsGameMaster,
|
|
19
|
+
CardsPlayer,
|
|
20
|
+
CardsTable,
|
|
21
|
+
}
|
package/src/const.ts
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { slice } from 'lodash';
|
|
2
|
+
|
|
3
|
+
export class CircleListNode<T> {
|
|
4
|
+
private data: T;
|
|
5
|
+
private next: CircleListNode<T> | null;
|
|
6
|
+
private prev: CircleListNode<T> | null;
|
|
7
|
+
|
|
8
|
+
constructor (data: T) {
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
getData () {
|
|
13
|
+
return this.data;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
setData (data: T) {
|
|
17
|
+
this.data = data;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getNext () {
|
|
21
|
+
return this.next;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
setNext (node: CircleListNode<T>) {
|
|
25
|
+
this.next = node;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
clearNext () {
|
|
29
|
+
this.next = null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getPrev () {
|
|
33
|
+
return this.prev;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
setPrev (node: CircleListNode<T>) {
|
|
37
|
+
this.prev = node;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
clearPrev () {
|
|
41
|
+
this.prev = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class CircleList<T> {
|
|
46
|
+
private readonly list: Array<CircleListNode<T>>;
|
|
47
|
+
|
|
48
|
+
constructor () {
|
|
49
|
+
this.list = [];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
get (index: number): CircleListNode<T> | undefined {
|
|
53
|
+
return this.list[index];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
getData (index: number) {
|
|
57
|
+
return this.get(index)?.getData();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
getNextChain (first: number): Array<T> {
|
|
61
|
+
const chain: Array<T> = [];
|
|
62
|
+
let firstNode = this.list[first];
|
|
63
|
+
let nextNode = firstNode.getNext();
|
|
64
|
+
|
|
65
|
+
chain.push(firstNode.getData());
|
|
66
|
+
|
|
67
|
+
while (firstNode !== nextNode && nextNode) {
|
|
68
|
+
chain.push(nextNode.getData());
|
|
69
|
+
nextNode = nextNode.getNext();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return chain;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
getPrevChain (first: number): Array<T> {
|
|
76
|
+
const chain: Array<T> = [];
|
|
77
|
+
let firstNode = this.list[first];
|
|
78
|
+
let prevNode = firstNode.getPrev();
|
|
79
|
+
|
|
80
|
+
chain.push(firstNode.getData());
|
|
81
|
+
|
|
82
|
+
while (firstNode !== prevNode && prevNode) {
|
|
83
|
+
chain.push(prevNode.getData());
|
|
84
|
+
prevNode = prevNode.getPrev();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return chain;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
getSize () {
|
|
91
|
+
return this.list.length;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
getSlice (start: number, end?: number): Array<T> {
|
|
95
|
+
return slice(this.list, start, end).map((item) => item.getData());
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
push (data: T) {
|
|
99
|
+
this.list.push(new CircleListNode(data));
|
|
100
|
+
this.connect();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
toArray (): Array<T> {
|
|
104
|
+
return this.list.map((item) => item.getData());
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private connect () {
|
|
108
|
+
this.clearLinks();
|
|
109
|
+
|
|
110
|
+
for (let i = 0; i < this.list.length; i += 1) {
|
|
111
|
+
const currentNode = this.list[i];
|
|
112
|
+
|
|
113
|
+
if (i === this.list.length - 1) {
|
|
114
|
+
currentNode.setNext(this.list[0]);
|
|
115
|
+
currentNode.getNext()?.setPrev(currentNode);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
currentNode.setNext(this.list[i + 1]);
|
|
120
|
+
currentNode.getNext()?.setPrev(currentNode);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private clearLinks () {
|
|
125
|
+
this.list.forEach((node) => {
|
|
126
|
+
node.clearNext();
|
|
127
|
+
node.clearPrev();
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import shuffle from 'shuffle-array';
|
|
2
|
+
import seedrandom from 'seedrandom';
|
|
3
|
+
import { flow } from 'lodash';
|
|
4
|
+
|
|
5
|
+
const rng = seedrandom();
|
|
6
|
+
|
|
7
|
+
export function rngShuffle(collection: any[]) {
|
|
8
|
+
return shuffle(collection, { rng, copy: true });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const superShuffle = flow(rngShuffle, rngShuffle, rngShuffle, rngShuffle);
|
|
12
|
+
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { CircleList } from '../circle-list';
|
|
2
|
+
|
|
3
|
+
type TestItemType = {
|
|
4
|
+
id: number;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
describe('circle list', () => {
|
|
8
|
+
const item1 = { id: 1 };
|
|
9
|
+
const item2 = { id: 2 };
|
|
10
|
+
const item3 = { id: 3 };
|
|
11
|
+
|
|
12
|
+
const list = new CircleList<TestItemType>();
|
|
13
|
+
list.push(item1);
|
|
14
|
+
list.push(item2);
|
|
15
|
+
list.push(item3);
|
|
16
|
+
|
|
17
|
+
it('circle list', () => {
|
|
18
|
+
expect(list.getSize()).toBe(3);
|
|
19
|
+
|
|
20
|
+
expect(list.get(0)?.getData()).toBe(item1);
|
|
21
|
+
expect(list.get(0)?.getNext()).toBe(list.get(1));
|
|
22
|
+
expect(list.get(0)?.getPrev()).toBe(list.get(2));
|
|
23
|
+
|
|
24
|
+
expect(list.get(1)?.getData()).toBe(item2);
|
|
25
|
+
expect(list.get(1)?.getNext()).toBe(list.get(2));
|
|
26
|
+
expect(list.get(1)?.getPrev()).toBe(list.get(0));
|
|
27
|
+
|
|
28
|
+
expect(list.get(2)?.getData()).toBe(item3);
|
|
29
|
+
expect(list.get(2)?.getNext()).toBe(list.get(0));
|
|
30
|
+
expect(list.get(2)?.getPrev()).toBe(list.get(1));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('getNextChain', () => {
|
|
34
|
+
const nextChain0 = list.getNextChain(0);
|
|
35
|
+
expect(nextChain0.length).toBe(3);
|
|
36
|
+
expect(nextChain0[0].id).toBe(1);
|
|
37
|
+
expect(nextChain0[1].id).toBe(2);
|
|
38
|
+
expect(nextChain0[2].id).toBe(3);
|
|
39
|
+
|
|
40
|
+
const nextChain1 = list.getNextChain(1);
|
|
41
|
+
expect(nextChain1.length).toBe(3);
|
|
42
|
+
expect(nextChain1[0].id).toBe(2);
|
|
43
|
+
expect(nextChain1[1].id).toBe(3);
|
|
44
|
+
expect(nextChain1[2].id).toBe(1);
|
|
45
|
+
|
|
46
|
+
const nextChain2 = list.getNextChain(2);
|
|
47
|
+
expect(nextChain2.length).toBe(3);
|
|
48
|
+
expect(nextChain2[0].id).toBe(3);
|
|
49
|
+
expect(nextChain2[1].id).toBe(1);
|
|
50
|
+
expect(nextChain2[2].id).toBe(2);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('getPrevChain', () => {
|
|
54
|
+
const prevChain0 = list.getPrevChain(0);
|
|
55
|
+
expect(prevChain0.length).toBe(3);
|
|
56
|
+
expect(prevChain0[0].id).toBe(1);
|
|
57
|
+
expect(prevChain0[1].id).toBe(3);
|
|
58
|
+
expect(prevChain0[2].id).toBe(2);
|
|
59
|
+
|
|
60
|
+
const prevChain1 = list.getPrevChain(1);
|
|
61
|
+
expect(prevChain1.length).toBe(3);
|
|
62
|
+
expect(prevChain1[0].id).toBe(2);
|
|
63
|
+
expect(prevChain1[1].id).toBe(1);
|
|
64
|
+
expect(prevChain1[2].id).toBe(3);
|
|
65
|
+
|
|
66
|
+
const prevChain2 = list.getPrevChain(2);
|
|
67
|
+
expect(prevChain2.length).toBe(3);
|
|
68
|
+
expect(prevChain2[0].id).toBe(3);
|
|
69
|
+
expect(prevChain2[1].id).toBe(2);
|
|
70
|
+
expect(prevChain2[2].id).toBe(1);
|
|
71
|
+
});
|
|
72
|
+
});
|