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