jp.ms.common.engine 1.0.2 → 1.0.4

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 (218) hide show
  1. package/dist/base/game-control-player-turn.d.ts +4 -4
  2. package/dist/base/game-control-player-turn.d.ts.map +1 -1
  3. package/dist/base/game-control-player-turn.js.map +1 -1
  4. package/dist/base/game-master.d.ts +24 -21
  5. package/dist/base/game-master.d.ts.map +1 -1
  6. package/dist/base/game-master.js +6 -2
  7. package/dist/base/game-master.js.map +1 -1
  8. package/dist/base/game-player-connections-helper.d.ts +15 -0
  9. package/dist/base/game-player-connections-helper.d.ts.map +1 -0
  10. package/dist/base/game-player-connections-helper.js +33 -0
  11. package/dist/base/game-player-connections-helper.js.map +1 -0
  12. package/dist/base/game-player.d.ts +3 -1
  13. package/dist/base/game-player.d.ts.map +1 -1
  14. package/dist/base/game-player.js +3 -1
  15. package/dist/base/game-player.js.map +1 -1
  16. package/dist/base/game-room.d.ts +15 -17
  17. package/dist/base/game-room.d.ts.map +1 -1
  18. package/dist/base/game-room.js +16 -17
  19. package/dist/base/game-room.js.map +1 -1
  20. package/dist/base/game-round.d.ts +7 -10
  21. package/dist/base/game-round.d.ts.map +1 -1
  22. package/dist/base/game-round.js +2 -4
  23. package/dist/base/game-round.js.map +1 -1
  24. package/dist/base/game-state-machine.d.ts +4 -4
  25. package/dist/base/game-state-machine.d.ts.map +1 -1
  26. package/dist/base/game-state-machine.js.map +1 -1
  27. package/dist/base/game-summary-result.d.ts +3 -0
  28. package/dist/base/game-summary-result.d.ts.map +1 -0
  29. package/dist/base/game-summary-result.js +7 -0
  30. package/dist/base/game-summary-result.js.map +1 -0
  31. package/dist/base/game-table-seat.d.ts +3 -3
  32. package/dist/base/game-table-seat.d.ts.map +1 -1
  33. package/dist/base/game-table-seat.js.map +1 -1
  34. package/dist/base/game-table-seats.d.ts +12 -12
  35. package/dist/base/game-table-seats.d.ts.map +1 -1
  36. package/dist/base/game-table-seats.js.map +1 -1
  37. package/dist/base/game-table.d.ts +25 -51
  38. package/dist/base/game-table.d.ts.map +1 -1
  39. package/dist/base/game-table.js.map +1 -1
  40. package/dist/base/index.d.ts +2 -1
  41. package/dist/base/index.d.ts.map +1 -1
  42. package/dist/base/index.js +3 -1
  43. package/dist/base/index.js.map +1 -1
  44. package/dist/base/standard-game-state.d.ts +2 -2
  45. package/dist/base/standard-game-state.d.ts.map +1 -1
  46. package/dist/base/standard-game-state.js +1 -1
  47. package/dist/base/standard-game-state.js.map +1 -1
  48. package/dist/base-rooms/fast-tournament-room.d.ts +0 -13
  49. package/dist/base-rooms/fast-tournament-room.d.ts.map +1 -1
  50. package/dist/base-rooms/fast-tournament-room.js +59 -51
  51. package/dist/base-rooms/fast-tournament-room.js.map +1 -1
  52. package/dist/base-rooms/index.d.ts +1 -5
  53. package/dist/base-rooms/index.d.ts.map +1 -1
  54. package/dist/base-rooms/index.js +3 -9
  55. package/dist/base-rooms/index.js.map +1 -1
  56. package/dist/base-rooms/scheduled-tournament-room.d.ts +0 -27
  57. package/dist/base-rooms/scheduled-tournament-room.d.ts.map +1 -1
  58. package/dist/base-rooms/scheduled-tournament-room.js +181 -164
  59. package/dist/base-rooms/scheduled-tournament-room.js.map +1 -1
  60. package/dist/base-rooms/simple-room.d.ts +5 -4
  61. package/dist/base-rooms/simple-room.d.ts.map +1 -1
  62. package/dist/base-rooms/simple-room.js +16 -0
  63. package/dist/base-rooms/simple-room.js.map +1 -1
  64. package/dist/base-rooms/tournament-room.d.ts +0 -46
  65. package/dist/base-rooms/tournament-room.d.ts.map +1 -1
  66. package/dist/base-rooms/tournament-room.js +169 -109
  67. package/dist/base-rooms/tournament-room.js.map +1 -1
  68. package/dist/base-rooms/tournament-state.d.ts +2 -2
  69. package/dist/base-rooms/tournament-state.d.ts.map +1 -1
  70. package/dist/base-rooms/tournament-state.js +2 -2
  71. package/dist/base-rooms/tournament-state.js.map +1 -1
  72. package/dist/board-game/base/board-cell.d.ts +0 -15
  73. package/dist/board-game/base/board-cell.d.ts.map +1 -1
  74. package/dist/board-game/base/board-cell.js +50 -40
  75. package/dist/board-game/base/board-cell.js.map +1 -1
  76. package/dist/board-game/base/board-figure.d.ts +0 -15
  77. package/dist/board-game/base/board-figure.d.ts.map +1 -1
  78. package/dist/board-game/base/board-figure.js +49 -36
  79. package/dist/board-game/base/board-figure.js.map +1 -1
  80. package/dist/board-game/base/board-game-master.d.ts +0 -18
  81. package/dist/board-game/base/board-game-master.d.ts.map +1 -1
  82. package/dist/board-game/base/board-game-master.js +56 -34
  83. package/dist/board-game/base/board-game-master.js.map +1 -1
  84. package/dist/board-game/base/board-player-move.d.ts +0 -10
  85. package/dist/board-game/base/board-player-move.d.ts.map +1 -1
  86. package/dist/board-game/base/board-player-move.js +29 -28
  87. package/dist/board-game/base/board-player-move.js.map +1 -1
  88. package/dist/board-game/base/board-player.d.ts +0 -12
  89. package/dist/board-game/base/board-player.d.ts.map +1 -1
  90. package/dist/board-game/base/board-player.js +43 -29
  91. package/dist/board-game/base/board-player.js.map +1 -1
  92. package/dist/board-game/base/board-table.d.ts +0 -16
  93. package/dist/board-game/base/board-table.d.ts.map +1 -1
  94. package/dist/board-game/base/board-table.js +52 -33
  95. package/dist/board-game/base/board-table.js.map +1 -1
  96. package/dist/board-game/d1-board-game/d1-board-table.d.ts +0 -18
  97. package/dist/board-game/d1-board-game/d1-board-table.d.ts.map +1 -1
  98. package/dist/board-game/d1-board-game/d1-board-table.js +56 -39
  99. package/dist/board-game/d1-board-game/d1-board-table.js.map +1 -1
  100. package/dist/board-game/d2-board-game/d2-board-cell.d.ts +0 -11
  101. package/dist/board-game/d2-board-game/d2-board-cell.d.ts.map +1 -1
  102. package/dist/board-game/d2-board-game/d2-board-cell.js +30 -24
  103. package/dist/board-game/d2-board-game/d2-board-cell.js.map +1 -1
  104. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.d.ts +0 -28
  105. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.d.ts.map +1 -1
  106. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.js +79 -49
  107. package/dist/board-game/d2-board-game/d2-board-pattern-move-figure.js.map +1 -1
  108. package/dist/board-game/d2-board-game/d2-board-table.d.ts +0 -48
  109. package/dist/board-game/d2-board-game/d2-board-table.d.ts.map +1 -1
  110. package/dist/board-game/d2-board-game/d2-board-table.js +262 -182
  111. package/dist/board-game/d2-board-game/d2-board-table.js.map +1 -1
  112. package/dist/board-game/d2-board-game/types.d.ts +0 -4
  113. package/dist/board-game/d2-board-game/types.d.ts.map +1 -1
  114. package/dist/board-game/d2-board-game/types.js +4 -1
  115. package/dist/board-game/d2-board-game/types.js.map +1 -1
  116. package/dist/board-game/dice.js +2 -2
  117. package/dist/board-game/dice.js.map +1 -1
  118. package/dist/board-game/index.d.ts +0 -12
  119. package/dist/board-game/index.d.ts.map +1 -1
  120. package/dist/board-game/index.js +28 -24
  121. package/dist/board-game/index.js.map +1 -1
  122. package/dist/cards-game/cards-game-master.d.ts +7 -8
  123. package/dist/cards-game/cards-game-master.d.ts.map +1 -1
  124. package/dist/cards-game/cards-game-master.js +13 -10
  125. package/dist/cards-game/cards-game-master.js.map +1 -1
  126. package/dist/cards-game/cards-player.d.ts.map +1 -1
  127. package/dist/cards-game/cards-player.js +1 -1
  128. package/dist/cards-game/cards-player.js.map +1 -1
  129. package/dist/cards-game/index.d.ts +1 -2
  130. package/dist/cards-game/index.d.ts.map +1 -1
  131. package/dist/cards-game/index.js +1 -3
  132. package/dist/cards-game/index.js.map +1 -1
  133. package/dist/index.d.ts +0 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +1 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/tests/just-black-jack/domain/black-jack-dealer.d.ts +6 -0
  138. package/dist/tests/just-black-jack/domain/black-jack-dealer.d.ts.map +1 -0
  139. package/dist/tests/just-black-jack/domain/black-jack-dealer.js +14 -0
  140. package/dist/tests/just-black-jack/domain/black-jack-dealer.js.map +1 -0
  141. package/dist/tests/just-black-jack/domain/black-jack-game-master.d.ts +28 -0
  142. package/dist/tests/just-black-jack/domain/black-jack-game-master.d.ts.map +1 -0
  143. package/dist/tests/just-black-jack/domain/black-jack-game-master.js +90 -0
  144. package/dist/tests/just-black-jack/domain/black-jack-game-master.js.map +1 -0
  145. package/dist/tests/just-black-jack/domain/black-jack-player.d.ts +9 -0
  146. package/dist/tests/just-black-jack/domain/black-jack-player.d.ts.map +1 -0
  147. package/dist/tests/just-black-jack/domain/black-jack-player.js +21 -0
  148. package/dist/tests/just-black-jack/domain/black-jack-player.js.map +1 -0
  149. package/dist/tests/just-black-jack/helpers/calculate-result.d.ts +3 -0
  150. package/dist/tests/just-black-jack/helpers/calculate-result.d.ts.map +1 -0
  151. package/dist/tests/just-black-jack/helpers/calculate-result.js +30 -0
  152. package/dist/tests/just-black-jack/helpers/calculate-result.js.map +1 -0
  153. package/dist/tests/just-black-jack/helpers/calculate-result.test.d.ts +2 -0
  154. package/dist/tests/just-black-jack/helpers/calculate-result.test.d.ts.map +1 -0
  155. package/dist/tests/just-black-jack/helpers/calculate-result.test.js +34 -0
  156. package/dist/tests/just-black-jack/helpers/calculate-result.test.js.map +1 -0
  157. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.d.ts +6 -0
  158. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.d.ts.map +1 -0
  159. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.js +13 -0
  160. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.js.map +1 -0
  161. package/dist/tests/just-black-jack/tests/black-jack-simple-room.test.d.ts +2 -0
  162. package/dist/tests/just-black-jack/tests/black-jack-simple-room.test.d.ts.map +1 -0
  163. package/dist/tests/just-black-jack/tests/black-jack-simple-room.test.js +58 -0
  164. package/dist/tests/just-black-jack/tests/black-jack-simple-room.test.js.map +1 -0
  165. package/dist/tests/just-black-jack/tests/common.d.ts +11 -0
  166. package/dist/tests/just-black-jack/tests/common.d.ts.map +1 -0
  167. package/dist/tests/just-black-jack/tests/common.js +51 -0
  168. package/dist/tests/just-black-jack/tests/common.js.map +1 -0
  169. package/package.json +3 -2
  170. package/src/base/game-control-player-turn.ts +5 -5
  171. package/src/base/game-master.ts +25 -19
  172. package/src/base/game-player-connections-helper.ts +40 -0
  173. package/src/base/game-player.ts +5 -2
  174. package/src/base/game-room.ts +26 -30
  175. package/src/base/game-round.ts +10 -16
  176. package/src/base/game-state-machine.ts +7 -7
  177. package/src/base/game-summary-result.ts +3 -0
  178. package/src/base/game-table-seat.ts +3 -3
  179. package/src/base/game-table-seats.ts +13 -13
  180. package/src/base/game-table.ts +28 -79
  181. package/src/base/index.ts +2 -0
  182. package/src/base/standard-game-state.ts +2 -2
  183. package/src/base-rooms/fast-tournament-room.ts +59 -59
  184. package/src/base-rooms/index.ts +9 -8
  185. package/src/base-rooms/scheduled-tournament-room.ts +181 -181
  186. package/src/base-rooms/simple-room.ts +15 -4
  187. package/src/base-rooms/tournament-room.ts +169 -169
  188. package/src/base-rooms/tournament-state.ts +2 -2
  189. package/src/board-game/base/board-cell.ts +50 -50
  190. package/src/board-game/base/board-figure.ts +49 -49
  191. package/src/board-game/base/board-game-master.ts +56 -56
  192. package/src/board-game/base/board-player-move.ts +29 -29
  193. package/src/board-game/base/board-player.ts +43 -43
  194. package/src/board-game/base/board-table.ts +52 -52
  195. package/src/board-game/d1-board-game/d1-board-table.ts +56 -56
  196. package/src/board-game/d2-board-game/d2-board-cell.ts +30 -30
  197. package/src/board-game/d2-board-game/d2-board-pattern-move-figure.ts +79 -79
  198. package/src/board-game/d2-board-game/d2-board-table.ts +262 -262
  199. package/src/board-game/d2-board-game/types.ts +4 -4
  200. package/src/board-game/dice.ts +1 -1
  201. package/src/board-game/index.ts +28 -28
  202. package/src/cards-game/cards-game-master.ts +19 -16
  203. package/src/cards-game/cards-player.ts +2 -1
  204. package/src/cards-game/index.ts +0 -2
  205. package/src/index.ts +1 -1
  206. package/src/tests/just-black-jack/domain/black-jack-dealer.ts +15 -0
  207. package/src/tests/just-black-jack/domain/black-jack-game-master.ts +103 -0
  208. package/src/tests/just-black-jack/domain/black-jack-player.ts +27 -0
  209. package/src/tests/just-black-jack/helpers/calculate-result.test.ts +49 -0
  210. package/src/tests/just-black-jack/helpers/calculate-result.ts +34 -0
  211. package/src/tests/just-black-jack/rooms/black-jack-simple-room.ts +10 -0
  212. package/src/tests/just-black-jack/tests/black-jack-simple-room.test.ts +75 -0
  213. package/src/tests/just-black-jack/tests/common.ts +63 -0
  214. package/dist/cards-game/cards-table.d.ts +0 -11
  215. package/dist/cards-game/cards-table.d.ts.map +0 -1
  216. package/dist/cards-game/cards-table.js +0 -20
  217. package/dist/cards-game/cards-table.js.map +0 -1
  218. package/src/cards-game/cards-table.ts +0 -28
