From 5c82b384a57a1db6925fd65c584df855c7710075 Mon Sep 17 00:00:00 2001
From: "michael.divia" <michael.divia@etu.hesge.ch>
Date: Fri, 5 Jan 2024 15:59:43 +0100
Subject: [PATCH] Part 3 Without GFX 100%

---
 Partie_3/.vscode/settings.json                |   3 +-
 Partie_3/pom.xml                              |  13 +-
 Partie_3/save.csv                             |   3 +
 Partie_3/src/main/java/ch/hepia/App.java      | 136 +++++---
 .../src/main/java/ch/hepia/GameManager.java   | 274 ++++++++++++++--
 Partie_3/src/main/java/ch/hepia/Joueur.java   |   5 +-
 Partie_3/src/main/java/ch/hepia/Save.java     | 100 ++++++
 .../src/test/java/ch/hepia/CarteTest.java     |  49 ---
 .../src/test/java/ch/hepia/JoueurTest.java    | 302 ++++++++++++++++++
 Partie_3/target/classes/ch/hepia/App.class    | Bin 2666 -> 3474 bytes
 .../target/classes/ch/hepia/GameManager.class | Bin 9609 -> 18901 bytes
 .../classes/ch/hepia/JoueurCroupier.class     | Bin 3338 -> 3338 bytes
 .../classes/ch/hepia/JoueurHumain.class       | Bin 4874 -> 4901 bytes
 .../classes/ch/hepia/JoueurOrdinateur.class   | Bin 4918 -> 4918 bytes
 Partie_3/target/classes/ch/hepia/Save.class   | Bin 0 -> 3866 bytes
 .../compile/default-compile/inputFiles.lst    |   1 +
 .../test-classes/ch/hepia/CarteTest.class     | Bin 1821 -> 0 bytes
 .../test-classes/ch/hepia/JoueurTest.class    | Bin 0 -> 8931 bytes
 18 files changed, 768 insertions(+), 118 deletions(-)
 create mode 100644 Partie_3/save.csv
 create mode 100644 Partie_3/src/main/java/ch/hepia/Save.java
 delete mode 100644 Partie_3/src/test/java/ch/hepia/CarteTest.java
 create mode 100644 Partie_3/src/test/java/ch/hepia/JoueurTest.java
 create mode 100644 Partie_3/target/classes/ch/hepia/Save.class
 delete mode 100644 Partie_3/target/test-classes/ch/hepia/CarteTest.class
 create mode 100644 Partie_3/target/test-classes/ch/hepia/JoueurTest.class

diff --git a/Partie_3/.vscode/settings.json b/Partie_3/.vscode/settings.json
index 3e5eb95..1152b26 100644
--- a/Partie_3/.vscode/settings.json
+++ b/Partie_3/.vscode/settings.json
@@ -55,5 +55,6 @@
   "C_Cpp_Runner.useLeakSanitizer": false,
   "C_Cpp_Runner.showCompilationTime": false,
   "C_Cpp_Runner.useLinkTimeOptimization": false,
-  "C_Cpp_Runner.msvcSecureNoWarnings": false
+  "C_Cpp_Runner.msvcSecureNoWarnings": false,
+  "java.configuration.updateBuildConfiguration": "interactive"
 }
\ No newline at end of file
diff --git a/Partie_3/pom.xml b/Partie_3/pom.xml
index 7cb8921..a8dc63e 100644
--- a/Partie_3/pom.xml
+++ b/Partie_3/pom.xml
@@ -19,7 +19,13 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>4.11</version>
+            <version>4.13.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.9.1</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -27,6 +33,11 @@
             <artifactId>javafx-controls</artifactId>
             <version>19</version>
         </dependency>
+        <dependency>
+            <groupId>com.opencsv</groupId>
+            <artifactId>opencsv</artifactId>
+            <version>5.9</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/Partie_3/save.csv b/Partie_3/save.csv
new file mode 100644
index 0000000..f481abf
--- /dev/null
+++ b/Partie_3/save.csv
@@ -0,0 +1,3 @@
+Human,100.0,0
+Player_1,190.0,1
+Player_2,305.0,1
diff --git a/Partie_3/src/main/java/ch/hepia/App.java b/Partie_3/src/main/java/ch/hepia/App.java
index eeac945..b99e87f 100644
--- a/Partie_3/src/main/java/ch/hepia/App.java
+++ b/Partie_3/src/main/java/ch/hepia/App.java
@@ -1,5 +1,6 @@
 package ch.hepia;
 
