From 59407833e93cc2e0a87b1f229a512c48fc5150d3 Mon Sep 17 00:00:00 2001 From: iliya <iliya.saroukha@hes-so.ch> Date: Fri, 8 Dec 2023 16:08:59 +0100 Subject: [PATCH] feat: computing results in case of splitted hands --- src/main/java/hepia/GameManager.java | 56 +++++++++++++++++++--------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/src/main/java/hepia/GameManager.java b/src/main/java/hepia/GameManager.java index c82586f..bbb0f52 100644 --- a/src/main/java/hepia/GameManager.java +++ b/src/main/java/hepia/GameManager.java @@ -18,6 +18,8 @@ public class GameManager { private List<IPlayer> bustedPlayers; private List<IPlayer> blackJackHands; + private List<Hand> bustedHands; + private Deck currentGame; private Game game; @@ -56,7 +58,7 @@ public class GameManager { int playerBet = 0; do { - System.out.print("Please enter your bet: "); + System.out.print("Player " + (i + 1) + ", please enter your bet: "); playerBet = scanner.nextInt(); } while (!ensureValidBetValue(playerBet)); @@ -264,6 +266,8 @@ public class GameManager { this.bustedPlayers = new ArrayList<>(); this.blackJackHands = new ArrayList<>(); + this.bustedHands = new ArrayList<>(); + if (this.game == Game.BLACKJACK) { this.decks = Deck.createDecks(nbDecks, Game.BLACKJACK_CARD_COUNT); for (Deck deck : this.decks) { @@ -334,7 +338,8 @@ public class GameManager { if (player.getHand().computeHandValue() >= 21) { if (player.getHand().computeHandValue() > 21) { - this.bustedPlayers.add(player); + // this.bustedPlayers.add(player); + this.bustedHands.add(player.getHand()); } break; } @@ -351,6 +356,7 @@ public class GameManager { if (player.getHand().computeHandValue() >= 21) { if (player.getHand().computeHandValue() > 21) { this.bustedPlayers.add(player); + // this.bustedHands.add(player.getHand()); } break; } @@ -395,6 +401,24 @@ public class GameManager { displayPlayerHand(this.croupier); } + private void compareHandsAssignGainsLosses(IPlayer player) { + int compare = player.getHand().compareTo(this.croupier.getHand()); + + switch (compare) { + case -1: + this.croupier.addToBalance(player.getBet()); + break; + case 0: + player.addToBalance(player.getBet()); + break; + case 1: + player.addToBalance(2 * player.getBet()); + break; + default: + break; + } + } + private void computeGainsLosses() { // Compute gains/losses per player List<IPlayer> playersToPayout = new ArrayList<>(this.players); @@ -434,23 +458,19 @@ public class GameManager { for (IPlayer player : playersToPayout) { if (!player.equals(this.croupier)) { - - int compare = player.getHand().compareTo(this.croupier.getHand()); - - switch (compare) { - case -1: - this.croupier.addToBalance(player.getBet()); - break; - case 0: - player.addToBalance(player.getBet()); - break; - case 1: - player.addToBalance(2 * player.getBet()); - break; - default: - break; + if (player.hasSplitHand()) { + for (Hand hand : player.getSplittedHand()) { + if (!this.bustedHands.contains(hand)) { + player.setHand(hand); + compareHandsAssignGainsLosses(player); + } else { + player.addToBalance((-1) * player.getBet()); + this.croupier.addToBalance(player.getBet()); + } + } + } else { + compareHandsAssignGainsLosses(player); } - } } -- GitLab