From 90abd13a2c245569fdfbc118552e84c4272302fe Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Thu, 27 Mar 2025 12:45:52 +0100 Subject: [PATCH] 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; + } }