+import java.io.File;
 import java.util.Scanner;
 
 public class App {
@@ -28,83 +29,124 @@ public class App {
         int numPlayers;
         int startMoney;
         int computerStrategy = 1;
+        boolean loadSave = false;
+        String filePath = "save.csv";
 
-        // Ask the number of players until a valide answer is given
-        while (true) {
+        File f = new File(filePath);
 
-            System.out.print("How many players ? ");
+        // Check if a save file exists
+        if (f.exists() && !f.isDirectory()) {
 
-            // 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);
-                System.out.print("How many players ? ");
-                App.in.next();
-            }
+            char choice = 'x';
+
+            System.out.print("Do you want to load last game save (y/n) ? ");
+
+            while (true) {
 
-            numPlayers = App.in.nextInt();
+                choice = App.in.next().charAt(0);
+
+                // Choices are checked with available one for confirmation
+                if (choice == 'y' || choice == 'n') {
+                    break;
+                } else {
+                    System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+                }
+            }
 
-            // Player count must be between 1 and 7
-            if (numPlayers >= 1 && numPlayers <= 7) {
-                System.out.print("");
-                break;
-            } else {
-                System.out.println(
-                        App.ANSI_YELLOW + "Please enter a number of players between 1 and 7." + App.ANSI_RESET);
+            if (choice == 'y') {
+                loadSave = true;
             }
         }
 
-        // Ask the start money count for each players until a valide answer is given
-        while (true) {
+        GameManager BlackJack;
 
-            System.out.print("How much money do you start with ? ");
+        if (loadSave) {
 
-            // 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 ? ");
-                App.in.next();
-            }
+            // Load save to create game
+            Save Game = new Save();
+
+            BlackJack = new GameManager(Game.loadMoney(), Game.loadStrategy());
+
+        } else {
+            // Ask the number of players until a valide answer is given
+            while (true) {
 
-            startMoney = App.in.nextInt();
+                System.out.print("How many players ? ");
 
-            // Starting money must be more or equal to minimum bid amount
-            if (startMoney >= 10) {
-                System.out.print("");
-                break;
-            } else {
-                System.out.println(App.ANSI_YELLOW + "Please enter an amount above 10." + App.ANSI_RESET);
+                // 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);
+                    System.out.print("How many players ? ");
+                    App.in.next();
+                }
+
+                numPlayers = App.in.nextInt();
+
+                // Player count must be between 1 and 7
+                if (numPlayers >= 1 && numPlayers <= 7) {
+                    System.out.print("");
+                    break;
+                } else {
+                    System.out.println(
+                            App.ANSI_YELLOW + "Please enter a number of players between 1 and 7." + App.ANSI_RESET);
+                }
             }
-        }
 
-        // Ask if the Computer players should be smart of not
-        if (numPlayers > 1) {
+            // Ask the start money count for each players until a valide answer is given
             while (true) {
 
-                System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? ");
+                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 choice." + App.ANSI_RESET);
-                    System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? ");
+                            .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 ? ");
                     App.in.next();
                 }
 
-                computerStrategy = App.in.nextInt();
+                startMoney = App.in.nextInt();
 
-                // Check if the value i s valide
-                if (computerStrategy == 1 || computerStrategy == 2) {
+                // Starting money must be more or equal to minimum bid amount
+                if (startMoney >= 10) {
                     System.out.print("");
                     break;
                 } else {
-                    System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+                    System.out.println(App.ANSI_YELLOW + "Please enter an amount above 10." + App.ANSI_RESET);
                 }
             }
-        }
 
-        // Create a new game
-        GameManager BlackJack = new GameManager(numPlayers, startMoney, computerStrategy);
+            // Ask if the Computer players should be smart of not
+            if (numPlayers > 1) {
+                while (true) {
+
+                    System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? ");
+
+                    // Check that the input is an valid int
+                    while (!App.in.hasNextInt()) {
+                        System.out
+                                .println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+                        System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? ");
+                        App.in.next();
+                    }
+
+                    computerStrategy = App.in.nextInt();
+
+                    // Check if the value i s valide
+                    if (computerStrategy == 1 || computerStrategy == 2) {
+                        System.out.print("");
+                        break;
+                    } else {
+                        System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+                    }
+                }
+            }
+
+            // Create a new game
+            BlackJack = new GameManager(numPlayers, startMoney, computerStrategy);
+        }
 
         boolean GameOver = false;
 
diff --git a/Partie_3/src/main/java/ch/hepia/GameManager.java b/Partie_3/src/main/java/ch/hepia/GameManager.java
index e5ce283..2cc3940 100644
--- a/Partie_3/src/main/java/ch/hepia/GameManager.java
+++ b/Partie_3/src/main/java/ch/hepia/GameManager.java
@@ -33,6 +33,29 @@ public class GameManager {
         this.Dealer = new JoueurCroupier(Deck);
     }
 
+    public GameManager(ArrayList<Double> Money, ArrayList<Integer> Strategy) {
+
+        // 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, Money.get(0)));
+
+        this.ComputerPlayers = 0;
+
+        // All other are controlled by the computer
+        if (Money.size() > 1) {
+            for (int x = 1; x < Money.size(); x++) {
+                ComputerPlayers++;
+                this.Players.add(new JoueurOrdinateur(Deck, Money.get(x), Strategy.get(x)));
+            }
+        }
+
+        this.Dealer = new JoueurCroupier(Deck);
+    }
+
     // Phase 1 (StartTurn):
     // Ask the player how much he wan't to bid
     public void StartTurn() {
@@ -308,6 +331,199 @@ public class GameManager {
              */
             if (this.Players.get(x).GetStrategy() == 1) {
 
+                char[][][] Choices_2Cards = {
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'T', 'T', 'S', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'R', 'S', 'R', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'R', 'R', 'R', 'S', 'R', 'R' },
+                                { 'R', 'T', 'T', 'R', 'R', 'R', 'R', 'R', 'S', 'R' },
+                                { 'R', 'T', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'T', 'R' },
+                                { 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'T', 'R', 'R' },
+                                { 'T', 'T', 'T', 'D', 'D', 'D', 'T', 'R', 'R', 'R' },
+                                { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' },
+                                { 'D', 'D', 'D', 'D', 'T', 'R', 'S', 'R', 'R', 'R' },
+                                { 'R', 'D', 'D', 'T', 'R', 'R', 'R', 'S', 'R', 'R' },
+                                { 'R', 'D', 'T', 'R', 'R', 'R', 'R', 'R', 'S', 'R' },
+                                { 'R', 'T', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'D', 'D', 'D', 'D', 'R', 'R', 'R' },
+                                { 'T', 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'R' },
+                                { 'T', 'T', 'S', 'T', 'T', 'D', 'D', 'D', 'R', 'R' },
+                                { 'D', 'T', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R' },
+                                { 'D', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R' },
+                                { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' },
+                                { 'D', 'D', 'D', 'D', 'R', 'R', 'S', 'R', 'R', 'R' },
+                                { 'R', 'D', 'D', 'R', 'R', 'R', 'R', 'S', 'R', 'R' },
+                                { 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'S', 'R' },
+                                { 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'D', 'D', 'D', 'D', 'D', 'D', 'R', 'R', 'R' },
+                                { 'D', 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'R' },
+                                { 'D', 'T', 'S', 'T', 'T', 'D', 'D', 'D', 'R', 'R' },
+                                { 'D', 'T', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R' },
+                                { 'D', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R' },
+                                { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' },
+                                { 'D', 'D', 'D', 'D', 'R', 'R', 'S', 'R', 'R', 'R' },
+                                { 'R', 'D', 'D', 'R', 'R', 'R', 'R', 'S', 'R', 'R' },
+                                { 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'S', 'R' },
+                                { 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'D', 'D', 'D', 'D', 'D', 'D', 'R', 'R', 'R' },
+                                { 'D', 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'R' },
+                                { 'D', 'T', 'S', 'T', 'T', 'D', 'D', 'D', 'R', 'R' },
+                                { 'D', 'T', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R' },
+                                { 'D', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R' },
+                                { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' },
+                                { 'D', 'D', 'D', 'D', 'R', 'R', 'S', 'R', 'R', 'R' },
+                                { 'R', 'D', 'D', 'R', 'R', 'R', 'R', 'S', 'R', 'R' },
+                                { 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'S', 'R' },
+                                { 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                                { 'T', 'S', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T' },
+                                { 'T', 'T', 'S', 'T', 'T', 'T', 'D', 'D', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T' },
+                                { 'R', 'T', 'D', 'D', 'T', 'T', 'S', 'T', 'T', 'R' },
+                                { 'R', 'D', 'D', 'T', 'T', 'T', 'T', 'S', 'R', 'R' },
+                                { 'R', 'D', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T' },
+                                { 'R', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T', 'R' },
+                                { 'R', 'D', 'D', 'T', 'T', 'T', 'T', 'S', 'R', 'R' },
+                                { 'R', 'D', 'T', 'T', 'T', 'T', 'T', 'R', 'S', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'R' },
+                                { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'R', 'R' },
+                                { 'R', 'D', 'D', 'T', 'T', 'T', 'T', 'S', 'R', 'R' },
+                                { 'R', 'D', 'T', 'T', 'T', 'T', 'R', 'R', 'S', 'R' },
+                                { 'R', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R' },
+                        },
+                        {
+                                { 'S', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'T' },
+                                { 'T', 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R' },
+                                { 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R', 'R' },
+                                { 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R', 'R', 'R' },
+                                { 'R', 'T', 'D', 'T', 'T', 'T', 'R', 'S', 'R', 'R' },
+                                { 'R', 'D', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R' },
+                                { 'R', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        }
+                };
+
+                char[][] Choices_MoreThan2Cards = {
+                        { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R' },
+                        { 'T', 'T', 'D', 'D', 'T', 'R', 'R', 'R', 'R', 'R' },
+                        { 'T', 'D', 'D', 'D', 'T', 'R', 'R', 'R', 'R', 'R' },
+                        { 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        { 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        { 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R' },
+                        { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T', 'R' },
+                        { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T', 'R' },
+                        { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'R', 'R' },
+                        { 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R', 'R', 'R' }
+                };
+
+                char Choice = 'R';
+
+                // Go thew all the hands of the computer player
+                for (int HandNb = 0; HandNb < this.Players.get(x).GetNbHands(); HandNb++) {
+
+                    if (this.Players.get(x).GetNbCards(HandNb) == 2) {
+                        Choice = Choices_2Cards[this.Dealer.GetCardStrength(0, 0) - 1][this.Players.get(x)
+                                .GetCardStrength(HandNb, 0) - 1][this.Players.get(x).GetCardStrength(HandNb, 1) - 1];
+                    } else {
+                        if (this.Players.get(x).GetStrength(HandNb) <= 8) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][0];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 9) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][1];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 10) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][2];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 11) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][3];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 12) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][4];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 13) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][5];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 14) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][6];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 15) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][7];
+                        } else if (this.Players.get(x).GetStrength(HandNb) == 16) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][8];
+                        } else if (this.Players.get(x).GetStrength(HandNb) >= 17) {
+                            Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][9];
+                        }
+                    }
+
+                    if (Choice == 'T') {
+                        // Draw
+
+                        this.Players.get(x).DrawCard(HandNb, this.Deck);
+                        // Go back 1 hand to stay on the same hand in the for loop
+                        HandNb--;
+
+                    } else if (Choice == 'R') {
+                        // Stay
+
+                    } else if (Choice == 'D') {
+                        // Double
+
+                        this.Players.get(x).Double(HandNb, this.Deck);
+                        // Go back 1 hand to stay on the same hand in the for loop
+                        HandNb--;
+                    } else if (Choice == 'S') {
+                        // Split
+
+                        this.Players.get(x).Split(HandNb, this.Deck);
+                        // Go back 1 hand to stay on the same hand in the for loop
+                        HandNb--;
+                    }
+                }
+
             } else if (this.Players.get(x).GetStrategy() == 2) {
                 while (this.Players.get(x).GetStrength(0) <= 15) {
                     this.Players.get(x).DrawCard(0, this.Deck);
@@ -486,29 +702,51 @@ public class GameManager {
         // Show the final player balance
         System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
 
-        System.out.print("> ");
+        // Show Choices
+        System.out.println("\n--- " + App.ANSI_GREEN + "Choices" + App.ANSI_RESET + " ---\n");
 
-        // Wait for a simple input of the player
-        try {
-            System.in.read();
-        } catch (Exception e) {
-        }
+        System.out.println(App.ANSI_BLUE + "[c]" + App.ANSI_RESET + " Continue");
+        System.out.println(App.ANSI_BLUE + "[s]" + App.ANSI_RESET + " Save & Quit");
 
-        // If the player has less than the minimum bid amount allowed
-        if (this.Players.get(0).GetMoney() <= 10) {
-            return true;
-        }
+        char choice = 'x';
+
+        // Ask for the player choice until a valide one is given
+        while (true) {
+            System.out.print("> ");
 
-        // 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));
+            choice = App.in.next().charAt(0);
+
+            // Choices are checked with available one for confirmation
+            if (choice == 'c' || choice == 's') {
+                break;
+            } else {
+                System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+            }
         }
 
-        // Reset all hands
-        this.Dealer.Reset(this.Deck);
-        for (Joueur Player : this.Players) {
-            Player.Reset(this.Deck);
+        if (choice == 'c') {
+            // 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));
+            }
+
+            // Reset all hands
+            this.Dealer.Reset(this.Deck);
+            for (Joueur Player : this.Players) {
+                Player.Reset(this.Deck);
+            }
+        } else if (choice == 's') {
+
+            Save Game = new Save();
+            Game.save(this.Players, this.ComputerPlayers);
+
+            return true;
         }
 
         return false;
diff --git a/Partie_3/src/main/java/ch/hepia/Joueur.java b/Partie_3/src/main/java/ch/hepia/Joueur.java
index 036088f..e69d341 100644
--- a/Partie_3/src/main/java/ch/hepia/Joueur.java
+++ b/Partie_3/src/main/java/ch/hepia/Joueur.java
@@ -79,7 +79,7 @@ class JoueurHumain implements Joueur {
     private double Insurance;
     private boolean Insured;
 
-    public JoueurHumain(JeudeCarte Jeu, int Money) {
+    public JoueurHumain(JeudeCarte Jeu, double Money) {
 
         this.Hands = new ArrayList<>();
 
@@ -342,7 +342,7 @@ class JoueurOrdinateur implements Joueur {
      */
     private int Strategy;
 
-    public JoueurOrdinateur(JeudeCarte Jeu, int Money, int Strategy) {
+    public JoueurOrdinateur(JeudeCarte Jeu, double Money, int Strategy) {
 
         this.Hands = new ArrayList<>();
 
@@ -354,6 +354,7 @@ class JoueurOrdinateur implements Joueur {
         this.Money = Money;
         this.Insurance = 0;
         this.Insured = false;
+
         this.Strategy = Strategy;
     }
 
diff --git a/Partie_3/src/main/java/ch/hepia/Save.java b/Partie_3/src/main/java/ch/hepia/Save.java
new file mode 100644
index 0000000..d66eaa2
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/Save.java
@@ -0,0 +1,100 @@
+package ch.hepia;
+
+import com.opencsv.CSVWriter;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Save {
+
+    public void save(ArrayList<Joueur> Players, int ComputerPlayers) {
+
+        String filePath = "save.csv";
+
+        File file = new File(filePath);
+
+        try {
+            // Create FileWriter object
+            FileWriter outputfile = new FileWriter(file);
+
+            // Create CSVWriter object filewriter
+            CSVWriter writer = new CSVWriter(outputfile, ',',
+                    CSVWriter.NO_QUOTE_CHARACTER,
+                    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
+                    CSVWriter.DEFAULT_LINE_END);
+
+            String[] data = { "Human", Double.toString(Players.get(0).GetMoney()), "0" };
+
+            writer.writeNext(data);
+
+            for (int x = 1; x <= ComputerPlayers; x++) {
+
+                data[0] = "Player_" + x;
+                data[1] = Double.toString(Players.get(x).GetMoney());
+                data[2] = Integer.toString(Players.get(x).GetStrategy());
+
+                writer.writeNext(data);
+            }
+
+            // Closing writer connection
+            writer.close();
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public ArrayList<Double> loadMoney() {
+
+        File file = new File("save.csv");
+
+        ArrayList<Double> Money = new ArrayList<>();
+
+        try {
+
+            List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
+
+            for (String string : lines) {
+
+                String[] array = string.split(",");
+
+                Money.add(Double.valueOf(array[1]));
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return Money;
+    }
+
+    public ArrayList<Integer> loadStrategy() {
+
+        File file = new File("save.csv");
+
+        ArrayList<Integer> Strategy = new ArrayList<>();
+
+        try {
+
+            List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
+
+            for (String string : lines) {
+
+                String[] array = string.split(",");
+
+                Strategy.add(Integer.valueOf(array[2]));
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return Strategy;
+    }
+}
diff --git a/Partie_3/src/test/java/ch/hepia/CarteTest.java b/Partie_3/src/test/java/ch/hepia/CarteTest.java
deleted file mode 100644
index f1ac133..0000000
--- a/Partie_3/src/test/java/ch/hepia/CarteTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package ch.hepia;
-
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
-
-public class CarteTest {
-
-    @Test
-    public void testGetCouleur() {
-        Carte carte = new Carte(COULEUR.coeur, 2);
-        assertEquals(COULEUR.coeur, carte.getCouleur());
-    }
-
-    @Test
-    public void testGetRang() {
-        Carte carte = new Carte(COULEUR.carreau, 7);
-        assertEquals(7, carte.getRang());
-    }
-
-    @Test
-    public void testGetForce() {
-        Carte carte = new Carte(COULEUR.trefle, 12, 10);
-        assertEquals(10, carte.getForce());
-    }
-
-    @Test
-    public void testGetNomCouleur() {
-        Carte carte = new Carte(COULEUR.coeur, 0);
-        assertEquals("Coeur", carte.getNomCouleur());
-    }
-
-    @Test
-    public void testGetNomRang() {
-        Carte carte = new Carte(COULEUR.coeur, 2);
-        assertEquals("2", carte.getNomRang());
-    }
-
-    @Test
-    public void testGetNomComplet() {
-        Carte carte = new Carte(COULEUR.carreau, 12);
-        assertEquals("Dame de Carreau", carte.getNomComplet());
-    }
-
-    @Test
-    public void testGetNomComplet_2() {
-        Carte carte = new Carte(COULEUR.carreau, 0);
-        assertEquals("Joker", carte.getNomComplet());
-    }
-}
\ No newline at end of file
diff --git a/Partie_3/src/test/java/ch/hepia/JoueurTest.java b/Partie_3/src/test/java/ch/hepia/JoueurTest.java
new file mode 100644
index 0000000..836b221
--- /dev/null
+++ b/Partie_3/src/test/java/ch/hepia/JoueurTest.java
@@ -0,0 +1,302 @@
+package ch.hepia;
+
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import org.junit.Test;
+
+public class JoueurTest {
+
+    @Test
+    public void testAddMoney() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+        joueur.AddMoney(100);
+
+        assertEquals(100, joueur.GetMoney(), 0);
+    }
+
+    @Test
+    public void testAddZeroMoney() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+        joueur.AddMoney(0);
+
+        assertEquals(0, joueur.GetMoney(), 0);
+    }
+
+    @Test
+    public void testAddNegativeMoney() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.AddMoney(-50));
+    }
+
+    @Test
+    public void testRemoveMoney() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+        joueur.RemoveMoney(10);
+
+        assertEquals(90, joueur.GetMoney(), 0);
+    }
+
+    @Test
+    public void testRemoveZeroMoney() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+        joueur.RemoveMoney(0);
+
+        assertEquals(0, joueur.GetMoney(), 0);
+    }
+
+    @Test
+    public void testRemoveNegativeMoney() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+
+        assertThrows(RuntimeException.class, () -> joueur.RemoveMoney(-50));
+    }
+
+    @Test
+    public void testAddBet() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+        joueur.SetBet(10, 0);
+
+        assertEquals(10, joueur.GetBet(0), 0);
+    }
+
+    @Test
+    public void testAddNegativeBet() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+
+        assertThrows(RuntimeException.class, () -> joueur.SetBet(-10, 0));
+    }
+
+    @Test
+    public void testAddTooBigBet() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+
+        assertThrows(RuntimeException.class, () -> joueur.SetBet(101, 0));
+    }
+
+    @Test
+    public void testAddBetWrongHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+
+        assertThrows(RuntimeException.class, () -> joueur.SetBet(1, 1));
+    }
+
+    @Test
+    public void testGetBetWrongHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 100);
+        joueur.SetBet(10, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.GetBet(1));
+    }
+
+    @Test
+    public void testDrawCard() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+        joueur.DrawCard(0, Deck);
+
+        assertEquals(3, joueur.GetNbCards(0));
+    }
+
+    @Test
+    public void testDrawCardWrongHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.DrawCard(1, Deck));
+    }
+
+    @Test
+    public void testCardStrength() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertEquals(0, joueur.GetCardStrength(0, 0));
+    }
+
+    @Test
+    public void testCardStrengthWrongCard() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.GetCardStrength(0, 2));
+    }
+
+    @Test
+    public void testCardStrengthWrongHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.GetCardStrength(1, 0));
+    }
+
+    @Test
+    public void testCardCount() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertEquals(2, joueur.GetNbCards(0));
+    }
+
+    @Test
+    public void testCardCountWrongHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.GetNbCards(1));
+    }
+
+    @Test
+    public void testShowHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
+        System.setOut(new PrintStream(outputStreamCaptor));
+
+        joueur.ShowHand(0);
+
+        System.setOut(System.out);
+        String printedOutput = outputStreamCaptor.toString().trim();
+
+        assertTrue(printedOutput.contains("🃟 🃟"));
+    }
+
+    @Test
+    public void testWrongShowHand() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.ShowHand(1));
+    }
+
+    @Test
+    public void testShowHands() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
+        System.setOut(new PrintStream(outputStreamCaptor));
+
+        joueur.ShowHands();
+
+        System.setOut(System.out);
+        String printedOutput = outputStreamCaptor.toString().trim();
+
+        assertTrue(printedOutput.contains("🃟 🃟"));
+    }
+
+    @Test
+    public void testNumberHands() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertEquals(1, joueur.GetNbHands());
+    }
+
+    @Test
+    public void testHandStrength() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertEquals(0, joueur.GetStrength(0));
+    }
+
+    @Test
+    public void testWrongHandStrength() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertThrows(RuntimeException.class, () -> joueur.GetStrength(1));
+    }
+
+    @Test
+    public void testDoubled() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertEquals(false, joueur.HasDoubled(0));
+    }
+
+    @Test
+    public void testCanSplit() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        assertEquals(true, joueur.CanSplit(0));
+    }
+
+    @Test
+    public void testCantSplit() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 3));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        joueur.DrawCard(0, Deck);
+
+        assertEquals(false, joueur.CanSplit(0));
+    }
+
+    @Test
+    public void testSplit() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 5));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        joueur.Split(0, Deck);
+
+        assertEquals(true, joueur.HasSplit(0));
+    }
+
+    @Test
+    public void testSplitMax() {
+
+        JeudeCarte Deck = new JeudeCarte(new Paquet(1, 15));
+        JoueurHumain joueur = new JoueurHumain(Deck, 0);
+
+        joueur.Split(0, Deck);
+        joueur.Split(1, Deck);
+
+        assertThrows(RuntimeException.class, () -> joueur.Split(0, Deck));
+    }
+}
diff --git a/Partie_3/target/classes/ch/hepia/App.class b/Partie_3/target/classes/ch/hepia/App.class
index 2cd8ba87eca313ce79e1f20008967fe2848f2513..aad0e41606823ab879200272efe2f63852dccb72 100644
GIT binary patch
literal 3474
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
HmsL9ehE+B8

