From 71cda97dab1143f30f5e23b8bdc20ee9cb996933 Mon Sep 17 00:00:00 2001 From: Jan K9f Date: Thu, 27 Mar 2025 10:47:46 +0100 Subject: [PATCH 1/2] docs: add optional watchexec command to README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f2b3a4..70134ff 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,11 @@ cd backend ./gradlew bootRun ``` +You may optionally install [watchexec](https://github.com/watchexec/watchexec?tab=readme-ov-file) and use this command to autorecompile the backend on file changes: +```bash +watchexec -r -e java ./gradlew :bootRun +``` + The backend will be available at: - API endpoint: http://localhost:8080 - Swagger documentation: http://localhost:8080/swagger @@ -164,4 +169,4 @@ References: ## License -This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. \ No newline at end of file +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. From 55daca72c054a6069c30d099910110f5b7307747 Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Thu, 27 Mar 2025 11:40:50 +0100 Subject: [PATCH 2/2] feat: add deck to blackjack game instead of random cards --- .../casino/blackjack/BlackJackGameEntity.java | 4 +++ .../casino/blackjack/BlackJackService.java | 31 ++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/blackjack/BlackJackGameEntity.java b/backend/src/main/java/de/szut/casino/blackjack/BlackJackGameEntity.java index e3380a7..112e9f0 100644 --- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackGameEntity.java +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackGameEntity.java @@ -36,6 +36,10 @@ public class BlackJackGameEntity { private String state; private BigDecimal bet; + @OneToMany(mappedBy = "game", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnore + private List deck = new ArrayList<>(); + @OneToMany(mappedBy = "game", cascade = CascadeType.ALL, orphanRemoval = true) @JsonManagedReference private List playerCards = new ArrayList<>(); diff --git a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java index cca78e4..44e5858 100644 --- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java @@ -24,13 +24,14 @@ public class BlackJackService { game.setUser(user); game.setBet(betAmount); game.setState("IN_PROGRESS"); + initializeDeck(game); for (int i = 0; i < 2; i++) { - CardEntity playerCard = createRandomCard(game); + CardEntity playerCard = drawCardFromDeck(game); game.getPlayerCards().add(playerCard); } - CardEntity dealerCard = createRandomCard(game); + CardEntity dealerCard = drawCardFromDeck(game); game.getDealerCards().add(dealerCard); user.setBalance(user.getBalance().subtract(betAmount)); @@ -41,11 +42,25 @@ public class BlackJackService { return game; } - private CardEntity createRandomCard(BlackJackGameEntity game) { - CardEntity card = new CardEntity(); - card.setGame(game); - card.setSuit(Suit.values()[random.nextInt(Suit.values().length)]); - card.setRank(Rank.values()[random.nextInt(Rank.values().length)]); - return card; + private void initializeDeck(BlackJackGameEntity game) { + for (Suit suit : Suit.values()) { + for (Rank rank : Rank.values()) { + CardEntity card = new CardEntity(); + card.setGame(game); + card.setSuit(suit); + card.setRank(rank); + game.getDeck().add(card); + } + } + + java.util.Collections.shuffle(game.getDeck(), random); + } + + private CardEntity drawCardFromDeck(BlackJackGameEntity game) { + if (game.getDeck().isEmpty()) { + throw new IllegalStateException("Deck is empty"); + } + + return game.getDeck().removeFirst(); } }