From ca5c12a7babec0c6e471792ea6773027ae1d595b Mon Sep 17 00:00:00 2001 From: Jannaire Date: Wed, 8 Oct 2025 15:04:37 +0200 Subject: [PATCH 1/3] ajout du chrono et score --- Jeu_pendu/Back/Game.java | 66 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/Jeu_pendu/Back/Game.java b/Jeu_pendu/Back/Game.java index 6d9f40e..cfc87c1 100644 --- a/Jeu_pendu/Back/Game.java +++ b/Jeu_pendu/Back/Game.java @@ -7,7 +7,18 @@ import java.util.Set; /** * Logique principale du jeu du pendu (back). - * Gère le mot, les lettres trouvées, et les conditions de victoire/défaite. + * Ajoute un score et un chronomètre. + * + * Règles de score (simples) : + * - Lettre correcte : +10 points + * - Lettre incorrecte: -5 points (le score ne descend pas sous 0) + * - Bonus victoire : + (restant * 10) + bonus temps + * * bonus temps = max(0, 60 - secondes) * 2 (jusqu'à 120 pts si < 60s) + * - Défaite : pas de bonus + * + * Chronomètre : + * - Démarre à la création de la partie + * - S'arrête définitivement à la fin (victoire/défaite) */ public class Game { private final String word; @@ -16,21 +27,32 @@ public class Game { private final int maxErrors; private int errors; + // Score & chrono + private int score = 0; + private long startNano; // début de partie (System.nanoTime) + private long endNano = -1L; // fin (sinon -1 = en cours) + public Game(String word, int maxErrors) { this.word = word.toLowerCase(); this.maxErrors = maxErrors; + this.startNano = System.nanoTime(); // démarre le chrono à la création } -/** Tente une lettre et renvoie le résultat */ + /** Tente une lettre et renvoie le résultat + ajuste le score */ public Result play(char letter) { char c = Character.toLowerCase(letter); if (all.contains(c)) return Result.ALREADY; + all.add(c); if (word.indexOf(c) >= 0) { correct.add(c); + addScore(10); + // Si la lettre trouvée fait gagner immédiatement, on finalise ici + if (isWin()) end(true); return Result.HIT; } else { - errors++; + addScore(-5); + if (isLose()) end(false); return Result.MISS; } } @@ -62,7 +84,7 @@ public class Game { return errors >= maxErrors; } - /** Renvoie le nombre d'erreurs actuelles */ + /** Nombre d'erreurs actuelles */ public int getErrors() { return errors; } /** Liste les lettres déjà essayées */ @@ -73,4 +95,38 @@ public class Game { for (Character ch : sorted) out.add(String.valueOf(ch)); return out; } -} \ No newline at end of file + + // -Score & Chrono + + /** Retourne le score courant */ + public int getScore() { return score; } + + /** Secondes écoulées depuis le début (si finie, temps figé) */ + public long getElapsedSeconds() { + long end = (endNano > 0L) ? endNano : System.nanoTime(); + long deltaNs = end - startNano; + if (deltaNs < 0) deltaNs = 0; + return deltaNs / 1_000_000_000L; + } + + /** Termine la partie (victoire/défaite) et applique le bonus si gagné */ + public void end(boolean win) { + if (endNano > 0L) return; // déjà terminé + endNano = System.nanoTime(); + if (win) { + int remaining = Math.max(0, maxErrors - errors); + int timeBonus = (int) Math.max(0, 60 - getElapsedSeconds()) * 2; + addScore(remaining * 10 + timeBonus); + } + } + + // --- utilitaires privés --- + private void addScore(int delta) { + if (delta < 0) { + // lettre ratée => +1 erreur + errors++; + } + score += delta; + if (score < 0) score = 0; + } +} From ee85d6f8f499e86f7375459a6c931f35730c1649 Mon Sep 17 00:00:00 2001 From: Jannaire Date: Wed, 8 Oct 2025 15:16:50 +0200 Subject: [PATCH 2/3] ajout score --- Jeu_pendu/Back/Game.java | 255 +++++++++++++++++++++------------------ 1 file changed, 139 insertions(+), 116 deletions(-) diff --git a/Jeu_pendu/Back/Game.java b/Jeu_pendu/Back/Game.java index cfc87c1..1e4354b 100644 --- a/Jeu_pendu/Back/Game.java +++ b/Jeu_pendu/Back/Game.java @@ -1,132 +1,155 @@ -package back; +package front; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import back.*; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; /** - * Logique principale du jeu du pendu (back). - * Ajoute un score et un chronomètre. - * - * Règles de score (simples) : - * - Lettre correcte : +10 points - * - Lettre incorrecte: -5 points (le score ne descend pas sous 0) - * - Bonus victoire : + (restant * 10) + bonus temps - * * bonus temps = max(0, 60 - secondes) * 2 (jusqu'à 120 pts si < 60s) - * - Défaite : pas de bonus - * - * Chronomètre : - * - Démarre à la création de la partie - * - S'arrête définitivement à la fin (victoire/défaite) + * Interface graphique du jeu du pendu. + * (Toutes les méthodes ≤ 50 lignes) */ -public class Game { - private final String word; - private final Set correct = new HashSet<>(); - private final Set all = new HashSet<>(); - private final int maxErrors; - private int errors; +public class GameUI { + private JFrame frame; + private JLabel imgLabel, wordLabel, triedLabel, scoreLabel, timeLabel; + private JTextField input; + private JButton tryBtn, newGameBtn; + private Game game; + private String currentWord; + private Timer timer; - // Score & chrono - private int score = 0; - private long startNano; // début de partie (System.nanoTime) - private long endNano = -1L; // fin (sinon -1 = en cours) - - public Game(String word, int maxErrors) { - this.word = word.toLowerCase(); - this.maxErrors = maxErrors; - this.startNano = System.nanoTime(); // démarre le chrono à la création + /** Lance la fenêtre et démarre une partie */ + public void show() { + setupWindow(); + setupLayout(); + setupActions(); + startNewGame(); + frame.setVisible(true); } - /** Tente une lettre et renvoie le résultat + ajuste le score */ - public Result play(char letter) { - char c = Character.toLowerCase(letter); - if (all.contains(c)) return Result.ALREADY; + /** Crée la fenêtre principale */ + private void setupWindow() { + frame = new JFrame("Jeu du Pendu"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(560, 560); + frame.setLocationRelativeTo(null); + frame.setLayout(new BorderLayout(12, 12)); + } - all.add(c); - if (word.indexOf(c) >= 0) { - correct.add(c); - addScore(10); - // Si la lettre trouvée fait gagner immédiatement, on finalise ici - if (isWin()) end(true); - return Result.HIT; - } else { - addScore(-5); - if (isLose()) end(false); - return Result.MISS; + /** Construit les composants et le layout */ + private void setupLayout() { + imgLabel = new JLabel("", SwingConstants.CENTER); + frame.add(imgLabel, BorderLayout.CENTER); + + wordLabel = new JLabel("Mot : "); + triedLabel = new JLabel("Lettres essayées : "); + scoreLabel = new JLabel("Score : 0"); + timeLabel = new JLabel("Temps : 0s"); + + JPanel top = new JPanel(new GridLayout(2, 1)); + top.add(buildTopLine(wordLabel, scoreLabel)); + top.add(buildTopLine(triedLabel, timeLabel)); + frame.add(top, BorderLayout.NORTH); + + JPanel bottom = new JPanel(new BorderLayout(8, 8)); + JPanel inputPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + input = new JTextField(5); + tryBtn = new JButton("Essayer"); + newGameBtn = new JButton("Nouvelle partie"); + inputPanel.add(new JLabel("Lettre :")); + inputPanel.add(input); + inputPanel.add(tryBtn); + bottom.add(inputPanel, BorderLayout.WEST); + bottom.add(newGameBtn, BorderLayout.EAST); + frame.add(bottom, BorderLayout.SOUTH); + } + + /** Crée une ligne du haut avec 2 labels */ + private JPanel buildTopLine(JLabel left, JLabel right) { + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + panel.add(left); + panel.add(Box.createHorizontalStrut(24)); + panel.add(right); + return panel; + } + + /** Ajoute les actions et le timer */ + private void setupActions() { + tryBtn.addActionListener(this::onTry); + input.addActionListener(this::onTry); + newGameBtn.addActionListener(e -> startNewGame()); + timer = new Timer(1000, e -> refreshStatsOnly()); + } + + /** Démarre une nouvelle partie */ + private void startNewGame() { + currentWord = Words.random(); + game = new Game(currentWord, 7); + input.setText(""); + input.requestFocusInWindow(); + if (!timer.isRunning()) timer.start(); + refreshUI(); + } + + /** Gère le clic ou l'appui sur Entrée */ + private void onTry(ActionEvent e) { + String text = input.getText(); + if (!Check.isLetter(text)) { + showMsg("Tape une seule lettre (A-Z)."); + input.requestFocusInWindow(); + input.selectAll(); + return; + } + Result res = game.play(Character.toLowerCase(text.charAt(0))); + handleResult(res); + input.setText(""); + refreshUI(); + checkEnd(); + } + + /** Réagit selon le résultat d'une tentative */ + private void handleResult(Result res) { + switch (res) { + case ALREADY: + showMsg("Lettre déjà utilisée."); + break; + case HIT: + case MISS: + break; // rien, juste refresh } } - /** Retourne le mot masqué avec les lettres trouvées */ - public String maskedWord() { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < word.length(); i++) { - char c = word.charAt(i); - if (!Character.isLetter(c)) sb.append(c); - else if (correct.contains(c)) sb.append(c); - else sb.append('_'); - if (i < word.length() - 1) sb.append(' '); - } - return sb.toString(); - } - - /** Vérifie si le joueur a gagné */ - public boolean isWin() { - for (int i = 0; i < word.length(); i++) { - char c = word.charAt(i); - if (Character.isLetter(c) && !correct.contains(c)) return false; - } - return true; - } - - /** Vérifie si le joueur a perdu */ - public boolean isLose() { - return errors >= maxErrors; - } - - /** Nombre d'erreurs actuelles */ - public int getErrors() { return errors; } - - /** Liste les lettres déjà essayées */ - public List triedLetters() { - List sorted = new ArrayList<>(all); - sorted.sort(Character::compareTo); - List out = new ArrayList<>(); - for (Character ch : sorted) out.add(String.valueOf(ch)); - return out; - } - - // -Score & Chrono - - /** Retourne le score courant */ - public int getScore() { return score; } - - /** Secondes écoulées depuis le début (si finie, temps figé) */ - public long getElapsedSeconds() { - long end = (endNano > 0L) ? endNano : System.nanoTime(); - long deltaNs = end - startNano; - if (deltaNs < 0) deltaNs = 0; - return deltaNs / 1_000_000_000L; - } - - /** Termine la partie (victoire/défaite) et applique le bonus si gagné */ - public void end(boolean win) { - if (endNano > 0L) return; // déjà terminé - endNano = System.nanoTime(); - if (win) { - int remaining = Math.max(0, maxErrors - errors); - int timeBonus = (int) Math.max(0, 60 - getElapsedSeconds()) * 2; - addScore(remaining * 10 + timeBonus); + /** Vérifie si la partie est finie */ + private void checkEnd() { + if (game.isWin() || game.isLose()) { + timer.stop(); + game.end(game.isWin()); + String msg = (game.isWin() ? "Bravo !" : "Perdu !") + + " Le mot était : " + currentWord + + "\nScore final : " + game.getScore() + + "\nTemps : " + game.getElapsedSeconds() + "s"; + showMsg(msg); } } - // --- utilitaires privés --- - private void addScore(int delta) { - if (delta < 0) { - // lettre ratée => +1 erreur - errors++; - } - score += delta; - if (score < 0) score = 0; + /** Met à jour tout l'affichage */ + private void refreshUI() { + imgLabel.setIcon(Gallows.icon(game.getErrors())); + wordLabel.setText("Mot : " + game.maskedWord()); + triedLabel.setText("Lettres essayées : " + String.join(", ", game.triedLetters())); + refreshStatsOnly(); + frame.repaint(); + } + + /** Met à jour uniquement score + chrono */ + private void refreshStatsOnly() { + scoreLabel.setText("Score : " + game.getScore()); + timeLabel.setText("Temps : " + game.getElapsedSeconds() + "s"); + } + + /** Affiche une boîte de message */ + private void showMsg(String msg) { + JOptionPane.showMessageDialog(frame, msg); } } From 3f8a86866ae9b63e8afe1ae7a1ac7f699f040841 Mon Sep 17 00:00:00 2001 From: Jannaire Date: Wed, 8 Oct 2025 15:17:55 +0200 Subject: [PATCH 3/3] rm --- out/back/Check.class | Bin 494 -> 0 bytes out/back/Game.class | Bin 2950 -> 0 bytes out/back/Result.class | Bin 827 -> 0 bytes out/back/Words.class | Bin 3931 -> 0 bytes out/front/Gallows$BufferedImage.class | Bin 315 -> 0 bytes out/front/Gallows.class | Bin 2197 -> 0 bytes out/front/GameUI$1.class | Bin 625 -> 0 bytes out/front/GameUI.class | Bin 5021 -> 0 bytes out/main/Main.class | Bin 956 -> 0 bytes 9 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 out/back/Check.class delete mode 100644 out/back/Game.class delete mode 100644 out/back/Result.class delete mode 100644 out/back/Words.class delete mode 100644 out/front/Gallows$BufferedImage.class delete mode 100644 out/front/Gallows.class delete mode 100644 out/front/GameUI$1.class delete mode 100644 out/front/GameUI.class delete mode 100644 out/main/Main.class diff --git a/out/back/Check.class b/out/back/Check.class deleted file mode 100644 index 95b07da470d7a2b29d8b4bde724c666a1f25b9d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmX^0Z`VEs1_pBmWiAGG1|cp6egAp#;qxfsM4#Mv1n*cl`l8Q5$x^D;~97#Wx~ zG{YDfSe)}yQW+WeeKPY>{YrC_Qj0?D9{_N=+_75rSCH z$iPxkl$p!OAflm(={80Nww%--4P{_rU}9ikP|-Thz{T5Z4vNO6O*9WXJ#!nd}T%AkEnz;b3-#9Cn6WMh2Gh{Gt>_1|grU z#Ii*FoW#6z{osdIWZ@Pk%2QevBI^eD8Hzfk%7^Zk%280%3-s~ z%*!mXV`LE1Kr#aA98b+KMg|t={FGFXb29T%{YrC_Qj0sA zeUcKBv-N{gi%WAr4&@ClNlec6O)P+_GgPoMRPr!X zF;w#~)G$==Fw`>C@i5ebxcVT~4Gh(c4B}ubz_AB$mQ!hFPD*MK4?`n^Ee}HzLo*LU z3qvapLmNXo4?_oo1tWtnSPR%yjzvX@l^~yk9NfvsAmEgrUs7CBlvv=KT9T2UQq0fB z&?Ugo&CklvBf!wh!_ddj&%-c*VImL1B!AiQnG;h|7#Y|z^HNePK(1iX z@B}45W)II0Mg|sN&){H22DY5ky!4U`Mh3RzjKm_x5=I7)DrZIpj?7|68U=|sgREss zEGS6LOJQV?LG=wJ44^S?&B(w}k`EDLWRQgV0PH>I{G6QBa(-?>BB;EPK*>waU|~?4S~D`R z6z3O}V7L{e53B%GhHzxUlYkhCL9nC&D)}-Ji~Uk7Kp~h1rcetCs8>L_8p*j(Q7k12 zJHu=qhB*uico-HkEMjC(0w)u2FlFYI))I3OD^GM7~$w@6%foQZwaw;TF zkws86hEx`$k|znV62D&L0D@ZUoS2gnoLQ0zs#u`W9Fh;pYDjKIP7Uk~OBoqdF@h1B zw;37a@T+4`WKdyHWnf@nWe@_DoD2*MLZC90fssLrfq{XEL7PDcRJ@|_bs6-)a{6GJ zoq>_TfWeS~k-><8fgyx}nSq&sfk8uSI|HNEZU&~v?F`IY8CVcZRxRyq3~XB&*tKM~ zGH`5UU|?WmFlJz2kYZqCU|^27R@Z}83Ajiofd;*u?(iVsZDS?^6lCp?_OIttzB-X;j zxcvW8?QIMa2)C;-aDu|0frCMlL6kv@L5@M2L61R)!JR>u!H+?YA&EhgA%npH?0!)O zw!aKq>)VWWng5mWUzwzCZB-`9HHjSHqs!sgMFb5Vo7gf5Ve)r z!5}shIb^w+7-liBGOuZ2WL*CL0?QhBn2Is5GB7ZhGVn5(F^DmkGw3szGMF-0g5ANz z!2E}SiBSh)xi#E!69y&*Mg|53L9Hze0$N)bI2JOnvn*#|VMZ9s23BAPHingfiQj>d zfsw(6!4~R#Sq2cFfq@ld0!SAmu|ae>F)%XNG1xOOfs<|*12fo(-n$tjBSC3sJA;&u z_AUl#28NvsGE590;q45vzS=t(=pbSR;(Ip+9tL*?aRv_tc?M5VqZsULK?bIO3~KBQ4q)W?i$MvR`J5P- s8JxiZ=)y3cfq{XGfstV@!(xVc43Z293=9lB42%qk49pBk49N^B0IwdrK>z>% diff --git a/out/back/Result.class b/out/back/Result.class deleted file mode 100644 index 33ddf159df608a9aabbe4ed419868ae765334c73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 827 zcmX^0Z`VEs1_pBm15O4O24yY=6$Vvy1`&1!H7*7|26Ygj!NI`K#lXU#0aBsK!5|2t zwKy1rK(sbHgAOADvxjF0BLlBbQetwpeo$(0X-WhsB17I179?nTDG#poYK@{Mg{>5O>{XH=lqmZMh1SL%)C^;(%hufqL9R-oK!{z zcCaS@G)4wR4WF#UvPAuy#JqI<;F6-uymV_#bSrE!^D;~97#YN{DE8D0V`ShA&P>ls zEGaEYWn^I10EuweB_N47v<@j11gJ!NkKL$)L}}Ak84d!@$oVz{4O2B7_(O7#a9LS|L6H*~iGhnw*oL zm&(W>qM?c87XPHI)MQX_n<9J5IVZ8W*cwS0JWxAIPPX(i4$u@V4ls+_I> diff --git a/out/back/Words.class b/out/back/Words.class deleted file mode 100644 index cf6b8bbf8ceb86bf14135674138037d8f1ea984c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3931 zcmX^0Z`VEs1_pD6dt40W43S(6Tntg13|tJ+AR>mF!G|H1i@}s34#bLQXGj1kNMvV7 z0!b%>I4K~RR1i0fogtlzfuA9glOcm4lZzpXAzO%nfuWF_A&{X+h=Gxz48$rIVqjt@ z<6@{}s1jmeW~c*+)q{uzc7{eS1{sDXc7|pSh88Xc4u)0`k;=i)#=+3e#n8df$-&UY z!O+dY(8Iyd%fZmc!O+jaFoA<%A_v1H4u;7b3{yB5rgAV$<6xN1!7u~lu$k-(vq0{T zWM`Po$iNluALJ4oAK)0`!N?%ula*MOsGpaaub-Bgld2z(SdwAQ$iVL6>gE{g6T-+K z08vm{l9{9LlUZD1&B(wRoSB}NSW;S)%E+LCCT#=Z=OpH(>j#$gN`<>$I(=A`-;xum8gmgbZ&G6=zpMR=Z_VGbjM z8iqIyU-K5FCZ>dzq*;KRUJTL*aVBbLL*0&S$y|1Zd5jEJ8pJ5aVYgULVs27Oq6&%= zR16szM4_f4hm~d&BLj8~28;|GHpw~A2;mCOFD*(=1%(qR9px9L6zhS~4-bPQgA)&f z2Z(TBu;yW~W3cC8n9s0)hhZVZA|8gt3`-ap1VAeFk*wum@M7?0WZ+6lOwQI12N}l0 zV8LL?!{Eo@&%>~kVHppD6@xV+gD_YlID8z7iV`b9$&j64IS<1MhL!9Lt9TezGpu1` z5OB)RFDWi5N-XeAEy>7FDduNmSS!G=j-Qoby#T`o9)^t!n|K&DGi(uH*vikwuuXs= zgoj}}!ww#XoeaD9*%)@SGwk7E*vqg^fMFj$C&PXLh66kd2N@3WFdSw$!ozTs!3pLP zuopryit@`r>5zxv7{hUxRA#=ur@w1Oa%w?IW_}(c1EVqz!wH5EMg|_I%%q&m{F02+ z!qQYm29DhPl48A*iV}8)lc3-^#mK;!n3JAglv$FI%gDe{mROVtGMtftBds(q8Dbb` zW?o5ZQCebhDkB4TW?n{WQD#YE9*D=8im;L+IX|}`Gbgo(k%1#6u_Q4mu{f2Hfjuv^ zq&&YUn~{Mhu_!qsvm`Ycl7TrhOHzvxp%xT@GGsB>emvQm>v7#aA$>cO!IibzHVA+P{So?v7U2MdB# z6_*sHCgy@llhnjqMh2GR%&Jsy+29HGRz-Myp$WKem)$e@qxMo`+fMs^iE{G9Xiic51-i$Li$Ex*V$F*ySi7Lf1)I}lST$R5_@ zoP1DL=S@sW2`()tC`v6Z232h^@%JQ>Q^?ktgn{R4KVp?KyNq$i!BLjCXg2&EqhmnEJCqF;C zw1AO;$1^W4wa7UqvA7tNAKoOUX$sR)J`=#`GwX2#Us#%7Rp6<-|)u zti-Pu8obE7f51T{t(Y%~J{`wj-q%?!*4 zJ0Thj7}yvL8Mr_V7N~||1}3mkN}Cv%k2A;#aYcF`0y8-wCTJaA&cNZLby$1?$36ayOr1A{388-p1GH-kBYAcF;iID-{~B7+TsCj$cmKLhh0 z261)*PdPcurv5TnSqsofgx)*1ApXp1_2+f zO$>rN7=(Ovb}=ZnLdwBA7*sYha0~E5_^QE?EJA9* zk*q@M!I5l28o`n5LYl#m970;bkpgT&+QE?m>_R%hkpdh-y1|hGoI-lRkpf&o`oWO` z+(HJykpetIhQW~nyh297kpg@|#=$!nOg1y{?Pf5I+|FROnSq57B~J)3urM$%h%pE< zNHP>KC@@qpC^9fJgo8sPg5f#?0|OTWBg0jO+YHwjBpGrT7#Oq|SQv5{m>KdI@)-)i UtYU@|hEgc20?Mjps9~rD0D|P{QUCw| diff --git a/out/front/Gallows$BufferedImage.class b/out/front/Gallows$BufferedImage.class deleted file mode 100644 index 523522f5cdc1ad6e98ccd52b8c04b712830ef0c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmX^0Z`VEs1_pBmAua}H1|D_>UUminMg}&U%)HDJJ4OaJ4Np%`%`ip=7U%qwR7M7V zpUk{eztY^K)S{5Yq?}Yn2Cm@z(xT*4w@eU+$2~D8C%?Q{FDtPuk&%JJFSWSDBfq$W zok5U?frWvUkwH4GC_k@6AF58psWdGuwJ0^kGdD3km63rLjnCtmmzP@PoRe5woLbDt zAOkX1Ke4<-KNF;0A5AqcirEYb3``8n3?RVBzzDLPfsuiYfq_AVfrWvEfq{WTOIk*D zI|JiJ1_lO326hGp1}+9B1_lOe26hG;24)5h1_lNu22KVpFwM=t4_3j*z{J4Kz{kJ^ E037K;rvLx| diff --git a/out/front/Gallows.class b/out/front/Gallows.class deleted file mode 100644 index a93d73deefd8f8dafaabc7ccd98a10d63f231ca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2197 zcmX^0Z`VEs1_pD6RxSov1~YaBb1nu821^iO#mT_LV9m~8!^ObHV9Ui|$6(LS;K0e? z$l%1qz{%hYB3wXRR}jk$M7Vgw0%By~L#XmiEXiPGV9w3VV`N~}@buL5 z1o09p7#Y|!JUu-@$pWGp6b9h5!^ps$o>~G64n_u14M@bIgpxJP5|B3M{G9wEMg}e) zPj`=yc=sU3NJa($NcwW?1g#-{V^7H}F32xVWn@6M66{ZFkd>UpsRfBei6!|( zTnse~wTukBpiEj)%$Nzvy2XqP;<<_0sm}R%$%!T5nI##pj9ARbpoYa#Xh5NRbduPi@16GGHi*k1>D?MRh@nO}C+6e?XO^T| zvoo|XGN@vB2%Fm&8RYP*V^CyZVvuEEU|?pD0_9W&1_mhxB?e^%Mg|oI1_mYuRR$>r zH3oGC1_l-eMo`hjz{sG*z`!8Oz{tSJz`($&wVi=+BLf2iBZD@m#0Cp;GjKBKFz7;+ z>M}4hFflMN2r^3vum)cU{GP;W>96|0+j(!tT(GTRtFM|m~5Q8ZL2ZI5FCe)Ez7+4uVwN>mU2H{-{A`A?h z8AJux_c91>W?*HumJ(oF%;2(#L39&?u+%OFF$M;o-3;Q9+S?fi1A`=k4+8^(2m>>NF9RckAD9dTlVJdS C%nRQD diff --git a/out/front/GameUI$1.class b/out/front/GameUI$1.class deleted file mode 100644 index 1ca3aa5fd39e6175e09d959933c2b88217454b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmX^0Z`VEs1_pBmZ7v2e260XX4h9KM1~CRn5Lb$wK^nx70THt7407xY3XBY5D#7KM zCCM4Si3KW2iOJb2L8-;1IVFq?Owpc<3>-GeIhlExC3cJq%o>_uj0`N!`6;Q44E#Qs zd8vM-xk;%-A&E&jsf-M~!6k{w*}jPdP(D|1erZv1s#_*VlG{BoH#O8#FDtPuk&%Jl zH7_|Qzc@25-8Z!)BR_?mL6MPx!!NbC#3R4Bgq=Z&he4S^g@=KQft!axl|hY%L7hQ^ zkwFTiTR$f;FJ0d+Ke#kG!!0v4C&jg>D8Gn@K@+4*i$RT%fiJBnKd(d|Vxx*7BLk0T zUS4XEb53G$acVImg8;%9|D>$cxxkwJigfkBXg zEu5W!mBANIFt9KPGB7YOF$ggTGcYi)Fo-ZPFo=RhL>S~57#O%17#TPi7#J7?H~^gL Bd+-1N diff --git a/out/front/GameUI.class b/out/front/GameUI.class deleted file mode 100644 index a10a7e59925bd44dfdb5355e2f5d8210968101ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5021 zcmX^0Z`VEs1_pCRD=vl@hI%fBXodz5(a6aV&CtZfz{b$b&d|ca&W0=a$FpY~rf?+y4 z!wfD4DTe7FMKjqMW^pjg=3FP7epeGLX9E91JT!^hz#OZPH-_)GMwaKI0X_pEyTdYa1O*eFT}tMVO`{6xWsT7hIj^9o8!7#So`O%6$|C~?b7%}KFlWMC^Ps&p#JV`LCTRpV4zQj(u%&B(x& zms;+gn41b##F7qnDYs8jVsf@VNZ6W@fjhahs3s|TVqUs_a7j^S zUOLDYo6Nk-5<5l)W)00SMg|t={FGEi27aH+yi~u^+@#c^ki?{%R7M7t;*9)qMh5oc z)RNMIP)|k%p5l_kq7pxd6Brp-^YcQADj6B%H6XSmmY3+KmZj#E=sPBtWaj6&g4os| zD|mxT5|gui6AQp5voqXhXL!KKz*&@#z~PfxQc{$vUj&)SR4Dg@VMQlFU>dhD?w$ zmhjZ#5=I6V*F+G-8k}ERk^v1Pm<>+(6$r%LTO&ALUC$oPO3rj19%E-je#wfnD90$z!>GWh$it|_ z@SlTGnUR4>M}db?g;AA(o!lJyxGxWVBQlv-SxQ^Lr=Rh(K9mRXz$$?O_YpqwfS&CAFo21s0@ zIJLwjH7&6;r^GoYzc|&uAhjqFl*t(xSTsCADnP|VaAs91BLl03Cs;(ZIJLwlKN+kn zC^aXsB(p3vB%hH%9BKzBgE{Bt7Ubup=9PfU2~Lm>aAsp(`#N?8EP!TDZT$GwvlIogUP*MpgQy3W(H9S2%Jt6kMv?YPd8-0ipP-Rk_ zS_0uPGRQ%!#;#N|jEhl=QJae)no)<5fj<#k00*QNrR5jprlv45=xg{Orw?n0wcw%! zxybg(EG|g}`G}E0Ffk>Y(moBLjPW zQA%cBVh*@|_GDyW%`6Vj%;RFzW7KD4kaQ|aEX!9=RPaev$jvWNIJ~kXF%wkQGBPrV z=O$*SI_KvlCzga~mSn(d9!3T=XuKf@JJy(B%PjWE2l+uVAhjr^6uUi~>8T~IMMe2V z#f%KRuvC?klV4uU$iR}BoS(% z7)lw+co?b~%GeoALFK#|BZCqs!9kKqW?or-cB;M)xP9ZBT9TLsD-^hM5j=KA3q}Su zpZxsn(gH??Gsv!o8UU#ZJreU$a#D*`AS#hP19dl&_fRy3R2HE4op?!zmB?0M>P1dW zP+8~1oSfjyl2mI(1{I9ZfH)SCR^f%@4BGn|Vy|^HQYgV{0wf`HAFwl8GBT)Qcmi9D zFfz#DSI3~p5X}(7z`(%Cz{C*GkifvezyxX(g6U+2Bru%HSp@4ybL6(7$fsuiMfmLfe1LH;p1_nlkLIwr~Hn1Qc10zEb zLq1fgDFYK&R8VUh1C!P^24<}-3@j|$7+4Y7Ks_l21{nqx23ZCU1~~=+26+Z1P-7cn z1QR0z8v_di17o4qZU(kUA@=PI99tP!K<2P*W8ehQf=nEOOdQ)7xIi4nZ4BHXdN%`4 zqyUcq&vpjhZ47)`yBYW+g#?(lGYD;E5C+L>ZD9}=64}Nex|=~P60Dd*fMYuY?{)@p zABd1dB=dF#$?Xi{zFNB(q#`-CGe~b`kkQ)BAR8$px1B+LD}#a#*jUBw3`*M=l*4tj zwlK)R7z!W;M6n83v8uL?klHo|b#1LJ45~sJ+ZfbA&d?Upgt}ongO;D}ZU*g0U6$<( zI@=g@A#T>&&Y-lFK_9{~0CNnrwlL@ma6sS=2BU2Z##&n#44IJybU|uBP5?0sK@5;> zx~lvjlluo7byld1_lN{26hI21__1$21SNI22F+_23>|=1}0EB3rTj2whT-R ztPBhcdmzR*`s(apaGJ#+0}4hV=N$|#5OMo(2<^I2hj|-=+YSbIkiE9D+Za5oST-?u zO0sNY@X}kw00!FNyu!f1%m7O83=A3!3=E*;z#`3K>>26fx{(C}AjPU|l0k)`iou4Vn!%Z&Mt})aPeN@5l~hdNl4=_RGeRq*r1E57 zVWw$450C!SWt`!a4;G%nll(^b diff --git a/out/main/Main.class b/out/main/Main.class deleted file mode 100644 index e1df1b8570771ac824ba7999914662316780a46e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 zcmX^0Z`VEs1_pBmBQ6FG1|cB^1_p611_=g9b_OXf1{MY(5FyRZAj8fe%gDfHlbM%U zV#mn9tf3jk$iU*9pOVVR!0(fpm+DuVo0M7?UR*QmZ+bT zn3t{}TvC*omu?Nx$eWXxo0O8M0#c@8z{tQAoL^d$oa&Yd(#+|bn3<;s(#ONV$-u?P zAmEgrUs7CBlvv=KT9T2UQq0fBASb}U#m~kd&%>a=pvcak#KWM>pu)(&lU9_USEBEp zn422v$-|%u(#{F8MIU4+BZC0QScr4{ld@8iOSl-+7}U8K*cmh!8JLSo!H(8Ma&%B> zULMF#){G2NAiWj(#pRhG&w$9#lFXdUlFZa%Mh5Q8yt4f4RG-9>)FMU(aSd!nfPBtU zoRMG7&Y;P|pv9oa!@v)6pc2Snh@&8;==*?!$2YYkF)cB3}l9O7j0?}xV%845=(g zMOIF{B*aSmdXa-0YO-@;PEK%UNvbtFgCQe>Dn|HV^A96~9Da2SiVW-w91I}9%)kgr zS`3T~+zbp1vJ8w2j0_A6tXkU{7&kI7FfcOkFfcH%fdx4kI2m{u_@GKvp-MS-F)%SO z>|kIFMVEmIY!L5m2A0U}46NQ-+Zfmo+V~il85kIN88{gD z7(nTPnL&Vofq{uZkU^J$fq{#GkwKe5pFxK~l0le(fq{pCkwJuknL(66j6oCt2tMf@