From caa210a80ecc269582eac764737789edf980225d Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Thu, 27 Mar 2025 12:08:57 +0100 Subject: [PATCH 1/2] refactor: add blackjack state enum --- .../java/de/szut/casino/blackjack/BlackJackGameEntity.java | 3 ++- .../java/de/szut/casino/blackjack/BlackJackService.java | 6 +++++- .../main/java/de/szut/casino/blackjack/BlackJackState.java | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/java/de/szut/casino/blackjack/BlackJackState.java 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 112e9f0..0193991 100644 --- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackGameEntity.java +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackGameEntity.java @@ -33,7 +33,8 @@ public class BlackJackGameEntity { return user != null ? user.getId() : null; } - private String state; + @Enumerated(EnumType.STRING) + private BlackJackState state; private BigDecimal bet; @OneToMany(mappedBy = "game", cascade = CascadeType.ALL, orphanRemoval = true) 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 44e5858..f28bc5e 100644 --- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java @@ -23,7 +23,7 @@ public class BlackJackService { BlackJackGameEntity game = new BlackJackGameEntity(); game.setUser(user); game.setBet(betAmount); - game.setState("IN_PROGRESS"); + game.setState(getState(game)); initializeDeck(game); for (int i = 0; i < 2; i++) { @@ -63,4 +63,8 @@ public class BlackJackService { return game.getDeck().removeFirst(); } + + private BlackJackState getState(BlackJackGameEntity game) { + return BlackJackState.IN_PROGRESS; + } } diff --git a/backend/src/main/java/de/szut/casino/blackjack/BlackJackState.java b/backend/src/main/java/de/szut/casino/blackjack/BlackJackState.java new file mode 100644 index 0000000..3c8efa0 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackState.java @@ -0,0 +1,6 @@ +package de.szut.casino.blackjack; + +public enum BlackJackState { + PLAYER_WON, + IN_PROGRESS +} -- 2.47.2 From 90abd13a2c245569fdfbc118552e84c4272302fe Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Thu, 27 Mar 2025 12:45:52 +0100 Subject: [PATCH 2/2] feat: handle player drawing blackjack at the start of the game --- .../casino/blackjack/BlackJackService.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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 f28bc5e..86a159c 100644 --- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java @@ -5,6 +5,7 @@ import de.szut.casino.user.UserRepository; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.List; import java.util.Random; @Service @@ -23,7 +24,6 @@ public class BlackJackService { BlackJackGameEntity game = new BlackJackGameEntity(); game.setUser(user); game.setBet(betAmount); - game.setState(getState(game)); initializeDeck(game); for (int i = 0; i < 2; i++) { @@ -34,6 +34,7 @@ public class BlackJackService { CardEntity dealerCard = drawCardFromDeck(game); game.getDealerCards().add(dealerCard); + game.setState(getState(game)); user.setBalance(user.getBalance().subtract(betAmount)); userRepository.save(user); @@ -65,6 +66,30 @@ public class BlackJackService { } private BlackJackState getState(BlackJackGameEntity game) { + int playerHandValue = calculateHandValue(game.getPlayerCards()); + + if (playerHandValue == 21) { + return BlackJackState.PLAYER_WON; + } + return BlackJackState.IN_PROGRESS; } + + public int calculateHandValue(List hand) { + int sum = 0; + int aceCount = 0; + for (CardEntity card : hand) { + sum += card.getRank().getValue(); + if (card.getRank() == Rank.ACE) { + aceCount++; + } + } + + while (sum > 21 && aceCount > 0) { + sum -= 10; + aceCount--; + } + + return sum; + } } -- 2.47.2