From 3188022394970a1c1b26eb651980975dd2a1e53c Mon Sep 17 00:00:00 2001
From: "michael.divia" <michael.divia@etu.hesge.ch>
Date: Thu, 7 Dec 2023 11:16:49 +0100
Subject: [PATCH] Part 3 0%

---
 Partie_3/.vscode/c_cpp_properties.json        |  18 +
 Partie_3/.vscode/launch.json                  |  24 +
 Partie_3/.vscode/settings.json                |  59 ++
 Partie_3/pom.xml                              |  71 ++
 Partie_3/src/main/java/ch/hepia/App.java      | 118 +++
 Partie_3/src/main/java/ch/hepia/Carte.java    |  86 ++
 .../src/main/java/ch/hepia/GameManager.java   | 414 ++++++++++
 Partie_3/src/main/java/ch/hepia/Hand.java     | 216 +++++
 .../src/main/java/ch/hepia/JeudeCarte.java    | 123 +++
 Partie_3/src/main/java/ch/hepia/Joueur.java   | 754 ++++++++++++++++++
 Partie_3/src/main/java/ch/hepia/Paquet.java   |  25 +
 .../src/test/java/ch/hepia/CarteTest.java     |  49 ++
 Partie_3/target/classes/ch/hepia/App.class    | Bin 0 -> 2431 bytes
 .../target/classes/ch/hepia/COULEUR.class     | Bin 0 -> 1044 bytes
 Partie_3/target/classes/ch/hepia/Carte.class  | Bin 0 -> 2722 bytes
 .../target/classes/ch/hepia/GameManager.class | Bin 0 -> 7799 bytes
 Partie_3/target/classes/ch/hepia/Hand$1.class | Bin 0 -> 1128 bytes
 Partie_3/target/classes/ch/hepia/Hand.class   | Bin 0 -> 4921 bytes
 .../classes/ch/hepia/JeudeCarte$1.class       | Bin 0 -> 1160 bytes
 .../target/classes/ch/hepia/JeudeCarte.class  | Bin 0 -> 3261 bytes
 Partie_3/target/classes/ch/hepia/Joueur.class | Bin 0 -> 663 bytes
 .../classes/ch/hepia/JoueurCroupier.class     | Bin 0 -> 3338 bytes
 .../classes/ch/hepia/JoueurHumain.class       | Bin 0 -> 4874 bytes
 .../classes/ch/hepia/JoueurOrdinateur.class   | Bin 0 -> 4837 bytes
 Partie_3/target/classes/ch/hepia/Paquet.class | Bin 0 -> 900 bytes
 .../compile/default-compile/createdFiles.lst  |   7 +
 .../compile/default-compile/inputFiles.lst    |   7 +
 .../test-classes/ch/hepia/CarteTest.class     | Bin 0 -> 1821 bytes
 28 files changed, 1971 insertions(+)
 create mode 100644 Partie_3/.vscode/c_cpp_properties.json
 create mode 100644 Partie_3/.vscode/launch.json
 create mode 100644 Partie_3/.vscode/settings.json
 create mode 100644 Partie_3/pom.xml
 create mode 100644 Partie_3/src/main/java/ch/hepia/App.java
 create mode 100644 Partie_3/src/main/java/ch/hepia/Carte.java
 create mode 100644 Partie_3/src/main/java/ch/hepia/GameManager.java
 create mode 100644 Partie_3/src/main/java/ch/hepia/Hand.java
 create mode 100644 Partie_3/src/main/java/ch/hepia/JeudeCarte.java
 create mode 100644 Partie_3/src/main/java/ch/hepia/Joueur.java
 create mode 100644 Partie_3/src/main/java/ch/hepia/Paquet.java
 create mode 100644 Partie_3/src/test/java/ch/hepia/CarteTest.java
 create mode 100644 Partie_3/target/classes/ch/hepia/App.class
 create mode 100644 Partie_3/target/classes/ch/hepia/COULEUR.class
 create mode 100644 Partie_3/target/classes/ch/hepia/Carte.class
 create mode 100644 Partie_3/target/classes/ch/hepia/GameManager.class
 create mode 100644 Partie_3/target/classes/ch/hepia/Hand$1.class
 create mode 100644 Partie_3/target/classes/ch/hepia/Hand.class
 create mode 100644 Partie_3/target/classes/ch/hepia/JeudeCarte$1.class
 create mode 100644 Partie_3/target/classes/ch/hepia/JeudeCarte.class
 create mode 100644 Partie_3/target/classes/ch/hepia/Joueur.class
 create mode 100644 Partie_3/target/classes/ch/hepia/JoueurCroupier.class
 create mode 100644 Partie_3/target/classes/ch/hepia/JoueurHumain.class
 create mode 100644 Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class
 create mode 100644 Partie_3/target/classes/ch/hepia/Paquet.class
 create mode 100644 Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
 create mode 100644 Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
 create mode 100644 Partie_3/target/test-classes/ch/hepia/CarteTest.class

