From 58751b99a42d8b04049eb5ff6cd3b5c29a8d5c4e Mon Sep 17 00:00:00 2001
From: "michael.divia" <michael.divia@etu.hesge.ch>
Date: Tue, 5 Dec 2023 23:51:38 +0100
Subject: [PATCH] Part 2 75%

---
 Partie_2/src/main/java/ch/hepia/App.java      |  15 +-
 .../src/main/java/ch/hepia/GameManager.java   | 167 ++++++++++++--
 Partie_2/src/main/java/ch/hepia/Hand.java     |  71 ++++--
 .../src/main/java/ch/hepia/JeudeCarte.java    |   6 +-
 Partie_2/src/main/java/ch/hepia/Joueur.java   | 204 +++++++++++++++++-
 Partie_2/target/classes/ch/hepia/App.class    | Bin 2275 -> 2431 bytes
 .../target/classes/ch/hepia/GameManager.class | Bin 3053 -> 5489 bytes
 Partie_2/target/classes/ch/hepia/Hand$1.class | Bin 1128 -> 1128 bytes
 Partie_2/target/classes/ch/hepia/Hand.class   | Bin 4280 -> 4895 bytes
 .../target/classes/ch/hepia/JeudeCarte.class  | Bin 3159 -> 3261 bytes
 Partie_2/target/classes/ch/hepia/Joueur.class | Bin 390 -> 635 bytes
 .../classes/ch/hepia/JoueurCroupier.class     | Bin 1857 -> 3101 bytes
 .../classes/ch/hepia/JoueurHumain.class       | Bin 3197 -> 4504 bytes
 .../classes/ch/hepia/JoueurOrdinateur.class   | Bin 3160 -> 4468 bytes
 14 files changed, 434 insertions(+), 29 deletions(-)

diff --git a/Partie_2/src/main/java/ch/hepia/App.java b/Partie_2/src/main/java/ch/hepia/App.java
index 8516d85..f3de79a 100644
--- a/Partie_2/src/main/java/ch/hepia/App.java
+++ b/Partie_2/src/main/java/ch/hepia/App.java
@@ -67,9 +67,20 @@ public class App {
 
         GameManager BlackJack = new GameManager(numPlayers, startMoney);
 
-        BlackJack.StartTurn();
+        boolean GameOver = false;
 
-        BlackJack.DisplayTurn();
+        while (!GameOver) {
+            BlackJack.StartTurn();
+            BlackJack.PlayTurn();
+            GameOver = BlackJack.ResolveTurn();
+        }
+
+        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();
     }
