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.
Files changed (257) hide show
  1. package/dist/base/game-control-player-turn.d.ts +12 -0
  2. package/dist/base/game-control-player-turn.d.ts.map +1 -0
  3. package/dist/base/game-control-player-turn.js +27 -0
  4. package/dist/base/game-control-player-turn.js.map +1 -0
  5. package/dist/base/game-control-restart.d.ts +10 -0
  6. package/dist/base/game-control-restart.d.ts.map +1 -0
  7. package/dist/base/game-control-restart.js +21 -0
  8. package/dist/base/game-control-restart.js.map +1 -0
  9. package/dist/base/game-master.d.ts +34 -0
  10. package/dist/base/game-master.d.ts.map +1 -0
  11. package/dist/base/game-master.js +83 -0
  12. package/dist/base/game-master.js.map +1 -0
  13. package/dist/base/game-player-move.d.ts +13 -0
  14. package/dist/base/game-player-move.d.ts.map +1 -0
  15. package/dist/base/game-player-move.js +28 -0
  16. package/dist/base/game-player-move.js.map +1 -0
  17. package/dist/base/game-player.d.ts +61 -0
  18. package/dist/base/game-player.d.ts.map +1 -0
  19. package/dist/base/game-player.js +140 -0
  20. package/dist/base/game-player.js.map +1 -0
  21. package/dist/base/game-room.d.ts +47 -0
  22. package/dist/base/game-room.d.ts.map +1 -0
  23. package/dist/base/game-room.js +80 -0
  24. package/dist/base/game-room.js.map +1 -0
  25. package/dist/base/game-round.d.ts +28 -0
  26. package/dist/base/game-round.d.ts.map +1 -0
  27. package/dist/base/game-round.js +37 -0
  28. package/dist/base/game-round.js.map +1 -0
  29. package/dist/base/game-state-machine.d.ts +13 -0
  30. package/dist/base/game-state-machine.d.ts.map +1 -0
  31. package/dist/base/game-state-machine.js +21 -0
  32. package/dist/base/game-state-machine.js.map +1 -0
  33. package/dist/base/game-table-seat.d.ts +15 -0
  34. package/dist/base/game-table-seat.d.ts.map +1 -0
  35. package/dist/base/game-table-seat.js +32 -0
  36. package/dist/base/game-table-seat.js.map +1 -0
  37. package/dist/base/game-table-seats.d.ts +21 -0
  38. package/dist/base/game-table-seats.d.ts.map +1 -0
  39. package/dist/base/game-table-seats.js +67 -0
  40. package/dist/base/game-table-seats.js.map +1 -0
  41. package/dist/base/game-table.d.ts +87 -0
  42. package/dist/base/game-table.d.ts.map +1 -0
  43. package/dist/base/game-table.js +130 -0
  44. package/dist/base/game-table.js.map +1 -0
  45. package/dist/base/index.d.ts +13 -0
  46. package/dist/base/index.d.ts.map +1 -0
  47. package/dist/base/index.js +26 -0
  48. package/dist/base/index.js.map +1 -0
  49. package/dist/base/standard-game-state.d.ts +20 -0
  50. package/dist/base/standard-game-state.d.ts.map +1 -0
  51. package/dist/base/standard-game-state.js +57 -0
  52. package/dist/base/standard-game-state.js.map +1 -0
  53. package/dist/base-rooms/fast-tournament-room.d.ts +14 -0
  54. package/dist/base-rooms/fast-tournament-room.d.ts.map +1 -0
  55. package/dist/base-rooms/fast-tournament-room.js +53 -0
  56. package/dist/base-rooms/fast-tournament-room.js.map +1 -0
  57. package/dist/base-rooms/index.d.ts +10 -0
  58. package/dist/base-rooms/index.d.ts.map +1 -0
  59. package/dist/base-rooms/index.js +14 -0
  60. package/dist/base-rooms/index.js.map +1 -0
  61. package/dist/base-rooms/scheduled-tournament-room.d.ts +28 -0
  62. package/dist/base-rooms/scheduled-tournament-room.d.ts.map +1 -0
  63. package/dist/base-rooms/scheduled-tournament-room.js +166 -0
  64. package/dist/base-rooms/scheduled-tournament-room.js.map +1 -0
  65. package/dist/base-rooms/simple-room.d.ts +9 -0
  66. package/dist/base-rooms/simple-room.d.ts.map +1 -0
  67. package/dist/base-rooms/simple-room.js +13 -0
  68. package/dist/base-rooms/simple-room.js.map +1 -0
  69. package/dist/base-rooms/tournament-participant.d.ts +6 -0
  70. package/dist/base-rooms/tournament-participant.d.ts.map +1 -0
  71. package/dist/base-rooms/tournament-participant.js +3 -0
  72. package/dist/base-rooms/tournament-participant.js.map +1 -0
  73. package/dist/base-rooms/tournament-prize.d.ts +7 -0
  74. package/dist/base-rooms/tournament-prize.d.ts.map +1 -0
  75. package/dist/base-rooms/tournament-prize.js +3 -0
  76. package/dist/base-rooms/tournament-prize.js.map +1 -0
  77. package/dist/base-rooms/tournament-room.d.ts +47 -0
  78. package/dist/base-rooms/tournament-room.d.ts.map +1 -0
  79. package/dist/base-rooms/tournament-room.js +111 -0
  80. package/dist/base-rooms/tournament-room.js.map +1 -0
  81. package/dist/base-rooms/tournament-state.d.ts +23 -0
  82. package/dist/base-rooms/tournament-state.d.ts.map +1 -0
  83. package/dist/base-rooms/tournament-state.js +63 -0
  84. package/dist/base-rooms/tournament-state.js.map +1 -0
  85. package/dist/base-rooms/tournament-winner.d.ts +8 -0
  86. package/dist/base-rooms/tournament-winner.d.ts.map +1 -0
  87. package/dist/base-rooms/tournament-winner.js +3 -0
  88. package/dist/base-rooms/tournament-winner.js.map +1 -0
  89. package/dist/board-game/base/board-cell.d.ts +16 -0
  90. package/dist/board-game/base/board-cell.d.ts.map +1 -0
  91. package/dist/board-game/base/board-cell.js +42 -0
  92. package/dist/board-game/base/board-cell.js.map +1 -0
  93. package/dist/board-game/base/board-figure.d.ts +16 -0
  94. package/dist/board-game/base/board-figure.d.ts.map +1 -0
  95. package/dist/board-game/base/board-figure.js +38 -0
  96. package/dist/board-game/base/board-figure.js.map +1 -0
  97. package/dist/board-game/base/board-game-master.d.ts +19 -0
  98. package/dist/board-game/base/board-game-master.d.ts.map +1 -0
  99. package/dist/board-game/base/board-game-master.js +36 -0
  100. package/dist/board-game/base/board-game-master.js.map +1 -0
  101. package/dist/board-game/base/board-player-move.d.ts +11 -0
  102. package/dist/board-game/base/board-player-move.d.ts.map +1 -0
  103. package/dist/board-game/base/board-player-move.js +30 -0
  104. package/dist/board-game/base/board-player-move.js.map +1 -0
  105. package/dist/board-game/base/board-player.d.ts +13 -0
  106. package/dist/board-game/base/board-player.d.ts.map +1 -0
  107. package/dist/board-game/base/board-player.js +31 -0
  108. package/dist/board-game/base/board-player.js.map +1 -0
  109. package/dist/board-game/base/board-table.d.ts +17 -0
  110. package/dist/board-game/base/board-table.d.ts.map +1 -0
  111. package/dist/board-game/base/board-table.js +35 -0
  112. package/dist/board-game/base/board-table.js.map +1 -0
  113. package/dist/board-game/d1-board-game/d1-board-table.d.ts +19 -0
  114. package/dist/board-game/d1-board-game/d1-board-table.d.ts.map +1 -0
  115. package/dist/board-game/d1-board-game/d1-board-table.js +41 -0
  116. package/dist/board-game/d1-board-game/d1-board-table.js.map +1 -0
  117. package/dist/board-game/d2-board-game/d2-board-cell.d.ts +12 -0
  118. package/dist/board-game/d2-board-game/d2-board-cell.d.ts.map +1 -0
  119. package/dist/board-game/d2-board-game/d2-board-cell.js +26 -0
  120. package/dist/board-game/d2-board-game/d2-board-cell.js.map +1 -0
  121. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.d.ts +29 -0
  122. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.d.ts.map +1 -0
  123. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.js +51 -0
  124. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.js.map +1 -0
  125. package/dist/board-game/d2-board-game/d2-board-table.d.ts +49 -0
  126. package/dist/board-game/d2-board-game/d2-board-table.d.ts.map +1 -0
  127. package/dist/board-game/d2-board-game/d2-board-table.js +184 -0
  128. package/dist/board-game/d2-board-game/d2-board-table.js.map +1 -0
  129. package/dist/board-game/d2-board-game/types.d.ts +5 -0
  130. package/dist/board-game/d2-board-game/types.d.ts.map +1 -0
  131. package/dist/board-game/d2-board-game/types.js +3 -0
  132. package/dist/board-game/d2-board-game/types.js.map +1 -0
  133. package/dist/board-game/dice.d.ts +5 -0
  134. package/dist/board-game/dice.d.ts.map +1 -0
  135. package/dist/board-game/dice.js +14 -0
  136. package/dist/board-game/dice.js.map +1 -0
  137. package/dist/board-game/index.d.ts +13 -0
  138. package/dist/board-game/index.d.ts.map +1 -0
  139. package/dist/board-game/index.js +26 -0
  140. package/dist/board-game/index.js.map +1 -0
  141. package/dist/cards-game/cards/card.d.ts +25 -0
  142. package/dist/cards-game/cards/card.d.ts.map +1 -0
  143. package/dist/cards-game/cards/card.js +45 -0
  144. package/dist/cards-game/cards/card.js.map +1 -0
  145. package/dist/cards-game/cards/cards.d.ts +55 -0
  146. package/dist/cards-game/cards/cards.d.ts.map +1 -0
  147. package/dist/cards-game/cards/cards.js +63 -0
  148. package/dist/cards-game/cards/cards.js.map +1 -0
  149. package/dist/cards-game/cards/deck36.d.ts +2 -0
  150. package/dist/cards-game/cards/deck36.d.ts.map +1 -0
  151. package/dist/cards-game/cards/deck36.js +43 -0
  152. package/dist/cards-game/cards/deck36.js.map +1 -0
  153. package/dist/cards-game/cards/deck52.d.ts +2 -0
  154. package/dist/cards-game/cards/deck52.d.ts.map +1 -0
  155. package/dist/cards-game/cards/deck52.js +59 -0
  156. package/dist/cards-game/cards/deck52.js.map +1 -0
  157. package/dist/cards-game/cards/ranks.d.ts +18 -0
  158. package/dist/cards-game/cards/ranks.d.ts.map +1 -0
  159. package/dist/cards-game/cards/ranks.js +23 -0
  160. package/dist/cards-game/cards/ranks.js.map +1 -0
  161. package/dist/cards-game/cards/suits.d.ts +8 -0
  162. package/dist/cards-game/cards/suits.d.ts.map +1 -0
  163. package/dist/cards-game/cards/suits.js +13 -0
  164. package/dist/cards-game/cards/suits.js.map +1 -0
  165. package/dist/cards-game/cards-game-master.d.ts +24 -0
  166. package/dist/cards-game/cards-game-master.d.ts.map +1 -0
  167. package/dist/cards-game/cards-game-master.js +65 -0
  168. package/dist/cards-game/cards-game-master.js.map +1 -0
  169. package/dist/cards-game/cards-player.d.ts +12 -0
  170. package/dist/cards-game/cards-player.d.ts.map +1 -0
  171. package/dist/cards-game/cards-player.js +29 -0
  172. package/dist/cards-game/cards-player.js.map +1 -0
  173. package/dist/cards-game/cards-table.d.ts +11 -0
  174. package/dist/cards-game/cards-table.d.ts.map +1 -0
  175. package/dist/cards-game/cards-table.js +20 -0
  176. package/dist/cards-game/cards-table.js.map +1 -0
  177. package/dist/cards-game/index.d.ts +11 -0
  178. package/dist/cards-game/index.d.ts.map +1 -0
  179. package/dist/cards-game/index.js +55 -0
  180. package/dist/cards-game/index.js.map +1 -0
  181. package/dist/const.d.ts +3 -0
  182. package/dist/const.d.ts.map +1 -0
  183. package/dist/const.js +6 -0
  184. package/dist/const.js.map +1 -0
  185. package/dist/index.d.ts +6 -0
  186. package/dist/index.d.ts.map +1 -0
  187. package/dist/index.js +22 -0
  188. package/dist/index.js.map +1 -0
  189. package/dist/utils/circle-list.d.ts +29 -0
  190. package/dist/utils/circle-list.d.ts.map +1 -0
  191. package/dist/utils/circle-list.js +103 -0
  192. package/dist/utils/circle-list.js.map +1 -0
  193. package/dist/utils/index.d.ts +4 -0
  194. package/dist/utils/index.d.ts.map +1 -0
  195. package/dist/utils/index.js +9 -0
  196. package/dist/utils/index.js.map +1 -0
  197. package/dist/utils/shuffle.d.ts +3 -0
  198. package/dist/utils/shuffle.d.ts.map +1 -0
  199. package/dist/utils/shuffle.js +16 -0
  200. package/dist/utils/shuffle.js.map +1 -0
  201. package/dist/utils/tests/circle-list.test.d.ts +2 -0
  202. package/dist/utils/tests/circle-list.test.d.ts.map +1 -0
  203. package/dist/utils/tests/circle-list.test.js +60 -0
  204. package/dist/utils/tests/circle-list.test.js.map +1 -0
  205. package/package.json +54 -0
  206. package/readme.md +3 -0
  207. package/src/base/game-control-player-turn.ts +39 -0
  208. package/src/base/game-control-restart.ts +30 -0
  209. package/src/base/game-master.ts +109 -0
  210. package/src/base/game-player-move.ts +33 -0
  211. package/src/base/game-player.ts +184 -0
  212. package/src/base/game-room.ts +127 -0
  213. package/src/base/game-round.ts +62 -0
  214. package/src/base/game-state-machine.ts +25 -0
  215. package/src/base/game-table-seat.ts +37 -0
  216. package/src/base/game-table-seats.ts +78 -0
  217. package/src/base/game-table.ts +237 -0
  218. package/src/base/index.ts +25 -0
  219. package/src/base/standard-game-state.ts +69 -0
  220. package/src/base-rooms/fast-tournament-room.ts +59 -0
  221. package/src/base-rooms/index.ts +19 -0
  222. package/src/base-rooms/scheduled-tournament-room.ts +181 -0
  223. package/src/base-rooms/simple-room.ts +15 -0
  224. package/src/base-rooms/tournament-participant.ts +5 -0
  225. package/src/base-rooms/tournament-prize.ts +7 -0
  226. package/src/base-rooms/tournament-room.ts +169 -0
  227. package/src/base-rooms/tournament-state.ts +78 -0
  228. package/src/base-rooms/tournament-winner.ts +7 -0
  229. package/src/board-game/base/board-cell.ts +50 -0
  230. package/src/board-game/base/board-figure.ts +49 -0
  231. package/src/board-game/base/board-game-master.ts +56 -0
  232. package/src/board-game/base/board-player-move.ts +29 -0
  233. package/src/board-game/base/board-player.ts +43 -0
  234. package/src/board-game/base/board-table.ts +52 -0
  235. package/src/board-game/d1-board-game/d1-board-table.ts +56 -0
  236. package/src/board-game/d2-board-game/d2-board-cell.ts +30 -0
  237. package/src/board-game/d2-board-game/d2-board-pattern-move-figure.ts +79 -0
  238. package/src/board-game/d2-board-game/d2-board-table.ts +262 -0
  239. package/src/board-game/d2-board-game/types.ts +4 -0
  240. package/src/board-game/dice.ts +9 -0
  241. package/src/board-game/index.ts +28 -0
  242. package/src/cards-game/cards/card.ts +60 -0
  243. package/src/cards-game/cards/cards.ts +86 -0
  244. package/src/cards-game/cards/deck36.ts +80 -0
  245. package/src/cards-game/cards/deck52.ts +112 -0
  246. package/src/cards-game/cards/ranks.ts +19 -0
  247. package/src/cards-game/cards/suits.ts +10 -0
  248. package/src/cards-game/cards-game-master.ts +83 -0
  249. package/src/cards-game/cards-player.ts +40 -0
  250. package/src/cards-game/cards-table.ts +28 -0
  251. package/src/cards-game/index.ts +21 -0
  252. package/src/const.ts +3 -0
  253. package/src/index.ts +5 -0
  254. package/src/utils/circle-list.ts +130 -0
  255. package/src/utils/index.ts +8 -0
  256. package/src/utils/shuffle.ts +12 -0
  257. 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,10 @@
1
+ /* eslint-disable no-unused-vars */
2
+
3
+ export enum Suits {
4
+ UNKNOWN_SUIT = 'unknown_suit',
5
+ HEART = 'heart',
6
+ DIAMOND = 'diamond',
7
+ CLUB = 'club',
8
+ SPADE = 'spade',
9
+ }
10
+
@@ -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
@@ -0,0 +1,3 @@
1
+ export const ONE_SECOND = 1000
2
+
3
+ export const TWO_PLAYER_GAME = 2;
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './base';
2
+ export * from './base-rooms';
3
+ export * from './board-game';
4
+ export * from './cards-game';
5
+ export * from './utils';
@@ -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,8 @@
1
+ import { CircleListNode, CircleList } from './circle-list';
2
+ import { superShuffle } from './shuffle';
3
+
4
+ export {
5
+ CircleListNode,
6
+ CircleList,
7
+ superShuffle,
8
+ }
@@ -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
+ });