diff --git a/Partie_3/.vscode/c_cpp_properties.json b/Partie_3/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..c2098a2
--- /dev/null
+++ b/Partie_3/.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_3/.vscode/launch.json b/Partie_3/.vscode/launch.json
new file mode 100644
index 0000000..7f873a9
--- /dev/null
+++ b/Partie_3/.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_3/.vscode/settings.json b/Partie_3/.vscode/settings.json
new file mode 100644
index 0000000..3e5eb95
--- /dev/null
+++ b/Partie_3/.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_3/pom.xml b/Partie_3/pom.xml
new file mode 100644
index 0000000..7cb8921
--- /dev/null
+++ b/Partie_3/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>ch.hepia</groupId>
+    <artifactId>Java_Card_Game</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <name>Java_Card_Game</name>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>20</maven.compiler.source>
+        <maven.compiler.target>20</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.openjfx</groupId>
+            <artifactId>javafx-controls</artifactId>
+            <version>19</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+            <plugins>
+                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+                <plugin>
+                    <artifactId>maven-clean-plugin</artifactId>
+                    <version>3.1.0</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>3.8.0</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>2.22.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>3.4.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>exec-maven-plugin</artifactId>
+                    <version>3.1.0</version>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>java</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <mainClass>ch.hepia.App</mainClass>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>
\ No newline at end of file
diff --git a/Partie_3/src/main/java/ch/hepia/App.java b/Partie_3/src/main/java/ch/hepia/App.java
new file mode 100644
index 0000000..000bcec
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/App.java
@@ -0,0 +1,118 @@
+package ch.hepia;
+
+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";
+    public static final String ANSI_GREEN = "\u001B[32m";
+    public static final String ANSI_YELLOW = "\u001B[33m";
+    public static final String ANSI_BLUE = "\u001B[34m";
+    public static final String ANSI_PURPLE = "\u001B[35m";
+    public static final String ANSI_CYAN = "\u001B[36m";
+    public static final String ANSI_WHITE = "\u001B[37m";
+
+    public static void BlackJack() {
+
+        System.out.print("\033[H\033[2J");
+        System.out.flush();
+
+        System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
+
+        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);
+                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 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 ? ");
+                App.in.next();
+            }
+
+            startMoney = App.in.nextInt();
+
+            // 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);
+            }
+        }
+
+        // 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();
+
+        System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
+
+        System.out.println(App.ANSI_PURPLE + "Game Over !" + App.ANSI_RESET);
+
+        App.in.close();
+    }
+
+    public static void main(String[] args) {
+
+        // Play 1 BlackJack Game
+        BlackJack();
+
+    }
+
+}
diff --git a/Partie_3/src/main/java/ch/hepia/Carte.java b/Partie_3/src/main/java/ch/hepia/Carte.java
new file mode 100644
index 0000000..6282220
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/Carte.java
@@ -0,0 +1,86 @@
+package ch.hepia;
+
+enum COULEUR {
+    coeur,
+    carreau,
+    pique,
+    trefle
+}
+
+public class Carte {
+
+    final private COULEUR couleur;
+    final private int rang;
+    final private int force;
+
+    private static final int NOMBRE_DE_RANGS = 13;
+
+    String[][] playingCards = {
+            { "๐ŸƒŸ", "๐Ÿ‚ฑ", "๐Ÿ‚ฒ", "๐Ÿ‚ณ", "๐Ÿ‚ด", "๐Ÿ‚ต", "๐Ÿ‚ถ", "๐Ÿ‚ท", "๐Ÿ‚ธ", "๐Ÿ‚น", "๐Ÿ‚บ", "๐Ÿ‚ป", "๐Ÿ‚ฝ", "๐Ÿ‚พ" },
+            { "๐ŸƒŸ", "๐Ÿƒ", "๐Ÿƒ‚", "๐Ÿƒƒ", "๐Ÿƒ„", "๐Ÿƒ…", "๐Ÿƒ†", "๐Ÿƒ‡", "๐Ÿƒˆ", "๐Ÿƒ‰", "๐ŸƒŠ", "๐Ÿƒ‹", "๐Ÿƒ", "๐ŸƒŽ" },
+            { "๐ŸƒŸ", "๐Ÿ‚ก", "๐Ÿ‚ข", "๐Ÿ‚ฃ", "๐Ÿ‚ค", "๐Ÿ‚ฅ", "๐Ÿ‚ฆ", "๐Ÿ‚ง", "๐Ÿ‚จ", "๐Ÿ‚ฉ", "๐Ÿ‚ช", "๐Ÿ‚ซ", "๐Ÿ‚ญ", "๐Ÿ‚ฎ" },
+            { "๐ŸƒŸ", "๐Ÿƒ‘", "๐Ÿƒ’", "๐Ÿƒ“", "๐Ÿƒ”", "๐Ÿƒ•", "๐Ÿƒ–", "๐Ÿƒ—", "๐Ÿƒ˜", "๐Ÿƒ™", "๐Ÿƒš", "๐Ÿƒ›", "๐Ÿƒ", "๐Ÿƒž" }
+    };
+
+    public Carte(COULEUR couleur, int rang) {
+
+        if (rang < 0 || rang > NOMBRE_DE_RANGS) {
+            throw new IllegalArgumentException("Carte invalide : rang incorrect");
+        }
+
+        this.couleur = couleur;
+        this.rang = rang;
+
+        if (rang <= 10) {
+            this.force = rang;
+        } else {
+            this.force = 10;
+        }
+
+    }
+
+    public COULEUR getCouleur() {
+
+        return this.couleur;
+
+    }
+
+    public int getRang() {
+
+        return this.rang;
+
+    }
+
+    public int getForce() {
+
+        return this.force;
+
+    }
+
+    public String getNomCouleur() {
+
+        String[] NOMS_COULEURS = { "โ™ฅ", "โ™ฆ", "โ™ ", "โ™ฃ" };
+        return NOMS_COULEURS[couleur.ordinal()];
+
+    }
+
+    public String getNomRang() {
+
+        String[] NOMS_RANGS = { "Joker", "As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valet", "Dame", "Roi" };
+        return NOMS_RANGS[rang];
+
+    }
+
+    public String getNomComplet() {
+        if (getRang() == 0) {
+
+            return "๐ŸƒŸ";
+
+        } else {
+
+            return playingCards[couleur.ordinal()][rang];
+
+        }
+    }
+
+}
diff --git a/Partie_3/src/main/java/ch/hepia/GameManager.java b/Partie_3/src/main/java/ch/hepia/GameManager.java
new file mode 100644
index 0000000..ed86be6
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/GameManager.java
@@ -0,0 +1,414 @@
+package ch.hepia;
+
+import java.util.ArrayList;
+
+public class GameManager {
+
+    private JeudeCarte Deck;
+    private ArrayList<Joueur> Players;
+    private JoueurCroupier Dealer;
+    private int Step;
+
+    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));
+            }
+        }
+
+        this.Dealer = new JoueurCroupier(Deck);
+    }
+
+    // Phase 1 (StartTurn):
+    // Ask the player how much he wan't to bid
+    public void StartTurn() {
+
+        this.Step = 0;
+
+        System.out.print("\033[H\033[2J");
+        System.out.flush();
+
+        System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
+
+        double bet;
+
+        System.out.println("Money : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+
+        // Ask the bid amount until a valide answer is given
+        while (true) {
+
+            System.out.print("How much do you want to bet (Min. 10) ? ");
+
+            // 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();
+            }
+
+            bet = App.in.nextDouble();
+
+            // Check if the player has enough money to place the bid
+            if (bet <= this.Players.get(0).GetMoney()) {
+
+                // 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;
+                }
+
+            } else {
+                System.out.println(App.ANSI_YELLOW + "You don't have enough money." + App.ANSI_RESET);
+            }
+        }
+
+        // Set the player bid for this turn
+        Players.get(0).SetBet(bet, 0);
+    }
+
+    // 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).GetNbHands(); 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
+                        .println("Dealer Strength : " + App.ANSI_PURPLE + this.Dealer.GetStrength(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("Strength of Hand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " : "
+                                + App.ANSI_PURPLE);
+                if (this.Players.get(0).GetStrength(HandNb) == 99) {
+                    System.out.println("BlackJack" + App.ANSI_RESET);
+                } else if (this.Players.get(0).GetStrength(HandNb) > 21) {
+                    System.out.println(
+                            this.Players.get(0).GetStrength(HandNb) + App.ANSI_RED + " [BUSTED]" + App.ANSI_RESET);
+                } else {
+                    System.out.println(this.Players.get(0).GetStrength(HandNb) + App.ANSI_RESET);
+                }
+
+                // 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");
+
+                // Insurance
+                // Can only insure if it's the first thing that the players does
+                // AND
+                // That he hasn't already insured during this round
+                if (this.Step == 0 && this.Dealer.HasOnlyAs()
+                        && !this.Players.get(0).HasInsured()) {
+                    CanInsure = true;
+                    System.out.println(App.ANSI_BLUE + "[i]" + App.ANSI_RESET + " Insurance against Dealer");
+                }
+
+                // Split
+                // Can only split if this hand can be split (if it wasn't already split AND if
+                // 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).GetNbHands() < 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");
+                }
+
+                // Double
+                // Can only double if this hand wasn't already doubled
+                // AND
+                // 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).GetNbCards(HandNb) == 2
+                        && this.Players.get(0).GetStrength(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");
+                }
+
+                // Draw a Card (Hit)
+                // Can NOT draw if this hand was doubled AND has already 3 cards
+                // AND
+                // 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).GetNbCards(HandNb) == 3)
+                        && !(this.Players.get(0).HasSplit(HandNb)
+                                && this.Players.get(0).GetCardStrength(HandNb, 0) == 1)
+                        && this.Players.get(0).GetStrength(HandNb) < 21) {
+                    CanDraw = true;
+                    System.out.println(App.ANSI_BLUE + "[h]" + App.ANSI_RESET + " Hit");
+                }
+
+                // Keep (Stand)
+                System.out.println(App.ANSI_BLUE + "[k]" + App.ANSI_RESET + " Keep current Hand");
+
+                // Ask for the player choice until a valide one is given
+                while (true) {
+                    System.out.print("> ");
+
+                    choice = App.in.next().charAt(0);
+
+                    // 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;
+            }
+            // If this point is reached (and not because of the insurance), all hands have
+            // been played
+            else {
+                EndTurn = true;
+            }
+        }
+
+    }
+
+    // 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() {
+
+        // Dealer draws card until he hits 17 or more
+        while (this.Dealer.GetStrength(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");
+
+        // 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.GetStrength(0) == 99) {
+            System.out.println("BlackJack" + App.ANSI_RESET);
+        } else if (this.Dealer.GetStrength(0) > 21) {
+            System.out.println(this.Dealer.GetStrength(0) + App.ANSI_RED + " [BUSTED]" + App.ANSI_RESET);
+        } else {
+            System.out.println(this.Dealer.GetStrength(0) + App.ANSI_RESET);
+        }
+
+        // Show the dealers hand
+        this.Dealer.ShowHands();
+
+        // 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);
+        }
+
+        // Go thew all hands of the player
+        for (int HandNb = 0; HandNb < this.Players.get(0).GetNbHands(); HandNb++) {
+
+            System.out.println("\nHand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " :");
+
+            // Show to bet amount of the hand
+            System.out.println("\tBet : " + App.ANSI_BLUE + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+
+            // Show strength of the hand of the player
+            // 99 = BlackJack
+            // >21 = Busted
+            // <=21 = show the strength
+            System.out.print("\tStrength : " + App.ANSI_PURPLE);
+            if (this.Players.get(0).GetStrength(HandNb) == 99) {
+                System.out.println("BlackJack" + App.ANSI_RESET);
+            } else if (this.Players.get(0).GetStrength(HandNb) > 21) {
+                System.out.println(
+                        this.Players.get(0).GetStrength(HandNb) + App.ANSI_RED + " [BUSTED]" + App.ANSI_RESET);
+            } else {
+                System.out.println(this.Players.get(0).GetStrength(HandNb) + App.ANSI_RESET);
+            }
+
+            // Show and apply gains and losses
+            System.out.print("\tResult : ");
+            // If the player is Busted (strength > 21 but not BlackJack (99))
+            if (this.Players.get(0).GetStrength(HandNb) > 21 && this.Players.get(0).GetStrength(HandNb) != 99) {
+                // Show player loss
+                System.out.println(App.ANSI_RED + "-" + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+            }
+            // If it's a Draw
+            else if (this.Dealer.GetStrength(0) == this.Players.get(0).GetStrength(HandNb)) {
+                // Player get's back his bet
+                System.out.println(App.ANSI_BLUE + "ยฑ0" + App.ANSI_RESET);
+                this.Players.get(0).AddMoney(this.Players.get(0).GetBet(HandNb));
+            }
+            // If the player has done a BlackJack
+            else if (this.Players.get(0).GetStrength(HandNb) == 99) {
+                // Player gets payed 1.5 to 1
+                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);
+            }
+            // If the Dealer is Busted (strength > 21 but not BlackJack (99))
+            else if (this.Dealer.GetStrength(0) > 21 && this.Dealer.GetStrength(0) != 99) {
+                // Player wins and get payed 1 to 1
+                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 the Dealer has a better score
+            else if (this.Players.get(0).GetStrength(HandNb) < this.Dealer.GetStrength(0)) {
+                // Show player loss
+                System.out.println(App.ANSI_RED + "-" + this.Players.get(0).GetBet(HandNb) + App.ANSI_RESET);
+            }
+            // If the Player has a better score
+            else if (this.Players.get(0).GetStrength(HandNb) > this.Dealer.GetStrength(0)) {
+                // Player wins and get payed 1 to 1
+                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);
+            }
+
+        }
+
+        // Check if the player had insurance
+        if (this.Players.get(0).HasInsured()) {
+
+            System.out.print("Insurance : ");
+
+            // If the Dealer did a BackJack
+            if (this.Dealer.GetStrength(0) == 99) {
+                // Player gets payed back 2 to 1
+                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 {
+                // Show player loss
+                System.out.println(App.ANSI_RED + "-" + (this.Players.get(0).GetInsured()) + App.ANSI_RESET);
+            }
+        }
+
+        // Show the final player balance
+        System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+
+        System.out.print("> ");
+
+        // Wait for a simple input of the player
+        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));
+        }
+
+        // Reset all hands
+        this.Dealer.Reset(this.Deck);
+        for (Joueur Player : this.Players) {
+            Player.Reset(this.Deck);
+        }
+
+        return false;
+    }
+
+}
diff --git a/Partie_3/src/main/java/ch/hepia/Hand.java b/Partie_3/src/main/java/ch/hepia/Hand.java
new file mode 100644
index 0000000..9b5ffe0
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/Hand.java
@@ -0,0 +1,216 @@
+package ch.hepia;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public class Hand implements Comparable<Hand> {
+
+    private ArrayList<Carte> Hand;
+    private double Bet;
+    private boolean Splitted;
+    private boolean Doubled;
+
+    public Hand(Carte... cartes) {
+
+        this.Hand = new ArrayList<>();
+
+        for (Carte carte : cartes) {
+
+            Hand.add(carte);
+
+        }
+
+        this.Splitted = false;
+        this.Doubled = false;
+        this.Bet = 0;
+    }
+
+    public Hand(JeudeCarte game, int nb) {
+
+        this.Hand = new ArrayList<>();
+
+        this.DrawCardFromGame(game, nb);
+
+        this.Splitted = false;
+        this.Doubled = false;
+    }
+
+    public boolean HasDoubled() {
+        return this.Doubled;
+    }
+
+    public void Double() {
+        this.Doubled = true;
+        this.Bet *= 2;
+    }
+
+    public boolean HasSplit() {
+        return this.Splitted;
+    }
+
+    public void Splitted() {
+        this.Splitted = true;
+    }
+
+    public int NbCard() {
+        return this.Hand.size();
+    }
+
+    public void SetBet(double amount) {
+        if (amount < 0) {
+            throw new RuntimeException("Can't bet negative amount of money.");
+        }
+
+        this.Bet = amount;
+    }
+
+    public double GetBet() {
+        return this.Bet;
+    }
+
+    public Carte GetCarte(int cardNb) {
+        return this.Hand.get(cardNb);
+    }
+
+    public void AddCardToHand(Carte... cartes) {
+
+        for (Carte carte : cartes) {
+
+            this.Hand.add(carte);
+
+        }
+    }
+
+    public void RemoveCardFromHand(Carte... cartes) {
+
+        for (Carte carte : cartes) {
+
+            this.Hand.remove(carte);
+
+        }
+    }
+
+    public void DrawCardFromGame(JeudeCarte game) {
+
+        this.AddCardToHand(game.GetTopCarteOfGame());
+
+        game.RemoveCarteFromGame(game.GetTopCarteOfGame());
+
+    }
+
+    public void DrawCardFromGame(JeudeCarte game, int nb) {
+
+        for (int x = 0; x < nb; x++) {
+            this.DrawCardFromGame(game);
+        }
+
+    }
+
+    public void SortHand() {
+
+        Collections.sort(Hand, new Comparator<Carte>() {
+
+            public int compare(Carte carte1, Carte carte2) {
+
+                int comparaisonCouleur = carte1.getCouleur().compareTo(carte2.getCouleur());
+
+                if (comparaisonCouleur == 0) {
+
+                    return Integer.compare(carte1.getRang(), carte2.getRang());
+
+                } else {
+
+                    return comparaisonCouleur;
+                }
+            }
+
+        });
+
+    }
+
+    public int GetStrength() {
+
+        int force = 0;
+        int as = 0;
+
+        // Add strength of cards and count how much Asses there is
+        for (Carte carte : Hand) {
+            if (carte.getForce() == 1) {
+                as++;
+            }
+            force += carte.getForce();
+        }
+
+        // Test how many Asses we can but to 11 without going over 21
+        while (force < 21 && as > 0) {
+            force += 10;
+
+            as--;
+
+            if (force > 21) {
+                force -= 10;
+                as = 0;
+            }
+        }
+
+        // Edge Case = BlackJack
+        // Check if a 21 is a BlackJack (As + 10) or a combination of 3 cards
+        // (simple 21)
+        if (force == 21) {
+
+            boolean isAs = false;
+            boolean is10 = false;
+            boolean isOther = false;
+
+            for (Carte carte : Hand) {
+
+                switch (carte.getForce()) {
+                    case 1:
+                        isAs = true;
+                        break;
+                    case 10:
+                        is10 = true;
+                        break;
+                    default:
+                        isOther = true;
+                        break;
+                }
+            }
+
+            if (isAs && is10 && !isOther) {
+                return 99;
+            }
+        }
+
+        return force;
+    }
+
+    public void ShowHand() {
+
+        for (Carte carte : Hand) {
+
+            System.out.print(carte.getNomComplet() + " ");
+
+        }
+
+        System.out.println("");
+    }
+
+    // Not used but asked for Part 2
+    @Override
+    public int compareTo(Hand otherHand) {
+
+        int Hand_1_Strength = this.GetStrength();
+        int Hand_2_Strength = otherHand.GetStrength();
+
+        if (Hand_1_Strength > Hand_2_Strength) {
+            return 1;
+        } else if (Hand_1_Strength < Hand_2_Strength) {
+            return -1;
+        } else {
+            return 0;
+        }
+
+    }
+}
diff --git a/Partie_3/src/main/java/ch/hepia/JeudeCarte.java b/Partie_3/src/main/java/ch/hepia/JeudeCarte.java
new file mode 100644
index 0000000..e6bd3c6
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/JeudeCarte.java
@@ -0,0 +1,123 @@
+package ch.hepia;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+public class JeudeCarte {
+
+    private List<Carte> jeuDeCartes;
+
+    public JeudeCarte(int nb) {
+
+        jeuDeCartes = new ArrayList<>();
+
+        for (COULEUR couleur : COULEUR.values()) {
+
+            for (int rang = 7; rang <= (nb / 4) + 6; rang++) {
+
+                if (rang > 13) {
+                    jeuDeCartes.add(new Carte(couleur, rang - 13));
+                } else {
+                    jeuDeCartes.add(new Carte(couleur, rang));
+                }
+
+            }
+
+        }
+
+        if (nb % 4 != 0) {
+
+            for (int x = 0; x < nb % 4; x++) {
+
+                jeuDeCartes.add(new Carte(COULEUR.carreau, 0));
+
+            }
+        }
+
+        Collections.sort(jeuDeCartes, new Comparator<Carte>() {
+
+            public int compare(Carte carte1, Carte carte2) {
+
+                int comparaisonCouleur = carte1.getCouleur().compareTo(carte2.getCouleur());
+
+                if (comparaisonCouleur == 0) {
+
+                    return Integer.compare(carte1.getRang(), carte2.getRang());
+
+                } else {
+
+                    return comparaisonCouleur;
+                }
+            }
+
+        });
+
+    }
+
+    public JeudeCarte(Paquet paquet) {
+
+        jeuDeCartes = new ArrayList<>();
+
+        List<JeudeCarte> paquets = paquet.getPaquet();
+
+        for (JeudeCarte deck : paquets) {
+            List<Carte> cartes = deck.getCartes();
+            jeuDeCartes.addAll(cartes);
+        }
+
+    }
+
+    public List<Carte> getCartes() {
+        return this.jeuDeCartes;
+    }
+
+    public Carte GetTopCarteOfGame() {
+
+        return this.jeuDeCartes.get(0);
+
+    }
+
+    public void AddCarteToGame(Carte... cartes) {
+
+        for (Carte carte : cartes) {
+
+            this.jeuDeCartes.add(carte);
+
+        }
+    }
+
+    public void RemoveCarteFromGame(Carte... cartes) {
+
+        for (Carte carte : cartes) {
+
+            this.jeuDeCartes.remove(carte);
+
+        }
+    }
+
+    public void shuffle() {
+
+        Collections.shuffle(jeuDeCartes);
+
+    }
+
+    public int GetNbCards() {
+        return this.jeuDeCartes.size();
+    }
+
+    public void ShowPaquet() {
+
+        System.out.println("------- Paquet -------");
+
+        for (Carte carte : jeuDeCartes) {
+
+            System.out.println(carte.getNomComplet());
+
+        }
+
+        System.out.println("----------------------");
+    }
+
+}
diff --git a/Partie_3/src/main/java/ch/hepia/Joueur.java b/Partie_3/src/main/java/ch/hepia/Joueur.java
new file mode 100644
index 0000000..07d9987
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/Joueur.java
@@ -0,0 +1,754 @@
+package ch.hepia;
+
+import java.util.ArrayList;
+
+interface Joueur {
+
+    // Set the Play strategy
+    public void SetStrategy();
+
+    // Add amount of money to the player balance
+    public void AddMoney(double amount);
+
+    // Remove amount of money from the player balance
+    public void RemoveMoney(double amount);
+
+    // Get the current balance of the player
+    public double GetMoney();
+
+    // Set bet amount on specific player hand
+    public void SetBet(double amount, int handNb);
+
+    // Get the bet amount from specific hand
+    public double GetBet(int handNb);
+
+    // Draw 1 card in specific hand from specific Deck
+    public void DrawCard(int handNb, JeudeCarte Jeu);
+
+    // Get a specific card strength from a specific hand
+    public int GetCardStrength(int handNb, int cardNb);
+
+    // Get number of cards in specific hand
+    public int GetNbCards(int handNb);
+
+    // Show specific hand in terminal
+    public void ShowHand(int handNb);
+
+    // Show all hands in terminal
+    public void ShowHands();
+
+    // Get the number of hands of the player
+    public int GetNbHands();
+
+    // Get the strength of a specific hand
+    public int GetStrength(int handNb);
+
+    // Double the bet on specific hand
+    public void Double(int handNb, JeudeCarte Jeu);
+
+    // Check if a specific hand has been doubled
+    public boolean HasDoubled(int handNb);
+
+    // Check if a specific hand can be split
+    public boolean CanSplit(int handNb);
+
+    // Split a specific hand
+    public void Split(int handNb, JeudeCarte Jeu);
+
+    // Check if a specific hand was splitted
+    public boolean HasSplit(int handNb);
+
+    // Insure the player
+    public void Insure();
+
+    // Get player insured amount
+    public double GetInsured();
+
+    // Has the player insured himself
+    public boolean HasInsured();
+
+    // Reset player for next turn
+    public void Reset(JeudeCarte Jeu);
+}
+
+// Human Player
+class JoueurHumain implements Joueur {
+
+    private ArrayList<Hand> Hands;
+    private double Money;
+    private double Insurance;
+    private boolean Insured;
+
+    public JoueurHumain(JeudeCarte Jeu, int Money) {
+
+        this.Hands = new ArrayList<>();
+
+        // At creation, player get's 1 hand with 2 cards
+        this.Hands.add(new Hand(Jeu, 2));
+
+        this.Hands.get(0).SetBet(0);
+
+        this.Money = Money;
+        this.Insurance = 0;
+        this.Insured = false;
+    }
+
+    public void SetStrategy() {
+        // Human player has no strategy
+        throw new RuntimeException("Humain Player has no Strategy.");
+    }
+
+    public void AddMoney(double amount) {
+
+        // Check if the amount is positif and that it will not create an Overflow
+        if (amount < 0) {
+            throw new RuntimeException("Can't add negative amount of Money.");
+        } else if (this.Money > 0 && this.Money + amount < 0) {
+            throw new RuntimeException("Money Overflow.");
+        }
+
+        // Add money to current balance
+        this.Money += amount;
+    }
+
+    public void RemoveMoney(double amount) {
+
+        // Check if the amount is positif and that it will not create an Underflow
+        if (amount < 0) {
+            throw new RuntimeException("Can't subtract negative amount of Money.");
+        } else if (this.Money < 0 && this.Money + amount > 0) {
+            throw new RuntimeException("Money Underflow.");
+        }
+
+        // Remove money from current balance
+        this.Money -= amount;
+    }
+
+    public double GetMoney() {
+        return this.Money;
+    }
+
+    public void SetBet(double amount, int handNb) {
+
+        // Check if the amount is positif
+        if (amount <= 0) {
+            throw new RuntimeException("Can't bet a negative or null amount.");
+        }
+        // Check if the player has enough money in his balance
+        else if (amount > this.Money) {
+            throw new RuntimeException("Can't bet more than the Money you have.");
+        }
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Remove amount from player balance
+        this.Money -= amount;
+
+        // Set bet on player hand
+        this.Hands.get(handNb).SetBet(amount);
+    }
+
+    public double GetBet(int handNb) {
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Get the bet amount on this hand
+        return this.Hands.get(handNb).GetBet();
+    }
+
+    public void DrawCard(int handNb, JeudeCarte Jeu) {
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Draw 1 card from of Deck in hand
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+    }
+
+    public int GetCardStrength(int handNb, int cardNb) {
+        return this.Hands.get(handNb).GetCarte(cardNb).getForce();
+    }
+
+    public int GetNbCards(int handNb) {
+        return this.Hands.get(handNb).NbCard();
+    }
+
+    public void ShowHand(int handNb) {
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Show hand in terminal
+        this.Hands.get(handNb).ShowHand();
+    }
+
+    public void ShowHands() {
+
+        // Go threw all hands
+        for (Hand hand : this.Hands) {
+
+            // Show the hand in terminal
+            hand.ShowHand();
+        }
+    }
+
+    public int GetNbHands() {
+        return this.Hands.size();
+    }
+
+    public int GetStrength(int handNb) {
+
+        // If the strength is a BlackJack
+        // AND
+        // The hand was splitted
+        // OR
+        // It's not the 1rst hand
+        // OR
+        // There are more than 2 cards in the hand
+        if (this.Hands.get(handNb).GetStrength() == 99
+                && (this.Hands.get(handNb).HasSplit() || handNb != 0 || this.Hands.get(handNb).NbCard() != 2)) {
+            // Than it is not a BlackJack but a simple 21
+            return 21;
+        } else {
+            return this.Hands.get(handNb).GetStrength();
+        }
+
+    }
+
+    public void Double(int handNb, JeudeCarte Jeu) {
+
+        // Remove bet amount from money
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
+
+        // Double the bet in the hand
+        this.Hands.get(handNb).Double();
+
+        // If hte player doubles a hand he must draw 1 card
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+    }
+
+    public boolean HasDoubled(int handNb) {
+        return this.Hands.get(handNb).HasDoubled();
+    }
+
+    public boolean CanSplit(int handNb) {
+
+        // Hand can be split
+        // If it hasn't already been spit with an As
+        // AND
+        // if the 2 cards are the same
+        // AND
+        // if there is only 2 cards in the hands
+        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 void Split(int handNb, JeudeCarte Jeu) {
+
+        // Player can only have 3 hands
+        if (this.Hands.size() == 3) {
+            throw new RuntimeException("Max number of splits.");
+        }
+
+        // Get the 2nd card of the hand we want to split
+        Carte card = this.Hands.get(handNb).GetCarte(1);
+
+        // Create a new hand with this card in it
+        this.Hands.add(new Hand(card));
+
+        // Remove the card from the 1rst hand
+        this.Hands.get(handNb).RemoveCardFromHand(card);
+
+        // Set the hand as splitted
+        this.Hands.get(handNb).Splitted();
+
+        // Set the new hand as splitted
+        this.Hands.get(this.Hands.size() - 1).Splitted();
+
+        // Set the bet of the new hand to the same as the splitted hand
+        this.Hands.get(this.Hands.size() - 1).SetBet(this.Hands.get(handNb).GetBet());
+
+        // Remove the money from the player balance
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
+
+        // Draw 1 card in each hands
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+        this.Hands.get(this.Hands.size() - 1).DrawCardFromGame(Jeu);
+    }
+
+    public boolean HasSplit(int handNb) {
+        return this.Hands.get(handNb).HasSplit();
+    }
+
+    public void Insure() {
+
+        this.Insured = true;
+
+        // Set the insurance the half the bet of the only player hand
+        this.Insurance = this.Hands.get(0).GetBet() / 2;
+
+        // Remove the insurance from the player balance
+        this.RemoveMoney(this.Insurance);
+    }
+
+    public double GetInsured() {
+        return this.Insurance;
+    }
+
+    public boolean HasInsured() {
+        return this.Insured;
+    }
+
+    public void Reset(JeudeCarte Jeu) {
+
+        this.Insured = false;
+
+        // Reset hands
+        this.Hands = new ArrayList<>();
+
+        // Draw 2 card from Deck
+        this.Hands.add(new Hand(Jeu, 2));
+
+        this.Hands.get(0).SetBet(0);
+    }
+}
+
+// Computer Player
+class JoueurOrdinateur implements Joueur {
+
+    private ArrayList<Hand> Hands;
+    private double Money;
+    private double Insurance;
+    private boolean Insured;
+
+    public JoueurOrdinateur(JeudeCarte Jeu, int Money) {
+
+        this.Hands = new ArrayList<>();
+
+        // At creation, player get's 1 hand with 2 cards
+        Hands.add(new Hand(Jeu, 2));
+
+        Hands.get(0).SetBet(0);
+
+        this.Money = Money;
+        this.Insurance = 0;
+        this.Insured = false;
+    }
+
+    public void SetStrategy() {
+        // TODO
+        // Will be implemented in Part 3 of the project
+    }
+
+    public void AddMoney(double amount) {
+
+        // Check if the amount is positif and that it will not create an Overflow
+        if (amount < 0) {
+            throw new RuntimeException("Can't add negative amount of Money.");
+        } else if (this.Money > 0 && this.Money + amount < 0) {
+            throw new RuntimeException("Money Overflow.");
+        }
+
+        // Add amount from current player balance
+        this.Money += amount;
+    }
+
+    public void RemoveMoney(double amount) {
+
+        // Check if the amount is positif and that it will not create an Underflow
+        if (amount < 0) {
+            throw new RuntimeException("Can't subtract negative amount of Money.");
+        } else if (this.Money < 0 && this.Money + amount > 0) {
+            throw new RuntimeException("Money Underflow.");
+        }
+
+        // Remove amount from current player balance
+        this.Money -= amount;
+    }
+
+    public double GetMoney() {
+        return this.Money;
+    }
+
+    public void SetBet(double amount, int handNb) {
+
+        // Check if the amount is positif
+        if (amount <= 0) {
+            throw new RuntimeException("Can't bet a negative or null amount.");
+        }
+        // Check if the player has enough money in his balance
+        else if (amount > this.Money) {
+            throw new RuntimeException("Can't bet more than the Money you have.");
+        }
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Remove amount from player balance
+        this.Money -= amount;
+
+        // Set bet on player hand
+        this.Hands.get(handNb).SetBet(amount);
+    }
+
+    public double GetBet(int handNb) {
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Get the bet amount on this hand
+        return this.Hands.get(handNb).GetBet();
+    }
+
+    public void DrawCard(int handNb, JeudeCarte Jeu) {
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Draw 1 card from of Deck in hand
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+    }
+
+    public int GetCardStrength(int handNb, int cardNb) {
+        return this.Hands.get(handNb).GetCarte(cardNb).getForce();
+    }
+
+    public int GetNbCards(int handNb) {
+        return this.Hands.get(handNb).NbCard();
+    }
+
+    public void ShowHand(int handNb) {
+
+        // Check if the hand ID is valide
+        if (handNb < 0 || handNb > Hands.size()) {
+            throw new RuntimeException("Hand number not valid.");
+        }
+
+        // Show hand in terminal
+        this.Hands.get(handNb).ShowHand();
+    }
+
+    public void ShowHands() {
+
+        // Go threw all hands
+        for (Hand hand : this.Hands) {
+
+            // Show the hand in terminal
+            hand.ShowHand();
+        }
+    }
+
+    public int GetNbHands() {
+        return this.Hands.size();
+    }
+
+    public int GetStrength(int handNb) {
+
+        // If the strength is a BlackJack
+        // AND
+        // The hand was splitted
+        // OR
+        // It's not the 1rst hand
+        // OR
+        // There are more than 2 cards in the hand
+        if (this.Hands.get(handNb).GetStrength() == 99
+                && (this.Hands.get(handNb).HasSplit() || handNb != 0 || this.Hands.get(handNb).NbCard() != 2)) {
+            // Than it is not a BlackJack but a simple 21
+            return 21;
+        } else {
+            return this.Hands.get(handNb).GetStrength();
+        }
+
+    }
+
+    public void Double(int handNb, JeudeCarte Jeu) {
+
+        // Remove bet amount from money
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
+
+        // Double the bet in the hand
+        this.Hands.get(handNb).Double();
+
+        // If hte player doubles a hand he must draw 1 card
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+    }
+
+    public boolean HasDoubled(int handNb) {
+        return this.Hands.get(handNb).HasDoubled();
+    }
+
+    public boolean CanSplit(int handNb) {
+
+        // Hand can be split
+        // If it hasn't already been spit with an As
+        // AND
+        // if the 2 cards are the same
+        // AND
+        // if there is only 2 cards in the hands
+        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 void Split(int handNb, JeudeCarte Jeu) {
+
+        // Player can only have 3 hands
+        if (this.Hands.size() == 3) {
+            throw new RuntimeException("Max number of splits.");
+        }
+
+        // Get the 2nd card of the hand we want to split
+        Carte card = this.Hands.get(handNb).GetCarte(1);
+
+        // Create a new hand with this card in it
+        this.Hands.add(new Hand(card));
+
+        // Remove the card from the 1rst hand
+        this.Hands.get(handNb).RemoveCardFromHand(card);
+
+        // Set the hand as splitted
+        this.Hands.get(handNb).Splitted();
+
+        // Set the new hand as splitted
+        this.Hands.get(this.Hands.size() - 1).Splitted();
+
+        // Set the bet of the new hand to the same as the splitted hand
+        this.Hands.get(this.Hands.size() - 1).SetBet(this.Hands.get(handNb).GetBet());
+
+        // Remove the money from the player balance
+        this.RemoveMoney(this.Hands.get(handNb).GetBet());
+
+        // Draw 1 card in each hands
+        this.Hands.get(handNb).DrawCardFromGame(Jeu);
+        this.Hands.get(this.Hands.size() - 1).DrawCardFromGame(Jeu);
+    }
+
+    public boolean HasSplit(int handNb) {
+        return this.Hands.get(handNb).HasSplit();
+    }
+
+    public void Insure() {
+
+        this.Insured = true;
+
+        // Set the insurance the half the bet of the only player hand
+        this.Insurance = this.Hands.get(0).GetBet() / 2;
+
+        // Remove the insurance from the player balance
+        this.RemoveMoney(this.Insurance);
+    }
+
+    public double GetInsured() {
+        return this.Insurance;
+    }
+
+    public boolean HasInsured() {
+        return this.Insured;
+    }
+
+    public void Reset(JeudeCarte Jeu) {
+
+        this.Insured = false;
+
+        // Reset hands
+        this.Hands = new ArrayList<>();
+
+        // Draw 2 card from Deck
+        this.Hands.add(new Hand(Jeu, 2));
+
+        this.Hands.get(0).SetBet(0);
+    }
+}
+
+// Dealer
+class JoueurCroupier implements Joueur {
+
+    private Hand Hand;
+
+    public JoueurCroupier(JeudeCarte Jeu) {
+        this.Hand = new Hand(Jeu, 1);
+    }
+
+    public void SetStrategy() {
+        // Dealer has no strategy
+        throw new RuntimeException("Dealer has no Strategy.");
+    }
+
+    public void AddMoney(double amount) {
+        // Dealer has infinite amount of money
+        throw new RuntimeException("Dealer has no Money.");
+    }
+
+    public void RemoveMoney(double amount) {
+        // Dealer has infinite amount of money
+        throw new RuntimeException("Dealer has no Money.");
+    }
+
+    public double GetMoney() {
+        // Dealer has infinite amount of money
+        throw new RuntimeException("Dealer has no Money.");
+    }
+
+    public void SetBet(double amount, int handNb) {
+        // Dealer doesn't bet
+        throw new RuntimeException("Dealer doesn't Bet.");
+    }
+
+    public double GetBet(int handNb) {
+        // Dealer doesn't bet
+        throw new RuntimeException("Dealer doesn't Bet.");
+    }
+
+    public void DrawCard(int handNb, JeudeCarte Jeu) {
+
+        // Dealer has only 1 hand
+        if (handNb != 0) {
+            throw new RuntimeException("Dealer has only 1 hand.");
+        }
+
+        // Draw 1 card from of Deck in hand
+        this.Hand.DrawCardFromGame(Jeu);
+    }
+
+    public int GetCardStrength(int handNb, int cardNb) {
+        return this.Hand.GetCarte(cardNb).getForce();
+    }
+
+    public int GetNbCards(int handNb) {
+        return this.Hand.NbCard();
+    }
+
+    public void ShowHand(int handNb) {
+
+        // Dealer has only 1 hand
+        if (handNb != 0) {
+            throw new RuntimeException("Dealer has only 1 hand.");
+        }
+
+        // Show hand in terminal
+        this.Hand.ShowHand();
+    }
+
+    public void ShowHands() {
+
+        // Show hand in terminal (only 1 for the Dealer)
+        this.Hand.ShowHand();
+    }
+
+    public int GetNbHands() {
+
+        // Dealer has only 1 hand
+        return 1;
+    }
+
+    public int GetStrength(int handNb) {
+
+        // Dealer has only 1 hand
+        if (handNb != 0) {
+            throw new RuntimeException("Bank has only 1 hand.");
+        }
+
+        // If the strength is a BlackJack
+        // AND
+        // The hand was splitted
+        // OR
+        // It's not the 1rst hand
+        // OR
+        // There are more than 2 cards in the hand
+        if (this.Hand.GetStrength() == 99
+                && (this.Hand.HasSplit() || handNb != 0 || this.Hand.NbCard() != 2)) {
+            // Than it is not a BlackJack but a simple 21
+            return 21;
+        } else {
+            return this.Hand.GetStrength();
+        }
+
+    }
+
+    public void Double(int handNb, JeudeCarte Jeu) {
+        // Dealer does not bet
+        throw new RuntimeException("Dealer can't Double.");
+    }
+
+    public boolean HasDoubled(int handNb) {
+        // Dealer does not bet
+        throw new RuntimeException("Dealer can't Double.");
+    }
+
+    public boolean CanSplit(int handNb) {
+        // Dealer can't split
+        throw new RuntimeException("Dealer can't Split.");
+    }
+
+    public void Split(int handNb, JeudeCarte Jeu) {
+        // Dealer can't split
+        throw new RuntimeException("Dealer can't Split.");
+
+    }
+
+    public boolean HasSplit(int handNb) {
+        // Dealer can't split
+        throw new RuntimeException("Dealer can't split.");
+    }
+
+    public void Insure() {
+        // Dealer can't insure himself against himself
+        throw new RuntimeException("Dealer can't get Insurance.");
+    }
+
+    public double GetInsured() {
+        // Dealer can't insure himself against himself
+        throw new RuntimeException("Dealer can't get Insurance.");
+    }
+
+    public boolean HasInsured() {
+        // Dealer can't insure himself against himself
+        throw new RuntimeException("Dealer can't get Insurance.");
+
+    }
+
+    public void Reset(JeudeCarte Jeu) {
+
+        // Create a new hand with 1 card
+        this.Hand = new Hand(Jeu, 1);
+    }
+
+    // Check if the Dealer only has an As in this hand (for Insurance)
+    public boolean HasOnlyAs() {
+
+        // If the first card in hand is an As
+        // AND
+        // There is only 1 card in the hand
+        if (this.Hand.GetCarte(0).getNomRang() == "As" && this.Hand.NbCard() == 1) {
+            return true;
+        }
+
+        return false;
+    }
+
+}
diff --git a/Partie_3/src/main/java/ch/hepia/Paquet.java b/Partie_3/src/main/java/ch/hepia/Paquet.java
new file mode 100644
index 0000000..43311c5
--- /dev/null
+++ b/Partie_3/src/main/java/ch/hepia/Paquet.java
@@ -0,0 +1,25 @@
+package ch.hepia;
+
+import java.util.List;
+import java.util.ArrayList;
+
+public class Paquet {
+
+    private List<JeudeCarte> paquet;
+
+    public Paquet(int nb_paquet, int nb_carte) {
+
+        paquet = new ArrayList<>();
+
+        for (int i = 0; i < nb_paquet; ++i) {
+            JeudeCarte jeuDeCarte = new JeudeCarte(nb_carte);
+            jeuDeCarte.shuffle();
+            paquet.add(jeuDeCarte);
+        }
+
+    }
+
+    public List<JeudeCarte> getPaquet() {
+        return paquet;
+    }
+}
diff --git a/Partie_3/src/test/java/ch/hepia/CarteTest.java b/Partie_3/src/test/java/ch/hepia/CarteTest.java
new file mode 100644
index 0000000..f1ac133
--- /dev/null
+++ b/Partie_3/src/test/java/ch/hepia/CarteTest.java
@@ -0,0 +1,49 @@
+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/target/classes/ch/hepia/App.class b/Partie_3/target/classes/ch/hepia/App.class
new file mode 100644
index 0000000000000000000000000000000000000000..7b2a1df8e106d74a6b78784c9f545cf4350d308a
GIT binary patch
literal 2431
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

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/COULEUR.class b/Partie_3/target/classes/ch/hepia/COULEUR.class
new file mode 100644
index 0000000000000000000000000000000000000000..c38a76f38b5f56aec3100849ad749e77c1255bcd
GIT binary patch
literal 1044
zcmX^0Z`VEs1_lQPGj;|hMh1c84E>DMg3LsHXa7(i*U%t#1{OvJzO2NuME#t^ymWon
zywY4o2G->K)Y2kG1|c7G_126G?8%8mMX8CUj0~&=nT4gPj0|igMX6~ysf-NVu707u
zDq)U3p{~J<48qaav~$=b=Vaz(me?^eFl%UrF*2|?=clA{FtBnlFfs`8FbFXSGcvH*
zK$VDT_#hk?TvC*omu~H;8OF)L$RNtYz{<eJ!N3mUNboSQgE$-@jx-Mg2Z+N7;>htZ
za5AugSPDE0TnyZd4E#Qsd8vM-xk;%-A&E&KcMJLCCnx5FB^G6Z_+UXU24)69Mh2FW
zjLc$22DY-qoYK@{Mg~z0O)S3RV$fjFVrS4~WDr1dZDnyuYAz3hHiHf$17~7UQDS9s
zenBN8gBG%%{FAa$lS`~Uk-P~L@&ttrJJ@FbG)4wBWNpx((8LU3ki!jl7<3s785vBG
zwK(S_78hG1*#kEN;bu_uTQf3n1?QI*C8xS&f&z!jIkBiDRS%?yk%2QfGd(Y{q_ilN
zkwFE?ERaSUOvl(+I~Xu9GB7hRFt9pEg5ryT!9fxfRbZNffelP^f@lFLQ1mb`Ft9Li
zFz_(&GB7gmF)%Q+Ft9LyK*(+e#z-N4=Ismun;AsF95EI!M;y$NWCe4iz#JJiFh`bs
zF9TyF^Ckw7;7FED4C29&teY65f+N{BF~|mQW{}^=z`(%7pvb_$AjZH7wwafKl|hPu
zjX|A(oxy~GnL!Dx0;EcaK^W>HLk4EBkJz=eWwtXYBMf0<U}Ru`YT^O2*%?$oUSr^7
zP-ReqYBytG1#1`E#2_E(&8)RA(gx&8UuNkY4C*=?z!rj>1Tl>f?gUN-T?Rd<8CncX
eVDq_z7`1jV=pSHU#I28s!3b=oF@p)1HU$7;|I5Vy

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/Carte.class b/Partie_3/target/classes/ch/hepia/Carte.class
new file mode 100644
index 0000000000000000000000000000000000000000..bb77e1a2cf2b2c55d68d07f73a271f6ad870f1c6
GIT binary patch
literal 2722
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
I796AJ03*At7ytkO

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/GameManager.class b/Partie_3/target/classes/ch/hepia/GameManager.class
new file mode 100644
index 0000000000000000000000000000000000000000..deab1ca162c602940cf4df190de3e8751b0ad034
GIT binary patch
literal 7799
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
KOkhl6kOTl3jF=bz

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/Hand$1.class b/Partie_3/target/classes/ch/hepia/Hand$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e2750c39ec1ee0ffda4f715b78a572443a2da898
GIT binary patch
literal 1128
zcmX^0Z`VEs1_lQP2X+P~Mh5=m4E>DMg3LsHkHowb6+?Cg7Dfhvti-ZJ{hY+SbbbG%
ztkmQZb_O;^1`)7mX-Q^|zH@$VL1Iy2Nq!L{16xT(X0eI^BLlw=idoi-3~V-;d6^}4
zj0{2=XmXlij0`N!`6;QK42%rCJPhm%99#^{4E#I{oD2et49prJ1^hmld8vM-xk;%-
zA&E&jsf-LlKKaRsIbn%KnIJw?kOkxbMg~DtD^v`v85!7<!46GjWKc$OfpcO}NvbtM
zIfSq2$;BYSAjQrg$;iM5_X${zhe4V_hLM3QJ+;I+zceScw1|;GL_-tF1piPU*U%tq
zE(SRU1$G8`Mg{?d2@p9R21N!XMg~r(i$d}l8H6=_z(EQQXxF^bTx*CMRCpLv8PpgV
z*wa%>f)ex6!QtV_#h}5U#m=C~$RLQ&<(XHKnx0z3!yw9_&B(y2;pwUA$;iN#4Dz8N
zBZB~v6G1|tI04HUF)|22T#}esoSz5x6{9C318;CiVsf@`VgWRK)sdYENe|XY4u^_>
zoX*H#0&<BMBLi1(erZv1s#_)~);K{)OAq8|Mh4E{%=Em(lG377Mg}WPQy?N}Y0L)Q
z7k1W+4E(Nn$vOGOnR)5HsU;ctDeMf^j10W+PzPDb!(a<aOdP@aMI|6UBLk0TUS4XE
zb53G$acVIm1BYK~afwHMaS4M010w@710w?~1EYWdC^a%LFfcPPFmN((F)%W4GcYii
zFfcJNF)%Q2X=!g|;L+O7z_*csfq{uZkb!}Lje(JYfuVpwh=GBD2h8ST5M~fzU|?Wm
z5M>a9no!5U#K6M9z#yl+jX_*z8-w^Z23b4VSq%Kz+ZdE}wlOI0U{GHpy9R7C$W$S)
z>JkPXhB5{Lh6)B5h8nO9T3~TGs0|DZatt~Qx?o%781xu)8JHM&7=#$~84MVh84Mw=
z`@<l^DB#E-%3uU_i!K8**nhlQ+6NdUbPg~`Y-2D6S&i%=MzD1tPqQ+Zf<0@-U=F4&
f7%UkW7+4sr7;G5qK!L)*2zCGi0|SFSScMe;Lf7x1

literal 0
HcmV?d00001

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

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/JeudeCarte$1.class b/Partie_3/target/classes/ch/hepia/JeudeCarte$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e87f2ad85071fb1b622c4a955974eae6caf97a63
GIT binary patch
literal 1160
zcmX^0Z`VEs1_lQP2X+P~Mh4O34E>DMg3LsHuhi0%ROiH^l2jE#b_Nzk27#=^vPAuy
z#JqHU|D>$c<PvrUHbw>!uxM#XW{$pder`cxQDRAc5hDXzNk(R|iUA{os1Ftstr;2E
zY%=pQOY9gKBs8$9&<tZ_U~$e*N#$f<WZ>mtU}xaqVqj+A=V9Pv5MX3r)&MEs_sPsl
z^()OyN-YXWOv*`RWDxSnPfpAUODxI+@u7k&AjdE=h-0%z#n76Ofjt@Q^i)O$WhB>t
zJ#UTB1mSCXaxq9SNU<|WGBWVN{RWofVUT8!VPxP+Pc3oIFU?6UEn;L4(a=OP!9Uc;
zH8jYYi$RV-ft^8~kwE}q0z{67L6Jd;k%1HHqL6$>24M{!a3F(&-Zif@*Basm6&?mv
z1~o<o_Vm<}pv1g%aHx24F=#Mou`_5gG6*7cdFGX*rl%J1Fo-f}GcvGhczSAjGBU6w
zgQC}vkwE~-i69|R{D9?*7#V~hE=kNR&d-DUiqVsifj77$F*(~eu>cy%>d4N7q!4Q)
zheJg`PG@8=0l7qsk%22XzqBYh)h!bgcl?MXrw4L6BLin}W_n&?Noi3kBZC#DSr8Gl
zv}c3v7dvZ427cGP<edEC%)E5p)RK(+6m|w{Mh0Pc*dr_kB`;e>1{MuZQ2OHW%*#tH
za?VLCE>10GWZ>{iEiUoMFD_wFU|?imW?*DsWndH#0HsX^1_ovZ1_n+BE(S&hZUzPh
z69y&*CI$uuE-me?3_M!f8Td9bFfcGN2r@7*urV+)Ffgby2r)1)@POG|48jZ|3=9m6
z45AETP!sAHm>5_X7#QTVw=sz8Y-14L#vp4aJBxu|dmDqY&Nc?+9SrJgWY>Ug2AL`Z
zR;|sz!=TF`z@X0{!(a@yK?^J{2epBLL5@L(K^JVR9D^Q%E&~$-4}%bcK7#=RGlL<-
zb$=LS7zG>|L>Y{rZqa362K$d!OZxzWgw6p5iERwVAghr*#0a(y<Y`t0Q?O^v7|g-6
g1%o960|N_#6@v|f9Vk#37{Lx;U|?Xd2dl6G07a+zU;qFB

literal 0
HcmV?d00001

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

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/Joueur.class b/Partie_3/target/classes/ch/hepia/Joueur.class
new file mode 100644
index 0000000000000000000000000000000000000000..5e4728e620596c8ce4d971e1d94e4d16b7f6bac8
GIT binary patch
literal 663
zcmX^0Z`VEs1_lQPEp`SbMh5=m4E>DMg3LsHul&-~(js;S7Dfhvti-ZJ{hY+SbbbG%
ztkmQZMh5QS)RN$mqQsKa^h!nsW)00SMg|VYloa3mywplY1{Mt$kO+5BYHog6DpZie
zJ+%bNWY*AhVPs$nPAzdtEn#F})o}3ysb_PC3b1H+f)sGL6eX5BCl;kJGDvE8`XJnv
zTAGsToLE$nY7NrH@19x$QWacMl$w`bk^wT%(^J!vk%7xSwZtz8Bv%Y_6j+QSI3vH@
zBQY-pA`-^PzzGv6hUoxF7lZxf$;iO%4)!b5Xf~Jp(xjYJMg}gA#9{~=YEl#<1BY{B
zUT{H9Cdf}vn!_Wp7|LYx%quP}0%>(mErGC8Am+e1%o>_ej0~(nsl}jhk<h^DXRhG<
z(xT*4w@i>zxFM0H2Z|>)1_nk3W(E)tV_{@qWng0f#UVQb2bkuB(p(JOU_K86FPP?I
z;0MzJ41!=<h(Q=ki!g|SX)y+IFf9Q!Pm)0j%$J7B%Ru$XGRT3&<)O3!R9q3tSAyzS
ZhT5;fpbA#6#-Ppsa=8Wr0|OI-CID4gf!hE8

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/JoueurCroupier.class b/Partie_3/target/classes/ch/hepia/JoueurCroupier.class
new file mode 100644
index 0000000000000000000000000000000000000000..1a117b2e6248aecff4b395b75018848c471b8526
GIT binary patch
literal 3338
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
KLm4>LmjeLd_62qT

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/JoueurHumain.class b/Partie_3/target/classes/ch/hepia/JoueurHumain.class
new file mode 100644
index 0000000000000000000000000000000000000000..733a8e929c37ad44af07e0311c79cabaeee685a9
GIT binary patch
literal 4874
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

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class
new file mode 100644
index 0000000000000000000000000000000000000000..b83e6a0bea0dd6f64078eaf509636401c3c5324e
GIT binary patch
literal 4837
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
LQ~<99*OBW0Q$m}W

literal 0
HcmV?d00001

diff --git a/Partie_3/target/classes/ch/hepia/Paquet.class b/Partie_3/target/classes/ch/hepia/Paquet.class
new file mode 100644
index 0000000000000000000000000000000000000000..79dc7afd66ab47cc77bb82fcf6c5682425eccc23
GIT binary patch
literal 900
zcmX^0Z`VEs1_lQPBX$NRMh5=m4E>DMg3LtyfW*Sm)Dm_E7Dfhvti-ZJ{hY+SbbbG%
ztkmQZMh3P5urwosfDc%*v?Mb}-zT%U#F~+TGdMFnFR`SwD3y^x9ZlNC2X28^YH3QU
zb7E0Rs<oXpBLkaFW?p8A9U}v)hNq`y7$XCVbAC!H7Xvc`FAoDJ10N#;vxa6EJA(it
zgD}EM$D*RdN|3!=4EzkdoD7T%!aNMD3~cNSqKpi}SnT3r5MdAp87RTXz@p))83q!N
z;$e^m*}z_$QJR*PlgiB?%OKCrAjinShp-A{3lD<=gCZjXb7D#gBZH_0#B)diW33s*
z$iVNDnV0HUnwykb6q1;flgh{-<ddJAm=l&*lnLTP1zAcmGK(1*1Q8(u335;f<|W0$
z0+`X0k%1#GDLxq#Qj83YnT!lvS*fKikf38^5Jl)m3Q<M|-r$nN<ZR!>0;qMI>8T|U
z3m6%MG&CVjM~*g43_;wH#TA@iT9lmXmI?A5H^f*yP*5=_GB7eQGcYhPGBAPSfq{{M
zoq>UYiGhQGiGh)UlYxtYk%60mfng5=GXpCF1A~Rub_O1;-3<JZ+ZhD6G6*r-EoV^N
z%^(sfvz<ZAibaxT8-t|Q76u_nmYobTObp>I%#5<q3;#dZ$iTqB%%H@;z@Wsy!N9=4
z#lXVA!@$qL#~{MM&mhMjz@W?^$e_=_$6(GN!l2B+z+eKgk3oe&l>r1S7}OZl85lus
zV9;PtXJBFwWKd(!WKd^dW{_hLWYA*JW?*5^VPIeoU|{;sAi}`H&cMjX$jHDT%fQH>
u%b>@=1ofLf*hl&dj9}APLC)O(_B6<OY+ylguoHN|Y*wff7#R$}stf@bS-D#P

literal 0
HcmV?d00001

diff --git a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..814b859
--- /dev/null
+++ b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,7 @@
+ch/hepia/Hand.class
+ch/hepia/JeudeCarte.class
+ch/hepia/Carte.class
+ch/hepia/App.class
+ch/hepia/COULEUR.class
+ch/hepia/Hand$1.class
+ch/hepia/Paquet.class
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
new file mode 100644
index 0000000..8643c6b
--- /dev/null
+++ b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,7 @@
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/Hand.java
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/Carte.java
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/Joueur.java
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/GameManager.java
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/App.java
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/Paquet.java
+/home/padi/Git/java-card-game/Partie_2/src/main/java/ch/hepia/JeudeCarte.java
diff --git a/Partie_3/target/test-classes/ch/hepia/CarteTest.class b/Partie_3/target/test-classes/ch/hepia/CarteTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..655456ed1f9c7073c51fefd5a6f05ec8d78d542b
GIT binary patch
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

literal 0
HcmV?d00001

-- 
GitLab