From 4f381050625f6fdddc3d1002a883e3a2ce228c99 Mon Sep 17 00:00:00 2001 From: Felix-Vimalaratnam Date: Wed, 8 Oct 2025 16:49:49 +0200 Subject: [PATCH] mise en place de hell le vrai difficile --- out/fr/iut/Projet/Action.class | Bin 5869 -> 5912 bytes out/fr/iut/Projet/Display.class | Bin 1973 -> 2060 bytes out/fr/iut/Projet/Random_word.class | Bin 4414 -> 4732 bytes src/fr/iut/Projet/Action.java | 5 +++- src/fr/iut/Projet/Display.java | 6 +++- src/fr/iut/Projet/Random_word.java | 45 ++++++++++++++++++++-------- 6 files changed, 41 insertions(+), 15 deletions(-) diff --git a/out/fr/iut/Projet/Action.class b/out/fr/iut/Projet/Action.class index a61f84ffa230552cbb0db56a04a59dd12c467d7b..2f0fd2881f30f6852cd2a836fa963915aaf38fc3 100644 GIT binary patch delta 1904 zcmaE>J43Jj)W2Q(7#JAL86&tD3K*tvGUPK%WoMYi#lXxk9mJWz#gNZ16GY4cac2uL zFfc6OV$fh%2;wf{V&G+1%+9bxh=Gw|IfyeIM63W2E7=)VaWM!%%v{aRu!f64lwmDM zWF05NdWH=k*2a1exrv=&Gswa%Tny3>Teq?^Y~x_q&cz_lumdExlbvA~h~5oSwnvD8 ziD5a&`hDyS`$29w03vp>GaO`RIK;)E!!U)5L7U+)2g4B%eUyXY7(2spE(RlpDeMd< zxEM@8PBLLQ$;n{CP=AV@;WQV61;ZH-?<|No2O`dcbWY)5xB#LrvNK%bV7Sc1;J`3l zh=Cd8e+Pzz91K^57+63YUWSVx2VCc1xB;SXf6s z;T;FVdk%&V91I^h7(Q_@d}e3(0y6F^2g5fGhVL847HPES>)>L80vW#Di|tx7@9!BEg+(d zp`4LHz$rh!q`0IgvA{RABqKkin4gW2L4cv3pPiABhmnbqnTL^uk(Gy`kfDf&k&Tg^ zkwGXcu`IDdzqmXzFJ0futtc@!m7k4~gM*Qihmnhsn}?Byk(Y;&kCC5|K{TyMKeMz% zKVb4N7Jic|hH9v8{lxMTeV5GK)V$)%{5&3pI!1mTMgc}ac19r{Mqx$~9!60{F&;*7 zM)t|Jtl}IJjFLPI#SA5rV_2m)>KLVX7^N9yCfBjb3(JD6l4F$QV3g-!C}k*NWDuL2 z$Rx%JGLm=lX;yu~Iz|OX1~%u^ypq%+9!5n*rODiE4z9|KDm;v;j4F%_{29>TrNyYt$iVLk(yx%Hkds z^wc7SoJ56`%(S%39!)VNC!o$$X z(9FYV%4o*J(8W;C!)VTE!Om#O!)V25J(-hTNzsN;iHFga(SnE34&+UHMl&8p2S#=t zMn@3g#Lzt1hh3GUj?tNik%^&yawWSFD~m^JPR`_&>{ezjjIN9fY-x$fnK`M946M2N zm8p4*44e@6fyG!dQgd>67V`q>$SK@lIq!!UuNpNFB3p?|U$uPI~L<_6x? zj4a`d462g__+%$<;NzGa!mlEm&rra?z`)MH1WHm23=B-5m<7|N3?-B2@=FUdfl@64 z0|O5OBSRfSJp&^{!{o#KE{u(nIRrG>n;4qGA{GL#7#k-m3wpA*Ktwhd3o0`*Hcp-{ z)X3fn5t=M7?8n$RIZs$!u8o0#fuDit4}%mtL&9GMMMidp1O_ICc7_hHX`6)&wHp~2 z7(hh;1H%pmVTPRyG7P&IIuRMrIWQ z2$+Ki1_lOZ1_lOs1_lOI1_lOg1_lO0p$rMXU=zxm zJXcf|>^L_DK?VkfcMOsY9~pEQ{xTRa{AUPYWMl|tWMT+oWMPP8WMzn9WM_zHRDL^Mg}GZ1_oBGZIk=NIKXaTV_;-pV3;Jp1WHYq>KJl2GB7YOGJwJoqO?bV z36u)4D9uAxYRSONFbSO0CNl;yFfed2Ff#fxhB5{)NHWY}V9;aGVPIvL%fQSqk6}K; YJcgwVj10@bTQ{>aY~f(o%Echhuni=*otA zxEM@8PBLLQ&dFfHP=A7*;UpJ>1;Z&2?=*-w10v3XbWY-6I0vH7vol=aV7SP|;J`3d zh=Cd8e+P#791NF*7+63YUWW4^2VCV~xCWxHgF@>D7efNWO^|bMfw;FptUDmqU68~* zE{6LI4>%Ye)^jnWGCTr#?K()sV^DBB0kNKfSkFMlJqHEm3lK4ho#7=HLoCB95b>Iw z;SC4FTMmYI91QO{7(TEwd<2>GiG$%Y2g4T*hOZ#YzJZAEAmRr*!%udGUyKZ#>4~|i zZbgZ?sf-LFKAV}CE-^Cxo_v+Lt-gk#k%ys*p_-9FGOb8Iv$RA%peR2pwM0KCF)t-Q zH@-Z-D20cihM|^+p^TxNhoJ$az6nH>FqASf2sq{EmlT&2B^LOmmSp6o6!Wt&{1IU2 zmpm*~4>=BDNqXXfYeFw`(|^Dy!- z^0G7X@i6i;3h*!rG79l93S-*jlbDp6!^0@TD9Xc7$WX+{zzcE+*gUuVyb?wRR>z{u z#2k>3VmyrEj1r6tQXmx-u28oIgIw&KpI2Oxm{(HF!zc-IrWB(n2ct9(LovuiF|c~5 za<7ooiW0ZX)ErRoF>+46$f_?`!zjbZz~-EqSCU%9!zjxrH(8L)!Bw77frn9%QGtMg|5RMjcSRwKBBvFzPbu@i6K$8t^c*Gc@ur8ZsL3Fmy1~@-P}R zny@pP@-Uh)nos6uS5mZKl;dHvWHjMnv;uk1n$d`d(T0(khtU>9*fBIt4q{j3sA04R zMQ`uqdUm79JJ>Ds9T*)M8Q9VilQVNt85vk}^D9&H7#TQIGSkvBL1H`%U7$qM2_l*q z8Yio9IB_^JI&(4PGP+DI;F!(q%ILP4kF%4BBbU(~Bp%Lr()H!w7UMSKKaG1gBu7xZLr zf{1Kx7gT0ste?DEsFA%HA~e}p*pIP(a+9#STnhsO13v@P9|kFQhJ?Qiij3?G2@FgO ztqg5o(~b)pYS%L`Fo22<28JCB!VEhZWEgfa$T93;0BL1mU=rqHU;;%ASiQ1{qas56 zVFo^iBMgcRM;Y`PjxjKSq7AI7Rm7gLe)3Tfd10s-q9A{FLLK*A#IPP=#(f5MhDQwi z438P)8J;pQfg%HB1_J}ba|TWZRt5%!8n(R*36ab~iNTR9LP^1qtU}4bK3ZECxP?-L zT$$JywY8azb}*#b%FJd6mRZFB26|u;6v_+?G7Jn1N(>AP8baxQ%Nc}(GW?cvG4Kdw z`YmT*6UvypUsM(B96JVn1_p+A3?d948Ppm6GH5gWXYgQTWbkHWV(?>RVF+YoWe8zp zX9#EHV2EPmVu)qrXGmcbV#s9_W~gQq1qYWX1KVE)4|axbMpjnVKMYLl3<1~+F9QPu7Xu@sH)9~94}&DbECvP!T^$BihS?0v409OfGR$FE W%)rR71WfLRie6%v17%%dm;(UEX^$=d diff --git a/out/fr/iut/Projet/Display.class b/out/fr/iut/Projet/Display.class index 68189817eb902b6f8f728fd7de91cee228855014..8c59ebfa93b4e3d7eb823b07c9d725ae648be2eb 100644 GIT binary patch delta 922 zcmdnW-y=|e>ff$?3=9nB3=LciIt&)<43-=WR$L5B4AvmR21MAhGuVM>doBic1_uz! zk)6Sbi-DWLnw`O!#h!tI0mN}(XK>|UaN}YSU~mWVJ=hsMIT*aS7(^JXIT*Y-7<@Pw zd_g=Hb_PE#25AO=E(Q^Mh5(RIAc*i_X9(h82XZBr~M&Fr+f1F*1l| zC6*;t=ogn~=B4X97N^b^ZV^j$J@Q}c>5^YcKu(|8yP8H#uqiW!O~TQKQa z=`xh?FqATsF*2~`=2xcXF*0zbWTvHMCTHfPGBU7aq~_$XGnDf%R4`QXFjO&A^Dxvf z)bcRYG1PCK$#jTGSerqI0R)&B7#VaK^cWZ!^e5-BiYXc}Ffgz&FoMIHlfjU|2qeS6 zz!b>9#=yhCz}Pf-DQjl^ZU&J^A<69wVpeSIdl^I`nRSCBStMD4BUvR`gCp4_*@CUu zCE2YwBsun(aWb26iE@c@E@JSO9qPQrymA}aJ6?ZsBdG?2-nsDlLAIN7&O5wT`(yi0^>`vpbN0V1k|BgB-y|sFcVp} zF=%aMU|?Wk0EJ>7gYsl%cI|ovh7ty4hF%60hUE;Z4C@%w81^%$GhAfQV0gr!!tjDY zhv6H8E+Z?09-|0@KBF>&5u-MPF{2@a38OWGDWfBU8KXCYIb#rm1!D|@C1Wy!6=N=g zHDd{b4Py<1J!2z-1A{RG1A`_5(|?AU4BYGtChQDM>>!2+JA(*2gEWLPWoIyDWMp9Y O!QjWh$Y2I`r8xiq|E9?R delta 843 zcmeAX*vemj>ff$?3=9nB3^iN~S`23F4CWjR7F-NW43;3m3Pf15GuVJ=TP_B620IYT zo}Iygi-DWLlAXbk#h!tI0mN})XK?0VaN%MQU~mQT-Pjr2IT$>+7(^H>IT$=S7`#AC zCw2yJE(R$E9}vfv%aTEa!4JfAV`uQ^U- z&}K;GVMt?0pFE9GM>T^XlaYZpE3qt5Ke4<--z`6{gpq;Ou_!Y!2c$BKhasCGXYzAK z)5*$AqP*G+Njwa>40${Z`3!lJU77TZwHXR{7z!DR7#Ub|^D9&H7#TQIGSkvBlQVNt z*%^v?7)lsQc^JwV%6S+n7%F)fsu-#_uVp&K}+7&sa984MswnfMsk7`Pc27=tG7WX-H++shyl z$*db3$s)-T9LXxl8f?WT$!5ha$-d8wgV~Hzlv9*r5relRyC|oT6_+HJ5Z^WiNlC8V z3{sJTj5-1-+Zm*{G04CL1R17*MPxxD0+B+3%mOOg8HBbm$hB}XF8{wpcQ=E4q_&X4 zb_T_53`&wL^$@-?l+Oy`szA8fI~Y{AF{p)W>wrlCqa6(DV3sbJ6cB;&C0Wn~Siu4? z{VdxUG(dsE1P+us26+Ys1|bG624RND0qjckN({9O$_&#PR2b$ls4}c)P-8gApw4iK zL7CwOgEqr61|5d447!Xg3J(& z4AzW+3^ojg3=9lv3{3wSIvKdw8I0H&nAjP(*%?G&$e5kMn30iz;Rk~s10x562?GNI H6N4!LLFS9% diff --git a/out/fr/iut/Projet/Random_word.class b/out/fr/iut/Projet/Random_word.class index b16ba007b6c7ef59a12e3c22e30f987bac18bacc..5996aa7d06c0393a9fd316359bfa66fec5dbf41d 100644 GIT binary patch delta 2649 zcmdm|^hc%s)W2Q(7#JAL8D4WSI5DJhFr;xY1T&;_Fl2Bs$TMWJGh}fvWOFgFG2{p_ zFfbHwGRQL&axfHu=wgt{5)i8t#42NFDCc4jU`PdtRDg&|kZ=`pa#9s?^HWk4JW_LV6cl+F{22Th83dg2^Gk|Lilh7cW*%&r)Fl^>w*ut=thryY_WwJf9p1lu)FAu{uhBzJuR|Yp8hV2YH7#Re? zZYnLw%+dEqEY1i{E#YBsXYk-*@CFe(8KQU?c7b&4X4o@%FY_F>y*v#281_$&XR$Ru zz{7A5WW8isk$z@riGDy)epYIUeo$gwN`7v9d45p}JHsI!hQka;co>c{?B`%O269j6 z;b^8AbW!iAkVOB0~ZP!!1Sz z9;eLIJcX?M(!(ni6ge1fb1>WiIp*%<->fnm_ZaT;Fg#$0nk>)eA}EkrSelqq?3tdI zUzF;cSe!cfBBMB06c@uohDVGH%#4%!+2xolG$wO%$xb$5l9FU(V9QC(OE1Y_WME6q zNGx(JVPs&@@YHmk+{^YImFy|-Oa!jDOAtCoq=P&mX7W&22KWstqfet8F;j`w6`&^Ze`%o+QPsE zQ^*ZgC%~~4B)^4$Ya0Xa9@ec4e9X2oAZ6Paco#8ff><)!82AMg7BKK>ZDHV(5l{$S z&cF>}#)q~rF)sgqNozNQK;(7?!L1BJTJ>M#~q#3jslo@mwbQ$y+EEo(JtQia$To_CkyctXxLK!R=q8Th1G8n8FN*Syfniy;t zdKv5(rZQMD%w}+8SjOPQu#v%;A&7y2L4|?yKZ7y@3p;~6J3}zL1w$}9Lofpa=T8P+ z4uL-mB8*DxzrfKE!Vn4xRHje{R#4zD8f$N35bbcMvhTu~MfmtR*%VjF|lWK|y3dP(2q3{pZ;zRMXzgrt3!Gw^LC$Trpkl?kn?W^lH-lQF?sf+C z?F<@LY|LgHl5E=;G$XCpk1?o8vTtM1vSJ5O+Oz(@Y~f&(WEJJu#-KCn{~bwot9q8@ z|F43S>n>-Iv|@*{c&s=i*(Eu)G3ZOO?_bWqWyJ=PFqC9D#=tGfvW-DxIRgvh1_ow^ z(+qzYSs3&f*%-MQ`55#Vb}>pZ$}$)*FfoAQs*FLFfq}uFp@Jchp_(Cxp^hPhp^+h! zp@kuwp`9Uup^G7^o?#M0G{aPec!oI)2@DGu5*gMoBr&XGNM+c_kjAi!A%o#GLl(n1 zhHQqL3^@!B7;+h2Fyt}3W+-6z%23GghoO{_g&~7cilLlQmZ6kUo}r9Ug`pB0nKcX| z{}>Dy*cpNu`S`eHSy@^CGjK65L*o_{uYVXM*y|a>{xirkaKeSz8Nxtu&!EiCpvu6= z!0?kn*PWd~?>_@40|!<`>HNE z7#P+`?_e;p(b~cwB)x;dcqfAi6GQzh24Sr&48m}MnG9?~rW-(+MS2^9*=z=HgmQBx zhH&I81;)9IG1!N}XmVuEW2JQ$221ZcaGjM>SW*dVe$V^6Xl4b*o zZ)9L(h-HX_IvJ#w5mZovLUIiQ0|Tq-)fn$oDWjO;2 zGe|2W<3McL4R$db12Z491IRszaAOh~m>5_=#ULnfCbtNv)q}E|7+CB8g9yVx25E*v z46+Od7?c@~f=%ILVE)Iz#m*4T$SCxKft7)gAqnnVWcPESd-W6pGea^s9i%WkV_;z5 sVqj!=!tjFODT5?KE&~ID0s|{U9)mO^Lq0m|OxTmx0OU0Nj)&hyVZp delta 2393 zcmeyPvQMf0)W2Q(7#JAL8J=)4*fS(?F-S8cb23OXq_8ujaxkQEF|aVCgZLR-3;_(8 zAXXL^LpDPWJ3}rP12;nwNF)zLs-vAPA6k=dtXk}+;<6@9!NMdJbXJ_c(Vo+k}{3DPhN#F-6Z z%>nstt`GwwLn{Zvd?5xVhE{nY24;pu>zn_vCLuH#KW+eVawzbEVgW0c^I}a_)O+zmDAeJ!?1&4ClA9e zhAoT?0#5n)CB-F0i3Pr?B^miC#r$jxyEz#4@G$IU2%2oe>Q(Q}u#bnqn_)i>!vT;@ z2SLOkhFBhk!wg4w7>+WmWMmKqJ1{3PFI_(*qbR>TF$v^~V+_Y(QknVsp8l>C$*Bb; znfZA<3?~>?vNN3IVOYm-iihDe!x?slvpfvv7&bC8sE6g37Aqu{rB*4V9A24qc)?^= zHc9>SAgeAgY~*3M$Z&~=A&w!IgW)nG1CLW?YMw$?e(B+r3W^*IS2!51g4}&=vImvn0bg zKd-nXF|VX}b0CKhBOhCGMq-g;2_plGhNq_UHND7#ISzwlgqlX=!g`VA{&SthI%K`8WgbZU&Y}A=d2- zZ2PqYIJPpdYiVs^sAt~Bz_EvQD+8z276wj%_#F&fTDuvzBeyf~Y-Qj@F!?ru-QmZ; zz@Wvz#lXOz%D}>)#=y&T%V5Z$$6&>v&)~{nz!1P-$l%Ywz`)PI z_@6+{Pd@ zlR<^qjAc24oUV{Cm@CQx;_~YXiELvKnjFikS}*FmoIy%R%y&71h>*DNat6Ll3=%?; z+rVN%(mLB1Wc+lGGYD>Ckk#46AjiP4jX{cW1EUqoZU*_t?FMe1&6 zP~Og621zS+D2vC6Ly}#RV;h6EB>Vp53|v-hAPHSbmSYUuk}TU8_?I)VFm7OA zW;o68hmnOri;<0yn~{$}i(wa|6r(JI4g(VdD5%RAWEmJ3Y#AyT>=~*V92n{toERDz zoEcgeTp8LK+!(qTJn9)HF?cdeW$ zoMVV&xXBR3@PHwj;RQns!)t~(hOZ3q41XAs8Ce*@7^N6e8D$xg8RZ#L7*!b3!SPnZ zAo7pFfPtMMfRT@nTb7lT^*;j_12ZHV!7=%VL4v)WA^1OoJOd|On4KY*ogsjoL7tsK zk%5tc;U|NxJ3E8ce+Etl4y=mU8MGJ}*%`DreljpQu`}qf@i>4?XJiOr2!*5)Mrj6S z24)5ZhIP_A81!tkwlMHY?_kj1$zZ_5P(O=7SZfOdA6#H21DlZH22hfh-o{`wo535Q z+?a_WoY__eB)5%$V-W+GC9{peM0x=O7byM9NQbsCF)sgqUuzqK=}ZP*kjh;QW(*7) zgv>!kLTv$=qZPS@ft@8~Ydr(I))of#xiG~R3=ANZ?7J8&85lNzQ#&Xo-53NJ7#NBe zSQ$zgR2j+`G#IKFj2WsK92x2u{21yPq8J(&5*g|k(ivJ9@)%kfDj3=ssu{W&IvIKx zCNuOg%wp(gSi&#~95MV19I8xz7^E0we=)GC3NUFfFfxQOghRrLp^SlvfsKKI!E!f) zRpfRCYafuuCNC6_sJ9VN*v4QJ-onDT{Qpz!Z49>C7}O9hF)-W(IAgf)%z{n885DWE+1=M5_kkWY!T##5{XIaj`!VJ<0 z$s`b4R)QVO#=y+S>;Q649Nd&d1||kpkcFz?kk})rRu761F|gn|1`&q!4AKl67-SjN zF(@-^1{=f2!2FMa3+!K^9}KJvj12K`?;^XO8Qrft7?>Fnz>%KFaG!yJfs28W;V#2N jhI3{4CS3{ng%49yIpj0`Od%?ykT^T6Z+Fu4!_VN2Z} diff --git a/src/fr/iut/Projet/Action.java b/src/fr/iut/Projet/Action.java index 53d28d7..bdcfb91 100644 --- a/src/fr/iut/Projet/Action.java +++ b/src/fr/iut/Projet/Action.java @@ -235,7 +235,7 @@ public class Action { * et relance une partie avec cette difficulté en utilisant PlayButtonListener. */ private void showDifficultyDialog() { - String[] options = {"Facile", "Moyen", "Difficile"}; + String[] options = {"Facile", "Moyen", "Difficile", "Hell"}; // Boîte de dialogue avec trois options int choice = JOptionPane.showOptionDialog( @@ -262,6 +262,9 @@ public class Action { case 2: newDifficulty = "difficile"; break; + case 3: + newDifficulty = "hell"; + break; default: newDifficulty = "moyen"; break; diff --git a/src/fr/iut/Projet/Display.java b/src/fr/iut/Projet/Display.java index 4ec26ba..829450d 100644 --- a/src/fr/iut/Projet/Display.java +++ b/src/fr/iut/Projet/Display.java @@ -29,9 +29,10 @@ public class Display { JButton easyButton = new JButton("Facile"); JButton mediumButton = new JButton("Moyen"); JButton hardButton = new JButton("Difficile"); + JButton hellButton = new JButton("Hell"); // Mise en forme des boutons - JButton[] buttons = { easyButton, mediumButton, hardButton }; + JButton[] buttons = { easyButton, mediumButton, hardButton, hellButton}; for (JButton button : buttons) { button.setAlignmentX(Component.CENTER_ALIGNMENT); button.setPreferredSize(new Dimension(300, 100)); @@ -43,6 +44,7 @@ public class Display { easyButton.addActionListener(new PlayButtonListener(frame, "facile")); mediumButton.addActionListener(new PlayButtonListener(frame, "moyen")); hardButton.addActionListener(new PlayButtonListener(frame, "difficile")); + hellButton.addActionListener(new PlayButtonListener(frame, "hell")); // Ajout des composants à la fenêtre frame.add(Box.createVerticalGlue()); @@ -53,6 +55,8 @@ public class Display { frame.add(mediumButton); frame.add(Box.createVerticalStrut(20)); frame.add(hardButton); + frame.add(Box.createVerticalStrut(20)); + frame.add(hellButton); frame.add(Box.createVerticalGlue()); // Affichage de la fenêtre diff --git a/src/fr/iut/Projet/Random_word.java b/src/fr/iut/Projet/Random_word.java index eab0ccb..f864803 100644 --- a/src/fr/iut/Projet/Random_word.java +++ b/src/fr/iut/Projet/Random_word.java @@ -6,16 +6,17 @@ import java.util.*; /** * Classe gérant la logique du jeu du pendu. * - * Cette classe choisit un mot aléatoire selon la difficulté, - * garde en mémoire le mot secret, les lettres devinées, - * les lettres incorrectes, et le nombre de vies restantes. + * Cette classe sélectionne un mot (ou une combinaison de mots) aléatoire + * selon la difficulté, conserve l'état du jeu (mot secret, lettres devinées, + * lettres incorrectes, nombre de vies) et fournit des méthodes pour deviner + * des lettres et vérifier l'état du jeu. */ public class Random_word { /** Mot secret que le joueur doit deviner */ private String secretWord; - /** Tableau représentant le mot caché avec les lettres découvertes */ + /** Tableau représentant le mot caché avec les lettres découvertes et espaces */ private char[] hiddenWord; /** Lettres correctement devinées par le joueur */ @@ -31,19 +32,37 @@ public class Random_word { * Constructeur : sélectionne un mot aléatoire selon la difficulté * et initialise les structures du jeu. * - * @param difficulty Niveau de difficulté ("facile", "moyen", "difficile") + * @param difficulty Niveau de difficulté ("facile", "moyen", "difficile", "hell") * @throws RuntimeException si aucun mot n'a pu être choisi */ public Random_word(String difficulty) { - this.secretWord = getRandomWord(difficulty); + if (difficulty.equalsIgnoreCase("hell")) { + // En mode Hell, on choisit deux mots faciles et on les concatène avec un espace + String firstWord = getRandomWord("facile"); + String secondWord = getRandomWord("facile"); + + if (firstWord == null || secondWord == null) { + throw new RuntimeException("Impossible de choisir deux mots pour le mode Hell !"); + } + + this.secretWord = firstWord + " " + secondWord; + } else { + // Pour les autres difficultés, on choisit un seul mot correspondant + this.secretWord = getRandomWord(difficulty); + } if (this.secretWord == null) { throw new RuntimeException("Impossible de choisir un mot aléatoire !"); } - this.lives = 8; // nombre de vies par défaut + this.lives = 8; // nombre de vies par défaut this.hiddenWord = new char[secretWord.length()]; - Arrays.fill(this.hiddenWord, '_'); // initialise le mot caché avec des underscores + + // Initialise le mot caché : underscore pour les lettres, espace conservé + for (int i = 0; i < secretWord.length(); i++) { + hiddenWord[i] = (secretWord.charAt(i) == ' ') ? ' ' : '_'; + } + this.lettersGuessed = new HashSet<>(); this.incorrectLetters = new HashSet<>(); } @@ -90,7 +109,7 @@ public class Random_word { line = line.trim(); if (!line.isEmpty()) { count++; - // Choix aléatoire d'une ligne avec la méthode de Reservoir Sampling + // Choix aléatoire d'une ligne avec Reservoir Sampling if (random.nextInt(count) == 0) { randomWord = line; } @@ -105,10 +124,10 @@ public class Random_word { /** * Tente une lettre proposée par le joueur. - * Met à jour l'état du jeu (mot caché, lettres incorrectes, vies). + * Met à jour l'état du jeu (mot caché, lettres incorrectes, vies restantes). * * @param letter lettre proposée - * @return message d'information pour le joueur + * @return message d'information pour le joueur (succès, erreur ou fin de partie) */ public String guessLetter(char letter) { letter = Character.toLowerCase(letter); @@ -118,11 +137,11 @@ public class Random_word { return "Vous avez déjà essayé cette lettre !"; } - // Si la lettre est dans le mot secret + // Lettre correcte if (secretWord.indexOf(letter) >= 0) { lettersGuessed.add(letter); - // Remplace les underscores correspondants par la lettre devinée + // Remplace les underscores par la lettre devinée for (int i = 0; i < secretWord.length(); i++) { if (secretWord.charAt(i) == letter) { hiddenWord[i] = letter;