From e851c001c6973d7bdd41e1ef4140df0a5a60f7b8 Mon Sep 17 00:00:00 2001
From: "michael.divia" <michael.divia@etu.hesge.ch>
Date: Wed, 6 Dec 2023 23:04:53 +0100
Subject: [PATCH] Part 2 95%

---
 Partie_2/.vscode/c_cpp_properties.json        |  18 ++
 Partie_2/.vscode/launch.json                  |  24 ++
 Partie_2/.vscode/settings.json                |  59 ++++
 Partie_2/src/main/java/ch/hepia/App.java      |  24 ++
 .../src/main/java/ch/hepia/GameManager.java   | 303 ++++++++++++++----
 Partie_2/src/main/java/ch/hepia/Hand.java     |   3 +-
 Partie_2/src/main/java/ch/hepia/Joueur.java   |  85 +++--
 Partie_2/target/classes/ch/hepia/App.class    | Bin 2431 -> 2431 bytes
 .../target/classes/ch/hepia/GameManager.class | Bin 5489 -> 7769 bytes
 Partie_2/target/classes/ch/hepia/Hand$1.class | Bin 1128 -> 1128 bytes
 Partie_2/target/classes/ch/hepia/Hand.class   | Bin 4895 -> 4902 bytes
 Partie_2/target/classes/ch/hepia/Joueur.class | Bin 635 -> 654 bytes
 .../classes/ch/hepia/JoueurCroupier.class     | Bin 3101 -> 3208 bytes
 .../classes/ch/hepia/JoueurHumain.class       | Bin 4504 -> 4909 bytes
 .../classes/ch/hepia/JoueurOrdinateur.class   | Bin 4468 -> 4745 bytes
 15 files changed, 421 insertions(+), 95 deletions(-)
 create mode 100644 Partie_2/.vscode/c_cpp_properties.json
 create mode 100644 Partie_2/.vscode/launch.json
 create mode 100644 Partie_2/.vscode/settings.json