diff --git a/Partie_2/src/main/java/ch/hepia/GameManager.java b/Partie_2/src/main/java/ch/hepia/GameManager.java
index ada0f80..4bbb816 100644
--- a/Partie_2/src/main/java/ch/hepia/GameManager.java
+++ b/Partie_2/src/main/java/ch/hepia/GameManager.java
@@ -8,6 +8,7 @@ public class GameManager {
     private JeudeCarte Deck;
     private ArrayList<Joueur> Players;
     private JoueurCroupier Dealer;
+    private int Step;
 
     public GameManager(int nbPlayer, int startMoney) {
 
@@ -26,25 +27,162 @@ public class GameManager {
         this.Dealer = new JoueurCroupier(Deck);
     }
 
-    public void DisplayTurn() {
+    public boolean ResolveTurn() {
 
-        System.out.print("\033[H\033[2J");
-        System.out.flush();
+        this.Dealer.DrawCard(0, this.Deck);
 
-        System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
+        // If the player has less than the minimum bid amount allowed
+        if (this.Players.get(0).GetMoney() <= 10) {
+            return true;
+        }
+
+        this.Dealer.Reset(this.Deck);
+        for (Joueur Player : this.Players) {
+            Player.Reset(this.Deck);
+        }
+
+        return false;
+    }
+
+    public void PlayTurn() {
+
+        boolean EndTurn = false;
+
+        while (!EndTurn) {
+
+            boolean CanSplit = false, CanInsure = false, CanDouble = false, CanDraw = false;
+
+            System.out.print("\033[H\033[2J");
+            System.out.flush();
 
-        System.out.println("Dealer Score : " + App.ANSI_PURPLE + this.Dealer.GetForce(0) + App.ANSI_RESET);
-        this.Dealer.ShowHands();
+            System.out.println("*~-~* " + App.ANSI_RED + "BlackJack" + App.ANSI_RESET + " *~-~*\n");
 
-        System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET + " // Bet : "
-                + App.ANSI_BLUE + this.Players.get(0).GetBet(0) + App.ANSI_RESET);
-        System.out.println("Player Score : " + App.ANSI_PURPLE + this.Players.get(0).GetForce(0) + App.ANSI_RESET);
-        this.Players.get(0).ShowHands();
+            System.out.println("Cards in Deck : " + App.ANSI_GREEN + this.Deck.GetNbCards() + App.ANSI_RESET + "\n");
 
+            System.out.print("Dealer Score : " + App.ANSI_PURPLE);
+            if (this.Dealer.GetForce(0) == 99) {
+                System.out.println("BlackJack" + App.ANSI_RESET);
+            } else {
+                System.out.println(this.Dealer.GetForce(0) + App.ANSI_RESET);
+            }
+            this.Dealer.ShowHands();
+
+            System.out.println("\nMoney : " + App.ANSI_BLUE + this.Players.get(0).GetMoney() + App.ANSI_RESET);
+
+            if (this.Players.get(0).HasInsured()) {
+                System.out.println("Insured : " + App.ANSI_BLUE + this.Players.get(0).GetInsured() + App.ANSI_RESET);
+            }
+
+            char choice = 'x';
+
+            for (int HandNb = 0; HandNb < this.Players.get(0).NbHands(); HandNb++) {
+
+                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);
+
+                System.out
+                        .print("Score of Hand " + App.ANSI_GREEN + (HandNb + 1) + App.ANSI_RESET + " : "
+                                + App.ANSI_PURPLE);
+                if (this.Players.get(0).GetForce(HandNb) == 99) {
+                    System.out.println("BlackJack" + App.ANSI_RESET);
+                } else {
+                    System.out.println(this.Players.get(0).GetForce(HandNb) + App.ANSI_RESET);
+                }
+                this.Players.get(0).ShowHands();
+
+                // 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.OnlyAs()
+                        && !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)
+                if (this.Players.get(0).CanSplit(HandNb)
+                        && this.Players.get(0).NbHands() < 3) {
+                    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
+                if (!this.Players.get(0).HasDoubled(HandNb)
+                        && this.Players.get(0).NbCards(HandNb) == 2
+                        && this.Players.get(0).GetForce(HandNb) != 99) {
+                    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
+                if (!(this.Players.get(0).HasDoubled(HandNb) && this.Players.get(0).NbCards(HandNb) == 3)
+                        && !(this.Players.get(0).CanSplit(HandNb) && this.Players.get(0).GetCardForce(HandNb, 0) == 1)
+                        && this.Players.get(0).GetForce(HandNb) != 99) {
+                    CanDraw = true;
+                    System.out.println(App.ANSI_BLUE + "[h]" + App.ANSI_RESET + " Hit");
+                }
+
+                // Stand
+                System.out.println(App.ANSI_BLUE + "[s]" + App.ANSI_RESET + " Stand");
+
+                if (CanInsure || CanSplit || CanDouble || CanDraw || this.Players.get(0).GetForce(HandNb) == 99) {
+
+                    while (true) {
+                        System.out.print("> ");
+
+                        choice = App.in.next().charAt(0);
+
+                        if ((choice == 'i' && CanInsure) || (choice == 's' && CanSplit) || (choice == 'd' && CanDouble)
+                                || (choice == 'h' && CanDraw)
+                                || choice == 's') {
+                            break;
+                        } else {
+                            System.out.println(App.ANSI_YELLOW + "Please enter a valid choice." + App.ANSI_RESET);
+                        }
+                    }
+                }
+
+                if (choice == 'h') {
+                    this.Players.get(0).DrawCard(HandNb, this.Deck);
+                }
+
+                Step++;
+            }
+
+            if (choice == 'i') {
+                this.Players.get(0).Insure();
+                EndTurn = false;
+            } else if (choice == 'h') {
+                EndTurn = false;
+            } else {
+                EndTurn = true;
+            }
+        }
     }
 
     public void StartTurn() {
 
+        this.Step = 0;
+
         System.out.print("\033[H\033[2J");
         System.out.flush();
 
@@ -56,7 +194,7 @@ public class GameManager {
 
         while (true) {
 
-            System.out.print("How much do you want to bet ? ");
+            System.out.print("How much do you want to bet (Min. 10) ? ");
 
             while (!App.in.hasNextDouble()) {
                 System.out.println(App.ANSI_YELLOW + "Please enter a valid number to bet." + App.ANSI_RESET);
@@ -67,7 +205,12 @@ public class GameManager {
             bet = App.in.nextDouble();
 
             if (bet <= this.Players.get(0).GetMoney()) {
-                break;
+                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);
             }
diff --git a/Partie_2/src/main/java/ch/hepia/Hand.java b/Partie_2/src/main/java/ch/hepia/Hand.java
index 8d9c55a..449df4b 100644
--- a/Partie_2/src/main/java/ch/hepia/Hand.java
+++ b/Partie_2/src/main/java/ch/hepia/Hand.java
@@ -8,23 +8,51 @@ public class Hand implements Comparable<Hand> {
 
     private ArrayList<Carte> Hand;
     private double Bet;
+    private boolean Splitted;
+    private boolean Doubled;
 
     public Hand(Carte... cartes) {
 
-        Hand = new ArrayList<>();
+        this.Hand = new ArrayList<>();
 
         for (Carte carte : cartes) {
 
             Hand.add(carte);
 
         }
+
+        this.Splitted = false;
+        this.Doubled = false;
     }
 
     public Hand(JeudeCarte game, int nb) {
 
-        Hand = new ArrayList<>();
+        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;
+    }
+
+    public boolean HasSplit() {
+        return this.Splitted;
+    }
+
+    public void Splitted() {
+        this.Splitted = true;
+    }
+
+    public int NbCard() {
+        return this.Hand.size();
     }
 
     public void SetBet(double amount) {
@@ -122,6 +150,33 @@ public class Hand implements Comparable<Hand> {
             }
         }
 
+        // Edge Case = BlackJack
+        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;
     }
 
@@ -141,16 +196,8 @@ public class Hand implements Comparable<Hand> {
     @Override
     public int compareTo(Hand otherHand) {
 
-        int Hand_1_Power = 0;
-        int Hand_2_Power = 0;
-
-        for (Carte carte : Hand) {
-            Hand_1_Power += carte.getRang();
-        }
-
-        for (Carte carte : otherHand.Hand) {
-            Hand_2_Power += carte.getRang();
-        }
+        int Hand_1_Power = this.GetForce();
+        int Hand_2_Power = otherHand.GetForce();
 
         if (Hand_1_Power > Hand_2_Power) {
             return 1;
diff --git a/Partie_2/src/main/java/ch/hepia/JeudeCarte.java b/Partie_2/src/main/java/ch/hepia/JeudeCarte.java
index 66d165a..e6bd3c6 100644
--- a/Partie_2/src/main/java/ch/hepia/JeudeCarte.java
+++ b/Partie_2/src/main/java/ch/hepia/JeudeCarte.java
@@ -70,7 +70,7 @@ public class JeudeCarte {
     }
 
     public List<Carte> getCartes() {
-        return jeuDeCartes;
+        return this.jeuDeCartes;
     }
 
     public Carte GetTopCarteOfGame() {
@@ -103,6 +103,10 @@ public class JeudeCarte {
 
     }
 
+    public int GetNbCards() {
+        return this.jeuDeCartes.size();
+    }
+
     public void ShowPaquet() {
 
         System.out.println("------- Paquet -------");
diff --git a/Partie_2/src/main/java/ch/hepia/Joueur.java b/Partie_2/src/main/java/ch/hepia/Joueur.java
index 6ae23fc..d801449 100644
--- a/Partie_2/src/main/java/ch/hepia/Joueur.java
+++ b/Partie_2/src/main/java/ch/hepia/Joueur.java
@@ -25,12 +25,34 @@ interface Joueur {
     public void Split(int handNb);
 
     public int GetForce(int handNb);
+
+    public boolean CanSplit(int handNb);
+
+    public void Reset(JeudeCarte Jeu);
+
+    public boolean HasInsured();
+
+    public void Insure();
+
+    public double GetInsured();
+
+    public boolean HasDoubled(int handNb);
+
+    public void Double(int handNb);
+
+    public int NbHands();
+
+    public int NbCards(int handNb);
+
+    public int GetCardForce(int handNb, int cardNb);
 }
 
 class JoueurHumain implements Joueur {
 
     private ArrayList<Hand> Hands;
     private double Money;
+    private double Insurance;
+    private boolean Insured;
 
     public JoueurHumain(JeudeCarte Jeu, int Money) {
         this.Hands = new ArrayList<>();
@@ -40,6 +62,49 @@ class JoueurHumain implements Joueur {
         this.Hands.get(0).SetBet(0);
 
         this.Money = Money;
+        this.Insurance = 0;
+        this.Insured = false;
+    }
+
+    public void Reset(JeudeCarte Jeu) {
+
+        this.Insured = false;
+
+        this.Hands = new ArrayList<>();
+
+        this.Hands.add(new Hand(Jeu, 2));
+
+        this.Hands.get(0).SetBet(0);
+    }
+
+    public boolean HasDoubled(int handNb) {
+        return this.Hands.get(handNb).HasDoubled();
+    }
+
+    public void Double(int handNb) {
+        this.Hands.get(handNb).Double();
+    }
+
+    public boolean CanSplit(int handNb) {
+        if (!this.Hands.get(handNb).HasSplit()
+                && this.Hands.get(handNb).GetCarte(0).getForce() == this.Hands.get(handNb).GetCarte(1).getForce()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public boolean HasInsured() {
+        return this.Insured;
+    }
+
+    public void Insure() {
+        this.Insured = true;
+        this.Insurance = this.Hands.get(0).GetBet() / 2;
+    }
+
+    public double GetInsured() {
+        return this.Insurance;
     }
 
     public void DefineStrategy() {
@@ -125,22 +190,40 @@ class JoueurHumain implements Joueur {
 
     public void Split(int handNb) {
 
-        if (Hands.size() == 3) {
+        if (this.Hands.size() == 3) {
             throw new RuntimeException("Max number of slipts.");
+        } else if (this.Hands.get(handNb).HasSplit()) {
+            throw new RuntimeException("Can't split Hand twice.");
         }
 
         Carte card = this.Hands.get(handNb).GetCarte(handNb);
 
         this.Hands.get(handNb).RemoveCardFromHand(card);
 
+        this.Hands.get(handNb).Splitted();
+
         this.Hands.add(new Hand(card));
     }
+
+    public int NbHands() {
+        return this.Hands.size();
+    }
+
+    public int NbCards(int handNb) {
+        return this.Hands.get(handNb).NbCard();
+    }
+
+    public int GetCardForce(int handNb, int cardNb) {
+        return this.Hands.get(handNb).GetCarte(cardNb).getForce();
+    }
 }
 
 class JoueurOrdinateur implements Joueur {
 
     private ArrayList<Hand> Hands;
     private double Money;
+    private double Insurance;
+    private boolean Insured;
 
     public JoueurOrdinateur(JeudeCarte Jeu, int Money) {
         this.Hands = new ArrayList<>();
@@ -150,6 +233,8 @@ class JoueurOrdinateur implements Joueur {
         Hands.get(0).SetBet(0);
 
         this.Money = Money;
+        this.Insurance = 0;
+        this.Insured = false;
     }
 
     public void DefineStrategy() {
@@ -157,6 +242,48 @@ class JoueurOrdinateur implements Joueur {
 
     }
 
+    public boolean HasDoubled(int handNb) {
+        return this.Hands.get(handNb).HasDoubled();
+    }
+
+    public void Double(int handNb) {
+        this.Hands.get(handNb).Double();
+    }
+
+    public boolean CanSplit(int handNb) {
+
+        if (this.Hands.get(handNb).HasSplit()
+                || this.Hands.get(handNb).GetCarte(0).getForce() != this.Hands.get(handNb).GetCarte(1).getForce()) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public boolean HasInsured() {
+        return this.Insured;
+    }
+
+    public double GetInsured() {
+        return this.Insurance;
+    }
+
+    public void Insure() {
+        this.Insured = true;
+        this.Insurance = this.Hands.get(0).GetBet() / 2;
+    }
+
+    public void Reset(JeudeCarte Jeu) {
+
+        this.Insured = false;
+
+        this.Hands = new ArrayList<>();
+
+        this.Hands.add(new Hand(Jeu, 2));
+
+        this.Hands.get(0).SetBet(0);
+    }
+
     public void AddMoney(double amount) {
         if (amount <= 0) {
             throw new RuntimeException("Can't add negative amount of Money.");
@@ -237,14 +364,30 @@ class JoueurOrdinateur implements Joueur {
 
         if (Hands.size() == 3) {
             throw new RuntimeException("Max number of slipts.");
+        } else if (this.Hands.get(handNb).HasSplit()) {
+            throw new RuntimeException("Can't split Hand twice.");
         }
 
         Carte card = this.Hands.get(handNb).GetCarte(handNb);
 
         this.Hands.get(handNb).RemoveCardFromHand(card);
 
+        this.Hands.get(handNb).Splitted();
+
         this.Hands.add(new Hand(card));
     }
+
+    public int NbHands() {
+        return this.Hands.size();
+    }
+
+    public int NbCards(int handNb) {
+        return this.Hands.get(handNb).NbCard();
+    }
+
+    public int GetCardForce(int handNb, int cardNb) {
+        return this.Hands.get(handNb).GetCarte(cardNb).getForce();
+    }
 }
 
 class JoueurCroupier implements Joueur {
@@ -252,7 +395,21 @@ class JoueurCroupier implements Joueur {
     private Hand Hand;
 
     public JoueurCroupier(JeudeCarte Jeu) {
-        this.Hand = new Hand(Jeu, 2);
+        this.Hand = new Hand(Jeu, 1);
+    }
+
+    public boolean OnlyAs() {
+
+        if (this.Hand.GetCarte(0).getNomRang() == "As" && this.Hand.NbCard() == 1) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void Reset(JeudeCarte Jeu) {
+
+        this.Hand = new Hand(Jeu, 1);
     }
 
     public void DefineStrategy() {
@@ -260,6 +417,37 @@ class JoueurCroupier implements Joueur {
 
     }
 
+    public boolean HasDoubled(int handNb) {
+        // La Banque ne peut pas doubler
+        throw new RuntimeException("Bank cant Double.");
+    }
+
+    public void Double(int handNb) {
+        // La Banque ne peut pas doubler
+        throw new RuntimeException("Bank cant Double.");
+    }
+
+    public boolean CanSplit(int handNb) {
+
+        // La Banque ne peut pas split
+        throw new RuntimeException("Bank cant Split.");
+    }
+
+    public boolean HasInsured() {
+        // La Banque ne s'assure pas contre elle même
+        throw new RuntimeException("Bank cant get Insurance.");
+    }
+
+    public void Insure() {
+        // La Banque ne s'assure pas contre elle même
+        throw new RuntimeException("Bank cant get Insurance.");
+    }
+
+    public double GetInsured() {
+        // La Banque ne s'assure pas contre elle même
+        throw new RuntimeException("Bank has no Insurance.");
+    }
+
     public void AddMoney(double amount) {
         // La Banque n'a pas d'argent
         throw new RuntimeException("Bank has no Money.");
@@ -320,4 +508,16 @@ class JoueurCroupier implements Joueur {
         // La Banque ne peut pas slip
         throw new RuntimeException("Bank can't Split.");
     }
+
+    public int NbHands() {
+        return 1;
+    }
+
+    public int NbCards(int handNb) {
+        return this.Hand.NbCard();
+    }
+
+    public int GetCardForce(int handNb, int cardNb) {
+        return this.Hand.GetCarte(cardNb).getForce();
+    }
 }
diff --git a/Partie_2/target/classes/ch/hepia/App.class b/Partie_2/target/classes/ch/hepia/App.class
index 998649ba6f5768b7ff59fd742b6d46eadcb6f43b..1e730631e4c898c9083ecffaf77a899ec69da689 100644
GIT binary patch
delta 404
zcmaDX_+N<Y)W2Q(7#J8F7`iudU1xFT2*^pS3@I(j<6_8UDCJ=&V~Ap8;0{VH&d(`J
z1&MPoR4_7#NJkr+=DH{5rYiWCr4}hDN=F;yaxthgRPiuWPyWi{%*z3i1j#WnFh)%_
zV>MxH+nmjs&d9~2%)r9H!oa}rXYw7kgJR5f%NYc8wlU=CY-1?Y*~U;}Cp+{1r^$EN
zq{Pd&G5Bm^FxtjYxsic^ftkUCfq`KYgU;j~?5*{O89W${F?ceZV(?-($KcIynZbkM
zI)fj>eFlGqrwoA%ZyACazA}U|{ALJaFlAt1uw!6j@L-T*s9~sOU|`5(m<(mjW{_m4
zW2j|dWZ2H&3S}K+ux7AgsApheILu(l(7@2hz|7FZz`!8Mz%9ll_J={0kt-5JD=>2X
zW#D6H$YkVU;ACiKXklPvP-9?VFk)a}U}RumVA;XY3UWCU*yUUdObiSRQ4GusF<=+*
UK-4g_GjxE}cQP<AFfnui0M^i2ApigX

delta 274
zcmew_^jMJV)W2Q(7#J8F7+N-RU1t&DcF8O*$VsdWDJ{z5Vo+x&<zXnBtitL%xs26_
zv3~PP)^tWL#-j`@49pA+3>PMUWS5$3!oFNuXB$JF&Nha^O$<ic7)mxWFfcGPm@qIf
zOkz-(ti;h;f0V(4;Ut3>!+8d822%zG1``HW1`h@~hH{1q1_p*qhIA-vHiINXB|`-R
zBg1w$>mUO^gB3#+0~13v0|SE~1E(05*dGQ}MlKMgz{thG$xy>k%fQH>#=yW}#K6G7
w$iTqBvV)-x<P0XTGt{{lm>3us{27=T0>Sq4Kol`FFf@WSG%+wRFflX(0FO&FZU6uP

diff --git a/Partie_2/target/classes/ch/hepia/GameManager.class b/Partie_2/target/classes/ch/hepia/GameManager.class
index 7226155cb75926f7fc3c4f4862943474c91eab01..0c1af52db05f54c74267841b06de56799bd9df50 100644
GIT binary patch
literal 5489
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
NWRzf(Vw7Q!1OSmsU>yJe

delta 1824
zcmeyU^;Vqg)W2Q(7#J8F7&cDiI<LuQlbM%UV#mn9s^RIW8OF%K;+&t7%EiFUAjreO
z%OJ$az^tJe#?BxznU_&QU5t@|KRH7`BeftiQ9mHDur#%Vi$Rn@0;H6Wi$Rz{3dEA0
z?87L{Da*sa%D~3XAV0Z)QNm1)L6DPykwJ-vft`Vaok4|>K@@I~SAJ<~X^}^1ZenI0
z7lSf`8psfJMg~cZ$^6Wsyq=n2Tnusynmi0z4BC?)Fe)(WPG)41<J4hLV`ng6WDuXY
zU!0GNL7%}0q|ca<K?0;toE2oB>EukNNG3+l$p@HJgk3U=3vv=GLrRPCI2jxnoY@(i
zCI_&HGP^LiPR?La&~s;GV3&^ekd8L;;$rY*@MdT5Vq_4`N-Rs%&&<~kD9X$$2`(v0
zP0ZzC@L}+syp2Uk*ptDZhamtIOsr`+rNtQ>3_+7$v#3~jGKBCjgfjRtGO!nb^yTD%
z92m~S5Wx`1$iU&ATH=;pl$^@Qz@p))=_$m(z!1&D5W^5V*@M+c0i-mZhamxEEN5^=
zez`|tUP>`243c;lk{MDa8!#&{rcDlH7O78V$lzhfWXOV;>6@RIS_zIZ7jA}Bh8!M-
zT!uVG1~&K95~tJ>h-EH942%o~Aj=9F8N@VPTr_>aKFmqXOV<xBDay=Cw+3kr7h+&y
zhz7CZ85uZ(OA?DpKmjMjz|2q%(p|yGAgW=FO*aQa6(fV3M}E0NZfSCcLQ1|uWqzqb
zd179PLP@?tQfi5Uy#fbA&17FrL&mzv^_&VaoD2;NP3#Pfj0`;RMB!Laz{AkY&@%Zy
zyR2FpLkBxUJ0pW2*r}x@nK}Bw$%%P+sYN^toeW)!3@mx66(y6cIV3IG7<zaZdKvl{
z8F(`ii~Uk7N?h_wlX6nQ!4k#A(8e%<hhZWp#JE6uAd(ymlPCY?)Z$2Gn99R2jbZv^
zT`qrihItGN*cs+eZsyWtj$v3hc|F%$4u-iL3`-apBqukpii9vqM;qjFFf3zaQ0D>%
zy@Hj3bhNQaE?7cAUthr~wFE_sgJA_DgJeKXVr6QPLU3|^Q7S~*6rzQLVb$dS+^Vb$
zYZ)0-C%@$qpX|WH&&05Pav+Z}BlF}|9>scQ21W*620jKx27U$xhA#~43@i)`4Eb8y
z83eR;GYCiSW)O`OU=uLe&LF;>L2@gDjMi=jxybDd3R@WzwYD%Q?q*Pq)Y`%zBeR`B
zbsK|5xHQWW1{D^&<qT2~Ssj?H9!R!@nNe1H;s57ayBYMs67|~|47W0vY-C_yU}i95
zU|`T<;9_84;9+24;A4<t5MWSc5Mr=o5Mi)m5M^*?5Mu~u5M_vGkYdPVkY+Fks|UN6
z!Ggh(0R-|HtQf2r7(squuwk%fU}A7!kY})Eux4Opuw!6g5N2Th&*03!!p^|R$jHbr
zc?~Z|y*&dc4TJoDn}Hpyw{sJNgOJ-c29He)4%-;~K)k?h48fZi9JIDDm@sc+2;0RF
z#lWzQAsEEp#t;XQQDol6ka&P0btgkQBLm3)P(JfchHNH=T@3kPEvRalch)l$fh3E;
zl1RFCGL$effI@}|95Q+g+zbp1@(dgd3JiP<N(^EQDh!$ostg7U>I}{d8Vr#P>I^Xq
znhX^TS_~ZwI^fXZf%pa*I*bgZFrPB2Gq5r+GcYjB+{93i+p8!Z+Qm=?b|NS=Dz`Cs
zEN74cF{>c~BUB3xuKH~Zt>K#(>bEg;&;0)w%;@(}NAXoUBg2fj3~b98_(0kxZL4Pp
zUjBa_k`i_1oeWc0z+Q(W3O5Ep1_lNL1`Y;820jL31~CS6215pG21^E81{(%D1{Vf<
z1|J3ohF}I;h8PBChGYg;h6)BZhH3^6hGqs!hBgKth8YaL;2=?ecpDld$qWh%kuw-(
zGB7f<F$gn2SfF&m#lULFCH99wof%Yj&0=6+U}BifFo%JGL5hKeVG#o(!(uSG6ihA$
XlPeikGcYi4F)%W$VOYnofk6@gR49as

diff --git a/Partie_2/target/classes/ch/hepia/Hand$1.class b/Partie_2/target/classes/ch/hepia/Hand$1.class
index a8bc740546856cee4b41e4cfb3e1d26a464d6de7..7f75d8fe38a1822b70b602d9d7536438562761f5 100644
GIT binary patch
delta 31
ncmaFC@q%MR6f<Mq<Y?wl-XaDbh7tw=hB5{jhN{VXnO6e<l`sgr

delta 31
ncmaFC@q%MR6f<Mc<Y?wl-Y^Cph6n}$hA0LZhPcUlnO6e<job(@

diff --git a/Partie_2/target/classes/ch/hepia/Hand.class b/Partie_2/target/classes/ch/hepia/Hand.class
index ad363bf8d905b7cfbc4a9c8e5bad819297676ea1..22668a718d2fcdc679e7db293da325b101f7c2b1 100644
GIT binary patch
literal 4895
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
NBpD7dFo4U9EC3x|zia>i

literal 4280
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
QXV}Of$*_rm0i0>00DwVff&c&j

diff --git a/Partie_2/target/classes/ch/hepia/JeudeCarte.class b/Partie_2/target/classes/ch/hepia/JeudeCarte.class
index d4ddff183e9cf28c6ac28b70552d4d214022baff..7c84a24a016f03fff7d97c2fd8eab208948f7fbf 100644
GIT binary patch
delta 378
zcmcaEu~$;y)W2Q(7#J8F7^bl^FflR+PkzWKyivKH)z3Y(#4pJ?u_&dOk%3u5)03M)
zfuWj*p@yN7k%6T+vnrL5fh#y8zdRtZur#%VlcAoWk)5G|kwG9Uu`E$PCowNwKe)2E
zBsG_Zp^2e+@)=eI#@5MiS*6+989Lb+Iwte6NicUYbWhe~Q)BDpVd!J%pB&1j$vAOx
zJzD`I=jIP=3s~wa85kM385kH$7#JBC85kJ2w6-t^?PRE8WLU$%z`(>{!oa}52A0WY
zFlAt1-~qF_7|a;V85kHC8EP5$peD>>U}9iqU|_J`#84;HvW=k)Vv;)}gYR+%ah;tE
z-i!<f7^HkQG1O^qW9Zq&(5ADK!8n4EVb=d=AT1NNF|=)DU|?Vd+bPAs#=yW(z`(&!
v#30X5!l21e#9+iw!C=KuIf=(iaT3^ZlNqLfoXo(;pveFMQyCZ-SU`LLeHu@9

delta 275
zcmdlhd0j%_)W2Q(7#J8F7$&kaFflR+PkzWKyivKHRVz3nzdRtZur#%Vlc9>ChMl3B
zkwG9Uu`E$PCowNwKe)2EBsG_Zp_ZX;@&{H0#)ip)Y|@HN3@z*o&5R7fV1=3a`T<3m
zc_qOmMX8CoJPfT2ZIgZ3)Yv+B7&;lcCReg)GWJYf%vQk2u~~$D0gEIb10w@B0|Ub>
z1||k(1_lP}O$?Pn_1hR4C-d`2+Er?AV`$&T(5SPMA%c-%*8gW9+3sx&jT;#l7?>GM
z7#J9&7}yvX7;+dm81fk8844IQ8S)s67)ltd7)mFn@t7(0GB7YOG4wI?GcYi4F)%V{
OGC;rt1_lNe5FY>xC_&l)

diff --git a/Partie_2/target/classes/ch/hepia/Joueur.class b/Partie_2/target/classes/ch/hepia/Joueur.class
index 455ae8e3d5d3b73cf7c6b9a46b235bea191911ed..bcf855977f1b52f5f93a278ebe3557311fabd2ba 100644
GIT binary patch
delta 279
zcmZo;{>{R5>ff$?3=9ko44M<UzRGYoC*}ng<YbmGGO%cPYDO_Kum+_Tr<O1>NN7x4
zCt1(skyz}RS6o_@n!?DytN~KM2H`U@aJi?JK-eja3?PLr`K3uYAcbrY79#_@Uy?^+
zUP>`ouP2!AoLB_n^SGy$fS7LiMaij*46GWSo|>MF3|ztarA5i9Zkai$j11gflld4$
z8AT_nFh)eNFfvFmNHQ?6FfvFnNP}q^23asI$G`@r<r%oav;tI}B7-oPuf(7Xrd1fk
V!L%xa8Uq6ZBZE2v0|OI-1^_k{HG}{F

delta 39
vcmey((#Fhn>ff$?3=9ko3{n%hzD{1ksKUrS`6Ocm7Xu@M1Oo#D6N4lG2p$R;

diff --git a/Partie_2/target/classes/ch/hepia/JoueurCroupier.class b/Partie_2/target/classes/ch/hepia/JoueurCroupier.class
index a4e1c259ee886a8733884a95595ef85a14b310b8..e3fabea53944ae65b74e0e594f8ff39da4b162f3 100644
GIT binary patch
literal 3101
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

literal 1857
zcmX^0Z`VEs1_lQPFLnkdMh5ZZ4E>DMg3LsHul&-~(jw=g{L+HV)FO5U7Dfhvti-ZJ
z{hY+SbbbG%tkmQZb_O;^27WXxj0`LuiFqlE4E#QD8IXWABLkaFW?p8A9V3H;213p&
zwKOHwIkBiD)mk%*k%7fIKP8omfti7qhk=uUkCA~{Lo<w>L4c8g7sWU(27U%1kP=}=
z21)G3d1{7nGB7fT@-VP7aDd#CnV0HUnwykb6q1;flgh{-<ddJAm=l&*lnLTP1zAcm
zGK(1*B#~T*5){^q49s4srHl-sNGcG1U}WHPNlnYlOARh5N-RlDuViH4a7;<@&Cg4%
zWMp8`Z~^&7fssK95tu=xc_o>-sjd~tsRbpO`FR`+N{kFbPKkNh3K@yT3VHboVBLCL
z4Dt*rATO&jGKgyUAPfjDDay=C2L~TpVs3tEUI`-uqYEPgcTj3>epxD5HzNawduj=k
z$*iI2!pOiDoLb_PTEfV{s^Q|P8OFh&$H*WEwl*a{wKz|`M8PSwM30eyEh8~6#V?7G
zfzgwZfz2JNiABQ`WC({#QDV7sVo?ex8a%NE3CL(OMg~!^(I6k?=jBu?7%G5_)dR(&
z1rLKI0~aHM0L(16qWoO<#N1Ry2HxP3#N=$>!~$sSa0X}OmxGd1F-W5=4}%>jjc~w3
zK_To3N=6{hy5$!or$R(LL8_g37#tW}z$wa;k%2Y1ASbhggTWo<>EuL^m%*ZXj0{}C
z`K3k4scxB|gu)HU4SJv;XHZ~ZWMF1sWME}rWMBd%Ed~Y#9tK7RP6jRpMh0#M1_nO{
zRt6>p1_mLm?F>9xyBYW+wOO|_2ySH%*~q}az{DWNz`(%Az|6qF@Q;Co;Xi{QBLjmt
z0|SE?L>GeugCqk82r)=8NHZ`pFfzz6@IlSiW?*1o1Yv|xY#;$fR<IEuhkz77j9_Gt
zWsrkvv}0ffTgkPXK|WGQaXW+Zez;>GCUAmHfH;B+?g%ahH3oICBQ!`bi;sX=nhaV{
zcbR|#lYs%ZyM)1JL3{>t7bAl<gAUXL4+dri76zCJx>$TB0X9Ja;(rXEF)(m3=rb6A
z-C@XJ1T_^DUZ6;XxC@)9vS3p&!wX~<DAJ4>OrU0ELBn2LdL{!eIQ&gPuGHGXAfmI4
z!5kEo%-~cZ1o8-@5(5jPG6Nr@8iN?4I@l73)5YOV7Y92Sln%tfX@rTvih%*-0Z=lr
zh9?#?aJ(@vaDZ&u#$W@o2$KA`KuL{Ji-Da{8*Bk2bUC0FFf!ON*hAeO&%g{)%OHm7
zcBqNSPS<B(VKiXiV>D(EWi$bs3<)1GsL7y24hbJ52Rkr0LM@BNXPMI)upi;MhtYz8
oh0&6MkI{x$i(KKpLXBNFP;8*(21g`AVW|$5Qb4im0aot`0DP++MgRZ+

diff --git a/Partie_2/target/classes/ch/hepia/JoueurHumain.class b/Partie_2/target/classes/ch/hepia/JoueurHumain.class
index b8f42854962650befa0899a29206b537071ffb3f..8d288dc186f39d3a4733813bb2aa020e68d3b710 100644
GIT binary patch
literal 4504
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

literal 3197
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
Y=rOc1v@t*;k(q%}l!1|<9h{Ln00H%Va{vGU

diff --git a/Partie_2/target/classes/ch/hepia/JoueurOrdinateur.class b/Partie_2/target/classes/ch/hepia/JoueurOrdinateur.class
index d366926e71ddda91c377e09f4585de936f9bb295..2f71a0b80ecd3ac59ee101b5ef06748b16c8ec66 100644
GIT binary patch
literal 4468
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
KYAv`9UIzdzoI@-C

literal 3160
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
LBSR}VBewwnE8U1B

-- 
GitLab