literal 2666
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
LFf#OkGf_VPssmd7

diff --git a/Partie_3/target/classes/ch/hepia/GameManager.class b/Partie_3/target/classes/ch/hepia/GameManager.class
index 73ed8bf9a6302d0a47db71fa3b031bb7bbb9c49e..0ae3f3d24bc760587c947162801cc9ccb6df14b6 100644
GIT binary patch
literal 18901
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
HF-QUccl)VU

literal 9609
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

diff --git a/Partie_3/target/classes/ch/hepia/JoueurCroupier.class b/Partie_3/target/classes/ch/hepia/JoueurCroupier.class
index 9a717ff4c56ce683fff710ba2f2f33ca8966b558..1d0bb3797ec4281bcbc48e36763785c6e864c086 100644
GIT binary patch
delta 271
zcmeB@>XO=!&dM3Vz`_*CAjlLoxq#K1F>dk)ZqdmXS#=nbCm-MvpZuPUZL&0*9%BZa
zm(Hfgm<v|5noWnXXtEqwl^tXG<O5vtlYQAOd21P1nCck#n3@>Gn3^X~W=~*joBV}6
zn6YcJ2S+&X1O^tSi41&9QyD~=rcGYM5yU#1ft_j2WM)oF#)Xq@IZH*CGq5nNVBllg
z#304AnZcN8D}x!+_Q}UN!x;BXmg5R#JPfvJGM5hHiOC1Jycy3<mgCZ#Y|5>}co{6y
z$gRV81MI@X+&YYRCx75}WPAkXyYm>ZzGUEKdNsL*CxP=5gEZ4;23e+Wlb`aa0sy@W
BQcwT@

