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