From 5c82b384a57a1db6925fd65c584df855c7710075 Mon Sep 17 00:00:00 2001 From: "michael.divia" <michael.divia@etu.hesge.ch> Date: Fri, 5 Jan 2024 15:59:43 +0100 Subject: [PATCH] Part 3 Without GFX 100% --- Partie_3/.vscode/settings.json | 3 +- Partie_3/pom.xml | 13 +- Partie_3/save.csv | 3 + Partie_3/src/main/java/ch/hepia/App.java | 136 +++++--- .../src/main/java/ch/hepia/GameManager.java | 274 ++++++++++++++-- Partie_3/src/main/java/ch/hepia/Joueur.java | 5 +- Partie_3/src/main/java/ch/hepia/Save.java | 100 ++++++ .../src/test/java/ch/hepia/CarteTest.java | 49 --- .../src/test/java/ch/hepia/JoueurTest.java | 302 ++++++++++++++++++ Partie_3/target/classes/ch/hepia/App.class | Bin 2666 -> 3474 bytes .../target/classes/ch/hepia/GameManager.class | Bin 9609 -> 18901 bytes .../classes/ch/hepia/JoueurCroupier.class | Bin 3338 -> 3338 bytes .../classes/ch/hepia/JoueurHumain.class | Bin 4874 -> 4901 bytes .../classes/ch/hepia/JoueurOrdinateur.class | Bin 4918 -> 4918 bytes Partie_3/target/classes/ch/hepia/Save.class | Bin 0 -> 3866 bytes .../compile/default-compile/inputFiles.lst | 1 + .../test-classes/ch/hepia/CarteTest.class | Bin 1821 -> 0 bytes .../test-classes/ch/hepia/JoueurTest.class | Bin 0 -> 8931 bytes 18 files changed, 768 insertions(+), 118 deletions(-) create mode 100644 Partie_3/save.csv create mode 100644 Partie_3/src/main/java/ch/hepia/Save.java delete mode 100644 Partie_3/src/test/java/ch/hepia/CarteTest.java create mode 100644 Partie_3/src/test/java/ch/hepia/JoueurTest.java create mode 100644 Partie_3/target/classes/ch/hepia/Save.class delete mode 100644 Partie_3/target/test-classes/ch/hepia/CarteTest.class create mode 100644 Partie_3/target/test-classes/ch/hepia/JoueurTest.class diff --git a/Partie_3/.vscode/settings.json b/Partie_3/.vscode/settings.json index 3e5eb95..1152b26 100644 --- a/Partie_3/.vscode/settings.json +++ b/Partie_3/.vscode/settings.json @@ -55,5 +55,6 @@ "C_Cpp_Runner.useLeakSanitizer": false, "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, - "C_Cpp_Runner.msvcSecureNoWarnings": false + "C_Cpp_Runner.msvcSecureNoWarnings": false, + "java.configuration.updateBuildConfiguration": "interactive" } \ No newline at end of file diff --git a/Partie_3/pom.xml b/Partie_3/pom.xml index 7cb8921..a8dc63e 100644 --- a/Partie_3/pom.xml +++ b/Partie_3/pom.xml @@ -19,7 +19,13 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>4.11</version> + <version>4.13.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.9.1</version> <scope>test</scope> </dependency> <dependency> @@ -27,6 +33,11 @@ <artifactId>javafx-controls</artifactId> <version>19</version> </dependency> + <dependency> + <groupId>com.opencsv</groupId> + <artifactId>opencsv</artifactId> + <version>5.9</version> + </dependency> </dependencies> <build> diff --git a/Partie_3/save.csv b/Partie_3/save.csv new file mode 100644 index 0000000..f481abf --- /dev/null +++ b/Partie_3/save.csv @@ -0,0 +1,3 @@ +Human,100.0,0 +Player_1,190.0,1 +Player_2,305.0,1 diff --git a/Partie_3/src/main/java/ch/hepia/App.java b/Partie_3/src/main/java/ch/hepia/App.java index eeac945..b99e87f 100644 --- a/Partie_3/src/main/java/ch/hepia/App.java +++ b/Partie_3/src/main/java/ch/hepia/App.java @@ -1,5 +1,6 @@ package ch.hepia; +import java.io.File; import java.util.Scanner; public class App { @@ -28,83 +29,124 @@ public class App { int numPlayers; int startMoney; int computerStrategy = 1; + boolean loadSave = false; + String filePath = "save.csv"; - // Ask the number of players until a valide answer is given - while (true) { + File f = new File(filePath); - System.out.print("How many players ? "); + // Check if a save file exists + if (f.exists() && !f.isDirectory()) { - // Check that the input is an valid int - while (!App.in.hasNextInt()) { - System.out.println( - App.ANSI_YELLOW + "Please enter a valid number for the number of players." + App.ANSI_RESET); - System.out.print("How many players ? "); - App.in.next(); - } + char choice = 'x'; + + System.out.print("Do you want to load last game save (y/n) ? "); + + while (true) { - numPlayers = App.in.nextInt(); + choice = App.in.next().charAt(0); + + // Choices are checked with available one for confirmation + if (choice == 'y' || choice == 'n') { + break; + } else { + System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET); + } + } - // Player count must be between 1 and 7 - if (numPlayers >= 1 && numPlayers <= 7) { - System.out.print(""); - break; - } else { - System.out.println( - App.ANSI_YELLOW + "Please enter a number of players between 1 and 7." + App.ANSI_RESET); + if (choice == 'y') { + loadSave = true; } } - // Ask the start money count for each players until a valide answer is given - while (true) { + GameManager BlackJack; - System.out.print("How much money do you start with ? "); + if (loadSave) { - // Check that the input is an valid int - while (!App.in.hasNextInt()) { - System.out.println(App.ANSI_YELLOW + "Please enter a valid number for your Money." + App.ANSI_RESET); - System.out.print("How much money do you start with ? "); - App.in.next(); - } + // Load save to create game + Save Game = new Save(); + + BlackJack = new GameManager(Game.loadMoney(), Game.loadStrategy()); + + } else { + // Ask the number of players until a valide answer is given + while (true) { - startMoney = App.in.nextInt(); + System.out.print("How many players ? "); - // Starting money must be more or equal to minimum bid amount - if (startMoney >= 10) { - System.out.print(""); - break; - } else { - System.out.println(App.ANSI_YELLOW + "Please enter an amount above 10." + App.ANSI_RESET); + // Check that the input is an valid int + while (!App.in.hasNextInt()) { + System.out.println( + App.ANSI_YELLOW + "Please enter a valid number for the number of players." + + App.ANSI_RESET); + System.out.print("How many players ? "); + App.in.next(); + } + + numPlayers = App.in.nextInt(); + + // Player count must be between 1 and 7 + if (numPlayers >= 1 && numPlayers <= 7) { + System.out.print(""); + break; + } else { + System.out.println( + App.ANSI_YELLOW + "Please enter a number of players between 1 and 7." + App.ANSI_RESET); + } } - } - // Ask if the Computer players should be smart of not - if (numPlayers > 1) { + // Ask the start money count for each players until a valide answer is given while (true) { - System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? "); + System.out.print("How much money do you start with ? "); // Check that the input is an valid int while (!App.in.hasNextInt()) { System.out - .println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET); - System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? "); + .println(App.ANSI_YELLOW + "Please enter a valid number for your Money." + App.ANSI_RESET); + System.out.print("How much money do you start with ? "); App.in.next(); } - computerStrategy = App.in.nextInt(); + startMoney = App.in.nextInt(); - // Check if the value i s valide - if (computerStrategy == 1 || computerStrategy == 2) { + // Starting money must be more or equal to minimum bid amount + if (startMoney >= 10) { System.out.print(""); break; } else { - System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET); + System.out.println(App.ANSI_YELLOW + "Please enter an amount above 10." + App.ANSI_RESET); } } - } - // Create a new game - GameManager BlackJack = new GameManager(numPlayers, startMoney, computerStrategy); + // Ask if the Computer players should be smart of not + if (numPlayers > 1) { + while (true) { + + System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? "); + + // Check that the input is an valid int + while (!App.in.hasNextInt()) { + System.out + .println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET); + System.out.print("Should the Compter players be [1] Smart or [2] Stupid ? "); + App.in.next(); + } + + computerStrategy = App.in.nextInt(); + + // Check if the value i s valide + if (computerStrategy == 1 || computerStrategy == 2) { + System.out.print(""); + break; + } else { + System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET); + } + } + } + + // Create a new game + BlackJack = new GameManager(numPlayers, startMoney, computerStrategy); + } boolean GameOver = false; diff --git a/Partie_3/src/main/java/ch/hepia/GameManager.java b/Partie_3/src/main/java/ch/hepia/GameManager.java index e5ce283..2cc3940 100644 --- a/Partie_3/src/main/java/ch/hepia/GameManager.java +++ b/Partie_3/src/main/java/ch/hepia/GameManager.java @@ -33,6 +33,29 @@ public class GameManager { this.Dealer = new JoueurCroupier(Deck); } + public GameManager(ArrayList<Double> Money, ArrayList<Integer> Strategy) { + + // Create a new BlackJack Deck of card (6 x 52 cards game) + this.Deck = new JeudeCarte(new Paquet(6, 52)); + + this.Players = new ArrayList<>(); + + // First Player is always the humain + this.Players.add(new JoueurHumain(Deck, Money.get(0))); + + this.ComputerPlayers = 0; + + // All other are controlled by the computer + if (Money.size() > 1) { + for (int x = 1; x < Money.size(); x++) { + ComputerPlayers++; + this.Players.add(new JoueurOrdinateur(Deck, Money.get(x), Strategy.get(x))); + } + } + + this.Dealer = new JoueurCroupier(Deck); + } + // Phase 1 (StartTurn): // Ask the player how much he wan't to bid public void StartTurn() { @@ -308,6 +331,199 @@ public class GameManager { */ if (this.Players.get(x).GetStrategy() == 1) { + char[][][] Choices_2Cards = { + { + { 'S', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'T', 'T', 'S', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'R', 'S', 'R', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'R', 'R', 'R', 'S', 'R', 'R' }, + { 'R', 'T', 'T', 'R', 'R', 'R', 'R', 'R', 'S', 'R' }, + { 'R', 'T', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'T', 'R' }, + { 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'T', 'R', 'R' }, + { 'T', 'T', 'T', 'D', 'D', 'D', 'T', 'R', 'R', 'R' }, + { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' }, + { 'D', 'D', 'D', 'D', 'T', 'R', 'S', 'R', 'R', 'R' }, + { 'R', 'D', 'D', 'T', 'R', 'R', 'R', 'S', 'R', 'R' }, + { 'R', 'D', 'T', 'R', 'R', 'R', 'R', 'R', 'S', 'R' }, + { 'R', 'T', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'D', 'D', 'D', 'D', 'R', 'R', 'R' }, + { 'T', 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'R' }, + { 'T', 'T', 'S', 'T', 'T', 'D', 'D', 'D', 'R', 'R' }, + { 'D', 'T', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R' }, + { 'D', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R' }, + { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' }, + { 'D', 'D', 'D', 'D', 'R', 'R', 'S', 'R', 'R', 'R' }, + { 'R', 'D', 'D', 'R', 'R', 'R', 'R', 'S', 'R', 'R' }, + { 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'S', 'R' }, + { 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'D', 'D', 'D', 'D', 'D', 'D', 'R', 'R', 'R' }, + { 'D', 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'R' }, + { 'D', 'T', 'S', 'T', 'T', 'D', 'D', 'D', 'R', 'R' }, + { 'D', 'T', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R' }, + { 'D', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R' }, + { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' }, + { 'D', 'D', 'D', 'D', 'R', 'R', 'S', 'R', 'R', 'R' }, + { 'R', 'D', 'D', 'R', 'R', 'R', 'R', 'S', 'R', 'R' }, + { 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'S', 'R' }, + { 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'D', 'D', 'D', 'D', 'D', 'D', 'R', 'R', 'R' }, + { 'D', 'S', 'T', 'T', 'T', 'T', 'D', 'D', 'D', 'R' }, + { 'D', 'T', 'S', 'T', 'T', 'D', 'D', 'D', 'R', 'R' }, + { 'D', 'T', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R' }, + { 'D', 'T', 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R' }, + { 'D', 'T', 'D', 'D', 'D', 'S', 'R', 'R', 'R', 'R' }, + { 'D', 'D', 'D', 'D', 'R', 'R', 'S', 'R', 'R', 'R' }, + { 'R', 'D', 'D', 'R', 'R', 'R', 'R', 'S', 'R', 'R' }, + { 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'S', 'R' }, + { 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + { 'T', 'S', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T' }, + { 'T', 'T', 'S', 'T', 'T', 'T', 'D', 'D', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T' }, + { 'R', 'T', 'D', 'D', 'T', 'T', 'S', 'T', 'T', 'R' }, + { 'R', 'D', 'D', 'T', 'T', 'T', 'T', 'S', 'R', 'R' }, + { 'R', 'D', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T' }, + { 'R', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T', 'R' }, + { 'R', 'D', 'D', 'T', 'T', 'T', 'T', 'S', 'R', 'R' }, + { 'R', 'D', 'T', 'T', 'T', 'T', 'T', 'R', 'S', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'R' }, + { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'R', 'R' }, + { 'R', 'D', 'D', 'T', 'T', 'T', 'T', 'S', 'R', 'R' }, + { 'R', 'D', 'T', 'T', 'T', 'T', 'R', 'R', 'S', 'R' }, + { 'R', 'T', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R' }, + }, + { + { 'S', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R', 'R' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'T' }, + { 'T', 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R' }, + { 'T', 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R', 'R' }, + { 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R', 'R', 'R' }, + { 'R', 'T', 'D', 'T', 'T', 'T', 'R', 'S', 'R', 'R' }, + { 'R', 'D', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R' }, + { 'R', 'T', 'T', 'T', 'R', 'R', 'R', 'R', 'R', 'R' }, + } + }; + + char[][] Choices_MoreThan2Cards = { + { 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'R', 'R' }, + { 'T', 'T', 'D', 'D', 'T', 'R', 'R', 'R', 'R', 'R' }, + { 'T', 'D', 'D', 'D', 'T', 'R', 'R', 'R', 'R', 'R' }, + { 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R' }, + { 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R' }, + { 'T', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R' }, + { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T', 'R' }, + { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'T', 'R' }, + { 'T', 'T', 'D', 'D', 'T', 'T', 'T', 'T', 'R', 'R' }, + { 'T', 'T', 'T', 'D', 'T', 'T', 'T', 'R', 'R', 'R' } + }; + + char Choice = 'R'; + + // Go thew all the hands of the computer player + for (int HandNb = 0; HandNb < this.Players.get(x).GetNbHands(); HandNb++) { + + if (this.Players.get(x).GetNbCards(HandNb) == 2) { + Choice = Choices_2Cards[this.Dealer.GetCardStrength(0, 0) - 1][this.Players.get(x) + .GetCardStrength(HandNb, 0) - 1][this.Players.get(x).GetCardStrength(HandNb, 1) - 1]; + } else { + if (this.Players.get(x).GetStrength(HandNb) <= 8) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][0]; + } else if (this.Players.get(x).GetStrength(HandNb) == 9) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][1]; + } else if (this.Players.get(x).GetStrength(HandNb) == 10) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][2]; + } else if (this.Players.get(x).GetStrength(HandNb) == 11) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][3]; + } else if (this.Players.get(x).GetStrength(HandNb) == 12) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][4]; + } else if (this.Players.get(x).GetStrength(HandNb) == 13) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][5]; + } else if (this.Players.get(x).GetStrength(HandNb) == 14) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][6]; + } else if (this.Players.get(x).GetStrength(HandNb) == 15) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][7]; + } else if (this.Players.get(x).GetStrength(HandNb) == 16) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][8]; + } else if (this.Players.get(x).GetStrength(HandNb) >= 17) { + Choice = Choices_MoreThan2Cards[this.Dealer.GetCardStrength(0, 0) - 1][9]; + } + } + + if (Choice == 'T') { + // Draw + + this.Players.get(x).DrawCard(HandNb, this.Deck); + // Go back 1 hand to stay on the same hand in the for loop + HandNb--; + + } else if (Choice == 'R') { + // Stay + + } else if (Choice == 'D') { + // Double + + this.Players.get(x).Double(HandNb, this.Deck); + // Go back 1 hand to stay on the same hand in the for loop + HandNb--; + } else if (Choice == 'S') { + // Split + + this.Players.get(x).Split(HandNb, this.Deck); + // Go back 1 hand to stay on the same hand in the for loop + HandNb--; + } + } + } else if (this.Players.get(x).GetStrategy() == 2) { while (this.Players.get(x).GetStrength(0) <= 15) { this.Players.get(x).DrawCard(0, this.Deck); @@ -486,29 +702,51 @@ public class GameManager { // Show the final player balance System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET); - System.out.print("> "); + // Show Choices + System.out.println("\n--- " + App.ANSI_GREEN + "Choices" + App.ANSI_RESET + " ---\n"); - // Wait for a simple input of the player - try { - System.in.read(); - } catch (Exception e) { - } + System.out.println(App.ANSI_BLUE + "[c]" + App.ANSI_RESET + " Continue"); + System.out.println(App.ANSI_BLUE + "[s]" + App.ANSI_RESET + " Save & Quit"); - // If the player has less than the minimum bid amount allowed - if (this.Players.get(0).GetMoney() <= 10) { - return true; - } + char choice = 'x'; + + // Ask for the player choice until a valide one is given + while (true) { + System.out.print("> "); - // If more thn 75% of the Deck has been used, reshuffle all cards. In our case: - // simply recreate a new deck - if (this.Deck.GetNbCards() < 78) { - this.Deck = new JeudeCarte(new Paquet(6, 52)); + choice = App.in.next().charAt(0); + + // Choices are checked with available one for confirmation + if (choice == 'c' || choice == 's') { + break; + } else { + System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET); + } } - // Reset all hands - this.Dealer.Reset(this.Deck); - for (Joueur Player : this.Players) { - Player.Reset(this.Deck); + if (choice == 'c') { + // If the player has less than the minimum bid amount allowed + if (this.Players.get(0).GetMoney() <= 10) { + return true; + } + + // If more thn 75% of the Deck has been used, reshuffle all cards. In our case: + // simply recreate a new deck + if (this.Deck.GetNbCards() < 78) { + this.Deck = new JeudeCarte(new Paquet(6, 52)); + } + + // Reset all hands + this.Dealer.Reset(this.Deck); + for (Joueur Player : this.Players) { + Player.Reset(this.Deck); + } + } else if (choice == 's') { + + Save Game = new Save(); + Game.save(this.Players, this.ComputerPlayers); + + return true; } return false; diff --git a/Partie_3/src/main/java/ch/hepia/Joueur.java b/Partie_3/src/main/java/ch/hepia/Joueur.java index 036088f..e69d341 100644 --- a/Partie_3/src/main/java/ch/hepia/Joueur.java +++ b/Partie_3/src/main/java/ch/hepia/Joueur.java @@ -79,7 +79,7 @@ class JoueurHumain implements Joueur { private double Insurance; private boolean Insured; - public JoueurHumain(JeudeCarte Jeu, int Money) { + public JoueurHumain(JeudeCarte Jeu, double Money) { this.Hands = new ArrayList<>(); @@ -342,7 +342,7 @@ class JoueurOrdinateur implements Joueur { */ private int Strategy; - public JoueurOrdinateur(JeudeCarte Jeu, int Money, int Strategy) { + public JoueurOrdinateur(JeudeCarte Jeu, double Money, int Strategy) { this.Hands = new ArrayList<>(); @@ -354,6 +354,7 @@ class JoueurOrdinateur implements Joueur { this.Money = Money; this.Insurance = 0; this.Insured = false; + this.Strategy = Strategy; } diff --git a/Partie_3/src/main/java/ch/hepia/Save.java b/Partie_3/src/main/java/ch/hepia/Save.java new file mode 100644 index 0000000..d66eaa2 --- /dev/null +++ b/Partie_3/src/main/java/ch/hepia/Save.java @@ -0,0 +1,100 @@ +package ch.hepia; + +import com.opencsv.CSVWriter; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; + +public class Save { + + public void save(ArrayList<Joueur> Players, int ComputerPlayers) { + + String filePath = "save.csv"; + + File file = new File(filePath); + + try { + // Create FileWriter object + FileWriter outputfile = new FileWriter(file); + + // Create CSVWriter object filewriter + CSVWriter writer = new CSVWriter(outputfile, ',', + CSVWriter.NO_QUOTE_CHARACTER, + CSVWriter.DEFAULT_ESCAPE_CHARACTER, + CSVWriter.DEFAULT_LINE_END); + + String[] data = { "Human", Double.toString(Players.get(0).GetMoney()), "0" }; + + writer.writeNext(data); + + for (int x = 1; x <= ComputerPlayers; x++) { + + data[0] = "Player_" + x; + data[1] = Double.toString(Players.get(x).GetMoney()); + data[2] = Integer.toString(Players.get(x).GetStrategy()); + + writer.writeNext(data); + } + + // Closing writer connection + writer.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public ArrayList<Double> loadMoney() { + + File file = new File("save.csv"); + + ArrayList<Double> Money = new ArrayList<>(); + + try { + + List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8); + + for (String string : lines) { + + String[] array = string.split(","); + + Money.add(Double.valueOf(array[1])); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + return Money; + } + + public ArrayList<Integer> loadStrategy() { + + File file = new File("save.csv"); + + ArrayList<Integer> Strategy = new ArrayList<>(); + + try { + + List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8); + + for (String string : lines) { + + String[] array = string.split(","); + + Strategy.add(Integer.valueOf(array[2])); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + return Strategy; + } +} diff --git a/Partie_3/src/test/java/ch/hepia/CarteTest.java b/Partie_3/src/test/java/ch/hepia/CarteTest.java deleted file mode 100644 index f1ac133..0000000 --- a/Partie_3/src/test/java/ch/hepia/CarteTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package ch.hepia; - -import static org.junit.Assert.assertEquals; -import org.junit.Test; - -public class CarteTest { - - @Test - public void testGetCouleur() { - Carte carte = new Carte(COULEUR.coeur, 2); - assertEquals(COULEUR.coeur, carte.getCouleur()); - } - - @Test - public void testGetRang() { - Carte carte = new Carte(COULEUR.carreau, 7); - assertEquals(7, carte.getRang()); - } - - @Test - public void testGetForce() { - Carte carte = new Carte(COULEUR.trefle, 12, 10); - assertEquals(10, carte.getForce()); - } - - @Test - public void testGetNomCouleur() { - Carte carte = new Carte(COULEUR.coeur, 0); - assertEquals("Coeur", carte.getNomCouleur()); - } - - @Test - public void testGetNomRang() { - Carte carte = new Carte(COULEUR.coeur, 2); - assertEquals("2", carte.getNomRang()); - } - - @Test - public void testGetNomComplet() { - Carte carte = new Carte(COULEUR.carreau, 12); - assertEquals("Dame de Carreau", carte.getNomComplet()); - } - - @Test - public void testGetNomComplet_2() { - Carte carte = new Carte(COULEUR.carreau, 0); - assertEquals("Joker", carte.getNomComplet()); - } -} \ No newline at end of file diff --git a/Partie_3/src/test/java/ch/hepia/JoueurTest.java b/Partie_3/src/test/java/ch/hepia/JoueurTest.java new file mode 100644 index 0000000..836b221 --- /dev/null +++ b/Partie_3/src/test/java/ch/hepia/JoueurTest.java @@ -0,0 +1,302 @@ +package ch.hepia; + +import static org.junit.Assert.*; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import org.junit.Test; + +public class JoueurTest { + + @Test + public void testAddMoney() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + joueur.AddMoney(100); + + assertEquals(100, joueur.GetMoney(), 0); + } + + @Test + public void testAddZeroMoney() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + joueur.AddMoney(0); + + assertEquals(0, joueur.GetMoney(), 0); + } + + @Test + public void testAddNegativeMoney() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.AddMoney(-50)); + } + + @Test + public void testRemoveMoney() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + joueur.RemoveMoney(10); + + assertEquals(90, joueur.GetMoney(), 0); + } + + @Test + public void testRemoveZeroMoney() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + joueur.RemoveMoney(0); + + assertEquals(0, joueur.GetMoney(), 0); + } + + @Test + public void testRemoveNegativeMoney() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + + assertThrows(RuntimeException.class, () -> joueur.RemoveMoney(-50)); + } + + @Test + public void testAddBet() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + joueur.SetBet(10, 0); + + assertEquals(10, joueur.GetBet(0), 0); + } + + @Test + public void testAddNegativeBet() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + + assertThrows(RuntimeException.class, () -> joueur.SetBet(-10, 0)); + } + + @Test + public void testAddTooBigBet() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + + assertThrows(RuntimeException.class, () -> joueur.SetBet(101, 0)); + } + + @Test + public void testAddBetWrongHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + + assertThrows(RuntimeException.class, () -> joueur.SetBet(1, 1)); + } + + @Test + public void testGetBetWrongHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 100); + joueur.SetBet(10, 0); + + assertThrows(RuntimeException.class, () -> joueur.GetBet(1)); + } + + @Test + public void testDrawCard() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + joueur.DrawCard(0, Deck); + + assertEquals(3, joueur.GetNbCards(0)); + } + + @Test + public void testDrawCardWrongHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(6, 52)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.DrawCard(1, Deck)); + } + + @Test + public void testCardStrength() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertEquals(0, joueur.GetCardStrength(0, 0)); + } + + @Test + public void testCardStrengthWrongCard() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.GetCardStrength(0, 2)); + } + + @Test + public void testCardStrengthWrongHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.GetCardStrength(1, 0)); + } + + @Test + public void testCardCount() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertEquals(2, joueur.GetNbCards(0)); + } + + @Test + public void testCardCountWrongHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.GetNbCards(1)); + } + + @Test + public void testShowHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStreamCaptor)); + + joueur.ShowHand(0); + + System.setOut(System.out); + String printedOutput = outputStreamCaptor.toString().trim(); + + assertTrue(printedOutput.contains("🃟 🃟")); + } + + @Test + public void testWrongShowHand() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.ShowHand(1)); + } + + @Test + public void testShowHands() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStreamCaptor)); + + joueur.ShowHands(); + + System.setOut(System.out); + String printedOutput = outputStreamCaptor.toString().trim(); + + assertTrue(printedOutput.contains("🃟 🃟")); + } + + @Test + public void testNumberHands() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertEquals(1, joueur.GetNbHands()); + } + + @Test + public void testHandStrength() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertEquals(0, joueur.GetStrength(0)); + } + + @Test + public void testWrongHandStrength() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertThrows(RuntimeException.class, () -> joueur.GetStrength(1)); + } + + @Test + public void testDoubled() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertEquals(false, joueur.HasDoubled(0)); + } + + @Test + public void testCanSplit() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 2)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + assertEquals(true, joueur.CanSplit(0)); + } + + @Test + public void testCantSplit() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 3)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + joueur.DrawCard(0, Deck); + + assertEquals(false, joueur.CanSplit(0)); + } + + @Test + public void testSplit() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 5)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + joueur.Split(0, Deck); + + assertEquals(true, joueur.HasSplit(0)); + } + + @Test + public void testSplitMax() { + + JeudeCarte Deck = new JeudeCarte(new Paquet(1, 15)); + JoueurHumain joueur = new JoueurHumain(Deck, 0); + + joueur.Split(0, Deck); + joueur.Split(1, Deck); + + assertThrows(RuntimeException.class, () -> joueur.Split(0, Deck)); + } +} diff --git a/Partie_3/target/classes/ch/hepia/App.class b/Partie_3/target/classes/ch/hepia/App.class index 2cd8ba87eca313ce79e1f20008967fe2848f2513..aad0e41606823ab879200272efe2f63852dccb72 100644 GIT binary patch literal 3474 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 HmsL9ehE+B8 literal 2666 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 LFf#OkGf_VPssmd7 diff --git a/Partie_3/target/classes/ch/hepia/GameManager.class b/Partie_3/target/classes/ch/hepia/GameManager.class index 73ed8bf9a6302d0a47db71fa3b031bb7bbb9c49e..0ae3f3d24bc760587c947162801cc9ccb6df14b6 100644 GIT binary patch literal 18901 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 HF-QUccl)VU literal 9609 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 diff --git a/Partie_3/target/classes/ch/hepia/JoueurCroupier.class b/Partie_3/target/classes/ch/hepia/JoueurCroupier.class index 9a717ff4c56ce683fff710ba2f2f33ca8966b558..1d0bb3797ec4281bcbc48e36763785c6e864c086 100644 GIT binary patch delta 271 zcmeB@>XO=!&dM3Vz`_*CAjlLoxq#K1F>dk)ZqdmXS#=nbCm-MvpZuPUZL&0*9%BZa zm(Hfgm<v|5noWnXXtEqwl^tXG<O5vtlYQAOd21P1nCck#n3@>Gn3^X~W=~*joBV}6 zn6YcJ2S+&X1O^tSi41&9QyD~=rcGYM5yU#1ft_j2WM)oF#)Xq@IZH*CGq5nNVBllg z#304AnZcN8D}x!+_Q}UN!x;BXmg5R#JPfvJGM5hHiOC1Jycy3<mgCZ#Y|5>}co{6y z$gRV81MI@X+&YYRCx75}WPAkXyYm>ZzGUEKdNsL*CxP=5gEZ4;23e+Wlb`aa0sy@W BQcwT@ delta 271 zcmeB@>XO=!&dM3iz`_*4AjlLsxq#K1F?R9?ZqdmXS#=nbCLiDupZuPUZL&0*9%DM3 zm(Hfgm;+X|noWnXaIzd&l^tW*<O5vtlYQAOd21M0m}(jLm>L<xn3^U}W=~*jo&1G8 zn6Y!R2S+$>KLZQX1O`5)DGZ`aQzx(C2x6VZz|J&#GBc+o<ATYyoTZ}67+9E=Gw?BO zWRPOo#9+*{g~5zz+vMY%VT^kx%W;J=9s=7mnM;T9_~Zjz-i&7^%W-K=Hs#h~yabkM z<kn%l4tC*TZXL!ulRt1fGCl<J-FXaHUoh}8y_{Ublfe0rL7M3kgDlh6$xnGy0jOe9 ACjbBd diff --git a/Partie_3/target/classes/ch/hepia/JoueurHumain.class b/Partie_3/target/classes/ch/hepia/JoueurHumain.class index f48be18eb326b030e967eb4fcd4a691e8fb62038..068028eff942eafbe3b36e821e7fc43a0fe1309b 100644 GIT binary patch delta 2689 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 WBwItM_ZS!q!7&1I+6Hh|-UtAg(#;tF delta 2663 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 diff --git a/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_3/target/classes/ch/hepia/JoueurOrdinateur.class index 5d518578ec450182ac80c003ccfe22567f6000dd..e8925bd7d60d537103d49935df82fae23c2b1f36 100644 GIT binary patch delta 456 zcmdm{woPpTBcsb^M#k-IjI5J)vYQBMY-P~X;@iq#pvAnE!AMJ#W%56ERelr3WClyd z6b3uSGzJ&O^vOmX%Dg-bObiSRt_%VUf($H^lQ^^(vnKa)6o?iuurU@g2rw2gs4x~Y z=rNWvSTI&hUd^dF*_tz2w3dO5v5rB2v7SMNv4KI4v4z2cv32rl&H%=a$$vO|75f<2 z82cFn7$-4EGEQbtW}MDo#5jY&hH(yq8{>S2P{sw5S8>&IE@j|nT*e^DxN7oS9?i+o z+}^w!82A}CGDtFRWzb;UHhD952IJ1jGCWa?dneoQ%TJ!h<HdWJfuHdRgCye#26e`h zli%{>@t$K4WxU8B$#{-IiShE}4BiCBYm-m%HuFAW5N3SLV8!^9!Its)<Ve11-uDbb zjGq`37{4;;Gk%-=kS~hy=VTlHrGhLB>P)N*eoSl(2~6w^NlaXuKk>^k>IyJ$GYK+? zGKn&%GD$GlFiA56G08C`Fex&WF{v=jVp3;V!=%Nqn@OAD5|hqkTftmLeXui63A*u` zFt9S2Ge|R8F(@-xPnH$3VYHhZC1k_sG<mvEhM+qGE0Y(40Fy6+B9lLZ0aL(a0bw-& DGk|Ga delta 456 zcmdm{woPpTBctbLM#k-Ij4YFPvYQCXv~Ok5)8gC8V4%gkmBC0$cJe=VRen>(WCkn7 z6b5_7R0bEuw8=&s%DjRMObiSRt_%VUf(*=)lQ^^(Gbi_Q6o}?CurU@e2rw2hs4x~W z=rNWtSTL4PUd^dF*_tz2w1$C=v6exAv5rB7v7SMXv6;bwv1RgV&H%>t$$vO|6?+-j z82cCm7$-7FGEQPpW}L=g#5kS7hH*B78{<5NP{#R_S8>&IE@9wjT*@HHxN`Da9?i+o z+}^zF8Tc7DFi0|PVbEaQI(aj92IG#&GCWa?dnViP%TJ!h<HdW3fuHd(gCyf|26e_0 zli%{>@t$Q6WxT*3$#|AQiSg3p4BiCBtCLUiHuFAY5N3SDV8!@^!Itsa<Ve11-ggW_ zj2{^k7{4&+Gk%@?kS~hy$7CD+rGm^1>P##QeoU+k2~2DZNlcuZKk>^k>hd#iGYK$= zGKny#GKn+TFi9~4G08F{FexyUF)1_5Vp3yR!=%Zun@Nk|5|j31TftmLJ+L!R3A*tb zGq5t5F-S96GAJ`yO_mk1VYHnbC1k_sIC;8IhM*e*E0ZUK0Fw`cB9kA30h9k^0bw-& D+yiNq diff --git a/Partie_3/target/classes/ch/hepia/Save.class b/Partie_3/target/classes/ch/hepia/Save.class new file mode 100644 index 0000000000000000000000000000000000000000..9573a2e368dea090dc72a1674ce1aa82a9c79b87 GIT binary patch literal 3866 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 literal 0 HcmV?d00001 diff --git a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 127925b..aacaf9d 100644 --- a/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/Partie_3/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -5,3 +5,4 @@ /home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Carte.java /home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/GameManager.java /home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/JeudeCarte.java +/home/padi/Git/java-card-game/Partie_3/src/main/java/ch/hepia/Save.java diff --git a/Partie_3/target/test-classes/ch/hepia/CarteTest.class b/Partie_3/target/test-classes/ch/hepia/CarteTest.class deleted file mode 100644 index 655456ed1f9c7073c51fefd5a6f05ec8d78d542b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1821 zcmX^0Z`VEs1_lR)P<93;Mh2ne4E>DMg3LsH=ft9t)R5HT5_Sd_Mh1bb#Ii*FoW#6z zegCAa)Z`LI1~!|_yv!0iMh0dL%`ip=7U%qwR4xW)22LIZRt7dk27aH+yi~u^+@#c^ zki?{%R7M6NpZw&+oUp{AOb{O`$WoG#S<J{F;)7|kH6sIGNosM4duoYuerZl>X%QoX zWKd~dNoH<pSY~l%QckL4US57lVo7FxUNIwsfKPr=x_(w^US^3t$mQ1T3_^?ye5eL< zGKesUu``G=G6*0f{6l?QLxXr2#2F+Q8Ca9^!Bz<&ISHb`nu|e@K?>wQX+{Py4NQ4Y z%`lJ>Ssn&C26;vXu5=`qi)d(KYT#l}WKd>jP-0{dK)BtpxHz?_goi<eL6wn#ClSnZ zEi6sUDQ09)*YH7)3TsReP=v51gJKXADhPjqM64MZxS^pMl$e(e3J)zF25pef*^?8C zic%9xSs5UJ9po8(9tHyjLq-Pn^wbiN25^LXf*fuPa-s<%1FMFY7sy5)sIhMOMaik` z4Cags{0O(Y78T_eaWGgiGDL*t6{QyE=ai+UC?x0S7G&mtBT%8BC_gDDHP=dki!&r6 zRUtV)uehYBG`S?dNCBJ}HJl-_preqPR{|z96*7wzO7l`u(=zi?Q@FSo%owaev17x? zAc`DL!6ikRdFj?5Hwr@C=$D@hO;a2U_KXay&Y(C4dDoGL!HL0{k%2cowFIGvkpUEa z2;V?WL?lqZ{9I7ra4@(rGB6r}4D#S%@B|qIN(4|@Mg|n?a|?1(OE?&O7#a9o5_3}( zQc^)41w{ZzzaI~SKS)2^Az<Z<48q7h0E@*NaWDiiGO&8(XQvi1GH?awmlh?bx@Cg$ z93MF7K)FE=<a!2021W*EaO`q0FoH5F10w@F0|SFT10w??0|NuA)^-MtjSLJ7OblEM z3=C{wK{f_%1_lNmFq@Tuhk=)Yfq{{MkAaPWiGd%gN`Qd@Y)~)*3j-4a1B3W(2EoWp z48pA286<r+F$imKW02Xwpnx!%59|&u1|9}(1~D+nz#s<E3bg_xqsE{Pc9{lN%R-@+ zNkS~s6krG0Cc>bjy^TSybq9kHx^)5!ybOX25)49MA3>~>gj&bTz{3Eu&J?S4CJfBr zFyPwFU=}H4v7NzcKUzqMfz5@46v%6kkg~;US`gInVi3m*GlSeNWT(B2!2wG^$uRIR z$TEmB$boHuxEvI0ARBlXxZo~#A<8artO&VkZ)0%BVwVyF4}&s;D1!<CyS%X4g_Z&| z1$e+7^VZ(R;ETmF4F+BYO$IRrEhNjt;ZcI{SO8Yb&;n5t5{Q8~?9yZ4VbEs~WiUXp M3tJ!tgQGPB0ENv<TL1t6 diff --git a/Partie_3/target/test-classes/ch/hepia/JoueurTest.class b/Partie_3/target/test-classes/ch/hepia/JoueurTest.class new file mode 100644 index 0000000000000000000000000000000000000000..6c1eb68d4853e00d11fada367c940922ce2fed72 GIT binary patch literal 8931 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 b0kcdQEf_5str!>>xEL52tr=|@?HMEiAYEvy literal 0 HcmV?d00001 -- GitLab