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..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("IN_PROGRESS"); 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); @@ -63,4 +64,32 @@ public class BlackJackService { return game.getDeck().removeFirst(); } + + 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; + } } 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 +}