delta 271
zcmeB@>XO=!&dM3iz`_*4AjlLsxq#K1F?R9?ZqdmXS#=nbCLiDupZuPUZL&0*9%DM3
zm(Hfgm;+X|noWnXaIzd&l^tW*<O5vtlYQAOd21M0m}(jLm>L<xn3^U}W=~*jo&1G8
zn6Y!R2S+$>KLZQX1O`5)DGZ`aQzx(C2x6VZz|J&#GBc+o<ATYyoTZ}67+9E=Gw?BO
zWRPOo#9+*{g~5zz+vMY%VT^kx%W;J=9s=7mnM;T9_~Zjz-i&7^%W-K=Hs#h~yabkM
z<kn%l4tC*TZXL!ulRt1fGCl<J-FXaHUoh}8y_{Ublfe0rL7M3kgDlh6$xnGy0jOe9
ACjbBd

diff --git a/Partie_3/target/classes/ch/hepia/JoueurHumain.class b/Partie_3/target/classes/ch/hepia/JoueurHumain.class
index f48be18eb326b030e967eb4fcd4a691e8fb62038..068028eff942eafbe3b36e821e7fc43a0fe1309b 100644
GIT binary patch
delta 2689
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
WBwItM_ZS!q!7&1I+6Hh|-UtAg(#;tF

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

diff --git a/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class
index 5d518578ec450182ac80c003ccfe22567f6000dd..e8925bd7d60d537103d49935df82fae23c2b1f36 100644
GIT binary patch
delta 456
zcmdm{woPpTBcsb^M#k-IjI5J)vYQBMY-P~X;@iq#pvAnE!AMJ#W%56ERelr3WClyd
z6b3uSGzJ&O^vOmX%Dg-bObiSRt_%VUf($H^lQ^^(vnKa)6o?iuurU@g2rw2gs4x~Y
z=rNWvSTI&hUd^dF*_tz2w3dO5v5rB2v7SMNv4KI4v4z2cv32rl&H%=a$$vO|75f<2
z82cFn7$-4EGEQbtW}MDo#5jY&hH(yq8{>S2P{sw5S8>&IE@j|nT*e^DxN7oS9?i+o
z+}^w!82A}CGDtFRWzb;UHhD952IJ1jGCWa?dneoQ%TJ!h<HdWJfuHdRgCye#26e`h
zli%{>@t$K4WxU8B$#{-IiShE}4BiCBYm-m%HuFAW5N3SLV8!^9!Its)<Ve11-uDbb
zjGq`37{4;;Gk%-=kS~hy=VTlHrGhLB>P)N*eoSl(2~6w^NlaXuKk>^k>IyJ$GYK+?
zGKn&%GD$GlFiA56G08C`Fex&WF{v=jVp3;V!=%Nqn@OAD5|hqkTftmLeXui63A*u`
zFt9S2Ge|R8F(@-xPnH$3VYHhZC1k_sG<mvEhM+qGE0Y(40Fy6+B9lLZ0aL(a0bw-&
DGk|Ga

delta 456
zcmdm{woPpTBctbLM#k-Ij4YFPvYQCXv~Ok5)8gC8V4%gkmBC0$cJe=VRen>(WCkn7
z6b5_7R0bEuw8=&s%DjRMObiSRt_%VUf(*=)lQ^^(Gbi_Q6o}?CurU@e2rw2hs4x~W
z=rNWtSTL4PUd^dF*_tz2w1$C=v6exAv5rB7v7SMXv6;bwv1RgV&H%>t$$vO|6?+-j
z82cCm7$-7FGEQPpW}L=g#5kS7hH*B78{<5NP{#R_S8>&IE@9wjT*@HHxN`Da9?i+o
z+}^zF8Tc7DFi0|PVbEaQI(aj92IG#&GCWa?dnViP%TJ!h<HdW3fuHd(gCyf|26e_0
zli%{>@t$Q6WxT*3$#|AQiSg3p4BiCBtCLUiHuFAY5N3SDV8!@^!Itsa<Ve11-ggW_
zj2{^k7{4&+Gk%@?kS~hy$7CD+rGm^1>P##QeoU+k2~2DZNlcuZKk>^k>hd#iGYK$=
zGKny#GKn+TFi9~4G08F{FexyUF)1_5Vp3yR!=%Zun@Nk|5|j31TftmLJ+L!R3A*tb
zGq5t5F-S96GAJ`yO_mk1VYHnbC1k_sIC;8IhM*e*E0ZUK0Fw`cB9kA30h9k^0bw-&
D+yiNq

diff --git a/Partie_3/target/classes/ch/hepia/Save.class b/Partie_3/target/classes/ch/hepia/Save.class
new file mode 100644
index 0000000000000000000000000000000000000000..9573a2e368dea090dc72a1674ce1aa82a9c79b87
GIT binary patch
literal 3866
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

literal 0
HcmV?d00001

diff --git a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index 127925b..aacaf9d 100644
--- a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -5,3 +5,4 @@
 /home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Carte.java
 /home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/GameManager.java
 /home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/JeudeCarte.java
+/home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Save.java
diff --git a/Partie_3/target/test-classes/ch/hepia/CarteTest.class b/Partie_3/target/test-classes/ch/hepia/CarteTest.class
deleted file mode 100644
index 655456ed1f9c7073c51fefd5a6f05ec8d78d542b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1821
zcmX^0Z`VEs1_lR)P<93;Mh2ne4E>DMg3LsH=ft9t)R5HT5_Sd_Mh1bb#Ii*FoW#6z
zegCAa)Z`LI1~!|_yv!0iMh0dL%`ip=7U%qwR4xW)22LIZRt7dk27aH+yi~u^+@#c^
zki?{%R7M6NpZw&+oUp{AOb{O`$WoG#S<J{F;)7|kH6sIGNosM4duoYuerZl>X%QoX
zWKd~dNoH<pSY~l%QckL4US57lVo7FxUNIwsfKPr=x_(w^US^3t$mQ1T3_^?ye5eL<
zGKesUu``G=G6*0f{6l?QLxXr2#2F+Q8Ca9^!Bz<&ISHb`nu|e@K?>wQX+{Py4NQ4Y
z%`lJ>Ssn&C26;vXu5=`qi)d(KYT#l}WKd>jP-0{dK)BtpxHz?_goi<eL6wn#ClSnZ
zEi6sUDQ09)*YH7)3TsReP=v51gJKXADhPjqM64MZxS^pMl$e(e3J)zF25pef*^?8C
zic%9xSs5UJ9po8(9tHyjLq-Pn^wbiN25^LXf*fuPa-s<%1FMFY7sy5)sIhMOMaik`
z4Cags{0O(Y78T_eaWGgiGDL*t6{QyE=ai+UC?x0S7G&mtBT%8BC_gDDHP=dki!&r6
zRUtV)uehYBG`S?dNCBJ}HJl-_preqPR{|z96*7wzO7l`u(=zi?Q@FSo%owaev17x?
zAc`DL!6ikRdFj?5Hwr@C=$D@hO;a2U_KXay&Y(C4dDoGL!HL0{k%2cowFIGvkpUEa
z2;V?WL?lqZ{9I7ra4@(rGB6r}4D#S%@B|qIN(4|@Mg|n?a|?1(OE?&O7#a9o5_3}(
zQc^)41w{ZzzaI~SKS)2^Az<Z<48q7h0E@*NaWDiiGO&8(XQvi1GH?awmlh?bx@Cg$
z93MF7K)FE=<a!2021W*EaO`q0FoH5F10w@F0|SFT10w??0|NuA)^-MtjSLJ7OblEM
z3=C{wK{f_%1_lNmFq@Tuhk=)Yfq{{MkAaPWiGd%gN`Qd@Y)~)*3j-4a1B3W(2EoWp
z48pA286<r+F$imKW02Xwpnx!%59|&u1|9}(1~D+nz#s<E3bg_xqsE{Pc9{lN%R-@+
zNkS~s6krG0Cc>bjy^TSybq9kHx^)5!ybOX25)49MA3>~>gj&bTz{3Eu&J?S4CJfBr
zFyPwFU=}H4v7NzcKUzqMfz5@46v%6kkg~;US`gInVi3m*GlSeNWT(B2!2wG^$uRIR
z$TEmB$boHuxEvI0ARBlXxZo~#A<8artO&VkZ)0%BVwVyF4}&s;D1!<CyS%X4g_Z&|
z1$e+7^VZ(R;ETmF4F+BYO$IRrEhNjt;ZcI{SO8Yb&;n5t5{Q8~?9yZ4VbEs~WiUXp
M3tJ!tgQGPB0ENv<TL1t6

diff --git a/Partie_3/target/test-classes/ch/hepia/JoueurTest.class b/Partie_3/target/test-classes/ch/hepia/JoueurTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..6c1eb68d4853e00d11fada367c940922ce2fed72
GIT binary patch
literal 8931
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
b0kcdQEf_5str!>>xEL52tr=|@?HMEiAYEvy

literal 0
HcmV?d00001

-- 
GitLab