From a7ef5800930bb3d46ee19440b7dbc758c9503dfe Mon Sep 17 00:00:00 2001
From: "michael.divia" <michael.divia@etu.hesge.ch>
Date: Fri, 5 Jan 2024 16:02:31 +0100
Subject: [PATCH] Part 3 Separation

---
 .../.vscode/c_cpp_properties.json             |   0
 .../.vscode/launch.json                       |   0
 .../.vscode/settings.json                     |   0
 {Partie_3 => Partie_3_GFX}/pom.xml            |   0
 {Partie_3 => Partie_3_GFX}/save.csv           |   0
 .../src/main/java/ch/hepia/App.java           |   0
 .../src/main/java/ch/hepia/Carte.java         |   0
 .../src/main/java/ch/hepia/GameManager.java   |   0
 .../src/main/java/ch/hepia/Hand.java          |   0
 .../src/main/java/ch/hepia/JeudeCarte.java    |   0
 .../src/main/java/ch/hepia/Joueur.java        |   0
 .../src/main/java/ch/hepia/Paquet.java        |   0
 .../src/main/java/ch/hepia/Save.java          |   0
 .../src/test/java/ch/hepia/JoueurTest.java    |   0
 .../target/classes/ch/hepia/App.class         | Bin
 .../target/classes/ch/hepia/COULEUR.class     | Bin
 .../target/classes/ch/hepia/Carte.class       | Bin
 .../target/classes/ch/hepia/GameManager.class | Bin
 .../target/classes/ch/hepia/Hand$1.class      | Bin
 .../target/classes/ch/hepia/Hand.class        | Bin
 .../classes/ch/hepia/JeudeCarte$1.class       | Bin
 .../target/classes/ch/hepia/JeudeCarte.class  | Bin
 .../target/classes/ch/hepia/Joueur.class      | Bin
 .../classes/ch/hepia/JoueurCroupier.class     | Bin
 .../classes/ch/hepia/JoueurHumain.class       | Bin
 .../classes/ch/hepia/JoueurOrdinateur.class   | Bin
 .../target/classes/ch/hepia/Paquet.class      | Bin
 .../target/classes/ch/hepia/Save.class        | Bin
 .../compile/default-compile/createdFiles.lst  |   0
 .../compile/default-compile/inputFiles.lst    |   0
 .../test-classes/ch/hepia/JoueurTest.class    | Bin
 .../.vscode/c_cpp_properties.json             |  18 +
 Partie_3_Terminal/.vscode/launch.json         |  24 +
 Partie_3_Terminal/.vscode/settings.json       |  60 ++
 Partie_3_Terminal/pom.xml                     |  82 ++
 Partie_3_Terminal/save.csv                    |   3 +
 .../src/main/java/ch/hepia/App.java           | 187 +++++
 .../src/main/java/ch/hepia/Carte.java         |  86 ++
 .../src/main/java/ch/hepia/GameManager.java   | 755 +++++++++++++++++
 .../src/main/java/ch/hepia/Hand.java          | 216 +++++
 .../src/main/java/ch/hepia/JeudeCarte.java    | 123 +++
 .../src/main/java/ch/hepia/Joueur.java        | 761 ++++++++++++++++++
 .../src/main/java/ch/hepia/Paquet.java        |  25 +
 .../src/main/java/ch/hepia/Save.java          | 100 +++
 .../src/test/java/ch/hepia/JoueurTest.java    | 302 +++++++
 .../target/classes/ch/hepia/App.class         | Bin 0 -> 3474 bytes
 .../target/classes/ch/hepia/COULEUR.class     | Bin 0 -> 1075 bytes
 .../target/classes/ch/hepia/Carte.class       | Bin 0 -> 2702 bytes
 .../target/classes/ch/hepia/GameManager.class | Bin 0 -> 18901 bytes
 .../target/classes/ch/hepia/Hand$1.class      | Bin 0 -> 1125 bytes
 .../target/classes/ch/hepia/Hand.class        | Bin 0 -> 4822 bytes
 .../classes/ch/hepia/JeudeCarte$1.class       | Bin 0 -> 1157 bytes
 .../target/classes/ch/hepia/JeudeCarte.class  | Bin 0 -> 3202 bytes
 .../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 -> 4901 bytes
 .../classes/ch/hepia/JoueurOrdinateur.class   | Bin 0 -> 4918 bytes
 .../target/classes/ch/hepia/Paquet.class      | Bin 0 -> 902 bytes
 .../target/classes/ch/hepia/Save.class        | Bin 0 -> 3866 bytes
 .../compile/default-compile/createdFiles.lst  |   7 +
 .../compile/default-compile/inputFiles.lst    |   8 +
 .../test-classes/ch/hepia/JoueurTest.class    | Bin 0 -> 8931 bytes
 62 files changed, 2757 insertions(+)
 rename {Partie_3 => Partie_3_GFX}/.vscode/c_cpp_properties.json (100%)
 rename {Partie_3 => Partie_3_GFX}/.vscode/launch.json (100%)
 rename {Partie_3 => Partie_3_GFX}/.vscode/settings.json (100%)
 rename {Partie_3 => Partie_3_GFX}/pom.xml (100%)
 rename {Partie_3 => Partie_3_GFX}/save.csv (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/App.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/Carte.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/GameManager.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/Hand.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/JeudeCarte.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/Joueur.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/Paquet.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/main/java/ch/hepia/Save.java (100%)
 rename {Partie_3 => Partie_3_GFX}/src/test/java/ch/hepia/JoueurTest.java (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/App.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/COULEUR.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/Carte.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/GameManager.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/Hand$1.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/Hand.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/JeudeCarte$1.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/JeudeCarte.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/Joueur.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/JoueurCroupier.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/JoueurHumain.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/JoueurOrdinateur.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/Paquet.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/classes/ch/hepia/Save.class (100%)
 rename {Partie_3 => Partie_3_GFX}/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst (100%)
 rename {Partie_3 => Partie_3_GFX}/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst (100%)
 rename {Partie_3 => Partie_3_GFX}/target/test-classes/ch/hepia/JoueurTest.class (100%)
 create mode 100644 Partie_3_Terminal/.vscode/c_cpp_properties.json
 create mode 100644 Partie_3_Terminal/.vscode/launch.json
 create mode 100644 Partie_3_Terminal/.vscode/settings.json
 create mode 100644 Partie_3_Terminal/pom.xml
 create mode 100644 Partie_3_Terminal/save.csv
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/App.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/Carte.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/GameManager.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/Hand.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/JeudeCarte.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/Joueur.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/Paquet.java
 create mode 100644 Partie_3_Terminal/src/main/java/ch/hepia/Save.java
 create mode 100644 Partie_3_Terminal/src/test/java/ch/hepia/JoueurTest.java
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/App.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/COULEUR.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/Carte.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/GameManager.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/Hand$1.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/Hand.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/JeudeCarte$1.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/JeudeCarte.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/Joueur.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/JoueurCroupier.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/JoueurHumain.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/JoueurOrdinateur.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/Paquet.class
 create mode 100644 Partie_3_Terminal/target/classes/ch/hepia/Save.class
 create mode 100644 Partie_3_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
 create mode 100644 Partie_3_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
 create mode 100644 Partie_3_Terminal/target/test-classes/ch/hepia/JoueurTest.class

diff --git a/Partie_3/.vscode/c_cpp_properties.json b/Partie_3_GFX/.vscode/c_cpp_properties.json
similarity index 100%
rename from Partie_3/.vscode/c_cpp_properties.json
rename to Partie_3_GFX/.vscode/c_cpp_properties.json
diff --git a/Partie_3/.vscode/launch.json b/Partie_3_GFX/.vscode/launch.json
similarity index 100%
rename from Partie_3/.vscode/launch.json
rename to Partie_3_GFX/.vscode/launch.json
diff --git a/Partie_3/.vscode/settings.json b/Partie_3_GFX/.vscode/settings.json
similarity index 100%
rename from Partie_3/.vscode/settings.json
rename to Partie_3_GFX/.vscode/settings.json
diff --git a/Partie_3/pom.xml b/Partie_3_GFX/pom.xml
similarity index 100%
rename from Partie_3/pom.xml
rename to Partie_3_GFX/pom.xml
diff --git a/Partie_3/save.csv b/Partie_3_GFX/save.csv
similarity index 100%
rename from Partie_3/save.csv
rename to Partie_3_GFX/save.csv
diff --git a/Partie_3/src/main/java/ch/hepia/App.java b/Partie_3_GFX/src/main/java/ch/hepia/App.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/App.java
rename to Partie_3_GFX/src/main/java/ch/hepia/App.java
diff --git a/Partie_3/src/main/java/ch/hepia/Carte.java b/Partie_3_GFX/src/main/java/ch/hepia/Carte.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/Carte.java
rename to Partie_3_GFX/src/main/java/ch/hepia/Carte.java
diff --git a/Partie_3/src/main/java/ch/hepia/GameManager.java b/Partie_3_GFX/src/main/java/ch/hepia/GameManager.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/GameManager.java
rename to Partie_3_GFX/src/main/java/ch/hepia/GameManager.java
diff --git a/Partie_3/src/main/java/ch/hepia/Hand.java b/Partie_3_GFX/src/main/java/ch/hepia/Hand.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/Hand.java
rename to Partie_3_GFX/src/main/java/ch/hepia/Hand.java
diff --git a/Partie_3/src/main/java/ch/hepia/JeudeCarte.java b/Partie_3_GFX/src/main/java/ch/hepia/JeudeCarte.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/JeudeCarte.java
rename to Partie_3_GFX/src/main/java/ch/hepia/JeudeCarte.java
diff --git a/Partie_3/src/main/java/ch/hepia/Joueur.java b/Partie_3_GFX/src/main/java/ch/hepia/Joueur.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/Joueur.java
rename to Partie_3_GFX/src/main/java/ch/hepia/Joueur.java
diff --git a/Partie_3/src/main/java/ch/hepia/Paquet.java b/Partie_3_GFX/src/main/java/ch/hepia/Paquet.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/Paquet.java
rename to Partie_3_GFX/src/main/java/ch/hepia/Paquet.java
diff --git a/Partie_3/src/main/java/ch/hepia/Save.java b/Partie_3_GFX/src/main/java/ch/hepia/Save.java
similarity index 100%
rename from Partie_3/src/main/java/ch/hepia/Save.java
rename to Partie_3_GFX/src/main/java/ch/hepia/Save.java
diff --git a/Partie_3/src/test/java/ch/hepia/JoueurTest.java b/Partie_3_GFX/src/test/java/ch/hepia/JoueurTest.java
similarity index 100%
rename from Partie_3/src/test/java/ch/hepia/JoueurTest.java
rename to Partie_3_GFX/src/test/java/ch/hepia/JoueurTest.java
diff --git a/Partie_3/target/classes/ch/hepia/App.class b/Partie_3_GFX/target/classes/ch/hepia/App.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/App.class
rename to Partie_3_GFX/target/classes/ch/hepia/App.class
diff --git a/Partie_3/target/classes/ch/hepia/COULEUR.class b/Partie_3_GFX/target/classes/ch/hepia/COULEUR.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/COULEUR.class
rename to Partie_3_GFX/target/classes/ch/hepia/COULEUR.class
diff --git a/Partie_3/target/classes/ch/hepia/Carte.class b/Partie_3_GFX/target/classes/ch/hepia/Carte.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/Carte.class
rename to Partie_3_GFX/target/classes/ch/hepia/Carte.class
diff --git a/Partie_3/target/classes/ch/hepia/GameManager.class b/Partie_3_GFX/target/classes/ch/hepia/GameManager.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/GameManager.class
rename to Partie_3_GFX/target/classes/ch/hepia/GameManager.class
diff --git a/Partie_3/target/classes/ch/hepia/Hand$1.class b/Partie_3_GFX/target/classes/ch/hepia/Hand$1.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/Hand$1.class
rename to Partie_3_GFX/target/classes/ch/hepia/Hand$1.class
diff --git a/Partie_3/target/classes/ch/hepia/Hand.class b/Partie_3_GFX/target/classes/ch/hepia/Hand.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/Hand.class
rename to Partie_3_GFX/target/classes/ch/hepia/Hand.class
diff --git a/Partie_3/target/classes/ch/hepia/JeudeCarte$1.class b/Partie_3_GFX/target/classes/ch/hepia/JeudeCarte$1.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/JeudeCarte$1.class
rename to Partie_3_GFX/target/classes/ch/hepia/JeudeCarte$1.class
diff --git a/Partie_3/target/classes/ch/hepia/JeudeCarte.class b/Partie_3_GFX/target/classes/ch/hepia/JeudeCarte.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/JeudeCarte.class
rename to Partie_3_GFX/target/classes/ch/hepia/JeudeCarte.class
diff --git a/Partie_3/target/classes/ch/hepia/Joueur.class b/Partie_3_GFX/target/classes/ch/hepia/Joueur.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/Joueur.class
rename to Partie_3_GFX/target/classes/ch/hepia/Joueur.class
diff --git a/Partie_3/target/classes/ch/hepia/JoueurCroupier.class b/Partie_3_GFX/target/classes/ch/hepia/JoueurCroupier.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/JoueurCroupier.class
rename to Partie_3_GFX/target/classes/ch/hepia/JoueurCroupier.class
diff --git a/Partie_3/target/classes/ch/hepia/JoueurHumain.class b/Partie_3_GFX/target/classes/ch/hepia/JoueurHumain.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/JoueurHumain.class
rename to Partie_3_GFX/target/classes/ch/hepia/JoueurHumain.class
diff --git a/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_3_GFX/target/classes/ch/hepia/JoueurOrdinateur.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class
rename to Partie_3_GFX/target/classes/ch/hepia/JoueurOrdinateur.class
diff --git a/Partie_3/target/classes/ch/hepia/Paquet.class b/Partie_3_GFX/target/classes/ch/hepia/Paquet.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/Paquet.class
rename to Partie_3_GFX/target/classes/ch/hepia/Paquet.class
diff --git a/Partie_3/target/classes/ch/hepia/Save.class b/Partie_3_GFX/target/classes/ch/hepia/Save.class
similarity index 100%
rename from Partie_3/target/classes/ch/hepia/Save.class
rename to Partie_3_GFX/target/classes/ch/hepia/Save.class
diff --git a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Partie_3_GFX/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
similarity index 100%
rename from Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
rename to Partie_3_GFX/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
diff --git a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Partie_3_GFX/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
similarity index 100%
rename from Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
rename to Partie_3_GFX/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
diff --git a/Partie_3/target/test-classes/ch/hepia/JoueurTest.class b/Partie_3_GFX/target/test-classes/ch/hepia/JoueurTest.class
similarity index 100%
rename from Partie_3/target/test-classes/ch/hepia/JoueurTest.class
rename to Partie_3_GFX/target/test-classes/ch/hepia/JoueurTest.class
diff --git a/Partie_3_Terminal/.vscode/c_cpp_properties.json b/Partie_3_Terminal/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..c2098a2
--- /dev/null
+++ b/Partie_3_Terminal/.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_Terminal/.vscode/launch.json b/Partie_3_Terminal/.vscode/launch.json
new file mode 100644
index 0000000..7f873a9
--- /dev/null
+++ b/Partie_3_Terminal/.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_Terminal/.vscode/settings.json b/Partie_3_Terminal/.vscode/settings.json
new file mode 100644
index 0000000..1152b26
--- /dev/null
+++ b/Partie_3_Terminal/.vscode/settings.json
@@ -0,0 +1,60 @@
+{
+  "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,
+  "java.configuration.updateBuildConfiguration": "interactive"
+}
\ No newline at end of file
diff --git a/Partie_3_Terminal/pom.xml b/Partie_3_Terminal/pom.xml
new file mode 100644
index 0000000..a8dc63e
--- /dev/null
+++ b/Partie_3_Terminal/pom.xml
@@ -0,0 +1,82 @@
+<?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.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>
+            <groupId>org.openjfx</groupId>
+            <artifactId>javafx-controls</artifactId>
+            <version>19</version>
+        </dependency>
+        <dependency>
+            <groupId>com.opencsv</groupId>
+            <artifactId>opencsv</artifactId>
+            <version>5.9</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_Terminal/save.csv b/Partie_3_Terminal/save.csv
new file mode 100644
index 0000000..f481abf
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/src/main/java/ch/hepia/App.java b/Partie_3_Terminal/src/main/java/ch/hepia/App.java
new file mode 100644
index 0000000..b99e87f
--- /dev/null
+++ b/Partie_3_Terminal/src/main/java/ch/hepia/App.java
@@ -0,0 +1,187 @@
+package ch.hepia;
+
+import java.io.File;
+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;
+        int computerStrategy = 1;
+        boolean loadSave = false;
+        String filePath = "save.csv";
+
+        File f = new File(filePath);
+
+        // Check if a save file exists
+        if (f.exists() && !f.isDirectory()) {
+
+            char choice = 'x';
+
+            System.out.print("Do you want to load last game save (y/n) ? ");
+
+            while (true) {
+
+                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);
+                }
+            }
+
+            if (choice == 'y') {
+                loadSave = true;
+            }
+        }
+
+        GameManager BlackJack;
+
+        if (loadSave) {
+
+            // 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) {
+
+                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);
+                }
+            }
+
+            // 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;
+
+        // 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_Terminal/src/main/java/ch/hepia/Carte.java b/Partie_3_Terminal/src/main/java/ch/hepia/Carte.java
new file mode 100644
index 0000000..6282220
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/src/main/java/ch/hepia/GameManager.java b/Partie_3_Terminal/src/main/java/ch/hepia/GameManager.java
new file mode 100644
index 0000000..2cc3940
--- /dev/null
+++ b/Partie_3_Terminal/src/main/java/ch/hepia/GameManager.java
@@ -0,0 +1,755 @@
+package ch.hepia;
+
+import java.util.ArrayList;
+
+public class GameManager {
+
+    private JeudeCarte Deck;
+    private ArrayList<Joueur> Players;
+    private JoueurCroupier Dealer;
+    private int ComputerPlayers;
+    private int Step;
+
+    public GameManager(int nbPlayer, int startMoney, int computerStrategy) {
+
+        // 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));
+
+        this.ComputerPlayers = 0;
+
+        // All other are controlled by the computer
+        if (nbPlayer > 1) {
+            for (int x = 1; x < nbPlayer; x++) {
+                ComputerPlayers++;
+                this.Players.add(new JoueurOrdinateur(Deck, startMoney, computerStrategy));
+            }
+        }
+
+        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() {
+
+        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);
+
+        // Set the Computer players bid for this turn
+        for (int x = 1; x <= this.ComputerPlayers; x++) {
+            Players.get(x).SetBet(10, 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);
+
+                // Show Computer Players hands
+                for (int x = 1; x <= this.ComputerPlayers; x++) {
+                    for (int HandNbComputer = 0; HandNbComputer < this.Players.get(x).GetNbHands(); HandNbComputer++) {
+                        System.out
+                                .print("\nComputer " + App.ANSI_GREEN + x + App.ANSI_RESET + ", Money " + App.ANSI_BLUE
+                                        + this.Players.get(x).GetMoney() + App.ANSI_RESET + ", Hand "
+                                        + App.ANSI_GREEN + HandNbComputer + App.ANSI_RESET + ", Bet " + App.ANSI_BLUE
+                                        + this.Players.get(x).GetBet(HandNbComputer) + App.ANSI_RESET + ", Strength "
+                                        + App.ANSI_PURPLE);
+                        if (this.Players.get(x).GetStrength(HandNbComputer) == 99) {
+                            System.out.println("BlackJack" + App.ANSI_RESET + " :");
+                        } else if (this.Players.get(x).GetStrength(HandNbComputer) > 21) {
+                            System.out.println(
+                                    this.Players.get(x).GetStrength(HandNbComputer) + App.ANSI_RED + " [BUSTED]"
+                                            + App.ANSI_RESET + " :");
+                        } else {
+                            System.out.println(this.Players.get(x).GetStrength(HandNbComputer) + App.ANSI_RESET + " :");
+                        }
+                        this.Players.get(x).ShowHand(HandNbComputer);
+                    }
+                }
+
+                // 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() {
+
+        // Computer Players take turn to play
+        for (int x = 1; x <= this.ComputerPlayers; x++) {
+
+            // Check there strategy
+            /*
+             * 1 = Smart
+             * 2 = Stupid
+             */
+            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);
+                }
+            }
+        }
+
+        // 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);
+        }
+
+        // Apply Computer Players Loss/Win
+        for (int x = 1; x <= this.ComputerPlayers; x++) {
+            for (int HandNbComputer = 0; HandNbComputer < this.Players.get(x).GetNbHands(); HandNbComputer++) {
+                // If the player is Busted (strength > 21 but not BlackJack (99))
+                if (this.Players.get(x).GetStrength(HandNbComputer) > 21
+                        && this.Players.get(x).GetStrength(HandNbComputer) != 99) {
+                }
+                // If it's a Draw
+                else if (this.Dealer.GetStrength(0) == this.Players.get(x).GetStrength(HandNbComputer)) {
+                    // Player get's back his bet
+                    this.Players.get(x).AddMoney(this.Players.get(x).GetBet(HandNbComputer));
+                }
+                // If the player has done a BlackJack
+                else if (this.Players.get(x).GetStrength(HandNbComputer) == 99) {
+                    // Player gets payed 1.5 to 1
+                    this.Players.get(x).AddMoney(this.Players.get(x).GetBet(HandNbComputer) * 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
+                    this.Players.get(x).AddMoney(this.Players.get(x).GetBet(HandNbComputer) * 2);
+                }
+                // If the Dealer has a better score
+                else if (this.Players.get(x).GetStrength(HandNbComputer) < this.Dealer.GetStrength(0)) {
+                }
+                // If the Player has a better score
+                else if (this.Players.get(x).GetStrength(HandNbComputer) > this.Dealer.GetStrength(0)) {
+                    // Player wins and get payed 1 to 1
+                    this.Players.get(x).AddMoney(this.Players.get(x).GetBet(HandNbComputer) * 2);
+                }
+            }
+        }
+
+        // Show Computer Players hands
+        for (int x = 1; x <= this.ComputerPlayers; x++) {
+            for (int HandNbComputer = 0; HandNbComputer < this.Players.get(x).GetNbHands(); HandNbComputer++) {
+                System.out
+                        .print("\nComputer " + App.ANSI_GREEN + x + App.ANSI_RESET + ", Money " + App.ANSI_BLUE
+                                + this.Players.get(x).GetMoney() + App.ANSI_RESET + ", Hand "
+                                + App.ANSI_GREEN + HandNbComputer + App.ANSI_RESET + ", Bet " + App.ANSI_BLUE
+                                + this.Players.get(x).GetBet(HandNbComputer) + App.ANSI_RESET + ", Strength "
+                                + App.ANSI_PURPLE);
+                if (this.Players.get(x).GetStrength(HandNbComputer) == 99) {
+                    System.out.println("BlackJack" + App.ANSI_RESET + " :");
+                } else if (this.Players.get(x).GetStrength(HandNbComputer) > 21) {
+                    System.out.println(
+                            this.Players.get(x).GetStrength(HandNbComputer) + App.ANSI_RED + " [BUSTED]"
+                                    + App.ANSI_RESET + " :");
+                } else {
+                    System.out.println(this.Players.get(x).GetStrength(HandNbComputer) + App.ANSI_RESET + " :");
+                }
+                this.Players.get(x).ShowHand(HandNbComputer);
+            }
+        }
+
+        // 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);
+
+        // Show Choices
+        System.out.println("\n--- " + App.ANSI_GREEN + "Choices" + App.ANSI_RESET + " ---\n");
+
+        System.out.println(App.ANSI_BLUE + "[c]" + App.ANSI_RESET + " Continue");
+        System.out.println(App.ANSI_BLUE + "[s]" + App.ANSI_RESET + " Save & Quit");
+
+        char choice = 'x';
+
+        // 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 == 'c' || choice == 's') {
+                break;
+            } else {
+                System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+            }
+        }
+
+        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_Terminal/src/main/java/ch/hepia/Hand.java b/Partie_3_Terminal/src/main/java/ch/hepia/Hand.java
new file mode 100644
index 0000000..9b5ffe0
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/src/main/java/ch/hepia/JeudeCarte.java b/Partie_3_Terminal/src/main/java/ch/hepia/JeudeCarte.java
new file mode 100644
index 0000000..e6bd3c6
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/src/main/java/ch/hepia/Joueur.java b/Partie_3_Terminal/src/main/java/ch/hepia/Joueur.java
new file mode 100644
index 0000000..e69d341
--- /dev/null
+++ b/Partie_3_Terminal/src/main/java/ch/hepia/Joueur.java
@@ -0,0 +1,761 @@
+package ch.hepia;
+
+import java.util.ArrayList;
+
+interface Joueur {
+
+    // Get the Computer Player Strategy
+    public int GetStrategy();
+
+    // 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, double 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 int GetStrategy() {
+        // 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;
+
+    /*
+     * 1 = Smart
+     * 2 = Stupid
+     */
+    private int Strategy;
+
+    public JoueurOrdinateur(JeudeCarte Jeu, double Money, int Strategy) {
+
+        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;
+
+        this.Strategy = Strategy;
+    }
+
+    public int GetStrategy() {
+        return this.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 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 int GetStrategy() {
+        // 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_Terminal/src/main/java/ch/hepia/Paquet.java b/Partie_3_Terminal/src/main/java/ch/hepia/Paquet.java
new file mode 100644
index 0000000..43311c5
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/src/main/java/ch/hepia/Save.java b/Partie_3_Terminal/src/main/java/ch/hepia/Save.java
new file mode 100644
index 0000000..d66eaa2
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/src/test/java/ch/hepia/JoueurTest.java b/Partie_3_Terminal/src/test/java/ch/hepia/JoueurTest.java
new file mode 100644
index 0000000..836b221
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/target/classes/ch/hepia/App.class b/Partie_3_Terminal/target/classes/ch/hepia/App.class
new file mode 100644
index 0000000000000000000000000000000000000000..aad0e41606823ab879200272efe2f63852dccb72
GIT binary patch
literal 3474
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
HmsL9ehE+B8

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/COULEUR.class b/Partie_3_Terminal/target/classes/ch/hepia/COULEUR.class
new file mode 100644
index 0000000000000000000000000000000000000000..c582fd28bd308c74abcc31d7c543625ab96af75b
GIT binary patch
literal 1075
zcmX^0Z`VEs1_lQPD|QAZMh1c84E>DMg3LsHXa7(i*U%tN21W)J9tKthHbw^4<owjq
zB1Q%wA9PjLAY~jp44fck?8%8mMX8CUATe$p1|E<YYe8mVX(~vBkB5ODB*Iowl$w?U
z782xP5MmH!WMEebbMy&y4Q6Bzj>fcti$Rn@jGaN4he4b{0_2#S{Jc~~1`!QSpRB~P
zME#t^ymWp4q^#8B5^F97DF$hF1{od(Sq3>q20nxW*SykPMh5n>#GKMp|1?GhQw=2D
z&N+$2#nwmy!6ikRdFj^3Hh>HOo3Fsbpva)a$iQZknU`5&$H*XtY!p<dr)C%j11lE;
zBZC4511ARq4+jH3h^NWJpv9mK@-o;Z#f%K18k$%<&B(w8Q^4Y!pOVVR!0(fpm+DuV
zo0M7<l9-f}%E+LG#a>O!@B_tLesW??SYlBoNF!7?OI~7bDo73yMo_miGO(0nWEL|r
za0X|l=Ovbu7Ns&WFl%UrF*0!2B<DbVt%4L>ps=yQwAs#@k%22XzqBYh)h!d`VlL;z
zqLNfSkc|!o42%p?3=9mc4w9f$#=zhp2}(v_numc6O!I?i0Vz-_0jXr*WYA&IW?*E{
zWnf@XVqjzd0j^C90^1lw4lsyrU|?WiWYA+^U|<8wF*9&7$TH|d)tfLdfknB57`1jV
zNFHEd1gU32QE$M&z`z4h#bC%_#K6G71d3}0Ca{f$49pD73=9nHTG}$(8RR#DrID>e
zXlG|I205L<1gyqXfD07sP=}Z@uz=jnAj`g&fiaSK69aQ_B+DiS_TWg?O$=PYk!+h7
zc!NQ1L-h*>gBgP<)QDuL5!SmI7$b$0nYS~jY-V5vb5vQt9Ck2AjTOw{0&~>az#QHk
v3>upm1VFBbSRls0%D}+D!obVG${@wS#-Pr?&S1j8%)kV7y*Yyg*cX-n^pnST

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/Carte.class b/Partie_3_Terminal/target/classes/ch/hepia/Carte.class
new file mode 100644
index 0000000000000000000000000000000000000000..f2e1b3556ab535a9579d8c800c12eb799aff3d01
GIT binary patch
literal 2702
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

literal 0
HcmV?d00001

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

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/Hand$1.class b/Partie_3_Terminal/target/classes/ch/hepia/Hand$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..2214bf48295c2e99569934bb083314370d6c1499
GIT binary patch
literal 1125
zcmX^0Z`VEs1_lQPJ1zz$24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SE(Q(;PId+^9tLg(9!3Vf<P80c)Pl@JedolYl2k?puJqIr=ls%~)Y2kG
z1`!QSAA|z`P#@ROAZsoLJ_dev1_2%hK?Wg41_5*hj0~K~`MCv&MX4eAj10mWJ_r}N
z=9T7JYkGp*Ai~2S${@zbz@DC35|o&i4tAX<7lQ<YBs+r?4}&y=3?qXeLaS$9Nosm(
z5hDXT)Nn=yRt-;2kYRER^6U%>AT5fF4E%8CcqHbfs2DObC~F}30pv+*biSr1JA*PK
zg9zBR(vr*^eP^%-5=-)n7#W0+^n=W_)(m50U~$e*No8c<_sPsl^()OyN-YXWOv*`R
zWDxSnPfpAUODxI+@u7k&B^jB;j0}PZi$Mmd7+Nzjuz{ph3_wPqxEv&v405d@BZB}!
zA2^oaaz=~{LXhA{%q-5&gU1`ACnE!Ia7kivwr^qq)D7y$5dldW)<{tU718u$WZ(?W
zOwUU!DJ@E6WU#_i0uezACL44o+F3I)a0Ta=7A2>;Wr6~R6Xaz*P!KaR@Vn+E=j0b>
z=B4|lmSp6ourpXPGVr4KpNGL3l$<$&^NUJAIvE)_{8EccJo1Z67#Vmx^YT)QoO2S3
zi&Kjk6d2?fm>3utlo%Kom>C!tSQ%6p7#UO<7#J)W7#WyAB3j!S7&kI7FfcKwF)%Q&
zF)%VPFcdJTGcYiSK@>1(FlaJ>04swQgEj*r10#bpgCf+JItC^N76t|eIqhu>>^j>R
z*taq8+R4sh;Md;9Agr^EL3js)_!`+YVCzBV3xQRaFz_&xF$geJFvu{}fbG%(i_5|7
zl4H<e&;`3ijzNz>mw}0ahe3!zpTU5EnZXd^&OZz?i~^1f(hNpWx0o|9gFVTsrG0>b
zL+1bk$2JDA)tFx60UON=wT_j+7#sj545nb(jKQ3Nfq{j=g29Tx1}tL1V9UV3z{SAG
KAO{Kw1_l5eRqtm2

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/Hand.class b/Partie_3_Terminal/target/classes/ch/hepia/Hand.class
new file mode 100644
index 0000000000000000000000000000000000000000..6e99640898ba7d7dacac297d9754b15afd0dc13e
GIT binary patch
literal 4822
zcmX^0Z`VEs1_lR)!(0qZ49x5dEIbUX3~Y=H0$GV=iTXK-dFlH8Nm;4MC5#MgHko;u
zC3cJq%o>_u><k=?48mYVr6rj;`i@0KiIqN?#U)$}><rAD4BQMn><qj-415gyj10WV
z8TuKi1(}KZ9*KD=j0`LgO4J97eru2cf;<dD48n{I%!w%}j0~b05QRvtvDS<N*&)iq
zAjTlh$iNX?kds+blA6NEzzCL*<YABkNwB-*mnP+;rhpX7@G!_S$T2c7JEfK|GBCPu
zF>o^|@GvMcC^0e!xD+LpJ0}*UxE1B+x+mtQGBQYN_`sd*m0FsT>YP|ql4|X#8OG+o
z00AJUs_`(WGiWd}uoP!jrGmr8lbu0}kwFUVH?Wg~O7luGb5mU_l2Z#xGV}8|7<3pJ
zl${gv)JqhSQcD!_QqvPlGRsmG5_9uQ^GX!*(-d;^^HMAIxEM4U^gt1!j}{2QB}JKe
z>DHQIAQu?&Fc>iyGcquzgZw3`;i-ukT<i>{j0}8m|A4&$(reDcU;zqfwxZPB{IXOo
z1}g?@b_N?B23rO@Mh0QH21EcbG6=e-mW1RNfX(nvg9Mh4h9)Akz%tgL;C0|(aAa^|
zWZ-p7Ndbj!NIoRyMKq$(m4p0Z#o)rj;0n?p90Ya`*d$n#fDCj8#g_*og9P@-0i{bX
zMh1SkyFu2e7;-UqGWdYP(U*}y2uUYM795EF3<2y6fjkUB48e>HqTrYVr)uZ?oSf8T
zP@ENmVmQC3gpolLni|0hKq=lD65L?EbAE0?Vo_pAei7JQc7{+MhA@V3Mh1?|l2oub
zBZHU*G=ji7JfY&&+zgQnQS1!SJPa`mv5X8t2v@+AFfy=bBo_OnR+NC#SrkY|JP$(x
zLn0#sOCDHQ1ZFlk;X!h)H5Y>kLoyFT3MiR!q^Fj+<rgKVax$bbq_Z<*@GxXDWTE8u
z;L75X)Lcde=KRtUMh0jm&CJ&iD9X$$2`(v0P0R%wnZv`7%aF&&z?+_0;+LNb@_G&^
z1){nEnpA}t7#Iq87z!DR7#YNK6SGsD^YfAuOTsftGMw}Cic1pnN{Sg7)SzJtc0E)l
zG_a6`xEM+pO4%98co@nV^kKyistXwzSPMYz<zT2}WMBYksODj)0jXvOi|6Ell2aWI
zLp>-|xZP91KFdol$pDEr@-Q?pG&3@ACWGTMH6$Nf!trEhXk}y&0Y?<rd7vOjEJ{qu
zNo8c<49-l?ODriZN@ZkFM@k{^g3<;(2iRFNGO#%3r=&76@cU%urTUfTCZ!gIK#UXe
z$xlwq2}>->1o5GQtjVAviIG77-6%!|mXeIjVvs>7S;3l-feoyun2|vcBMUMz@CKJ8
zCTII57Jw~aXPCgqz>*Fw4Mh=FAj$%3Mh2$5Bt`~CPeukVkHlhVVav$C24OKWaCjsZ
zgUe<{1~$JWP!Yh$z!scZ0xp7CG+Z>p7#Y|g#U3LAn>$p3Swqu>k%7ZKwFF!MFfs^(
z3N^S-z=BY(r1&K<G6=y-3vl@j%GQhwj1{1IA-|{u!ez-Ub_8YO%wj_WMh5oGV*iqi
z)FMU()-+IVU}RuQEC#91$S;Se=gbGmL)iQvD&8<2l=wkOgpmOvVuU1uwUY8=WUz$9
zJve<p^COZ7BE=vj2as*npwz$>oL^d$oa&YdPEa6WJy2p}WZ?EoEiUm*1*MN-Mg{?=
z{QQ#QlA^={-_(+f{FGvTHim6n4BHuYururg<+)vq3@RXvkor6`uPi@1RUeYQAlc9@
zF}WnasFIOk266_3DufscvOOoYSj8tlKfAO5TIPX$1u+O&1Vv*=WkD*kBvg4cQYb*f
z1v#ffjc`uP$qCLZNwwx+*u%)c#Hhf?z~h;hms;eUlUQ7wTFlO{pOHZo!*AG}%+7F-
zkwFf>Qbq<gi2oQA8Mqmk7#JB^7+4sXK&==CMus*91_maEb_ON}Sq3>UTZ};*OiO`j
zVTMKqRt6^qMurXs28MkM%nWP{3=Ga%+Zh<Ob~CU?ZfD@!%D|=VtFzCJ*^EV$MRpN`
zq>d<ykrk`f76vX!)@=*|;VmqT%l|*uV&2Li0wN@|__i`gZ)9L#U}orKU|>*V;ACK6
z;A3E65MbbE5Moef5Mj_|5MnT9kYKQ2kYuoBkYaFRkY?y&U|>*SU}jKe;9}@z=wV<5
zIfS8?p%2_}ac1aen83iuFp+_QL7ai<KZ7^}D?0->JHsS)hDnT!3=BUQq!}0)SQ(U{
zeko#LW?%*xiRKqAZJBKh@*syoTnln26WF0rV86>UurSCo@G~efh%zWMNHM4|$TO(I
z9S3qE%t;CilNqKkFoNu0n948>9QM;0VxjiyGcbbXKmjGO1{~y|&|m`#YJd&o0kc`5
zeq>~r!2ps4MT83jD_BlQi)AZ=gjVDh25Aun<!orULY&J7_MQ#{D}yeBAcG!~i9&D_
zXJU1Z2)c6&ku)QmBL;Vl3D|E83~V6hh#*1?)BtB-FlAt6Fheqd4Q~A`1`TLv7(qjW
z1C(sGF{q-uz!FJ62VDPbhB;9E@eC|r?~1AO&6vZ$yPH8XQb>C{gYJGUb!ebK5}ObM
z3j+g#Edv{a9fJUaBZDY|6WC-i1||ju1~I6~Al6(4IcRcXW?&RxU}TubFdu4}KGeIQ
zsFPlg7Im&*^U$Mi0mDM5W(Ni)uw6VLpGt3IFgU<qvH{HuPp}yfH}SyT#KW+NVHyJ?
zLnEjG3N@{XfeD-{Rf)-hpol>Z20sQ7h5!aR20sQBhG4Ljp!_9*l)qHrma8J=FJ1<w
ze+(Spd<Du?jSP$7B?M9KF@qKf=<W$;5MhX9kYfmEP+^E6-#v^BiVPmm@QG$%1&6l0
z7Rz1+lSpRmZ48#d+ZgP%QMk?^mmuew1O|SFBnCN#6tF8G5g`u`3wdb923Z6vPRbaV
zz)4G(*-lnw5d)u=_BIB$7G}of|38BaM-KK326l!_1|EhC1|fzVumxJ+5?O#@3BxpS
zDi(%YB@DHSfk7BrhJXq<P6nnw3`~r_82A|&8J5Dcp&bJYxKt1TC9T~Io{?JH8N7Ee
z_<<Y%@f{>X7BKKLG=VLKBvS#Xb&Q~vBP8G$?=mnka4;}19AUO$wgs8DjUmKOcPB#x
zBg0GvRo$Hoaf}QH7)-2KBw4mGB(W@DU~6Gwlm>GWY?lAOAuS-fh(TIr9)oxbBUcO4
ze`x{HCI8>HFn(jUUH<>6w1DUWhAd`KoxyAd%0^t<7(%SrB-x-A*nwD38`ve;w=pEG
zW?*1Y0cR5iupcEEKuur<200eH<qSM5W-QAY*jUV1m;c`<JCi{`lw~FZw<zl@1~!4@
zHPWEM1QG#73^EK13~k^lkA<O&L4l#0L6f0}L5HD_!Gxio!JJ_dgCoOa1{a2@4DJlm
z8GIRLFa$8nWC&$gz!1%_h#{6?F+&2w5{6`kWeiOWD;O3qtYTQiu$o~h!&-(F4C@$H
zGi+d3$FP}UBg0mP{S4a}4l(QkhjS1E2ZI8G2)N#2VQ6B|0khZ{Vi{5ymNAGkFf$}D
zBrz;!5NBXvNM?v<SOKcOK%ozf877893@gEzpM~K7!zyrP0!j$x4BY=1co-Sk86y8M
z$g?w;{AA#g{m&rAz|PLV%?JYQ43P{Be;AC}8BADMe=#uqVqp5g04mN_!;?)nXqbe7
zfx!$K%|6=DSdiC-MYHcFhE$zx4B5LF@);PmF%&QVe{T~*s!+u?hAL3vf&{J@xJus7
zAkA=)L5txqgD%5S22+M(-~a$+A!!DFu(v@atr^r~AWv|EQZolTL*y?86$VC7F9nhY
z89JbON=j=RL#?g$HilX|8QCQatSoC}WEU~8GOb}o#H<_xI|Bp583tB{vkY7e=Nb4J
zE-(l(Tx1YqxWpjAa0ToLP&Q*=kb+tbVy$8512+mp8P<Zsl#4-tVI4RVf*i)d!1R|v
zkdcv1z>%SeVLjAU#?S(sQ%m~*1NSzD29P5l*$Y%XGcd4&ErVn&PN-$9(3aK)22gl0
yF>GSk%)kK7uAU5A7#J8h7#JD0GB7giX4uQXz#zoH#NY{T)_~ev2N(`9NCE)5^!f+@

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/JeudeCarte$1.class b/Partie_3_Terminal/target/classes/ch/hepia/JeudeCarte$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..2735eb7c27de1aa52aa4584d2c1ef9d746a2b524
GIT binary patch
literal 1157
zcmX^0Z`VEs1_lQPJ1zz$24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SE(Q(;PId+^9tLg(9!3Vf<P80c)Pl@JedolYl2k?puJqIr=ls%~)Y2kG
z1`!QSAA|z`P#@ROAZsoLJ_dev1_2%hK?Wg41_5*hj0~K~`MCv&MX4eAj10mWJ_r}N
z=9T7JYkGp*Ai~2S${@zbz@DC35|o&i4tAX<7lQ<YBs+r?4}&y=3?qXeLaS$9Nosm(
z5hDXT)Nn=yRt-;2kYRER^6U%>AT5fF45D!7c%_!6q=J2=V#vs#tbybckXNnI`I?^W
z49biQB49g9OEPoxox$EnEXgloWRO78k1*L<GmMde#W_DEm63tpCo?bAuQWF)wJ0Pp
zDJPYYLC7aRIWZ?Ju_zP7hYGTkWMmdIGKeFrM;NDKXwAsL22!A6z{ntqO$kUrGRXag
zj0^$@1z>-|<%}2^gdo9`m|2{k2aiuiPeumb;F84TY~REJsC(3rBM6dYtdXJ&Dx&Gh
z$iNw#nVy$eQd*SC$Y6!31R{bKa5m^pw6kVp;0n$!ElN&x%LD}yKf?QZprB`D;CIbS
z&dD#%%uDx8Ey>7FVP~*pWDv#@ub?Dv&B(x_;R%Wc4!_jm5|8}i5=I6d&%C_UBIlgM
z;^Nd|1_cH=1||kZ1|<dt24)5Z237_Y21W)|1_lO821W)ZkcifH2F8sH3=B*RY77hv
zYz&MH3=HZF>I@7FVh{xk8Vs5YAi&C?#h}f=$iT=T&7cT1rjCJ$frWvAK~8%c1G~;P
z2KH?Xymqp)82GifF$n8yV-ViKAihR+4cK~+`9fgT+6+7lx(osg`V2A*#$da&z~XXn
zyW|*j7<9pIkz>$f&}Cp^;9(GA&}T4UU}i9cxbqK#45NS}gEWH?)Gg)=%wSLQYH1%}
z;Lth1z_E=1Y&E9Wc)&*ULak$EFa`&J34<w^He)bnU|?WjuwbxaumOu$FxWCMFmN$2
LGRT2Kf`I`5Swi{a

literal 0
HcmV?d00001

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

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/Joueur.class b/Partie_3_Terminal/target/classes/ch/hepia/Joueur.class
new file mode 100644
index 0000000000000000000000000000000000000000..cec581d3b0582175934534582a999fa29a5d8288
GIT binary patch
literal 663
zcmX^0Z`VEs1_lQPEp`SbMh5=m4E>DMg3LsHul&-~(js;S7Dfhvti-ZJ{hY+SbbbG%
ztkmQZMh0&8)RN$mqQsKa^h!nsW(`eGMg|VYloa3mywplY1{Mt$%`ip=?x57%{IXQ2
zAcuQu36#mKq3OcNz!scZ;*?s#$iS-M;t5jE<_;BL(eMN*;BYBQEO$;UN?~M>)bR8{
zxGl9bCDl2xs3g@Iq>bM_wFIOpxTGjGFTErKWT2-f$Vpu8sU?0%Ah}|YqrhSu!5R7G
z9*KD=5RouO22PkrG1x0%j0_NcAVtM+ze0^>bIC7F%1LEp;POZ;hOnU~MKLmPI49->
z7vyAu`~;;rJQ9ncOg7KF;?g3JR`=8r2s;I04xGcRp&7-<z#5cV3<?(s4V-@F3eGPr
zN=|jl1UZEp5?Okncw%E<U}Rus00A);Mg~>}HU>}}vNLdiX-+83#lQ{b^Dyv&X+8#i
zFfG6!2&RP?gu%23gD995V-N?^5)6`HS_*2eG*n&&s!x_d4lFMZr4^v!icr21RKGIR
Xeia5)uzEEHbq0{jH5eEem>4txBR_%S

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/JoueurCroupier.class b/Partie_3_Terminal/target/classes/ch/hepia/JoueurCroupier.class
new file mode 100644
index 0000000000000000000000000000000000000000..1d0bb3797ec4281bcbc48e36763785c6e864c086
GIT binary patch
literal 3338
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
E0Axi5U;qFB

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/JoueurHumain.class b/Partie_3_Terminal/target/classes/ch/hepia/JoueurHumain.class
new file mode 100644
index 0000000000000000000000000000000000000000..068028eff942eafbe3b36e821e7fc43a0fe1309b
GIT binary patch
literal 4901
zcmX^0Z`VEs1_lR)P3#Ozj0~d58TuKi1(}KZUiqb|r9~d4xrv#1><lc73<6n+Wr_MZ
ziFxVz{z+M>$tCOzY>W*2Xc`z9SUnQ+Qi>TFM18;-N=q_x^c{<e5-WW&i%YB-890M8
z)AJHbN{dn%8Pu?;vGIYM2{Ovs&YF>d)i*ycwUUv6(S?zL(=)HQv?wtzIhB!t9n4Nm
zVPs&8Vq{>m$;`_vv14SA)IgZwm0FsT>YP|ql4|Xu8OF%K;+&t7%EiFUAi~2Sz#z)V
zz^tJe#?Bzl$RLcx!CVYt3?iHij0{pd4D1XX><luD47@1r<6@9zkOLVdkJDaH%`lKT
ziaZQT49biQ%!w%}j0~b05YHopsI_JkNS!JVgBpW6BLj1KY6(c4rzWOKkgb|L3|b7@
zj0|kSsU=Pzr7RjQnqeTv>hdsfGw^^|`aBH05SAei10MrFBLlxrW?rgaX>L+#QAlD^
zPAVgVkWYScVoq3MQ6`8F6=W&N$Sh`L5Jw6~q!eMz$iVECS_+C~cwis}G$RAIdumB=
zNl{`+YI-F&h&|aEtQi@kz(EZ5a!_erNoH=UYejNuK}lwQ9tVRhBZC|y!6^jfBvz&t
zDP$xTE9B)XzzovkVz6Sc2Zgl*C|r<2CAg$0GcVm56u%sfDJkI8!olFo$e`?;n5SN%
zkeHI9ke8aCSdv+ms*sqQUz%5<ke{XiR;S0o;L6Cr4`wU)m!%e^<>Z&^F*2}0)G;#f
z2A3ozXZt1=K!b)mC^a{~EETMQgTafDK?7n*acNRXQDSllKAU_P83e!@6+-h;;8t<C
zr<Q<4!9nH1$iS-M;;9+N!4SyEpaL;GDYZl)5n*zEkwRW+P7c&BdK?VFj11}smAUyv
zsR|_-iFpbo8L1F&Dpcl|Dr6*<rRsswSSSxe7=tAv150scRVoKV1S5kOD6=W#ffI&8
zUVe!}Sz=CR3Md>h67y30k{B5nJsBC;+~H}>Q_}^M3gdVfq8a=c88}>u63d+vi&8+@
zz!NFiAo3q58%Q%G@h~Jaq%blFz%;lO<>$I5=B6?-NMO&mplIcHPb~qN9$ZqCnwMUZ
z0SY5ePfbsd6Eb)hG8wWM89>1Z&gqN{!Wy2M2seNQt+^O-81mQ|av2%;;E5J2!^4md
z3JZ?()DpM+B2c-)mYi4w_A{4zYKdPG$l_u~1{Mvdg(W-;r63(_5Gh6mj^K>^a!>$5
z6or9YRmsCp1}a}TVRFTwfUn_UsAZ^QWZ=jwNi9k&$uDAL5YvEWaBx}a2^F{IW@un&
zVrOV%WDo-98WdR`hGvEqMh2F=)QS>D1`(JE;G6|1p27Otco^ClIv5$)GZKsaz)G1l
zG@}?9SU_<KDhuEN0dl-GBLl?0AWktn6NAGW<fA?wh8_k>5NiSt!$gp|93F|q!38;)
zC5#MgF8QTNIjLL>j0{tF7(5uXLF%UQFiZl40hdQ&F+@HE5<*cR*;zac)4`@VC+0y-
zVFlA14D%QnM12!0VCgYGO`#ZMO|c$G-vUq(un^?!X!JOSB(cRj3`-amGBOB3aw;hL
zK#2_GEs*|YJPgZ0uHpb&RsyO%SU?fZ$RL1j9wP%Aq>5p4V1NKf7(oP67#To5gL7De
zQj0+aF;{SYX;E^jTPCP@<%U$HdZ0*TP+(wWU}j)sU}a!oU;@=B42%q%3=9lR3|tIM
zph6qW=4Idk(|ip43=9n742%o{41x@d3_=VH3^T!c85r!fwlfH8?Pd^*+|D4el|fQ#
z3xnit2I)v`*6j?k+ZYtWK?2O%7*q~0Nb_xD(9qJ@%Aljgx0OLpi+L-9!A7tJMhpxL
zN(>wf3=BaGEDRwG{0!j?3Jj49`V7$wCJZqQmJG2Bb_{V0#taM$3JlB)3=H-RCJd(F
zkg#VkV=!l61dDMq@GvkjFfv#$SVEm?0`?{Y1J`Z_t4JZ6?F@GN;Wn~?btQpK<pHy~
zpr$f1I5KEMP3UG|1>0z;&NpKY125PdCy+T>TNrfsrq5%L05Q~)5wb2|*~l#nI_k+=
z8FWBiWM%+)QHp_$fq@}|fsG-PL4YBPL4_fkL60Gy!GfUx><BRiCI$uuOQ<72EH?&_
z!`vAdK=C9X%fJXq(Rdu@3AP&Kuo-jU4x2s?>TGYYEZAY`SR7W$z{XI<Aiz-0pu$kW
zpvO?dV8KvJw8MNE{Gblg2gd;e11l(C)}sY?1K2>2uNW9up+03~&|>h1YCZr>S7GXW
zGv-3w9RPB-I><D*SAsx7va=cZWI^d`8$-wvsM>IlgcjV7AX!;R>Qmpwpn-@BHE?=w
zV_;)wXAofMVvuC$W>9A6XE0)zz+l5Lg~5$sIzuSK46th<NiGcPS_XzN21vYsSdk1-
z49pCm7-C~!5fI`7wRWNzVxYdsV_*iysfP4y20m$!V=$b$g+Wpp;=pYTv7pd`q!m7J
zqMOUW&oGZcl3@|p9gy^)0e6Q61ITtpu<a}iO#C3b;~5g5cGog6gU!$+#%`T$42g)q
z5n^CrU|?9mz|XLfL6TuDg9gJoumd0gp$T_@Ce#5844U9v$b{mQRE9LDQvw;7z)lec
zg#gsIGTRu^w=ra|K}#PSkt`C1TO<s(NSL93Aqt$p3K@!^#yc}GfkT-e$@pyy#pp(F
z1se?sM1Hu@{7|DA8Oj*Sp#~O_7Ht*iA-9`>pJ5M!B*Os)b%ujTw&IVvDh5%g{Z-)N
znSntW<e_a0)xOIa1a)>Y)H5<1V379F-o{X&vy-8fkzv;VH|SO$V-RIH$soyaj6sRv
zG?LZIP!EeTurPEobTL3ujUWTle+F&_W_AWf26l!91_oXRMuu*9>1o8k2rd^nAnpi3
z57BdA3m}=918M;yLk~P+ra>dd2c#bw@7ox91(Fvq=%NVq&tj02p2Z-FB3R5ipMgz4
zbPbANFUSp$ECNZTw-|&OZZlXh+-0z3xDR#@B!+#U?qOi?fyOW>ld>={S%GSZN$_k^
z1<fV~S}69!Zey5?A}|$+2g@x?;9?!(j^_+Q46hgz7~V4IGrR-41Cm<|;O;Phx`Tni
z0GeAE8KyJLfW|rYL_8DZU5GW1>gprdXowfFCF0p|12;hvaSD>dw=wk3gw)Z{*kFd_
zLYDaqc1X&gqDUev5OoU}#E}HIF%+{dU|?lg!whmIBvQl}SQ!`?{xGOB{AKWC_{WgI
z@Sh=xkqODwDewSEfd&XPV$`h|7#ZfkB8D-5fgM~7T?W~>jUj|>0knvp3ohaj<tE5&
zejr7lb_dH|hMY)d-QevE^I@$Is8?Y!+ZYys6hlR~F)Rh~KzJKN2uljAD8?oVQUuo)
z3u?@uiy$W%P$B`zgD{fOAYnwNH3BuU7&#cY895n58F?9083h<@7=;;v7{wS87$q6X
z7-bk{G0HQnVN_z+&8W<9iBSa{lv<FWfd}PfXizdRT!yACRfcs8D;QQnD<@_KMo{50
z5uQ4*C%1l3L?R_OMs=`lxRcu|c$pQ&zzQxaRJ2&OGC(pDwAr_fAy$N8bv~%cr?rJa
zZyUp8kpCgJfb$Nc4g)KrK7%x)5rZ<LG1x{(nW6&qA0xwBtgQ<@P<;t82%I|@&5$%B
zS{LgWI-r?MA6lS+nkEM5ezn4?c|Ai4RC6f<E4Z351h-sCX!9bx3(g&k_6)3yP7DH!
it_+Hd?hFQu9$<?hfour%G6RDlI3hs>@CI-lxe);R?6R)_

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_3_Terminal/target/classes/ch/hepia/JoueurOrdinateur.class
new file mode 100644
index 0000000000000000000000000000000000000000..e8925bd7d60d537103d49935df82fae23c2b1f36
GIT binary patch
literal 4918
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

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/Paquet.class b/Partie_3_Terminal/target/classes/ch/hepia/Paquet.class
new file mode 100644
index 0000000000000000000000000000000000000000..287773450d9a2e8fcd9120c796067e1f9f2a10cf
GIT binary patch
literal 902
zcmX^0Z`VEs1_lQPBQ6Fe24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc24S$G(vr*^eaE7r#7dvc;u0<fb_Qln25tr(b_QM^20jLUMh5=m
z4E>DMg3LtyfW*SmRFGK(P=<gH!VHjhYjy@fMh0QH2Cvl8lvL-$qLNfD1_1_Pkn2Pk
z8CWztHN!vxVmu7uAm_3dXOyO;<)m^mNHR#VGf49=$S}w<GVq}q&d9)=n3BTCAgTee
z70G+nno*1loWYstd5I;ZMX8Jo>JTMh&w(6f<AcRb)^^s646GWSo|<8d3@pz1DXEMM
z{63j^seYxoNvTC4iAg!Bj0{3P`N@enVTnbVAU;%(D=W3s1>!SC22rerGcqt{GBPlF
zGBU7~WMmdIG6*7+K?2g6k%2QWDIOM>9C=Cc$)K=eWZ(@hNlec6O)P*~$C;j50@1_B
zAf%y*<~eId22Bh>+&<<C&Mz%WPIb!!`HmZ6tR5(+859|~8JHLt7#JCtKvB=Y$RNkS
zz`(>H&%ngM$iT{=z`)3$$iTp`kAazim4Si5LTft%qt<Q)_Q>rFoLd>VnC)bx7cr>p
zW)O&!+0Gzj#UjbFjX_jv3j>!V%T5LfCWi19X2#|J?`~vZU|?oYVqjoUV&Gt4VBlh4
zVc=olXW(NHW8h~{U=UzXWe{XAWZ+{kXAogfW?*120oyLfpu(Waz``KNpvIuapw7Sy
zasz_~gC+wASTJZYs53Bv#k3jJ8JHM!7#J9Y7?}Pu2r{s+GjKC9GBPmyVo+sZWYA^M
rV_*XNMW2BYtcMlk%ne}gf*i&M78D0t&I4w%LM?&>2}qj(ShXPlgpaz3

literal 0
HcmV?d00001

diff --git a/Partie_3_Terminal/target/classes/ch/hepia/Save.class b/Partie_3_Terminal/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_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Partie_3_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..814b859
--- /dev/null
+++ b/Partie_3_Terminal/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_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Partie_3_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..aacaf9d
--- /dev/null
+++ b/Partie_3_Terminal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,8 @@
+/home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Paquet.java
+/home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Joueur.java
+/home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/App.java
+/home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Hand.java
+/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_Terminal/target/test-classes/ch/hepia/JoueurTest.class b/Partie_3_Terminal/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