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;
+ }
}