diff --git a/Partie_2/.vscode/c_cpp_properties.json b/Partie_2/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..c2098a2
--- /dev/null
+++ b/Partie_2/.vscode/c_cpp_properties.json
@@ -0,0 +1,18 @@
+{
+  "configurations": [
+    {
+      "name": "linux-gcc-x64",
+      "includePath": [
+        "${workspaceFolder}/**"
+      ],
+      "compilerPath": "/usr/bin/gcc",
+      "cStandard": "${default}",
+      "cppStandard": "${default}",
+      "intelliSenseMode": "linux-gcc-x64",
+      "compilerArgs": [
+        ""
+      ]
+    }
+  ],
+  "version": 4
+}
\ No newline at end of file
diff --git a/Partie_2/.vscode/launch.json b/Partie_2/.vscode/launch.json
new file mode 100644
index 0000000..7f873a9
--- /dev/null
+++ b/Partie_2/.vscode/launch.json
@@ -0,0 +1,24 @@
+{
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "name": "C/C++ Runner: Debug Session",
+      "type": "cppdbg",
+      "request": "launch",
+      "args": [],
+      "stopAtEntry": false,
+      "externalConsole": false,
+      "cwd": "/home/padi/Téléchargements",
+      "program": "/home/padi/Téléchargements/build/Debug/outDebug",
+      "MIMode": "gdb",
+      "miDebuggerPath": "gdb",
+      "setupCommands": [
+        {
+          "description": "Enable pretty-printing for gdb",
+          "text": "-enable-pretty-printing",
+          "ignoreFailures": true
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/Partie_2/.vscode/settings.json b/Partie_2/.vscode/settings.json
new file mode 100644
index 0000000..3e5eb95
--- /dev/null
+++ b/Partie_2/.vscode/settings.json
@@ -0,0 +1,59 @@
+{
+  "C_Cpp_Runner.cCompilerPath": "gcc",
+  "C_Cpp_Runner.cppCompilerPath": "g++",
+  "C_Cpp_Runner.debuggerPath": "gdb",
+  "C_Cpp_Runner.cStandard": "",
+  "C_Cpp_Runner.cppStandard": "",
+  "C_Cpp_Runner.msvcBatchPath": "",
+  "C_Cpp_Runner.useMsvc": false,
+  "C_Cpp_Runner.warnings": [
+    "-Wall",
+    "-Wextra",
+    "-Wpedantic",
+    "-Wshadow",
+    "-Wformat=2",
+    "-Wcast-align",
+    "-Wconversion",
+    "-Wsign-conversion",
+    "-Wnull-dereference"
+  ],
+  "C_Cpp_Runner.msvcWarnings": [
+    "/W4",
+    "/permissive-",
+    "/w14242",
+    "/w14287",
+    "/w14296",
+    "/w14311",
+    "/w14826",
+    "/w44062",
+    "/w44242",
+    "/w14905",
+    "/w14906",
+    "/w14263",
+    "/w44265",
+    "/w14928"
+  ],
+  "C_Cpp_Runner.enableWarnings": true,
+  "C_Cpp_Runner.warningsAsError": false,
+  "C_Cpp_Runner.compilerArgs": [],
+  "C_Cpp_Runner.linkerArgs": [],
+  "C_Cpp_Runner.includePaths": [],
+  "C_Cpp_Runner.includeSearch": [
+    "*",
+    "**/*"
+  ],
+  "C_Cpp_Runner.excludeSearch": [
+    "**/build",
+    "**/build/**",
+    "**/.*",
+    "**/.*/**",
+    "**/.vscode",
+    "**/.vscode/**"
+  ],
+  "C_Cpp_Runner.useAddressSanitizer": false,
+  "C_Cpp_Runner.useUndefinedSanitizer": false,
+  "C_Cpp_Runner.useLeakSanitizer": false,
+  "C_Cpp_Runner.showCompilationTime": false,
+  "C_Cpp_Runner.useLinkTimeOptimization": false,
+  "C_Cpp_Runner.msvcSecureNoWarnings": false
+}
\ No newline at end of file
diff --git a/Partie_2/src/main/java/ch/hepia/App.java b/Partie_2/src/main/java/ch/hepia/App.java
index f3de79a..000bcec 100644
--- a/Partie_2/src/main/java/ch/hepia/App.java
+++ b/Partie_2/src/main/java/ch/hepia/App.java
@@ -4,7 +4,10 @@ import java.util.Scanner;
 
 public class App {
 
+    // Scanner will be used all along to take user inputs in the terminal
     public static final Scanner in = new Scanner(System.in);
+
+    // All Color choices to be used in terminal prints
     public static final String ANSI_RESET = "\u001B[0m";
     public static final String ANSI_BLACK = "\u001B[30m";
     public static final String ANSI_RED = "\u001B[31m";
@@ -25,9 +28,12 @@ public class App {
         int numPlayers;
         int startMoney;
 
+        // Ask the number of players until a valide answer is given
         while (true) {
+
             System.out.print("How many players ? ");
 
+            // Check that the input is an valid int
             while (!App.in.hasNextInt()) {
                 System.out.println(
                         App.ANSI_YELLOW + "Please enter a valid number for the number of players." + App.ANSI_RESET);
@@ -37,6 +43,7 @@ public class App {
 
             numPlayers = App.in.nextInt();
 
+            // Player count must be between 1 and 7
             if (numPlayers >= 1 && numPlayers <= 7) {
                 System.out.print("");
                 break;
@@ -46,9 +53,12 @@ public class App {
             }
         }
 
+        // Ask the start money count for each players until a valide answer is given
         while (true) {
+
             System.out.print("How much money do you start with ? ");
 
+            // Check that the input is an valid int
             while (!App.in.hasNextInt()) {
                 System.out.println(App.ANSI_YELLOW + "Please enter a valid number for your Money." + App.ANSI_RESET);
                 System.out.print("How much money do you start with ? ");
@@ -57,6 +67,7 @@ public class App {
 
             startMoney = App.in.nextInt();
 
+            // Starting money must be more or equal to minimum bid amount
             if (startMoney >= 10) {
                 System.out.print("");
                 break;
@@ -65,16 +76,28 @@ public class App {
             }
         }
 
+        // Create a new game
         GameManager BlackJack = new GameManager(numPlayers, startMoney);
 
         boolean GameOver = false;
 
+        // Game run's in 3 Phases :
+        // Phase 1 (StartTurn):
+        // Ask the player how much he wan't to bid
+        // Phase 2 (PlayTurn):
+        // Ask the player for all his interactions with this cards
+        // Phase 3 (ResolveTurn):
+        // Make the Dealer pick cards
+        // Do all the math for the player gains and losses
+        // Check if the player can continue et prepare for the next round
         while (!GameOver) {
             BlackJack.StartTurn();
             BlackJack.PlayTurn();
             GameOver = BlackJack.ResolveTurn();
         }
 
+        // The player has less than the minimum bid amount allowed = Game Over
+
         System.out.print("\033[H\033[2J");
         System.out.flush();
 
@@ -87,6 +110,7 @@ public class App {
 
     public static void main(String[] args) {
 
+        // Play 1 BlackJack Game
         BlackJack();
 
     }
diff --git a/Partie_2/src/main/java/ch/hepia/GameManager.java b/Partie_2/src/main/java/ch/hepia/GameManager.java
index 4bbb816..36cbf8e 100644
--- a/Partie_2/src/main/java/ch/hepia/GameManager.java
+++ b/Partie_2/src/main/java/ch/hepia/GameManager.java
@@ -12,12 +12,15 @@ public class GameManager {
 
     public GameManager(int nbPlayer, int startMoney) {
 
+        // Create a new BlackJack Deck of card (6 x 52 cards game)
         this.Deck = new JeudeCarte(new Paquet(6, 52));
 
         this.Players = new ArrayList<>();
 
+        // First Player is always the humain
         this.Players.add(new JoueurHumain(Deck, startMoney));
 
+        // All other are controlled by the computer
         if (nbPlayer > 1) {
             for (int x = 1; x < nbPlayer; x++) {
                 this.Players.add(new JoueurOrdinateur(Deck, startMoney));
@@ -27,69 +30,122 @@ public class GameManager {
         this.Dealer = new JoueurCroupier(Deck);
     }
 
-    public boolean ResolveTurn() {
+    // Phase 1 (StartTurn):
+    // Ask the player how much he wan't to bid
+    public void StartTurn() {
 
-        this.Dealer.DrawCard(0, this.Deck);
+        this.Step = 0;
 
-        // If the player has less than the minimum bid amount allowed
-        if (this.Players.get(0).GetMoney() <= 10) {
-            return true;
-        }
+        System.out.print("\033[H\033[2J");
+        System.out.flush();
 
-        this.Dealer.Reset(this.Deck);
-        for (Joueur Player : this.Players) {
-            Player.Reset(this.Deck);
-        }
+        System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
 
-        return false;
-    }
+        double bet;
 
-    public void PlayTurn() {
+        System.out.println("Money : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
 
-        boolean EndTurn = false;
+        // Ask the bid amount until a valide answer is given
+        while (true) {
 
-        while (!EndTurn) {
+            System.out.print("How much do you want to bet (Min. 10) ? ");
 
-            boolean CanSplit = false, CanInsure = false, CanDouble = false, CanDraw = false;
+            // Check that the input is an valid double
+            while (!App.in.hasNextDouble()) {
+                System.out.println(App.ANSI_YELLOW + "Please enter a valid number to bet." + App.ANSI_RESET);
+                System.out.print("How much do you want to bet (Min. 10) ?");
+                App.in.next();
+            }
 
-            System.out.print("\033[H\033[2J");
-            System.out.flush();
+            bet = App.in.nextDouble();
 
-            System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
+            // Check if the player has enough money to place the bid
+            if (bet <= this.Players.get(0).GetMoney()) {
 
-            System.out.println("Cards in Deck : " + App.ANSI_GREEN + this.Deck.GetNbCards() + App.ANSI_RESET + "\n");
+                // Check if the minimum bid amount it cleared
+                if (bet < 10) {
+                    System.out.println(App.ANSI_YELLOW + "Minimum bid amount is 10." + App.ANSI_RESET);
+                } else {
+                    break;
+                }
 
-            System.out.print("Dealer Score : " + App.ANSI_PURPLE);
-            if (this.Dealer.GetForce(0) == 99) {
-                System.out.println("BlackJack" + App.ANSI_RESET);
             } else {
-                System.out.println(this.Dealer.GetForce(0) + App.ANSI_RESET);
+                System.out.println(App.ANSI_YELLOW + "You don't have enough money." + App.ANSI_RESET);
             }
-            this.Dealer.ShowHands();
+        }
 
-            System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+        // Set the player bid for this turn
+        Players.get(0).SetBet(bet, 0);
+    }
 
-            if (this.Players.get(0).HasInsured()) {
-                System.out.println("Insured : " + App.ANSI_BLUE + this.Players.get(0).GetInsured() + App.ANSI_RESET);
-            }
+    // Phase 2 (PlayTurn):
+    // Ask the player for all his interactions with this cards
+    public void PlayTurn() {
+
+        boolean EndTurn = false, CanSplit = false, CanInsure = false, CanDouble = false, CanDraw = false;
+
+        // Continue interacting with the player until all actions have been taken on all
+        // his hands
+        while (!EndTurn) {
 
             char choice = 'x';
 
+            // Go thew all hands of the player
             for (int HandNb = 0; HandNb < this.Players.get(0).NbHands(); HandNb++) {
 
+                CanSplit = false;
+                CanInsure = false;
+                CanDouble = false;
+                CanDraw = false;
+                choice = 'x';
+
+                System.out.print("\033[H\033[2J");
+                System.out.flush();
+
+                System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
+
+                // Show the remaining amount of cards in the deck
+                System.out.println(
+                        "Cards in Deck : " + App.ANSI_GREEN + this.Deck.GetNbCards() + App.ANSI_RESET + "\n");
+
+                // Dealer has only 1 card in his hand at this point in time
+                System.out.print("Dealer Strength : " + App.ANSI_PURPLE + this.Dealer.GetForce(0) + App.ANSI_RESET);
+
+                // Show the dealer hand
+                this.Dealer.ShowHands();
+
+                // Show the current player balance
+                System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+
+                // Check if the player has put down an insurance
+                if (this.Players.get(0).HasInsured()) {
+                    System.out.println(
+                            "Insured : " + App.ANSI_BLUE + this.Players.get(0).GetInsured() + App.ANSI_RESET);
+                }
+
+                // Show the hand number of the player
                 System.out
                         .println("Bet on Hand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " : " + App.ANSI_BLUE
                                 + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
 
+                // Show the hand strength of the player
+                // 99 = BlackJack
+                // >21 = Busted
+                // <=21 = show the strength
                 System.out
-                        .print("Score of Hand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " : "
+                        .print("Strength of Hand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " : "
                                 + App.ANSI_PURPLE);
                 if (this.Players.get(0).GetForce(HandNb) == 99) {
                     System.out.println("BlackJack" + App.ANSI_RESET);
+                } else if (this.Players.get(0).GetForce(HandNb) > 21) {
+                    System.out.println(
+                            this.Players.get(0).GetForce(HandNb) + App.ANSI_RED + " [BUSTED]" + App.ANSI_RESET);
                 } else {
                     System.out.println(this.Players.get(0).GetForce(HandNb) + App.ANSI_RESET);
                 }
-                this.Players.get(0).ShowHands();
+
+                // Show the player hand
+                this.Players.get(0).ShowHand(HandNb);
 
                 // Choices for player
                 System.out.println("\n--- " + App.ANSI_GREEN + "Choices" + App.ANSI_RESET + " ---\n");
@@ -109,8 +165,11 @@ public class GameManager {
                 // the 2 cards have the same strength)
                 // AND
                 // if we have less that 3 hands already (Max 2 splits)
+                // AND
+                // if the player has enough money
                 if (this.Players.get(0).CanSplit(HandNb)
-                        && this.Players.get(0).NbHands() < 3) {
+                        && this.Players.get(0).NbHands() < 3
+                        && this.Players.get(0).GetBet(HandNb) <= this.Players.get(0).GetMoney()) {
                     CanSplit = true;
                     System.out.println(App.ANSI_BLUE + "[s]" + App.ANSI_RESET + " Split your Hand");
                 }
@@ -121,9 +180,12 @@ public class GameManager {
                 // if the hand has only 2 cards
                 // AND
                 // if the hand is not a BlackJack
+                // AND
+                // if the player has enough money
                 if (!this.Players.get(0).HasDoubled(HandNb)
                         && this.Players.get(0).NbCards(HandNb) == 2
-                        && this.Players.get(0).GetForce(HandNb) != 99) {
+                        && this.Players.get(0).GetForce(HandNb) != 99
+                        && this.Players.get(0).GetBet(HandNb) <= this.Players.get(0).GetMoney()) {
                     CanDouble = true;
                     System.out.println(App.ANSI_BLUE + "[d]" + App.ANSI_RESET + " Double your Hand");
                 }
@@ -134,89 +196,188 @@ public class GameManager {
                 // if the hand has been splitted with a pair of Asses
                 // AND
                 // if the player has a BlackJack
+                // AND
+                // if the strength of the hand is more than 21
                 if (!(this.Players.get(0).HasDoubled(HandNb) && this.Players.get(0).NbCards(HandNb) == 3)
-                        && !(this.Players.get(0).CanSplit(HandNb) && this.Players.get(0).GetCardForce(HandNb, 0) == 1)
-                        && this.Players.get(0).GetForce(HandNb) != 99) {
+                        && !(this.Players.get(0).HasSplit(HandNb) && this.Players.get(0).GetCardForce(HandNb, 0) == 1)
+                        && this.Players.get(0).GetForce(HandNb) < 21) {
                     CanDraw = true;
                     System.out.println(App.ANSI_BLUE + "[h]" + App.ANSI_RESET + " Hit");
                 }
 
-                // Stand
-                System.out.println(App.ANSI_BLUE + "[s]" + App.ANSI_RESET + " Stand");
+                // Keep (Stand)
+                System.out.println(App.ANSI_BLUE + "[k]" + App.ANSI_RESET + " Keep current Hand");
 
-                if (CanInsure || CanSplit || CanDouble || CanDraw || this.Players.get(0).GetForce(HandNb) == 99) {
+                // Ask for the player choice until a valide one is given
+                while (true) {
+                    System.out.print("> ");
 
-                    while (true) {
-                        System.out.print("> ");
+                    choice = App.in.next().charAt(0);
 
-                        choice = App.in.next().charAt(0);
-
-                        if ((choice == 'i' && CanInsure) || (choice == 's' && CanSplit) || (choice == 'd' && CanDouble)
-                                || (choice == 'h' && CanDraw)
-                                || choice == 's') {
-                            break;
-                        } else {
-                            System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
-                        }
+                    // Choices are checked with available one for confirmation
+                    if ((choice == 'i' && CanInsure) || (choice == 's' && CanSplit) || (choice == 'd' && CanDouble)
+                            || (choice == 'h' && CanDraw)
+                            || choice == 'k') {
+                        break;
+                    } else {
+                        System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
                     }
                 }
 
+                // Hit
                 if (choice == 'h') {
                     this.Players.get(0).DrawCard(HandNb, this.Deck);
+                    // Go back 1 hand to stay on the same hand in the for loop
+                    HandNb--;
+                }
+                // Split
+                else if (choice == 's') {
+                    this.Players.get(0).Split(HandNb, this.Deck);
+                    // Go back 1 hand to stay on the same hand in the for loop
+                    HandNb--;
+                }
+                // Double
+                else if (choice == 'd') {
+                    this.Players.get(0).Double(HandNb, this.Deck);
+                    // Go back 1 hand to stay on the same hand in the for loop
+                    HandNb--;
                 }
 
                 Step++;
             }
 
+            // Insure
             if (choice == 'i') {
                 this.Players.get(0).Insure();
                 EndTurn = false;
-            } else if (choice == 'h') {
-                EndTurn = false;
-            } else {
+            }
+            // If this point is reached (and not because of the insurance), all hands have
+            // been played
+            else {
                 EndTurn = true;
             }
         }
+
     }
 
-    public void StartTurn() {
+    // Phase 3 (ResolveTurn):
+    // Make the Dealer pick cards
+    // Do all the math for the player gains and losses
+    // Check if the player can continue et prepare for the next round
+    public boolean ResolveTurn() {
 
-        this.Step = 0;
+        // Dealer draws card until he hits 17 or more
+        while (this.Dealer.GetForce(0) <= 17) {
+            this.Dealer.DrawCard(0, this.Deck);
+        }
 
         System.out.print("\033[H\033[2J");
         System.out.flush();
 
         System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
 
-        double bet;
+        // Show the remaining amount of cards in the deck
+        System.out.println(
+                "Cards in Deck : " + App.ANSI_GREEN + this.Deck.GetNbCards() + App.ANSI_RESET + "\n");
+
+        // Show the hand strength of the dealer
+        // 99 = BlackJack
+        // >21 = Busted
+        // <=21 = show the strength
+        System.out.print("Dealer Score : " + App.ANSI_PURPLE);
+        if (this.Dealer.GetForce(0) == 99) {
+            System.out.println("BlackJack" + App.ANSI_RESET);
+        } else if (this.Dealer.GetForce(0) > 21) {
+            System.out.println(this.Dealer.GetForce(0) + App.ANSI_RED + " [BUSTED]" + App.ANSI_RESET);
+        } else {
+            System.out.println(this.Dealer.GetForce(0) + App.ANSI_RESET);
+        }
 
-        System.out.println("Money : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+        // Show the dealers hand
+        this.Dealer.ShowHands();
 
-        while (true) {
+        // Check if the player has put down an insurance
+        if (this.Players.get(0).HasInsured()) {
+            System.out.println(
+                    "Insured : " + App.ANSI_BLUE + this.Players.get(0).GetInsured() + App.ANSI_RESET);
+        }
 
-            System.out.print("How much do you want to bet (Min. 10) ? ");
+        // Go thew all hands of the player
+        for (int HandNb = 0; HandNb < this.Players.get(0).NbHands(); HandNb++) {
 
-            while (!App.in.hasNextDouble()) {
-                System.out.println(App.ANSI_YELLOW + "Please enter a valid number to bet." + App.ANSI_RESET);
-                System.out.print("How much do you want to bet ?");
-                App.in.next();
+            System.out.println("\nHand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " :");
+
+            System.out.println("\tBet : " + App.ANSI_BLUE + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+
+            System.out.print("\tStrength : " + App.ANSI_PURPLE);
+            if (this.Players.get(0).GetForce(HandNb) == 99) {
+                System.out.println("BlackJack" + App.ANSI_RESET);
+            } else if (this.Players.get(0).GetForce(HandNb) > 21) {
+                System.out.println(
+                        this.Players.get(0).GetForce(HandNb) + App.ANSI_RED + " [BUSTED]" + App.ANSI_RESET);
+            } else {
+                System.out.println(this.Players.get(0).GetForce(HandNb) + App.ANSI_RESET);
             }
 
-            bet = App.in.nextDouble();
+            System.out.print("\tResult : ");
+            if (this.Players.get(0).GetForce(HandNb) > 21 && this.Players.get(0).GetForce(HandNb) != 99) {
+                System.out.println(App.ANSI_RED + "-" + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+            } else if (this.Dealer.GetForce(0) == this.Players.get(0).GetForce(HandNb)) {
+                System.out.println(App.ANSI_BLUE + "±0" + App.ANSI_RESET);
+                this.Players.get(0).AddMoney(this.Players.get(0).GetBet(HandNb));
+            } else if (this.Players.get(0).GetForce(HandNb) == 99) {
+                System.out.println(App.ANSI_GREEN + "+" + (this.Players.get(0).GetBet(HandNb) * 1.5) + App.ANSI_RESET);
+                this.Players.get(0).AddMoney(this.Players.get(0).GetBet(HandNb) * 2.5);
+            } else if (this.Dealer.GetForce(0) > 21 && this.Dealer.GetForce(0) != 99) {
+                System.out.println(App.ANSI_GREEN + "+" + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+                this.Players.get(0).AddMoney(this.Players.get(0).GetBet(HandNb) * 2);
+            } else if (this.Players.get(0).GetForce(HandNb) < this.Dealer.GetForce(0)) {
+                System.out.println(App.ANSI_RED + "-" + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+            } else if (this.Players.get(0).GetForce(HandNb) > this.Dealer.GetForce(0)) {
+                System.out.println(App.ANSI_GREEN + "+" + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+                this.Players.get(0).AddMoney(this.Players.get(0).GetBet(HandNb) * 2);
+            }
 
-            if (bet <= this.Players.get(0).GetMoney()) {
-                if (bet < 10) {
-                    System.out.println(App.ANSI_YELLOW + "Minimum bid amount is 10." + App.ANSI_RESET);
-                } else {
-                    break;
-                }
+        }
+
+        if (this.Players.get(0).HasInsured()) {
 
+            System.out.print("Insurance : ");
+
+            if (this.Dealer.GetForce(0) == 99) {
+                System.out.println(App.ANSI_GREEN + "+" + (this.Players.get(0).GetInsured() * 3) + App.ANSI_RESET);
+                this.Players.get(0).AddMoney(this.Players.get(0).GetInsured() * 3);
             } else {
-                System.out.println(App.ANSI_YELLOW + "You don't have enough money." + App.ANSI_RESET);
+                System.out.println(App.ANSI_RED + "-" + (this.Players.get(0).GetInsured()) + App.ANSI_RESET);
             }
         }
 
-        Players.get(0).SetBet(bet, 0);
+        System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+
+        System.out.print("> ");
+
+        try {
+            System.in.read();
+        } catch (Exception e) {
+        }
+
+        // If the player has less than the minimum bid amount allowed
+        if (this.Players.get(0).GetMoney() <= 10) {
+            return true;
+        }
+
+        // If more thn 75% of the Deck has been used, reshuffle all cards. In our case:
+        // simply recreate a new deck
+        if (this.Deck.GetNbCards() < 78) {
+            this.Deck = new JeudeCarte(new Paquet(6, 52));
+        }
+
+        this.Dealer.Reset(this.Deck);
+        for (Joueur Player : this.Players) {
+            Player.Reset(this.Deck);
+        }
+
+        return false;
     }
 
 }
diff --git a/Partie_2/src/main/java/ch/hepia/Hand.java b/Partie_2/src/main/java/ch/hepia/Hand.java
index 449df4b..0006e50 100644
--- a/Partie_2/src/main/java/ch/hepia/Hand.java
+++ b/Partie_2/src/main/java/ch/hepia/Hand.java
@@ -41,6 +41,7 @@ public class Hand implements Comparable<Hand> {
 
     public void Double() {
         this.Doubled = true;
+        this.Bet *= 2;
     }
 
     public boolean HasSplit() {
@@ -182,7 +183,7 @@ public class Hand implements Comparable<Hand> {
 
     public void ShowHand() {
 
-        this.SortHand();
+        // this.SortHand();
 
         for (Carte carte : Hand) {
 
diff --git a/Partie_2/src/main/java/ch/hepia/Joueur.java b/Partie_2/src/main/java/ch/hepia/Joueur.java
index d801449..fc142cd 100644
--- a/Partie_2/src/main/java/ch/hepia/Joueur.java
+++ b/Partie_2/src/main/java/ch/hepia/Joueur.java
@@ -22,12 +22,14 @@ interface Joueur {
 
     public void ShowHands();
 
-    public void Split(int handNb);
+    public void Split(int handNb, JeudeCarte Jeu);
 
     public int GetForce(int handNb);
 
     public boolean CanSplit(int handNb);
 
+    public boolean HasSplit(int handNb);
+
     public void Reset(JeudeCarte Jeu);
 
     public boolean HasInsured();
@@ -38,7 +40,7 @@ interface Joueur {
 
     public boolean HasDoubled(int handNb);
 
-    public void Double(int handNb);
+    public void Double(int handNb, JeudeCarte Jeu);
 
     public int NbHands();
 
@@ -81,19 +83,26 @@ class JoueurHumain implements Joueur {
         return this.Hands.get(handNb).HasDoubled();
     }
 
-    public void Double(int handNb) {
+    public void Double(int handNb, JeudeCarte Jeu) {
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
         this.Hands.get(handNb).Double();
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
     }
 
     public boolean CanSplit(int handNb) {
-        if (!this.Hands.get(handNb).HasSplit()
-                && this.Hands.get(handNb).GetCarte(0).getForce() == this.Hands.get(handNb).GetCarte(1).getForce()) {
+        if (!(this.Hands.get(handNb).HasSplit() && this.Hands.get(handNb).GetCarte(0).getForce() == 1)
+                && this.Hands.get(handNb).GetCarte(0).getForce() == this.Hands.get(handNb).GetCarte(1).getForce()
+                && this.Hands.get(handNb).NbCard() == 2) {
             return true;
         }
 
         return false;
     }
 
+    public boolean HasSplit(int handNb) {
+        return this.Hands.get(handNb).HasSplit();
+    }
+
     public boolean HasInsured() {
         return this.Insured;
     }
@@ -101,6 +110,7 @@ class JoueurHumain implements Joueur {
     public void Insure() {
         this.Insured = true;
         this.Insurance = this.Hands.get(0).GetBet() / 2;
+        this.RemoveMoney(this.Insurance);
     }
 
     public double GetInsured() {
@@ -137,7 +147,14 @@ class JoueurHumain implements Joueur {
     }
 
     public int GetForce(int handNb) {
-        return this.Hands.get(handNb).GetForce();
+        if ((this.Hands.get(handNb).GetForce() == 99 && this.Hands.get(handNb).HasSplit())
+                || (this.Hands.get(handNb).GetForce() == 99 && handNb != 0)
+                || (this.Hands.get(handNb).GetForce() == 99 && this.Hands.get(handNb).NbCard() != 2)) {
+            return 21;
+        } else {
+            return this.Hands.get(handNb).GetForce();
+        }
+
     }
 
     public void SetBet(double amount, int handNb) {
@@ -188,21 +205,26 @@ class JoueurHumain implements Joueur {
         this.Hands.get(handNb).ShowHand();
     }
 
-    public void Split(int handNb) {
+    public void Split(int handNb, JeudeCarte Jeu) {
 
         if (this.Hands.size() == 3) {
             throw new RuntimeException("Max number of slipts.");
-        } else if (this.Hands.get(handNb).HasSplit()) {
-            throw new RuntimeException("Can't split Hand twice.");
         }
 
-        Carte card = this.Hands.get(handNb).GetCarte(handNb);
+        Carte card = this.Hands.get(handNb).GetCarte(1);
+
+        this.Hands.add(new Hand(card));
 
         this.Hands.get(handNb).RemoveCardFromHand(card);
 
         this.Hands.get(handNb).Splitted();
+        this.Hands.get(this.Hands.size() - 1).Splitted();
 
-        this.Hands.add(new Hand(card));
+        this.Hands.get(this.Hands.size() - 1).SetBet(this.Hands.get(handNb).GetBet());
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
+
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+        this.Hands.get(this.Hands.size() - 1).DrawCardFromGame(Jeu);
     }
 
     public int NbHands() {
@@ -246,20 +268,27 @@ class JoueurOrdinateur implements Joueur {
         return this.Hands.get(handNb).HasDoubled();
     }
 
-    public void Double(int handNb) {
+    public void Double(int handNb, JeudeCarte Jeu) {
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
         this.Hands.get(handNb).Double();
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
     }
 
     public boolean CanSplit(int handNb) {
 
-        if (this.Hands.get(handNb).HasSplit()
-                || this.Hands.get(handNb).GetCarte(0).getForce() != this.Hands.get(handNb).GetCarte(1).getForce()) {
-            return false;
+        if (!(this.Hands.get(handNb).HasSplit() && this.Hands.get(handNb).GetCarte(0).getForce() == 1)
+                && this.Hands.get(handNb).GetCarte(0).getForce() == this.Hands.get(handNb).GetCarte(1).getForce()
+                && this.Hands.get(handNb).NbCard() == 2) {
+            return true;
         }
 
         return true;
     }
 
+    public boolean HasSplit(int handNb) {
+        return this.Hands.get(handNb).HasSplit();
+    }
+
     public boolean HasInsured() {
         return this.Insured;
     }
@@ -271,6 +300,7 @@ class JoueurOrdinateur implements Joueur {
     public void Insure() {
         this.Insured = true;
         this.Insurance = this.Hands.get(0).GetBet() / 2;
+        this.RemoveMoney(this.Insurance);
     }
 
     public void Reset(JeudeCarte Jeu) {
@@ -360,21 +390,26 @@ class JoueurOrdinateur implements Joueur {
         this.Hands.get(handNb).ShowHand();
     }
 
-    public void Split(int handNb) {
+    public void Split(int handNb, JeudeCarte Jeu) {
 
-        if (Hands.size() == 3) {
+        if (this.Hands.size() == 3) {
             throw new RuntimeException("Max number of slipts.");
-        } else if (this.Hands.get(handNb).HasSplit()) {
-            throw new RuntimeException("Can't split Hand twice.");
         }
 
-        Carte card = this.Hands.get(handNb).GetCarte(handNb);
+        Carte card = this.Hands.get(handNb).GetCarte(1);
+
+        this.Hands.add(new Hand(card));
 
         this.Hands.get(handNb).RemoveCardFromHand(card);
 
         this.Hands.get(handNb).Splitted();
+        this.Hands.get(this.Hands.size() - 1).Splitted();
 
-        this.Hands.add(new Hand(card));
+        this.Hands.get(this.Hands.size() - 1).SetBet(this.Hands.get(handNb).GetBet());
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
+
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+        this.Hands.get(this.Hands.size() - 1).DrawCardFromGame(Jeu);
     }
 
     public int NbHands() {
@@ -422,13 +457,17 @@ class JoueurCroupier implements Joueur {
         throw new RuntimeException("Bank cant Double.");
     }
 
-    public void Double(int handNb) {
+    public void Double(int handNb, JeudeCarte Jeu) {
         // La Banque ne peut pas doubler
         throw new RuntimeException("Bank cant Double.");
     }
 
     public boolean CanSplit(int handNb) {
+        // La Banque ne peut pas split
+        throw new RuntimeException("Bank cant Split.");
+    }
 
+    public boolean HasSplit(int handNb) {
         // La Banque ne peut pas split
         throw new RuntimeException("Bank cant Split.");
     }
@@ -504,7 +543,7 @@ class JoueurCroupier implements Joueur {
         return this.Hand.GetForce();
     }
 
-    public void Split(int handNb) {
+    public void Split(int handNb, JeudeCarte Jeu) {
         // La Banque ne peut pas slip
         throw new RuntimeException("Bank can't Split.");
     }
diff --git a/Partie_2/target/classes/ch/hepia/App.class b/Partie_2/target/classes/ch/hepia/App.class
index 1e730631e4c898c9083ecffaf77a899ec69da689..7b2a1df8e106d74a6b78784c9f545cf4350d308a 100644
GIT binary patch
delta 231
zcmew_^j~PhE;d#U23`i?&HLHX80*CuI2a@t_!y)Z#2Azq<QP;L6dBYQR2bA5)ELwl
zG#NA)3>h>TEErT792s;NJQ(yDf*A}Lq8SVs;uwq>5*bVwk{OH{(ijvNG8wEH3K{Ge
zN*L@JY8V_CS{NJ|x*6;krZBiL%w}+BSjgbPu#&-(VGV;f!xjchhV2Xi3<vcXf*1}n
z#4;RXh+{a#5YKRqA%WpCLoCB}hE#_83~3Bc88R5&GGsA)WyoRp&5%3!5=W0>5d$+r
h34<vE0|O5OBLf2i3qw0Y2Ll5GBSR+x0|OI77XZ3SEK2|Y

delta 231
zcmew_^j~PhE;d$n23`h%&HLHX80$qCI2c43_!z_)#2925<QU``6d4p4R2UQ))EE>P
zG#Qi_3>lOeEEwb&92wLYJQy?>f*CX!q8YRp;uv%o5*c(Ek{NUu(imhIG8v2*3K>io
zN*GKTY8cEIS{Te3x*1FurZ8AB%x17*Sjb?@u#&-!VGV-=!xjcZhV2Y43<vcX+!zis
zcrYAe@MJi};Kgu`!JFYSg9pQP20w=T4E_vH83GyJG6XYxWe8>X%@8*E5=W0>6azCu
h41*~H0|O5OBLf2i3qw0Y2Ll5GBSR+x0|OI77Xb3wDklH{

diff --git a/Partie_2/target/classes/ch/hepia/GameManager.class b/Partie_2/target/classes/ch/hepia/GameManager.class
index 0c1af52db05f54c74267841b06de56799bd9df50..aa63352e5ebc774b29262cbba7e764d0ba1f1ed2 100644
GIT binary patch
literal 7769
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

delta 3216
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

diff --git a/Partie_2/target/classes/ch/hepia/Hand$1.class b/Partie_2/target/classes/ch/hepia/Hand$1.class
index 7f75d8fe38a1822b70b602d9d7536438562761f5..aa652b46b36c5a4f704da400b85707c9489d2d20 100644
GIT binary patch
delta 31
ncmaFC@q%MR6f<M~<Y?wl-eLwGhEfIrhH?fOhU&?CnO6e<m2(Ke

delta 31
ncmaFC@q%MR6f<Mq<Y?wl-XaDbh7tw=hB5{jhN{VXnO6e<l`sgr

diff --git a/Partie_2/target/classes/ch/hepia/Hand.class b/Partie_2/target/classes/ch/hepia/Hand.class
index 22668a718d2fcdc679e7db293da325b101f7c2b1..8b98417991b333f0983a463db2bea69fec600b4e 100644
GIT binary patch
delta 1681
zcmbQQwoGk929q!+10#ba4+A#?51Ru61We9gl4En=VQ^%yo7}@B$>=(H8IwGt`{ZLx
z>IyClo;(Z!3|@>3q8dI~iDilUIf;4c`oSednR)5fnqia0nQhquc^HBif+t5YD=>ym
zu4Z;-iQ-|1o_vT|gDs9Bft?|K@&{%K=0t|1$=ocu^(j0I;S7RY3~>x;JPhd!f{YBp
zL8-a<WvR}IMJ1_jMfthziMgp<42%q!JPZa5F^mk16^slV!TCic9*KD=><qb#4E)I%
z`WdMOnTh%!Ar(U|h8%``kUI+)8H6-^P-Lw&!?+lV7)sa~iWwP1vm`-&C@sm%(Ra?z
z$w^Hv$;{6y=3yvhD4TqN#fhzwhoOq0da?wonnEo@Jv&1kBZCmw+h8r8C8<S;CHX}>
z3=Is8ljB$wq(c~*c^Fz4>=+q1(o;*^@{5vFxfyC1+ISe+C(mTHnS7tsfiYyV0^3|h
zugUw^#2LLNUt=?3E@!aY%*}q3+0%uAm4T6gfk8-%Wh;ZCR^%223lRpZ?5zwI8yOfF
zm>8597#R2%m>C!tv>8|#bQlB~bQx3_7#MgUx)@X$)EF2T7#VCPb8@RO8cg2EB|6!a
zTch5DftA4&NhKRxr7eRU10#bF0|SE*10&cJ4y`Q=lG_;U*T8LL1B+WA>F0p!cVcjc
z>W^n&0lQ30oo~h*2HxEaE|EfR+ZjCeYpK^mJ-`h1fDi)<0|SE%0~>=ag8+jAgD8U|
z*k~~ZCI$uuF{sfXmN(dA+6)W~%nXbI42%pu48Bm?^ck4Iu42{N!eFr;&8aS6^B{r3
z%Am?H`2ZK2z8`}>RIdXA6WA&qkWZzzF$5f72-$#UgvaCsJmQ>T3?>YW42=xolMnE?
z^7=9eGWat{G59hlGXzau#p}%6$Ph940FM@9<mA^pQoLadf(#K1QVd}X$_&wySMj=g
z#6WF~W?%)|D6hq`mmwsQS$i8pZ16UQWNj2~DtaWxGw?GcGRQF`PqyT<R?BE%W|Wm#
z`2QP78FEmjGq5sbFmN%XGYBzcPoBl6?UTh|!obV`3OIHKraug<jO+}I4A~5#Q0Le&
zuz&+k02Bbb8FC`Ewln1IU?>C`3`t~MVCUvD@G~?{7UUOoEr%r&CJP281`Y-WhU3gO
z%(fu?+ZZaWSe7#=NV4o?s9|I{z!2i6yN#iVWdQ?Q3lpO>h@D^ql5Cxv&2KJVVa2|j
z!A_DLrr3&2l5HD9)8w7}dW@};U+}Bfw=ys>v@x(SbTCLWbTTM2bTOzg^f2f$bTF7R
z^fOp7Okl8On8e_~FonU5VJd?s!!!nOhJJ=nhS?0!409P`8Rju0FwAF2W?0Bj&9InZ
z4#QH0c?`=K7BZ}0Si-Q9VL8KUhE)s;8MZKNU^v9Ek>M!AR&Z(wg7}I-b#k8or*Q{3
z;#n9DGjuYTFfcJlGYBzgGH5X{GsH4vFm!=4VFE)cLpK8-0}DekLlQ&J<WmC5%C!s(
z{~1IXSlJmE85!9bLf9F=B5Y6*26l$p$pV53^<YsQ1`e<~B&95@|3Tpk69%aVnJC4;
z3>E@s?p}C2PGn#PXE`%yJoqkWkkNq!tj{KfKJ9G`Q+6@TU|`tBFh^%6Ln|Z0tp5);
zG4zEAE!@Vi7!=)*bR@>W%D}*|he4EKAA<_R9tK^8Lky-2hrs~@$(Cl&Y$?jX4-N=M
zaOx6dVEWI%4R##JsgrqyoFq>$uri!v;9@w<z|U}oL6G4rgBZg(1__1>lQV?oN#;Q6
V7>2zJ`xy>0NHQE^U;rn^9024-E_wg}

delta 1531
zcmZ3cHeYQ+2GitfCOI}69tK+mtI6}3BpDqi?_`o^be?>ZNnOi<!Ig(WfWeKCK~%#h
zE3qt5KPNFST|c;_C^IkJS~HB3fsw(3hk=`cXR-pbt-3!CLjXe{BLj1KY6(b-rzVmn
z|D>$c<PvLkhTzF9%+4$kJPeVOPcv&M#xTUOGsH472q$OgXQUQnChB{omZqdSCl-~Y
z@-W0RBuo}z(dA3xVF+aq<YI_nNa0~fo$SvdW0KCpV89T?$iP^^$iNYtUsU3en3uxN
zkj==z4>t-Vq+-a$kj0P-@<`s~`7GjW1q?;(426^Tut+f%Gn7oe$>PLT&cjf_P&rwV
zRgJBhp_ZMYX0k7<ICC9C{p5631?eD$MjnPH1}jDej`Y+LxBQ~yRBnc9h87-%*2#-l
zZMe7?7#Vtb7%~||C*NarU<{fp&o-CQZSr0=aYnbvSJ{l1OBt*-bFm*~RyJW^Vqj!o
zU|`c?*~*}}k%57Mi9wlxfq{#GiGhJZn}L-<XL2LAD5J$>32rq;{mC1+L??%EYp@zK
zurio{WV9_AtQZ&>gcukYj2IZfW^rh3VUXO$V7&%z8XH*LeDXnV(Rw=ud#L(&1{MZp
z1_lN(b-o#M7<hLxI7A9LZD(-Vucf|~!5!olX0Tg?7+4q>7_1rC7;G2>80;BD85|f?
zK>EOL6k||jP-6fAF$PZt9tK7RZ3YGgW(Gz921W)i25+ck`cRLGv1)B$a9@w+G-r^<
z^nDn7p{gAin81effV?8Tjlu5#L(m2^J?@j&^N4eXFqkkfGBh%TPCn1$%Im`*$l%8y
z#o)uB%n&$Pk=K<mZ1Q;?EynQ4zj&m0Lm31a!WpC(LK&19q9!ZyI<qo@Qp{vVJ`v-f
zNM`MA4AH^c7!tKv_A(&2$)JFML<%1`xZ)W284?)e7?LJ?@L8*+wJ<Zv$}If<4WtY?
zywVt08PXZJ7}6Mo7_ug><kR-aU@&1|28Rwi1JfS{Rz`LPMo=1o`q_?w1sqKRAV2SB
z$coh3&XBW%As=Kg#C}Mk$YbDVXqc?PFX~zfi+Uyt1||j$1_p-X%r?xnApP4I%B)zH
zGbl*1>}057WH`VO<fprhp@C%q16vCdqcn(}U;~nDo?OLmE?#EEzMR2Mk{zblicOMj
z8$-k76a0FN&6B_LtJk+MFfp_;urRbUNHcUWC^K|2s4;Xi=rXi3m^1V-STXc7*fLCH
zaA26s;Kne8!INPsgEvDTLny;6hG>R446zJz84?)gF(flAV5nwT#4v|p3Bx>wr3?!h
zmNP72Si!KIVHLwFh6M~;7}hf!V%WfNlwk`vi3LG?#h^NQt^g-@8#u067!EVEPu?gX
zEZV^Uijf3{REAClJ_Z(sWQHV$uE{qAl$EO)82&SeGO)5UFfuZ-GX$|SfJNA#A`I*d
z)sy7~73#sFIt(0Obx2BCSpS1U6ebK(4>D1Tff+2sz`(%B(9IwUjk%c&%;1z^rL~Qr
z2O9dm%Nb;JV8Q9LiJ?z>8^e@c3^N!QwlU1n*~!q%$S~`F+`~-_eL@SjF)Ri}G9>j#
zF|aW(FzjStVc5+e$*`9}gJCy=A;UoiONK+>AQ1y+3@d1^lVsp$&}7hp<~l(JrvD85
zU`K+SJXu7@N%A-YE5iu}E{0PK{0yfV1R2gSh%uaHkYG4JIbUcVW7cFoVR6PR0RD3y
As{jB1

diff --git a/Partie_2/target/classes/ch/hepia/Joueur.class b/Partie_2/target/classes/ch/hepia/Joueur.class
index bcf855977f1b52f5f93a278ebe3557311fabd2ba..1af6aa5209a7ccec4a3d33ded164f65f26bfacb6 100644
GIT binary patch
delta 149
zcmey((#Ohm>ff$?3=9ko3|bqx*cmxFJQ9n83vx0`Ci64yWE7ixlF>I;kb!}PkwJ_>
z9860vNP=l8C@sw(1Ln&z$bo5j1~xFQz`zZr6`|^s7$D{-GpK;YRiWmoF{m>zFfcM`
LFfcGMF=zq+Cle3;

delta 131
zcmeBU{msI4>ff$?3=9ko44NCc*cm6wFm7iQoqUDSH&vK{frXJlj6obsOE5@+X(<M2
yFfGF%3#R25*ub<r12>pffT~kufaq6ZPzH;uK+REQP-9?VU}R8dU|?Wk&;S7WXAF)2

diff --git a/Partie_2/target/classes/ch/hepia/JoueurCroupier.class b/Partie_2/target/classes/ch/hepia/JoueurCroupier.class
index e3fabea53944ae65b74e0e594f8ff39da4b162f3..876136367815a06b441cb6c838899103d693ada0 100644
GIT binary patch
delta 860
zcmbO$(ILro>ff$?3=9ko3?&=6CNWLk#Vj>>A(OHsheu*@a6wLH2_plSM`E#OUU6wr
zY6=H~%j8Q;mW-a0d6;z>eJ5Kn`!R-2?qt@Ve1$n$heg9vGmMde!#%acEx#x^m5~7?
z;>pFp&ydE$kj$XV$iNCVlY=31atMnvOFj=n!Q|O2Zj2I>AF-HoZeU<x+{hrvxM{Ky
zYXavs25H9a46=;7CU>*?vF>N!WjrwX9;*}M(aDNzj*KTKuV<6zw_&hlU}WHCU|{fI
zU}j*RJdsUS{Tzch0|SEs12Y2y0~dn?gCqk8a4}dhSTit!#iSUd8JH%YX47Z93^Ik$
zaq@XKZN?iQHnS6h?Bs>)qKwXyCvpf&-UXY*1JwsHi;=;Vfe%T|BdluN7~H{XJiz8W
z$EwDQ!F#ekhbW^DNDbqg$?Ms~x&0XY85kKD83It`KBCA4Ld^#2)BlFm>>!3<q>y0&
z`Fl5maimZP$S&RAU_F>&1hE|yZlKU&W?*CpV+fyokxf)IWIKcTeg*~xCI&GE1_m}z
zh%hmLLo9;9c5*zYDIXIn0}B%y10NG7gBTOn<VBp(a!kAo>`Z)MyC7l60gVqvhD3&>
z$<kaVd`v<NEKI@-d`w~tqD<nGW4Sb#lNnMbcW|jlrLJLMU|<H@#|Mf{CTRv1CK(1k
zCV7yu@O0F;hx;%Ci%V6&Zou>}$d^cIf`O4CYqB-BGNZ=icy3YVY=)G{<=pCwI+N#f
n%QNRN<W4@wEhUr(au#wh7)*Z4t;k=<V9mh9z{pSp4y0lLtQCyr

delta 879
zcmeB>oGZa~>ff$?3=9ko48<F{CNVLyXn0QE!lcT_<&jwInO9s|l$yf9;5_*glO?0a
zWF2N*MxV)1%zlg^lUFk9PoBjjGx-K{v?_;tYKdEZQF1CH1B-^IrY9EzKSL@HLlT27
zBLi!2K~81~2Sdi>cot`tJRXMp$;(*W7{w>QWijXMWnf|KV-RHQpRCK8z&V*gnsEw)
zEaUXa(^&mj=P>Xx&Yk>{)roP@WF0m~#$}TQ*yShpvT;rJW>aEZ4dy*&(_!2=S%6)U
zQFihHc2RAo?F{Do85kIt7{nMD7}yvX85kJ1F^DrTFz|rb3|tHn43Z2C42%pellQTU
z>ta*C8>@O(1~-rmy6#wPIDl1$Cxh4I2^^xL-dJ=Toh-mE&h5+K$H2(I$l#Ah<tY@E
z0T5TzV>9zSR#yZv1Tio&a5FG4crY+CurM$%aP4L=juZ;U;;JiP6BHPjL8_o3#lXPD
z0C6XXWyN64z|6p?#}LX81~t}>fti5`qyeX~H$hRw9L^9i`2eRWALBg+7RLJwe2kA6
z#26n>X6A~PV|>QI&iEW`IV74mpq4W-Br@1euHiD_V|>lP!uW=PkMTW&DC398`?xfi
zlNgdGzvNPpN?F6ez`zWSa6XXJ8NV>FFn(p=WBdV9rkloKi`Av+SOVZL$fb;#lb3NT
zOEMz4hY9YUEQaLCkGRztStoPx$TMd%<V@D#krK)UIRPonF>y|g;8El+V6bLjVqjz_
I1gFR%0IBGZMgRZ+

diff --git a/Partie_2/target/classes/ch/hepia/JoueurHumain.class b/Partie_2/target/classes/ch/hepia/JoueurHumain.class
index 8d288dc186f39d3a4733813bb2aa020e68d3b710..9debc8be63144d904e9f87b6b480b14804ff24fb 100644
GIT binary patch
delta 2787
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
L^}L^)A!q;qFQXWV

delta 2100
zcmZ3hHbZ&COeRYf4NuK5E(U1^XC4Lz22n-^4(G(Y;DVgY5|E%94}&{{9U}vWM`AHt
z(36M3i@|%cDYLS!FM~fjgC8RUUvh?iMruK3qP}xtQAsKfLjXe{BLhczYKdEZQF1CH
z1G9#v=j0j8YLXyR!+03N86p@N*xXY~oKj1`vM!VNF>5l$O@6^F&zLZogGHGmmLZ9U
zL4YB7vN4M)W7_0M77e`&Mg{@j{Jhjkh0wf|)S|SU{Bk`;2DZf9{L;J<Mh5Pn)ZF~C
zRImyThMdU@S#%lmCZA_97A)prC;+*LRl~(oGmL|wY_c$`CS%29TUI@RDjtSvkQ_^K
zW>qQ&L+#{hR^7=nndJ1Fco>=)EEyRDT#6FQofC^v+=}vZ-4k<D85uZ(GxEzl67y1u
zxfsM4+ISe+89FBKVO3M;V(4LK=w@UP%1SIt)GsZ`%+dEONi9k&$uHtz=w;}e%*3W7
zIe~{^A~>jFrf@TKF-+!Rm@?UxO}(BK9MBvLGZ`5~eG@Ab@=9})Qi~Mw(-ewxG7CzI
z^*9)2Gct%fC+4Y_C=`QYN&(~&g_82j<WxOS_|D~Fn8z@mkwFL&9x$haR53D$Xhi#<
z#+EfC0W9QUSi~U8D8j%2c0fsL3dpP_pg5R6`5~L0Fo?T~hha4+u-N>PK*mnyXD?tB
zo7}*jDr?EW!eGU~&tSu#z+lIq&)~pd%HYUg#o)wX&)__niK9l)oq?6XlR<#Nn?aGm
zm%)I+Z*o6J0At|f2OOG=?vopZM8%voGB7YOF&Hv1FmN$2F)%QMGVn2kO@6>3U+=<T
z&A`YY#K6GN%D@bkv(ehZASu0#LHPiK^fm_9SqwTz0?gYOJhn0TAc?R*L>4fxvaDfV
z!@$7647NvzfrWvAA(BCmA&S9*A)3L8A&$X_fq_8`Vh4jUg9!rz1A{1o4TC*{IRhg@
z5Lhdt6$2wf@Z_0XYK%#f4{(XbhcJjj-RH-^%D~9Lz#yZ=vXwz!3*-c5m@7j?7$Wnx
zGUy`w$;ZIVz`&5kz{-%$AkB~gwwni{A8I!vLo`Fg<c~bUlY_YhC-3JHbB=-AWx~J=
zR?D@UAvRJdemg_res~D7fn^GiOyq)_m@;`Uw-kG9q)_U1hQ!JDxWz&2bP)Rwx3ql;
z0~<prg8)Mrg9<}AgC0W_g9Sr1*c?cxSVGNVV6bG!WB|Dq6euhVOaihDj0{;Ivvp%5
zg|b1;(b~eG%{OBXg9M17p3FCW9s@7fvAJN`$Sn-o>gkhNc<e<nP09!RTZOR$6vE5}
z426?7a>xo5fg%r*NFZM90VNP-O@@-m|9B;gV<Ux1K}M^CEQH%u4ib``&A=xMijQp!
zl}n(`r~!G}lTRyh0s|YvL<RwdNeq$<lNpp5rZE^XOlPoRn8o16Fq<KiVGcL|6u{9H
z1`mKRXaF!Ugn`osGdO*)F|Y^-@o_RRGK4eKO+LdXZHi*wevljBDK~UII7NXHJtQ$K
zVBlw1$RNqEWb%3e*%WBd@`FsPXJ~*XvRVdauuC+hXEX3ggUmzo6S5sT+ZY-_DGoWs
zuVmn7Sj8a8u$DoCVcq1p{OY{O7PU;i$S)z@>bsmlP-iDYCnLiF25BGdZ4CW7I~gWT
z5)gIU$RNtFi9wQKBZCsd7I4Twl7=!gWJDQQ7^X5zgXR}O2B!ZE+zia@42%ry3|$Ni
zybO#C6B!&QM+-<>;t865bXV_S;Ahy$Ajz<YL7ibQD0u3TT|J$_5gI&C7}&wVQv(ed
zwgu4Wo&ib+AVGNWyUv74%|ers-p1hJi=>ogFN1F+vrh0fhB*k)dg*Np3qai64APM>
z726pWZ)1=TM>t-Mfs=uO;UEJy!yyJyhQkbM3`ZCY7>+YIFq~uvV>r!_!f=+Mn&BKc
z93d&J1{#hG3^m|%#mL~mV8gJKVHpDxIEAq=Fo{YrFfwQ_X9$G)*@%G=oZ~q_&e_IL
niJna^PEHgOWnKZzMJv&zuYz*X<l{n$qM(8kUH0bWzd{B8m*KB!

diff --git a/Partie_2/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_2/target/classes/ch/hepia/JoueurOrdinateur.class
index 2f71a0b80ecd3ac59ee101b5ef06748b16c8ec66..744d8a3ed0522b42651ca1ff2a0e437ba8688d6a 100644
GIT binary patch
delta 2381
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
CPs`!}

delta 2182
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

-- 
GitLab