From 584e8dc3c6ec57ce79290d01a01816779182f3d0 Mon Sep 17 00:00:00 2001 From: dick Date: Wed, 8 Oct 2025 17:55:54 +0200 Subject: [PATCH] Final --- Makefile | 27 ++++++++++++++-- bin/Chronometre.class | Bin 0 -> 2222 bytes bin/Dessin.class | Bin 0 -> 2225 bytes bin/Event.class | Bin 0 -> 2388 bytes bin/Fenetre.class | Bin 0 -> 3216 bytes bin/LetterInputFilter.class | Bin 0 -> 951 bytes bin/MenuDifficulte.class | Bin 0 -> 2565 bytes bin/Mots.class | Bin 0 -> 1225 bytes bin/Partie.class | Bin 0 -> 2868 bytes bin/Pendu$GameLetterHandler.class | Bin 0 -> 3418 bytes bin/Pendu.class | Bin 0 -> 2729 bytes bin/Score.class | Bin 0 -> 531 bytes src/Partie.java | 2 +- src/Pendu.java | 52 ++++++++++++++++++++---------- 14 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 bin/Chronometre.class create mode 100644 bin/Dessin.class create mode 100644 bin/Event.class create mode 100644 bin/Fenetre.class create mode 100644 bin/LetterInputFilter.class create mode 100644 bin/MenuDifficulte.class create mode 100644 bin/Mots.class create mode 100644 bin/Partie.class create mode 100644 bin/Pendu$GameLetterHandler.class create mode 100644 bin/Pendu.class create mode 100644 bin/Score.class diff --git a/Makefile b/Makefile index 8833e5c..f6b0108 100644 --- a/Makefile +++ b/Makefile @@ -15,16 +15,22 @@ JCFLAGS = -encoding UTF-8 -implicit:none -cp $(OUT) -d $(OUT) CLASSFILES = Pendu.class \ Partie.class \ Fenetre.class \ - Dessin.class + Dessin.class \ + Mots.class \ + Event.class \ + LetterInputFilter.class \ + MenuDifficulte.class \ + Chronometre.class \ + Score.class # Dépendances -$(OUT)Pendu.class : $(IN)Pendu.java $(OUT)Partie.class $(OUT)Fenetre.class +$(OUT)Pendu.class : $(IN)Pendu.java $(OUT)Partie.class $(OUT)Fenetre.class $(OUT)Event.class $(OUT)MenuDifficulte.class $(OUT)Score.class $(JC) $(JCFLAGS) $< $(OUT)Partie.class : $(IN)Partie.java $(OUT)Mots.class $(JC) $(JCFLAGS) $< -$(OUT)Fenetre.class : $(IN)Fenetre.java $(OUT)Partie.class $(OUT)Dessin.class +$(OUT)Fenetre.class : $(IN)Fenetre.java $(OUT)Partie.class $(OUT)Dessin.class $(OUT)Chronometre.class $(OUT)Score.class $(JC) $(JCFLAGS) $< $(OUT)Dessin.class : $(IN)Dessin.java @@ -33,6 +39,21 @@ $(OUT)Dessin.class : $(IN)Dessin.java $(OUT)Mots.class : $(IN)Mots.java $(JC) $(JCFLAGS) $< +$(OUT)Event.class : $(IN)Event.java $(OUT)Fenetre.class $(OUT)LetterInputFilter.class + $(JC) $(JCFLAGS) $< + +$(OUT)LetterInputFilter.class : $(IN)LetterInputFilter.java $(OUT)Fenetre.class + $(JC) $(JCFLAGS) $< + +$(OUT)MenuDifficulte.class : $(IN)MenuDifficulte.java + $(JC) $(JCFLAGS) $< + +$(OUT)Chronometre.class : $(IN)Chronometre.java + $(JC) $(JCFLAGS) $< + +$(OUT)Score.class : $(IN)Score.java + $(JC) $(JCFLAGS) $< + # Commandes Pendu : $(OUT)Pendu.class diff --git a/bin/Chronometre.class b/bin/Chronometre.class new file mode 100644 index 0000000000000000000000000000000000000000..4871647ba82c6ef12c1245550db05ccf5a866fa4 GIT binary patch literal 2222 zcmX^0Z`VEs1_pD67A^)224{8#7Y+tjb_O>t1||k~P6l-b4-nxABD_F^H#>t57XufA zGZ%w8gD)3@AA>)L6~N9A$iWcA#lX)H4AL6H!4L`(4`XKt=VB0Lhydx0KaSdy9o6KAu@%*!mXV`N~~ z&l`MT#}fa?VDHt6=x|f$uD4J zU@b~5PAy?%5J*ogam`6AC`Q=8tfA?}$iSbNT#}ie7m!+%mS2>cn!?B+uL1Uieqwov zerj22UWvXVScxl$Z4Gh^cWFUNVhJorSTwvqf?UD*rA5i9ZkZrg2{>mI<>%$+rj`_? z>VZOxhryV^gpolA#6}H0Mg~>`11kdqMg}Ql$zV_bJLl&Wmn7zu6oa&9^Dt;JX!9`W zG3fI!7%&*}Fc>iyGBSvQbb%e~lwXvRTI7>hnO|DM!;r&}%g&I;!;sHVz{60;P{hc< z3s>oupI5@jz!999o}a1^>IpKvn1`W+p_Gw<%{eu%B(;c#p^TxNkwFlo1?FCGbb{1Y z@G$5w=(00Z@-S2}*zhozGnnu&RD%dh5Mj^Yz{6n8V8h73scK-9Vg(`?83aH^>E|To zrR)1AWu+#Uurt)~Fw`>Cu`|^3Ff=eU@-Q?pG&3@ABLy9LfCVJxffAuC*eLY)@yRSM zNzF?wVq_45#vs_T;F6-uymV_%P#kdI(^C_ia$wq$!119EQDV)=0J0sz zVPuel*p6K($f@EG1&{!P`2p++_TtnMNCXN&)quPJ5&^rMIWZ-LkwFtl$~ix`AU`iP zuf!VcJcyByH~{NV*6@T#fXqQo@vsmDt3ryu;L75X)Lc+Nlol1G=9PdF1}xvQ7o`>? zW`dFzA1DYRmigp^GCzA+VoqtQe;Ol$u!a{Ts1VZDC@BQuVMYcvP^L^QVPvp``Ug2m zqam&a3&FgDBm^-7RQwdDmV~5MlrS=gVlhQCj6sn>ok4?vkwKGzl|cxU$ruo_5Fi0@4FbFXS zF^DjTGl(+CFo-cIGDtG$Fi0_2Ge|S|F~~4PFvv5cGbk`Hf^sX=)gcVbU{}j)ZDC-a z#UQ1{0&?mO1__X3w=jrrW02I^#vlcVtl)NefUIX=V32`Wf(UV_>73gbWI$el zgd4;w77VNmmJD1BRt)?M)(m0{HVo1XwhWA*(hKSXZw3|yP)#YjgF(Up;tL*7cyXjI zXJFxU(%QnnshGGHoG?Jq!N=_)OT4EX488{gj7)<3w802!D6h#;m za?M#mRG~RLIH@SH?qyJpWENxH!JrZx$s)!MqIWQ;ZevhGcwG$aAwLE-27d-#h5!Z; RhCl`rh9Cw;21l?zoB)r!=SKhl literal 0 HcmV?d00001 diff --git a/bin/Dessin.class b/bin/Dessin.class new file mode 100644 index 0000000000000000000000000000000000000000..60bf7458d809182acca9c9d62d7cd1ebe553460a GIT binary patch literal 2225 zcmX^0Z`VEs1_pD6DlP_j22)N3P6jh}26HY3W(Er`22KV`b_Odh1~vw35XXj{!Iq1` zj=>&8IDkYPLAso{7z`Mk*%@3o8C)6MK!iIN13!ZYJA)^Sg98Ht7lSZ^7f8gLlYx!F z2gLFPY4!sV{vd7uhzJA`K^zRh>5%Iwxj_$6E42+(P47|?ydBr7(c_m?q zIi;!03=9lxj0~*BC5h>&j0|ixnR%Hdc8mEi4+IAf>#)C5g$|zKI1e73pvl%o>`Wj0}7QiJ5sN&iT0o`FW{% zC5#MW8a`QxWr_NU zfuzHD7{VDM7#aBB($4ug`9&b9NFIhLhG<3xHi(Jr3^670#>XF8c^HZrba@y`Ktw4+84p7_h^SytV`N}}`ldp^xI8m2UEeDpF)uZT zkwFk{Hp~r-46GWS;5ZQ|PAv&2N=-{GDoRZW&a6shWDrLRbaY)L zDKR-ay(qslFNKjo7)c8_oWRN9;@%@OucVlfLBQKJGTzZI#M9Bo(=pi7&z+s2 zl97SgJGGLLfyXm1FSW=yC$YFVwV07X7LrmxMx&ad;+75}8H)Z`LtMg~yOp%}r)V1yJ7C{o2>(=kl}g({1N8;Ifr=NC}4gAz1EDae(O zqyP?3P8Y`@?|Anh$4Ev70fY)jh(mH5n9az*k)B!-o|ys)bk6kD5|7l(^o$Zl29A`X z#BxwhWn^Fn#U(fifCc@_5_1?C*i$l#3-XIo85yK;gf++?42le#4Dt*N3``7?3EDtl`ONg0NV}*t{n{AwlZ2<7?|cW@My_^?A*q{12U3{ z0b!&J12=;#gD`^}g9L*-gA9WrgEpwNV_^KlAj8PO$e_cZ3pHMr0mNruUqSPxhj ztiX&@l+}z&lvR`kY!>j6suufkA_Tl|hSvmqD9BoI!^{g+Z4=o56s=fWeT# zjKPS(k-?O~gTag;l);=Kj=_QSY#^+klpKQyG{TjKSI0gdv>))Pi7SNM&$kNMqpy E07wYG^Z)<= literal 0 HcmV?d00001 diff --git a/bin/Event.class b/bin/Event.class new file mode 100644 index 0000000000000000000000000000000000000000..d5dec5b46fe00994bdd1c4a7533353a8726dedce GIT binary patch literal 2388 zcmX^0Z`VEs1_pD64lV{61|v=eX$E5uVZy~A&0xyKV8&n$A}qKVEE%l081xvd*cq(3 z7&sYhKpa~TVaLUw&tMNC95@&pK_X5djxz^?3y5|F>38E`aOYz1VDJQqcyTd!Gx%^b z_%iqjF)%O$u`>j-GlZ}+gfcR)m1pLqBKzVT=qc&iN^+ zj12rfnR%&xrMXF|MInhvIjM{c4#XLP%Q+ykxymz(QeDeZ^Gb>t8JIOdLi~wfp9iEC zrR5jpf&xZf1LDTS@)G@2kXn65uoAF7Ymgq^;F84TY~REJu*=vP!q^$Y85y{O^Gl18 zQ{6H_j^zTY)&m7G4}%JW77v3QgFFv|0)rwCgC>I(J3|ByLnK2K4?{FV3_C+C4?`S7 zJR^f3B$hn$3Q9}dGIL5&i$Izaco-5Hl6V-B8B%x{Qb9x-Lkc4U0}n$wLk15+CPNk@ z18cOSZd5D}LpDPW4?`|P9wUQ#SZZlzPEKl-LTX+~QEHJwX11s2{j0^%GpX!6tfPYd}YH|r9gDhAGJrsR1i%U}TQi~WF z#6a>D`o-m$dFlFIA*mH5Zkee$DJW(ImlS2@r86?HL(?)N17CV-2~sFAGDvA?g5wL* zBx^%^9gGZ^X%0ymY#@7jY6&Qe7#T#Met?8FB!sLP8CXh+GIJRj zxJ&Xw3kp(;oD+*v85!7%VY);i4nolcatd2cYF>It1~@x-GBU8|CYB^;q!u$WVAT-C z$iSJNS`rQ|W5l3NfqT=fC@~jQ;E1Dyrhfsba0y7vOJ!sbEY8R;_f0J>PE1dA$xO`2 zPX`wdAocp7wBnqfTacfZnpa{Cj#Y?zAxR1x4s6L8iA9bjj0`Lqo|?|kc!Q{d7e0&( z>}82LrK$dDj0_SQ&XDwhrpB6)K^kl+_M(W9fh{pPIklh!Eg;}7;bN#`sAptQ0HwvE zRE6UF(%j7AR0WNKoW$hRjQpIG)FMp{RFcyyV1^@XV47P!U^_2rhxt zu*C_Ix1n*%&d>nLZ7qxpDqt6bb6I9yS$=k^K12z`bhpIhlKi4dc7`@a1~#Ak{Or;K zMg|_wyu8#R=bXgiVoTj1002ObkMxl9z#j zK?qd%GB7eIF)%PNF(@-IGcYo!FsL#xF{m*xFjzA%F)%YQFbHdHXJFLQ-patFrL&cR zS!){u%SHwU21W*T1_lN(237_J22lnU1~CRs25|;H1_=fs21%%q8VpRJqMd;eY+x`0 z3)nz)tt|{p+Zb4VAT*n=j@C8?c5SU~3>@0K88{=gw=-~UW8g+uBE`VQz`!8Oz`-EL zAi$u=Aj+V`AjP1{pvIuaz{sG@paZpFGXpaN3j+f~GQ?n3U!83XJlhy}w=wYf=?L*} zV-V2Y#vsVDfPqI>NN5{_@GJ%ah)NM5(H#t88@0ADFdt(O2T{7r+Ze=mFi7lVkYr+5 z&L9j`r@MCSfW*IUxGcYi4F)%VTGPE)@F-S7_ RGcYi4FfcL%FfcL%0sxBrd`JKQ literal 0 HcmV?d00001 diff --git a/bin/Fenetre.class b/bin/Fenetre.class new file mode 100644 index 0000000000000000000000000000000000000000..bc940530244fd9f23b10d564b8cf7b0725e12284 GIT binary patch literal 3216 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 I66{VX0C~^X`v3p{ literal 0 HcmV?d00001 diff --git a/bin/MenuDifficulte.class b/bin/MenuDifficulte.class new file mode 100644 index 0000000000000000000000000000000000000000..c6d76f095dfbdd124aecdff6611f05a992b955ec GIT binary patch literal 2565 zcmX^0Z`VEs1_pD6say;?3@)4u+6=Dj3~n3@?pzGa3?3l9Cy3<*BD_I_4?BY|7XufA zABf}6&Je)C5XjCD#KpkN5X{aH!od*A#URKK2I7ZvF+?y#f>==;4ACIS z3{nj7Tnv&72_PbhogtBfA&HAYj=_V2A(?|A1;k7R5osX#bPk3LkmgJfk;TQ3&5*;* zkjs$A&XCW}P{7Vm$jHE&R+N~V%E%z%la*MOSfO8Bo|%`f@8t#(wPs`x%FlDjOiRm5 zF3l;abk4{xPR(OvkOiyNFD=Q;(N8PQOD@UG&(n9#&nqs?O)au!WZ(?WOwUU!DJ@E6 zWH7|1)&?S(lbDyTA6!zDnU`*DXU)jKW|NthSz^b?pr8R!fWs!uFh&Lz=lqmZMh1SL z%)C^;(%hufqL9R-oK!{z6TEt{+6*?YI3vHDk%3tQ#9>X&$uCZ2WZ+0oEdhrJBZHWR zCfH3FA;q5v4u^o$qO|;?+|(3C26?Cp63a{UQ_E8GO7tDUN?bu~YmoW8!6k{w*}jPd zU^lZf6frVz1?QI*C8xS&g8U%to0?Y&5C2p>P!#bnm@ruJFc>fxGBOB(1W;YV$e`+# zTB?vzst}Nxmr|hDU{}+ zSjNa81u_%n(qK>;1ErUe#JrMXkij*K47?x}U|Zet^GX;QID%8t^HUW(*IU!MynUl)H(7{m5!_djl1+uoAk%7%QHLoPK zh=-wvp_hlDkHLzap`V9g0>eahhDkgOlNqKkGVq~BA|rzU*j3;}@1K;Fnq0!jAPW`( z1vzp;@yRSMNzF?wLeT=rCyWfD(9{Js2OXw*Xl3!HG$RLY7_nQVEe_WKh)b^z`&Z&9+J4l&ud@ z0xGhKQ%fKmMg}>Er7#;%m4X70IWZ-LkwFup44h;Ufdeia^ud0DL@wCL><}k}F)|1g zr=>83fWX+$;hu1|dF$CO<|7X;9SQs2CU-*bpEI6?Go2ChhE0j})~+}jvh9X7&E+LFk$$}V9M}=!HkiK!5kVj77UCGmJC)5jG%~N zP-I|YU}Ru`gfh!E26cq<*uWAXh1PK83Ji>3QE=pJW6(fXZOg#OV8Z|+%@`OMWTC2A zLB8Jr_cz2~2L?t4I|h5GJ3<(k7?>Ft8056KF=+aN)Nf-WEs2|92giFI2aiJFvzkqI5IFYIDwO+GXR63 Bh$R33 literal 0 HcmV?d00001 diff --git a/bin/Mots.class b/bin/Mots.class new file mode 100644 index 0000000000000000000000000000000000000000..90a75e026365ea6492b3e02329850706abe4ee93 GIT binary patch literal 1225 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 literal 0 HcmV?d00001 diff --git a/bin/Pendu.class b/bin/Pendu.class new file mode 100644 index 0000000000000000000000000000000000000000..4b259481131247f546af14eb5d10030ad2cf6e75 GIT binary patch literal 2729 zcmX^0Z`VEs1_pD6xm*lN4CX=%3=B4047Ln*>H4kK6cxGNo zemNt9s0Mb0yul@j$=SY%1yFodX9YWikwE}qw0}}oYH|r915>m!h=}51 z=w;{wC9{4;2IittaH2qtsG!okJW!gkW@L~8nNp!&T%HL^EFdzpBr_+oBombKxHI$0 z^0QNY5=%hIQXDzCz>NTb1?7ayy!4QwN^oX&0%t*JYPE*t zD6o1>4Ij8T$ZPtgC7C(;X{C9|C7Jno`k){x%}p%==WE{d)RN%T4S(BWcT2R8sAP>`w!w-xM3eafAp#T(sEX5i5V)NTfr$n6ZQKHA$D z*tB*rurn}hW8m1$z!|xnfy-BW8w0n_4hEiW47}Rg82An{@Xuu61F;S;@H1~?5YXAi zAZWLnK`2sNM|L}duocU029Zc@NtW#lqTwJnFoB({#lXeDz#z%M!63yT${@oa%OKC7 z!Jx!o#GuSz%b?ES#Gu9C$Dqp)$)Lxe%fP_E&A|AV!IqtYg`I(ufeTatLLI$_ff?** zAFXW+Vjx1?cQ=DXFz|LUE&LF|az!1vLAn~7p5nY@KBrE)jfmMJD zR4zb$V#L4rui6{85kIZ71{1KiOc~4=7#LU>7#V~ZRKSKYF$ggzGAJ`}F-&Ec#W0OQ klEH$3fkB3WnZc5QnZb&|n!$>}k%5uH3CxdVh+>Ea06TtB(Toz{0@Jz`(%FAj!bNz{$YKz{SA8z{J4K zAj!ak#OGy@WZ+}qhsz5vFflNJ+{M7iAi}`FAj`nWz{tSBz^b*KfpH@PC}2bx7#P^V zg5nIE3}Ou8P^BRZEDUT63=Ha0a~N2et>wE!7?|?;v%LhFUq}g5WTdofrte^2?J#3y u7G>SRz_teL9*|)|3@i)`4Dt+Y3 'A' //Attributs diff --git a/src/Pendu.java b/src/Pendu.java index dcdcddc..cfebb1d 100644 --- a/src/Pendu.java +++ b/src/Pendu.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; * Lie Fenetre (vue) et Partie (logique) via un handler. * Met à jour le dessin du pendu à chaque erreur. * - * @version 1.3 + * @version 1.4 * author Adrien * Date : 08-10-2025 * Licence : @@ -27,36 +27,54 @@ public class Pendu { Partie partie = new Partie(); - // Affichage initial du mot masqué (via Partie) - fenetre.getWordLabel().setText(partie.getMaskedWord()); + // Affichage initial du mot masqué (construit ici) + fenetre.getWordLabel().setText(buildMaskedWord(partie)); // Stage initial (0 erreur) if (fenetre.getDrawZone() instanceof Dessin) { ((Dessin) fenetre.getDrawZone()).setStage(0); } - // Handler : applique Partie puis met à jour l'UI (mot + dessin) - Consumer handler = new GameLetterHandler(fenetre, partie); + // On mémorise les essais initiaux pour calculer les erreurs = initialTries - remainingTry + final int initialTries = partie.getRemainingTry(); + + // Handler : applique Partie puis met à jour l'UI (mot + dessin + score) + Consumer handler = new GameLetterHandler(fenetre, partie, initialTries); // Branchement des événements clavier/bouton new Event(fenetre, handler); } + /** Construit la chaîne "_ _ A _ _" à partir de l'état de Partie (sans modifier Partie). */ + private static String buildMaskedWord(Partie partie) { + char[] word = partie.getSecretWord(); + boolean[] found = partie.getFoundLetters(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < word.length; i++) { + sb.append(found[i] ? word[i] : '_'); + if (i < word.length - 1) sb.append(' '); + } + return sb.toString(); + } + /** * Handler de lettres : * - applique Partie.isAlreadyEntries - * - met à jour le mot affiché (Partie#getMaskedWord) - * - calcule le stage = MAX_STAGE - remainingTry et met à jour le Dessin + * - met à jour le mot affiché + * - calcule errors = initialTries - remainingTry, puis stage = min(errors, Dessin.MAX_STAGE) + * - met à jour le score * - gère la fin de partie */ private static class GameLetterHandler implements Consumer { private final Fenetre fenetre; private final Partie partie; + private final int initialTries; // essais au démarrage (peut être 11 avec ta Partie) private final Dessin dessinPanel; - GameLetterHandler(Fenetre fenetre, Partie partie) { + GameLetterHandler(Fenetre fenetre, Partie partie, int initialTries) { this.fenetre = fenetre; this.partie = partie; + this.initialTries = initialTries; this.dessinPanel = (fenetre.getDrawZone() instanceof Dessin) ? (Dessin) fenetre.getDrawZone() : null; } @@ -66,20 +84,20 @@ public class Pendu { boolean alreadyPlayed = partie.isAlreadyEntries(ch); // Mise à jour du mot - fenetre.getWordLabel().setText(partie.getMaskedWord()); + fenetre.getWordLabel().setText(buildMaskedWord(partie)); - // Erreurs -> stage pour le dessin + // Erreurs -> stage pour le dessin (borné à MAX_STAGE) + int errors = Math.max(0, initialTries - partie.getRemainingTry()); if (dessinPanel != null) { - int stage = Dessin.MAX_STAGE - partie.getRemainingTry(); + int stage = Math.min(errors, Dessin.MAX_STAGE); dessinPanel.setStage(stage); } - // Mise à jour du score courant (erreurs + temps actuel) + // Mise à jour du score courant (si tu utilises Score + Chronometre) long elapsed = (fenetre.getChronometre() != null) ? fenetre.getChronometre().getElapsedMillis() : 0L; - int errors = Dessin.MAX_STAGE - partie.getRemainingTry(); - int score = Score.compute(errors, elapsed); if (fenetre.getScoreLabel() != null) { + int score = Score.compute(errors, elapsed); fenetre.getScoreLabel().setText("Score : " + score); } @@ -94,10 +112,10 @@ public class Pendu { if (fenetre.getChronometre() != null) { fenetre.getChronometre().stop(); } - // Score final recalculé (au cas où une seconde vient de passer) + // Score final (si Score/Chronometre présents) long finalElapsed = (fenetre.getChronometre() != null) ? fenetre.getChronometre().getElapsedMillis() : elapsed; - int finalErrors = Dessin.MAX_STAGE - partie.getRemainingTry(); + int finalErrors = Math.max(0, initialTries - partie.getRemainingTry()); int finalScore = Score.compute(finalErrors, finalElapsed); boolean win = !fenetre.getWordLabel().getText().contains("_"); @@ -105,7 +123,7 @@ public class Pendu { ? "Bravo ! Mot trouvé : " : "Perdu ! Le mot était : ") + String.valueOf(partie.getSecretWord()) - + "\nScore : " + finalScore; + + (fenetre.getScoreLabel() != null ? "\nScore : " + finalScore : ""); JOptionPane.showMessageDialog(fenetre.getWindow(), msg);