@@ -1,6 +1,7 @@
1
- import { GameMaster } from '../base';
2
- import { IGameTable } from '../base/game-table';
3
- import { IGameRound } from '../base/game-round';
1
+ import { cloneDeep } from 'lodash';
2
+
3
+ import { GameMaster, GameRoom } from '../base';
4
+ import { superShuffle } from '../utils';
4
5
 
5
6
  import { CardsPlayer } from './cards-player';
6
7
  import { Card } from './cards/card';
@@ -9,22 +10,24 @@ const ONE_CARD = 1;
9
10
  const TWO_CARDS = 2;
10
11
  const SIX_CARDS = 6;
11
12
 
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>;
13
+ export abstract class CardsGameMaster extends GameMaster {
14
+ private sourceDeck: Array<Card>;
15
+ private gameDeck: Array<Card>;
14
16
  private readonly gameCards: Array<Card>;
15
17
 
16
- protected constructor (table: GT) {
17
- super(table);
18
- this.deck = [];
18
+ constructor (room: GameRoom, sourceDeck: Array<Card>) {
19
+ super(room);
20
+ this.sourceDeck = cloneDeep(sourceDeck);
21
+ this.gameDeck = [];
19
22
  this.gameCards = [];
20
23
  }
21
24
 
22
- getDeck () {
23
- return this.deck;
25
+ shuffleDeck () {
26
+ this.sourceDeck = superShuffle(this.sourceDeck);
24
27
  }
25
28
 
26
- takeNewDeck (deck: Array<Card>) {
27
- this.deck = deck;
29
+ takeNewDeck () {
30
+ this.gameDeck = cloneDeep(this.sourceDeck);
28
31
  }
29
32
 
30
33
  getGameCards () {
@@ -32,7 +35,7 @@ export abstract class CardsGameMaster<GT extends IGameTable<GP>, GR extends IGam
32
35
  }
33
36
 
34
37
  putCardsOnTheTableFromDeck () {
35
- const popCard = this.deck.pop();
38
+ const popCard = this.gameDeck.pop();
36
39
  if (popCard) {
37
40
  this.gameCards.push(popCard);
38
41
  }
@@ -43,11 +46,11 @@ export abstract class CardsGameMaster<GT extends IGameTable<GP>, GR extends IGam
43
46
  }
44
47
 
45
48
  popCardFromDeck () {
46
- return this.deck.pop();
49
+ return this.gameDeck.pop();
47
50
  }
48
51
 
49
52
  pushCardToDeck (card: Card, position: number) {
50
- this.deck.splice(position, 0, card);
53
+ this.gameDeck.splice(position, 0, card);
51
54
  }
52
55
 
53
56
  pushCardToBeggingOfTheDeck (card: Card) {
@@ -64,7 +67,7 @@ export abstract class CardsGameMaster<GT extends IGameTable<GP>, GR extends IGam
64
67
 
65
68
  giveCardsToAllPlayers (count: number) {
66
69
  this.table.getPlayers().forEach((player) => {
67
- this.giveCardsToPlayer(player, count);
70
+ this.giveCardsToPlayer(player as CardsPlayer, count);
68
71
  });
69
72
  }
70
73
 
@@ -1,7 +1,8 @@
1
+ import { first, remove } from 'lodash';
2
+
1
3
  import { GamePlayer } from '../base';
2
4
 
3
5
  import { Card } from './cards/card';
4
- import { first, remove } from 'lodash';
5
6
 
6
7
  export abstract class CardsPlayer extends GamePlayer {
7
8
  private cards: Array<Card>;
@@ -6,7 +6,6 @@ import { Ranks } from './cards/ranks';
6
6
  import { Suits } from './cards/suits';
7
7
  import { CardsGameMaster } from './cards-game-master';
8
8
  import { CardsPlayer } from './cards-player';
9
- import { CardsTable } from './cards-table';
10
9
 
11
10
  export {
12
11
  cards,
@@ -17,5 +16,4 @@ export {
17
16
  Suits,
18
17
  CardsGameMaster,
19
18
  CardsPlayer,
20
- CardsTable,
21
19
  }
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from './base';
2
2
  export * from './base-rooms';
3
- export * from './board-game';
3
+ // export * from './board-game';
4
4
  export * from './cards-game';
5
5
  export * from './utils';
@@ -0,0 +1,15 @@
1
+ import { BlackJackPlayer } from './black-jack-player';
2
+
3
+ export class BlackJackDealer extends BlackJackPlayer {
4
+ constructor (tableId: string) {
5
+ super(`${tableId}_dealer`,
6
+ 'Dealer John',
7
+ '',
8
+ 1000000
9
+ );
10
+ }
11
+
12
+ override isDealer (): boolean {
13
+ return true;
14
+ }
15
+ }
@@ -0,0 +1,103 @@
1
+ import { GameRound, StandardGameState } from '../../../base';
2
+ import { CardsGameMaster } from '../../../cards-game';
3
+
4
+ import { BlackJackPlayer } from './black-jack-player';
5
+ import { BlackJackDealer } from './black-jack-dealer';
6
+
7
+ export enum BlackJackMoveActionType {
8
+ GET_CARD = 'GET_CARD',
9
+ FINISH_MOVE = 'FINISH_MOVE',
10
+ }
11
+
12
+ export enum BlackJackSeatRole {
13
+ DEALER = 'DEALER',
14
+ }
15
+
16
+ export class BlackJackGameMaster extends CardsGameMaster {
17
+ getGameRoundState (): StandardGameState {
18
+ return (this.gameRound?.getState() as StandardGameState);
19
+ }
20
+
21
+ getPlayers (): Array<BlackJackPlayer> {
22
+ return (this.table.getPlayers() as Array<BlackJackPlayer>);
23
+ }
24
+
25
+ startNewRound () {
26
+ this.getTable().getSeats()[0].setRole(BlackJackSeatRole.DEALER);
27
+ this.getTable().addPlayerToSeat(new BlackJackDealer(this.getId()));
28
+
29
+ this.shuffleDeck();
30
+ this.takeNewDeck();
31
+
32
+ this.setGameRound(new GameRound(new StandardGameState()));
33
+ this.give2CardsToAllPlayers();
34
+ this.getGameRoundState().toStart();
35
+
36
+ const firstPlayer = this.table.seats.getNextPlayer(this.getDealerSeat()?.getNumber() ?? 0);
37
+ if (firstPlayer) {
38
+ this.gameRound?.setActivePlayer(firstPlayer);
39
+ }
40
+ }
41
+
42
+ changePlayer () {
43
+ this.changePlayerClockwise();
44
+ }
45
+
46
+ finishRound () {
47
+ this.getGameRoundState().toFinish();
48
+ }
49
+
50
+ getResults (): {} | null {
51
+ return null;
52
+ }
53
+
54
+ kickPlayer (player: BlackJackPlayer) {
55
+ }
56
+
57
+ onHandleMove (player: BlackJackPlayer) {
58
+ const move = player.getMove();
59
+
60
+ switch (move?.getAction()) {
61
+ case BlackJackMoveActionType.GET_CARD: {
62
+ this.getCard(player);
63
+ break;
64
+ }
65
+ case BlackJackMoveActionType.FINISH_MOVE: {
66
+ this.finishMove(player);
67
+ break;
68
+ }
69
+ }
70
+ }
71
+
72
+ onHandleRestartTimeout () {
73
+ }
74
+
75
+ onHandleTurnTimeout (player: BlackJackPlayer) {
76
+ }
77
+
78
+ getCard (player: BlackJackPlayer) {
79
+ this.give1CardsToPlayer(player);
80
+ }
81
+
82
+ finishMove (player: BlackJackPlayer) {
83
+ player.finishMove();
84
+
85
+ if (this.isFinish()) {
86
+ this.finishRound();
87
+ } else {
88
+ this.changePlayer();
89
+ }
90
+ }
91
+
92
+ isFinish () {
93
+ return this.getPlayers().filter((item) => item.isFinishedMove()).length === this.table.getPlayers().length;
94
+ }
95
+
96
+ getDealerSeat () {
97
+ return this.getTable().seats.getSeats().find((seat) => seat.getRole() === BlackJackSeatRole.DEALER);
98
+ }
99
+
100
+ getDealer (): BlackJackPlayer | undefined {
101
+ return this.getDealerSeat()?.getPlayer() as BlackJackPlayer | undefined;
102
+ }
103
+ }
@@ -0,0 +1,27 @@
1
+ import { CardsPlayer } from '../../../cards-game';
2
+
3
+ export class BlackJackPlayer extends CardsPlayer {
4
+ private isFinishMove: boolean;
5
+
6
+ constructor (
7
+ id: string,
8
+ fullName: string,
9
+ avatarUrl: string,
10
+ balance: number,
11
+ ) {
12
+ super(id, fullName, avatarUrl, balance);
13
+ this.isFinishMove = false;
14
+ }
15
+
16
+ isDealer (): boolean {
17
+ return false;
18
+ }
19
+
20
+ finishMove () {
21
+ this.isFinishMove = true;
22
+ }
23
+
24
+ isFinishedMove () {
25
+ return this.isFinishMove;
26
+ }
27
+ }
@@ -0,0 +1,49 @@
1
+ import {
2
+ heart_2,
3
+ heart_3,
4
+ heart_jack,
5
+ heart_queen,
6
+ heart_king,
7
+ heart_ace,
8
+ club_ace,
9
+ } from '../../../cards-game/cards/cards';
10
+
11
+ import { calculateResult } from './calculate-result';
12
+
13
+ describe('calculate result', () => {
14
+ it('calc digit', () => {
15
+ expect(calculateResult([heart_2, heart_3])).toBe(5);
16
+ });
17
+
18
+ it('calc with jack', () => {
19
+ expect(calculateResult([heart_2, heart_jack])).toBe(12);
20
+ });
21
+
22
+ it('calc with queen', () => {
23
+ expect(calculateResult([heart_2, heart_queen])).toBe(12);
24
+ });
25
+
26
+ it('calc with king', () => {
27
+ expect(calculateResult([heart_2, heart_king])).toBe(12);
28
+ });
29
+
30
+ it('calc with ace, less 21', () => {
31
+ expect(calculateResult([heart_2, heart_ace])).toBe(13);
32
+ });
33
+
34
+ it('calc with ace, more 21', () => {
35
+ expect(calculateResult([heart_2, heart_king, heart_ace])).toBe(13);
36
+ });
37
+
38
+ it('calc with two aces, more 21', () => {
39
+ expect(calculateResult([heart_2, heart_king, heart_ace, club_ace])).toBe(14);
40
+ });
41
+
42
+ it('calc with ace, more 21, overlimit', () => {
43
+ expect(calculateResult([heart_2, heart_king, heart_queen, heart_ace])).toBe(23);
44
+ });
45
+
46
+ it('calc 21', () => {
47
+ expect(calculateResult([heart_king, heart_ace])).toBe(21);
48
+ });
49
+ });
@@ -0,0 +1,34 @@
1
+ import { sumBy } from 'lodash';
2
+
3
+ import { Card, Ranks } from '../../../cards-game';
4
+
5
+
6
+ const PICTURE_RANK = 10;
7
+ const ACE_RANK_11 = 11;
8
+ const AIM = 21;
9
+ const ACE_DIFF = 10;
10
+
11
+ export function calculateResult (cards: Array<Card>): number {
12
+ const result = sumBy(cards, (card) => {
13
+ switch (card.getRank()) {
14
+ case Ranks.JACK:
15
+ case Ranks.QUEEN:
16
+ case Ranks.KING: {
17
+ return PICTURE_RANK;
18
+ }
19
+ case Ranks.ACE: {
20
+ return ACE_RANK_11;
21
+ }
22
+ }
23
+
24
+ return card.getRank();
25
+ });
26
+
27
+ const aces = cards.filter((item) => item.getRank() === Ranks.ACE);
28
+
29
+ if (result > AIM && aces.length > 0) {
30
+ return result - (ACE_DIFF * aces.length);
31
+ }
32
+
33
+ return result;
34
+ }
@@ -0,0 +1,10 @@
1
+ import { SimpleRoom } from '../../../base-rooms';
2
+ import { GameMaster } from '../../../base';
3
+ import { BlackJackGameMaster } from '../domain/black-jack-game-master';
4
+ import { deck52 } from '../../../cards-game';
5
+
6
+ export class BlackJackSimpleRoom extends SimpleRoom {
7
+ createMaster (): GameMaster {
8
+ return new BlackJackGameMaster(this, deck52);
9
+ }
10
+ }
@@ -0,0 +1,75 @@
1
+ import { cloneDeep } from 'lodash';
2
+
3
+ import { BlackJackPlayer } from '../domain/black-jack-player';
4
+ import { BlackJackSimpleRoom } from '../rooms/black-jack-simple-room';
5
+
6
+ import { mockDeck, player1, player2 } from './common';
7
+ import { calculateResult } from '../helpers/calculate-result';
8
+ import { GameRoomConfig } from '../../../base';
9
+ import { BlackJackGameMaster } from '../domain/black-jack-game-master';
10
+
11
+ describe('black jack simple room', () => {
12
+ let newPlayer1: BlackJackPlayer;
13
+ let newPlayer2: BlackJackPlayer;
14
+
15
+ let cashRoomConfig: GameRoomConfig = {
16
+ id: '1',
17
+ gameType: 'JUST_BLACK_JACK',
18
+ roomType: 'simple',
19
+ rulesType: 'STANDARD',
20
+ maxPlayers: 6,
21
+ bet: 10,
22
+ turnTimeout: 0,
23
+ restartTimeout: 0,
24
+ };
25
+
26
+ beforeAll(() => {
27
+ mockDeck();
28
+ });
29
+
30
+ beforeEach(() => {
31
+ newPlayer1 = cloneDeep(player1);
32
+ newPlayer2 = cloneDeep(player2);
33
+ });
34
+
35
+ it('black jack simple room', () => {
36
+ const room = new BlackJackSimpleRoom(cashRoomConfig);
37
+ room.addMaster();
38
+
39
+ const master = room.getMasters()[0] as BlackJackGameMaster | undefined;
40
+ const table1 = master.getTable();
41
+ const dealer = master.getDealer();
42
+
43
+ if (table1 && dealer) {
44
+ table1.addPlayerToSeat(newPlayer1);
45
+ newPlayer1.setStack(100);
46
+
47
+ table1.addPlayerToSeat(newPlayer2);
48
+ newPlayer2.setStack(100);
49
+
50
+ expect(master.getGameRound()?.getState()).toBeUndefined();
51
+
52
+ master.startNewRound();
53
+ expect(master.getGameRoundState().isInProgress()).toBeTruthy();
54
+ expect(table1.getPlayers().length).toBe(3);
55
+
56
+ expect(master.getGameRound()?.getActivePlayer()).toBe(newPlayer1);
57
+ expect(calculateResult(newPlayer1.getCards())).toBe(20);
58
+
59
+ master.finishMove(newPlayer1);
60
+
61
+ expect(master.getGameRound()?.getActivePlayer()).toBe(newPlayer2);
62
+ expect(calculateResult(newPlayer2.getCards())).toBe(19);
63
+
64
+ master.getCard(newPlayer2);
65
+ expect(calculateResult(newPlayer2.getCards())).toBe(27);
66
+ master.finishMove(newPlayer2);
67
+
68
+ expect(master.getGameRound()?.getActivePlayer()).toBe(dealer);
69
+ expect(calculateResult(master.getDealer()?.getCards() ?? [])).toBe(21);
70
+ master.finishMove(dealer);
71
+
72
+ expect(master.getGameRoundState().isFinish()).toBeTruthy();
73
+ }
74
+ });
75
+ });
@@ -0,0 +1,63 @@
1
+ import { BlackJackPlayer } from '../domain/black-jack-player';
2
+ import * as shuffle from '../../../utils/shuffle';
3
+
4
+ export const player1 = new BlackJackPlayer(
5
+ '5ef77417f471c39c885d18f5',
6
+ 'dima',
7
+ '',
8
+ 1000,
9
+ );
10
+
11
+ export const player2 = new BlackJackPlayer(
12
+ '5ef774a71486d104736561a4',
13
+ 'vova',
14
+ '',
15
+ 500,
16
+ );
17
+
18
+ export const player3 = new BlackJackPlayer(
19
+ '5ef774a71486d104736561a5',
20
+ 'pasha',
21
+ '',
22
+ 500,
23
+ );
24
+
25
+ export const player4 = new BlackJackPlayer(
26
+ '5ef774a71486d104736561a7',
27
+ 'petya',
28
+ '',
29
+ 500,
30
+ );
31
+
32
+ export const player5 = new BlackJackPlayer(
33
+ '5ef774a71486d104736561a8',
34
+ 'dima 2',
35
+ '',
36
+ 500,
37
+ );
38
+
39
+ export const player6 = new BlackJackPlayer(
40
+ '5ef774a71486d104736561a9',
41
+ 'vova 2',
42
+ '',
43
+ 500,
44
+ );
45
+
46
+ export const player7 = new BlackJackPlayer(
47
+ '5ef774a71486d104736561a10',
48
+ 'pasha 2',
49
+ '',
50
+ 500,
51
+ );
52
+
53
+ export const player8 = new BlackJackPlayer(
54
+ '5ef774a71486d104736561a11',
55
+ 'petya 2',
56
+ '',
57
+ 500,
58
+ );
59
+
60
+
61
+ export function mockDeck () {
62
+ jest.spyOn(shuffle, 'superShuffle').mockImplementation((collection: any[]) => collection);
63
+ }
@@ -1,11 +0,0 @@
1
- import { GameTable } from '../base';
2
- import { GamePlayer } from '../base';
3
- import { GameTableConfig } from '../base/game-table';
4
- import { Card } from './cards/card';
5
- export declare abstract class CardsTable<GP extends GamePlayer, GM, GSR> extends GameTable<GP, GM, GSR> {
6
- private deck;
7
- protected constructor(config: GameTableConfig<GP>, deck: Array<Card>);
8
- shuffleDeck(): void;
9
- getDeck(): Card[];
10
- }
11
- //# sourceMappingURL=cards-table.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cards-table.d.ts","sourceRoot":"","sources":["../../src/cards-game/cards-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,8BAAsB,UAAU,CAAC,EAAE,SAAS,UAAU,EAAE,EAAE,EAAE,GAAG,CAAE,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAC3F,OAAO,CAAC,IAAI,CAAc;IAE1B,SAAS,aACL,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,EAC3B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAMrB,WAAW;IAIX,OAAO;CAGV"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CardsTable = void 0;
4
- const lodash_1 = require("lodash");
5
- const base_1 = require("../base");
6
- const utils_1 = require("../utils");
7
- class CardsTable extends base_1.GameTable {
8
- constructor(config, deck) {
9
- super(config);
10
- this.deck = deck;
11
- }
12
- shuffleDeck() {
13
- this.deck = (0, utils_1.superShuffle)(this.deck);
14
- }
15
- getDeck() {
16
- return (0, lodash_1.cloneDeep)(this.deck);
17
- }
18
- }
19
- exports.CardsTable = CardsTable;
20
- //# sourceMappingURL=cards-table.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cards-table.js","sourceRoot":"","sources":["../../src/cards-game/cards-table.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAEnC,kCAAoC;AAEpC,oCAAwC;AAKxC,MAAsB,UAA2C,SAAQ,gBAAsB;IAG3F,YACI,MAA2B,EAC3B,IAAiB;QAEjB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,WAAW;QACP,IAAI,CAAC,IAAI,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACH,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACJ;AAlBD,gCAkBC"}
@@ -1,28 +0,0 @@
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
- }