From 0fdd38bdae2840e5eb4d3bd7260910f16a5231fc Mon Sep 17 00:00:00 2001 From: Vincent <xefal77@gmail.com> Date: Sun, 27 Oct 2024 18:31:33 +0100 Subject: [PATCH] Pair Programming ( merci bamba ) CardLayout --- AllScore.java | 2 +- SendScore.java | 4 +- bin/controller/AllScore.class | Bin 0 -> 2199 bytes bin/controller/GameController.class | Bin 6646 -> 6225 bytes bin/controller/GameEndListener.class | Bin 0 -> 149 bytes bin/controller/MenuController.class | Bin 567 -> 550 bytes bin/controller/ResListener.class | Bin 1133 -> 0 bytes bin/controller/SendScore.class | Bin 0 -> 1683 bytes bin/main/Main.class | Bin 2260 -> 1867 bytes bin/model/MenuModel.class | Bin 202 -> 0 bytes bin/view/App.class | Bin 604 -> 1428 bytes bin/view/GameView.class | Bin 3477 -> 4639 bytes bin/view/MenuView.class | Bin 6798 -> 6717 bytes bin/view/ScoreView$1.class | Bin 0 -> 784 bytes bin/view/ScoreView.class | Bin 0 -> 3999 bytes src/main/Main.java | 22 +--- src/main/java/controller/AllScore.java | 39 +++++++ src/main/java/controller/GameController.java | 97 +++++++++--------- src/main/java/controller/GameEndListener.java | 5 + src/main/java/controller/MenuController.java | 15 --- src/main/java/controller/SendScore.java | 30 ++++++ src/main/java/model/MenuModel.java | 10 -- src/main/java/view/App.java | 34 ++++-- src/main/java/view/GameView.java | 57 ++++++---- src/main/java/view/MenuView.java | 48 +++------ src/main/java/view/ScoreView.java | 90 ++++++++++++++++ 26 files changed, 292 insertions(+), 161 deletions(-) create mode 100644 bin/controller/AllScore.class create mode 100644 bin/controller/GameEndListener.class delete mode 100644 bin/controller/ResListener.class create mode 100644 bin/controller/SendScore.class delete mode 100644 bin/model/MenuModel.class create mode 100644 bin/view/ScoreView$1.class create mode 100644 bin/view/ScoreView.class create mode 100644 src/main/java/controller/AllScore.java create mode 100644 src/main/java/controller/GameEndListener.java delete mode 100644 src/main/java/controller/MenuController.java create mode 100644 src/main/java/controller/SendScore.java delete mode 100644 src/main/java/model/MenuModel.java create mode 100644 src/main/java/view/ScoreView.java diff --git a/AllScore.java b/AllScore.java index 52374c5..b0d1af5 100644 --- a/AllScore.java +++ b/AllScore.java @@ -21,7 +21,7 @@ public class AllScore { "jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu", "akagundu", "dersim62Lodek"); try{ - PreparedStatement pst = cnx.prepareStatement("SELECT score from score where id_serie=?;"); + PreparedStatement pst = cnx.prepareStatement("SELECT Score from score where id_serie=?;"); pst.setInt(1, idSerie); ResultSet rs = pst.executeQuery(); while(rs.next()) { diff --git a/SendScore.java b/SendScore.java index 8444015..e5deb18 100644 --- a/SendScore.java +++ b/SendScore.java @@ -1,9 +1,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; public class SendScore { public void insertscore(int idSerie,int score) { @@ -18,7 +16,7 @@ public class SendScore { "jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu", "akagundu", "dersim62Lodek"); try{ - PreparedStatement pst = cnx.prepareStatement("INSERT INTO score (id_serie, score) VALUES (?, ?);"); + PreparedStatement pst = cnx.prepareStatement("INSERT INTO Score (id_serie, score) VALUES (?, ?);"); pst.setInt(1, idSerie); pst.setInt(2, score); pst.executeUpdate(); diff --git a/bin/controller/AllScore.class b/bin/controller/AllScore.class new file mode 100644 index 0000000000000000000000000000000000000000..0ec0af21afeaac45d4325bf54a2bba5907b7ab82 GIT binary patch literal 2199 zcmZ`)-*XdH6#h0%vT3@dC8e}mXjuUz{gI@gf~NeiO;ZUZDKwP|D!5H<!?v5<aCf(q z8E5p}e?VV+a)!Ytf6NrBGvZ7~9(2ZMXY^5L9RCAez;ick8lX1Qy?f6+=lkyY&bfDg zdGh^_08Zg{6fa?1#_=cu7?0pY6tChn8LzkFBu+)}Mig%%9i_=c1g9f76T#Ui&f%>H zCOa^UsSb=FBOcQo7)3UM88N;c#d+ie<^?gmC?g+*ih^*wDB{Rcj9@m3L0pn?S;m}% z@M*&`+_Mte;=@-Y1T%JpN$AQO7AtzSMaJj#MUyPCDsxL^n=@y|<|W1r=1Ay|=Z5pk z`l_DtT*FLFa<1RW8;(06p|j-b<&}b7_v2-hWX#KWM?!nas9L(~aRN>JPyFcysHt1k zRL*i)mGOzQ1R5>b9xt;QL+q$?(lq@YCB+UD9L5m|J-h5iLZ8j6$(qg$y|S2Gt}K?5 z)7)5PT*egz3wT$8=EwPj8B=$hqV3Muo>j@Nm08_2Y)i&f1=sK%xn?<M9@o-Z-7syJ zX&0uaGMZ&un#*l(b@QH#_Z57A>k4k*LrPK*rnlJBsZ`~*&R3a}G(0!4MB3_Ja*3z( z6}?J)o`lHGYiEUV$Eck=k*BJx$e=72QI?P`W%Jq0yyl34Xft!O1<hANTR5Mc%W6jD zh9fF;=A1S=H=Ui+rmk+ePG?IQEuSmo=C$MF3Mya<mQYo26NZ9itVjs?pbAXXWLOGp z)D_$USK#aj><cx2liRmNcPMZ{8}IcsbZ(ic(&c<pI0+}W1gkKuY+DvvBRMtO(<;Z< z+UC77wGPc`(bP50Zh4zuk*0*8VAUt27!uYr8Bc9jTtfFwy=E7eS=rq#y`awsma>4A zFwor8CC=(PXBBEpm(`d>A+hG-9CJL=Eip27?LhmjAVFTTc~P%X&%GRP>CBSL4XZk_ zbpm#JhZ?nId!;)L(b4&0oRdb4c*9OzqF|RGm|mlRM&CYbCgQqqGAWJT-H63`B{gZ! zK{`k@+uzKm(ccB#(&_BbS)tS0s!CxOxEC{f(Xy56vm%Rp>kV;Rv>o4tq9y!=Y7k1; zVJ;na>cM!<&qrZvjQWFJ_87lI>BU<BniZqKAT<?*(G_-$P$*X)WmnB|687#CnEb@$ zLQ1ddrpIQN1j+WD_RRG|=z68{Tp=2*Hz8O<Wz%-VtwdfWuTFY64kQ2mRvDTnW<pe} z%df6~PtJ3_%;=+_(ZBc$Koa*EJ&)3CkVc8d(8zsA-_Q#+B0a;tF^YD)f@2gyt^o~g zkZJAT9}u{DA8q+q@Bu;#chOz=7IG}Ij&?FcV;wOi*7*Q?3S+UZ4Ri-kOauouu(u6~ z4a6j*gKBUCJrX`g->4dl?b|?a01vQ#9eoRTpZ=`|A7Mne^h>x4Egceu{Y`_C4yz$G zyp91i^f2)V#|ZU+@El49Y1+FzRYaf~5`MvlV~=ojYy$^{-+>~{_HEBPC`t{ISK{Gz zCPS3T*g6i4evJtI_FymRF-bSBMV~wmAK_yfkK<E(M&lRwk}y@o@g07m@n`&s-)J1d z@A!k{4fuLqM;|Gt5Ly@E^$=n=V)PuK=MZ`+x}OkL`Zf;`(*az>LE;-C#sT6vL`?mJ zuMtBp;T|Dm4S!NW|Dsa<Lkw|3{{*q81R0QIQDYfl<p~bU7?v?2V|1`6Lw!oLVX@vc tlTrApk;e$+eUCi|wR$|i+=*awxv?fchBPH(P{A1OB7g+-PSSr%{Rc$sB)$Lu literal 0 HcmV?d00001 diff --git a/bin/controller/GameController.class b/bin/controller/GameController.class index e1fb7aea9d15bd6dcae3a6dcd4e22008de983c96..1c15dd9476d6c31147ca49bbc5bfe39c70de5b8c 100644 GIT binary patch literal 6225 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 literal 6646 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 Wcj@+hy8V!DKc?G9b^8_Fe&;{*$mA3N diff --git a/bin/controller/GameEndListener.class b/bin/controller/GameEndListener.class new file mode 100644 index 0000000000000000000000000000000000000000..ff8be4969090a78f251f02b73c29ec45528f2672 GIT binary patch literal 149 zcmX^0Z`VEs1_pBmPId-%b_Nbc2G0CE_r%;(*Sr))1{MuZ%`ip=uHgLAqU2P!%$!t4 z1`(*NPiApRYF=uQURGjRA|r!Ta(-S(QGQNNYLPyg3PuJ2kQ)7*#JqHU|D>$c<PtVU c21W)Zpv4Rfj4X@{%nU3b76U7gWMW_g00Yb<R{#J2 literal 0 HcmV?d00001 diff --git a/bin/controller/MenuController.class b/bin/controller/MenuController.class index faf78fb7440c8d5d289d6844ae3d8ce046ac8f38..aaea4ff72a094bee9b219700721b4b310d9385d8 100644 GIT binary patch delta 81 zcmdnavW#VdIg_r&Mz2+j&ddx93=&$~85p&<F);0BV2<3*z_N{jRa<8p1KUQR93uk{ ckQ8EI0g~)Mk`u`0W)KI8GBWT2#h4iQ0FBHGGXMYp delta 98 zcmZ3+vYlmuxv-svPi}rnYL32dYF?=?h-JOeauuU93j+g#gw}QjMxAX8OuHGFBeyfK rY-3>6(cQ+twh<`D$iM?6g&08UIDjM<kj={=&cFwh;RT8@G4KHZzupm> diff --git a/bin/controller/ResListener.class b/bin/controller/ResListener.class deleted file mode 100644 index aaa8657606ba8c720d19542ba2dd33ad9411b709..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmbVMYflqF6g|VE3(G<)A}<9j7A>eOz8@tfNJKI95sDZ;PTK(owlmG{w8+o$ix5ow z0mk2Cyt7-<qJ$5AnLBfP&pC6?o$k-y$3Fl(!m^8gj11F$!o?&mySRcW7t@$=aMeW$ zBM!0-W*uB(NG(ex%`=AX{QMR}&#JBphICOX@wQPbi*S>d1DoL$Bei-j!fhSaM3rGC zU)<$Q?(==)i>6S<Ux`az*nPp0jR(9|uJYVp(A*M(ThfiNBG#nk&TNRNC?g}32p27< zhXHt$f3CHOOvvkRg!!ziQ96ZO1|Eeu57%+SLEghW798C4a0|B`EPC)Qbg(JKzW<Wf z#1?HBMk`vGPzQks{SGzKh<gaQ+VS6&cSXf8Or6=*$pu|3;f{+w+$GP#h9d6#eBwmR zve8h=T2^3~v_xP0XkQY0$*v!a45X1FVi=IBsrN*Y8xb;$wah$CVNL9dJ6WmM39=*1 zx{3@}6>{xF_C(<IT1f4Z>~N=Sl4WqJGOFuHIJoEGJ|26xV11fxx1Zd{FUB(?!}&JN zO@{}hTWg;jJf%ld)OxQ$H}cjM&1^N`QDl4i)!9XhFB#n{uBw5EatW}|;aACoWK3t~ z6mavPF8=SwMDl!W=ipkht2_uw(ujfs@^bDUf6nTMVfy?!Wa+{5gWf&;E4wMu`=)h} zPE!;a#omQOu&=aX7@{>5CtX_8$k1v_eTrQa)5kU(q5B9u-_Y9z4G}k}w2vr;kjc1q z$SrU-h64THk@|E9=VKd|XblqBel)spkv<}zt1>*m6FkHOF45T%jZ)1R#xeE>ojD|{ diff --git a/bin/controller/SendScore.class b/bin/controller/SendScore.class new file mode 100644 index 0000000000000000000000000000000000000000..a32bbec40df70eb046fbb7104f38ead1db6da814 GIT binary patch literal 1683 zcmZux&sQ5&6#gDeG9gU(5eSfi?NqG<BuPc38n9S?X=(_x37~8|L*@|&l9}|)48?^j zSDxb^phuUU)8ei!D!8x<&gsJc$c^>B0g`aaEZ&=U-~GOO@AvL||NQsY-vI7lJBlQ3 zMet4(<4CEP=)xr4jbJK@G%`_IWFxp8!Fv%*NAW&Bh~UF++{8>b-oza_d?bgDRpg?G zV^;3bVlIMDqDbJbig^{EGKA+W+w$%*bfzXY8I(oG<P5z9%jQMDzQaY?*r}1F+p=9Q zJh$QqT7^>iymXJ1JfpI|YBT~b757vuFhom^FDiV+lE9u4x6P7-W%i5%L&G(UG7LMS znyDMYGR&RKp1D)WED7s?3l)nRmaxpAOYdyWu&dd{n&G-d$6IlH+gv`Z@P=nOwu%)E zpW$<IT^54-LeJ?9tLAuIzrVDwsN0UMd&2P#PLEXNHQdJ+8VXotNXvk^^XR#3)_iP; z1MX%l-%IaOwT7SB6<K57s8T$iA=3JdnOwM5eP+5qI_;|{YFNWM!*sq_T7Fp8^TqO- z9#pHREc0uU%;HmepxT7Kd9SdsT+&nXQ~LbGtcC}8sG)=#8p_zvuqlNZXq8?5MmUe9 z`Wm+IB|{?Eav#;Qr3Zzk3=A{p<(piuIJV6XNgUnrb#t5_o*q?vDV9!~HA5Htk$?I- zDMSn!zLEh42}3f~YFuQSN5#<B%42P3k5{~l)MWfc8Kxq68Ll<6S{J-w2yRkOc)ZSS zg7mgnf<t6bcO6kQ>eLvwQiaxT$rF}cot<bi1%TO0nUubDiJ5wp3qg9EIa^M4oxmPZ zaHCFuGYK!7DR4tN)hOe{Re@#ilX8@^k_uXTs9D!pXRaEyQRNgiR^?v10IOHfwUu#R z+3S|`S}*G<>usFr*e2ucD?+rvUlX2K!Y=pn@(5!5kW&xvjfP3b65R7VUEoU1acLDZ zOta)SD5UFhlVPMiQnLYP<z4R$1Pm^GSr`>g56TF=QS$2m^#Mj{9HZ46G&7n*lYfFe zqaQ{lARHJYG+xII8p)OYj83SucNFh9M(5TO^cDX=C?0+eRXIi^-W89=yN{t2)A85| zdODC(l8Q2Vg5FLfmC)Gv&k6b%wvx(AOeU2R^fNqxo(oCCP}890!pTsQs0Wgv7wMN6 zPoH2=dS1^dv`kzqH3>|Hq@VKQBBLS7DE%D6&!`MpN*5G*f|uy_#<2|pCe1n;_>Si9 z@dJLOc?dt@7kX<ug7S+PAY?aTdkL)}iWvFykXJt;2Z=2~&-f7LFigB7#5_oRNn-3L zo-txd;#X4nH`4hjG3vy&4K1%i(OwZMq+*0I6*pCS_Gym4LLb6yMluEV$iL_)1p7Vh Tpw{MsiiAc7^cF?vz}x==H>8!^ literal 0 HcmV?d00001 diff --git a/bin/main/Main.class b/bin/main/Main.class index e9b291ca26fd235cce9339e8f52cc7836544f715..265d9feb3a3170e4c8e4b3830d1d19263c89d0f8 100644 GIT binary patch delta 705 zcmX|;OHWf#6otQ2pr^eYXlYB!Ltavlr$rP+K?M{aKoxwT_`cFBlwjM?@)+sBkwbC^ z{sZUg0HcXNK&K9!FfhiUQ)7(#Vl*dNd+oFLS!<u{&o!T_osYlYeE^QJVo^(bM0l4) zH$9qOi$3}-4wCX<pprujdT=<%5rzUBwdCEf=C~J6XhtkTv};BKoV2Lnln19ZW82T4 zsBt%-dNXknitt1}Un-W?>_XZpE$1`Eke`V#2?=KmXPMNTGo0swBKX+O=2B?^%|*i$ z)0!DWnoEYu%xdNgSGa1pMnZGlFwYJ5g=(I=X;`315nZu2?9{5ATS`rCEjoo#HlOoK zw-i+yS!Xkqc5>_ULKK0$e7sN)`tR0on>&WPG`UN@Wb_{QEy{VIC|g_4DdJt-?yfKP z=C$vuYSnfo^H-_6YsRzPN)<P=Vmvi#=bY7%?cI1hP+ZP$dQBSJ@Q_D_Rub;ZiXpY^ zeyR9go>g?XKm5(^H-G<Vt!xAF6C)CWb&@qnR1zzCc2KW`DC!0MdzThL8fX+==g#Ve zdaq*P6Ep;58A0~#3DmjI^xRXgIw%!n^I9w_#Uv~yF;Q$3oi@Rwyy%k|Q#3O`i!8cL z7}8h%i=?LICwf9trNfr@6VF+y!{X@;8GBD?VTbT^PbBh|s0XqCGmjCGzd@CZRxKw) gRAkG<0C~P2N1`P%i!70mk&==d$vdQ{lLK`A0c`4T)&Kwi delta 1161 zcmai!?NS?M6vuxL1U6Z=kc1YCG$bmtApy2lTdJ{DibY!zd_jX$tuDzUY)!H;SrY0C zQSYD=KlLs;&Hz(pya4^`6*zwJ797X%Z0t;J9mm<3|Noq`=Y98iej5Hc*7@<z`#%5+ zd~1>*8yESk$+Mg@c+TW`&YN6dA%KfRyugbA<RZMpr7)LGUgi~p#elCEESZduHF(t| z7VuS*QL=%uZ19@N7_XaL<GRTT`2Y%GlU0)tZy3CJNAIb(?);kVOp;VYuXvu{^czmS zp#5#H+#DI??I=m1HH&w6*Pv*z&U=bT)p2WfLBL?c;s);<d|>e*H!VKmV*|%xlafW5 zq=B~hge}GRvRm4AbtC2MlwB|7*8GOI({eT|9c{2};WDilz2&qVyW-Tg?5n#aUH4tD z7QDKp7^!+?U9k(gwo?cs#j%#F+dV^31gTK+f~1v-ZrE$O;p*m^uIQ5QH7q_w0{-a` z<XP(ZUkCy$CaD@oF^{^zXBG{b7Ct+&8oRL5bW3)x@%gsXvY2AJ`-_?iw`d3J-2HyI zFVxqGHMRd}VZ~%R|DSE;W{Qf->HK4p<?@dVmiwOs;hy(mz1~p_ZE62nt?4_pl2(kR zXY#>9ckO1|m6cv!Za7t)Q^fymRrEXMvLci2h1gEpx0k$X-K*)EpZhz{V@8E30~g(< zyIGNHp;-FHOwr)B#pmo<q)B#fhR&<6yWfR=Q{Qy=239)>`Q4F)$zDhbrbJ5!E8&66 z0qULzil+nzd&XfRJk2vAr^Gfb9JogA(+7w2KXf+(3sJ%n90|V9gOIyo56PR0@la;J zyE3@g36h_~5}d~1G(((`xHQL^VS<drXC;1Cp0n7@_i#Z@=;>bm&>u`0ocSF?4&X5( zY6f#YsCAoxUad<<jBFebT{$8q9M2yyDtx?<o!zH%;)t=0Om_BwC)N)+xjL8KXMBAw zw9k|Ai9=33oGF7THDfYUTsl0#NjcF8#--wfbazUoNXSK!l*=JSzjTkxn&B&9Q#$&B T4quA*tmu~LbK*0P-N*c2(#G;; diff --git a/bin/model/MenuModel.class b/bin/model/MenuModel.class deleted file mode 100644 index d332e9467525db9157dc9c89f9d58fde5330ead9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmX|4I|{-;5Ph4!Yy4axom!aEMr;HtqlIF>iHmGVHW0Gj%Sy2D03J%5P2mhY=KYw@ z_w@#_!id8K4>1f8GX!g;RkvYqXY&h#w{5PHVX{|R9!#Cf_AK&>6n<(<TgaWVWSmKD zGD=p<Qrtxh4?dM@tE7LAVQSs968e@N^HLTa5;*kT4x^<SVL&YDIp8mzV2|Do2|2|< M0S^%cBDx(6elO!CjQ{`u diff --git a/bin/view/App.class b/bin/view/App.class index 5cffaf45ec5854e232f94c366f693636b365bffa..c2a18a7c18c4effb20978055e1e0d54e1fd187f7 100644 GIT binary patch literal 1428 zcmZux*-{fx5Ir~RWEi%vxGU}fm$+}>f)Oy701}9WFV-cw;#k8Bl}y0prxdC}l~nlw zeuLlOCs>|46Ct24_jdQ3bGmPLCqI6F`wrkP7EScyS_*x*u8$igI&o85w@h^4wh04w zlDKQ&o;L3%@j%C~B{8azV><XyACL6$SRYT47*FD<K&m(~v-qZ*pLivZF1(lPGV4fp zC0p`qw!1Pa(3$hxx-VV7ES-ijkRxYmyf_hX3_KGsOS#$kzy5?k{B2FHDuMn$?nAb| zL8a{Uq>fV1tjJomAU}EyUtl0iDL4FVZZ}L&YE|0qoOG4*k4_LJBr#^Yw*N>Vni(z& z#ByGhNxKWSt7aOj%c`~@mmNkrR+OI)o=~ATm>K?mSxH%~mTk2mFr3+s2or{dw)aM7 zHR|uYjgU4F()P74fQ(g~R;6aiYt$-g($;ku<7;bIb;B*3#W@QnaMHqQoUt&8DGR4C zWZ^mT7N+rnv(d=?y=0IQj$M(y?YTo$H8ianTI{kwUogr2Z9OOwyi4N?7K)g$FpD`0 zFEMYSgasD3&UR#(LZD}FF=m(Fs|qJ)6qVZuUv5lsvZ0wORlHiuj<Tb>-OL8Hc&lrk zt6YDyt(&3XXfQ+F&4U!z=PIaLJEgUpnqt<KU$*OZFzQ(5wT>NYO+u#(7p*8=xk3&7 zwTleyw9hhh2Luka!S#nQorWd}E!m%liD&Y89T{Mx;DsHZR}MSBt`@w58h>A@8HdSu zrryei<L4Z&u4dO%Ef^SAHbYI0ypO+bAb}$oz#u3_FM`ALkF@zm=^bnHkHgeEL#(Nn zCAhghyyMj1O7T2T?*wn5qa)i8Uug(j;F$=538Zil8QL0pJct3YO+>yNKprJ>7$Ys@ zc|=(vklI9a<Wdu{Jz+EWaFTyAr%1Vk%Pq<cQgj{ZO~f^;i3HQcnn><(yNChbV6y&R zzQDkh-FJKrz5!D^FqYD(ZJ1k#?4V<58`c)$JLp`Z@;17*5T!6vG|^3?H~zCX@~ep+ r+M<bGUWq2sdr8kQ4bTINDF=~e>OL0Tk9!=)V@4)95P_@2M3DUhoe4Ho delta 339 zcmXYr%}T>S6ot=B{+cwYCjQlEW2;tC3UwhUK7b3MxX_KuQ9{vb5&t(LK7z#O5UrSk zf?L6jFVJW35yX?~EY3Z1=iW2leZHqJfBw9_16aYl0|%ovY>Zhb<}mI+Lzu}#CX<<z zEJPNj?p`WMBsL4))|uLCHPrF8+C7YuFA=VKD7eVO6$lR0g}SPrUhcP>^^NrtbrcKe zjkta8!b90b1=B8OFzcd<x#U`wlLt{uZnfr(O%gy*nM5b)8B87Et;8x=jm0j+Q-5%f zYW_9J?<4phjmeyyr4Hl=7T%!k1bP?7GbB5{(eveZ3X@)>uvp9#xy~BoBbOwy*pR_s bs7acDJQ0biq^Xf*h%XvMjlT`|7e;;oUw$tq diff --git a/bin/view/GameView.class b/bin/view/GameView.class index ad40ca61a8b3a96581b2262fd350d86f2331dd62..62c75e7a821fb3c936f8f839d63523cbd6f016b0 100644 GIT binary patch literal 4639 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 M!JmBHhcmeEe-v8u+W-In literal 3477 zcmZ`+S#%p$8UDsgMxKrn%ZU@ajuVBpi7Y!+(mipKCRXCasT`ZwvFny?EM3c!${Kex zvYpZb1xgooC@Ezvg|f6PO^KyYL)oE}vKO9s=Zyz=;Dy8C`)4Fua-Cz(UH<L<`@MSY ze=olR;CB4YKnRwODFby#HDLg08B_?<2Iq{98JTSz=M5OJWOJVkSs7+^<P2<rB|MHm z=45rhtlSXtGJ84-2DV{dFbg^sL%3kzT09{8cQ^6a2W9(^(7s2<dkyTu`wZ;I!y&w1 z#|I4DfDa1oBeMFCjz<l2<1v9euHy*<z4);3enik8mDR^|d|U)j+5MvIetbf}pOn?7 znkfF$vVBrkpAqdZ%J7tq&l)&{rwx1#pBK_Egz!a~zhvOcct%WkSO&`4hOg*&Rzp+9 zwbLV3PGvQ0NuIant;KkL!Omskr+sLjhD|xO=#AM~HR7syTP<j4P0AcUr53G>lM@ul zHfF3@m2h&N>twUa)zFztt?c3_Ymg*wNfF{&)eK$L42d;pvRqR+f%<4@ucoeuCx(PZ zKIOP7X-%zTl@Aq~8E0O(2`B4N)fV6KxV7NLeTW>EbKF@gTPE0W$j;f`5e*H|!R~QR z2`8=SnxvgmX9}}Z${n+&vV??FuChE;cFjpTSHsq5_f<TbQaMk#LRAhyeN?2k213fd zDWi;0r{Jd40KKiDSqvU$5N?!^nHb00839?Z8X?fHni$2HiE|hu(`i+Rq*Y|BKpA-x zU&C`et0v|HF6El|Iwmx<t%&P)+_Z9&)&-~FnfM02Y2sUW-oy*|HmzGH$_#^vVT_o# z2ltvdiBl%tCMs@7_!gV^4!%pbuT3LS`Fkb?aeA#{<zR+JC9(%2`-Jj26K};?6EBK| zm++E_ci`SKqwj{}_N>a~Z6_zx)c5<i%+Q^%@=TwOb<_?rSBRHP+=ZlxqBx?nigayS z3USHA5YA}WSw%PG6!L0fMk!`cr6h#*iiscKWfRNzp@|>im9=*I!8Y+@vF0cEsfnNA z=O%uEUz+%pY=14QSH+m$;I(p$Diz!BELLJPj^FBd-Nf(kdlP@aA9>7(>!fBZ=4-^0 z_(u*#Bnp4h@n;i%!5b$2D%v#rA*o~+0~Q?|^fNw`S8M{FBwt%JD3`3oHZkhC>=u2J zw(TT2uBNR*)=Olayc(WkfqQg6+YC{GZggjvU8*gB4OuxWqg-EzPRddH0Up!HqeX0+ z@H#19(pi<|Jg>$a4cn^ZB%IkfC&%3KWz<_~mR<L{_$t+hr_QTXz_F!@cEqtM=N>t_ zu|Ih%aTmQp6$Y4i8P_S~D0*`hdC)L~x`kBik<-d`RXVVtTE~@a^mRNJy;}cTuUEXe z;nq?GT}_lQvW}G=Rj#e_8sdSTl>{lb^s5~#?E9kY995Oql|~zsif>69y}g?5NjvYU zob><QRZdd#j7|K_RK9?X(pzmS%czTZ4Urn(tSvd8$Dpsr?Y!+b-G-<iEs0XUmAbDI zrBFtB6L#90(ZIes$N&+rCP0<mT-z_${~H$qPK|s`<U6J8%nbX+hMDrhEX<|Z>4&GM zc`WY>SIx1yyrAWm<G#l6;^6iwuSjc<igf$@MDM6>#X-*<uu`7mURb$TPR!1E7Xp-q zT~eEawRg*u->TyQ3C)ngtI+SL&4yZ1(JfY^+e$?RB@<kZ6(H}vT5T5z39hZPcE(O0 z<26_-uqyr67bvO@&sp~u6kjz1eA9tnom?JV)ybvc&+N<o%$DoVyk`8FR{`f%x$pd$ zS03jEXzaQZ9Pb9S$DtDftvObL7F$N$WEii8aj_*`Lj4jN%AkLT@j^@92Q|i8Hx!}A zI5ZJ!OqOs>5oRph`1f$#KZ|INX+>-#W)m?jO9;neMYJwqGp8-F*kx>PZ7X6c3ARmY z^(C|~p@W-iCtEv9*uI1=l61X<9YyRUM`WmX8M}O?>h3P#Ek#@x>utS05OBjJX~QCt zUx)COuzLx6xZ2ZMM3iE?g+$Qd5@Ji}Sw^owgm_O0d(Xu77IC9&`1KSKk2Msr?-Jdl zVUpu{K4QVAVFR{sY(os~*oO|>O88N9G636otMA~Yz7tc3V48uN!*zHF*W(F3U7y4r zJdG%x=j-+odhj|Qwr^lB{((6DLrMR|O`49IH50cmpnMtxVPOCpxd)=l*iSd!l<c8X zZ|<RzjYZr-E9jE?2>%0@^t`yD@m6xmZ-5Z)Kr;?d=Y!adK1$<rqb%J*J^z3MbnvZ| zxw(kjF5~ueWA+dscdS4T5OSEiaOd_S4$2}x^{qN6IPOkn*-@H&jHdPT-~^B3%cFeU zzo?QN_w0%>%Q!UI(@?_UYNJ|=;O`2K6mh4Y5l5L3L%l&V^z;^SY{ECazQv&3SI{pI zs?-sr$VKL@?~jDQ_%W8pWy$%3_^zW$!j4r5g6i^7t8P5PUk~tW?j&7!3SF$WUcP{C oW33(L<0ipcJI65Dd~kWJvj<saj}Y<{YwH<SmWFqdzYg#EKi6QOrvLx| diff --git a/bin/view/MenuView.class b/bin/view/MenuView.class index 8fc06790094c6f8b79a02f2b03a54b267159109f..a276c8ac1d127c0cab3a071d1a8a0793763b0f99 100644 GIT binary patch delta 2718 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 bkxTk9+nmQw_!F0Y&eDH4_?0331DyXDg(fTP delta 2770 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 diff --git a/bin/view/ScoreView$1.class b/bin/view/ScoreView$1.class new file mode 100644 index 0000000000000000000000000000000000000000..4dd3614ab0d4734314ed068ac33462e5aee1accb GIT binary patch literal 784 zcmaJ<U2oGc6g^H$(`N1m3>YvNW0WmR2ZbjdhLGqe+N5nl8rr+tT5BM+QS4;=Eu;=4 z9{2(LD8zM&x-m^eim!d{J@@0-zkdJt3E(B3*5KowTb2V<aleKoJP5FYhi<p(<B^ZY z42@hQ?SUA6>Sfky#n9Z(V|m)`S@m9~MsG7z>^L^<=M1fx>u9J`c}zjh_bOJgea)~I zUUpu}vw6%=-q9oJO2kSYW|M(TKZrp>2%qT8$iA{Nl_Q3gaQ~yoMOU2KuFR#f-GjpK zw%abz!YuwvY+ZP8q_cD=-^DIfW8U5~mxHSH)iBW}RwoD2j`he#o8t-A8LEfU*j;Tb z#{xJ<4FN|T>l_;heQa_>=x}Tyq}dBq=DFK1sOdeWWV(|GW29kNzN+OnBk`GraymOz z=X{2`6Yj#f6uQBJvCb){PBd{^=PDEk>0STla_DTN?a}R>q&ib1#o`6!W}HGUrPGN> z3IMD0B&zg8yjIIi43MSq2`SNEM+2l8?Ka>QNHgl3fkj(q@S^W1eI*yQMr(yE(4+M_ zZu}*6h~yF4jHVPm1)HM$4cE>|LE(N&Rr*9({2#G$1#y>%dnn^3)$ni&x5<|2J>S9I P0$IWu*?>~}Wa;|@J`$+a literal 0 HcmV?d00001 diff --git a/bin/view/ScoreView.class b/bin/view/ScoreView.class new file mode 100644 index 0000000000000000000000000000000000000000..1a28735b655e7dd93dec86627b10610f9b462fe8 GIT binary patch literal 3999 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 literal 0 HcmV?d00001 diff --git a/src/main/Main.java b/src/main/Main.java index af0d52f..61e9218 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -1,8 +1,4 @@ package main; - -import model.MenuModel; -import controller.MenuController; -import controller.SeriesSelector; import view.*; import javax.sound.sampled.AudioInputStream; @@ -14,21 +10,9 @@ import java.net.URL; public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(() -> { - MenuModel model = new MenuModel(); - MenuView view = new MenuView(); - - // Initialiser SeriesSelector et le passer à MenuView - SeriesSelector seriesSelector = new SeriesSelector(); - view.setSeriesSelector(seriesSelector); - - // Créer MenuController avec model, view et seriesSelector - new MenuController(model, view, seriesSelector); - - JFrame frame = App.getInstance(); - frame.add(view); - frame.setVisible(true); - - PlayMusic("/Music/audio.wav"); + MenuView menuView = new MenuView(); + App.addView(menuView, App.MENU_VIEW); + App.showView(App.MENU_VIEW); }); } diff --git a/src/main/java/controller/AllScore.java b/src/main/java/controller/AllScore.java new file mode 100644 index 0000000..fe90e0a --- /dev/null +++ b/src/main/java/controller/AllScore.java @@ -0,0 +1,39 @@ +package controller; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + +public class AllScore { + public static ArrayList<Integer> getScoresForSeries(int idSerie) { + ArrayList<Integer> scores = new ArrayList<>(); + + try { + Class.forName("org.mariadb.jdbc.Driver"); + } catch (ClassNotFoundException e) { + System.err.println("Erreur : pilote JDBC non trouvé"); + System.exit(1); + } + + try (Connection cnx = DriverManager.getConnection( + "jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu", + "akagundu", "dersim62Lodek")) { + try (PreparedStatement pst = cnx.prepareStatement("SELECT score FROM Score WHERE id_serie=? ORDER BY score DESC LIMIT 10")) { + pst.setInt(1, idSerie); + try (ResultSet rs = pst.executeQuery()) { + while (rs.next()) { + scores.add(rs.getInt("score")); + } + } + } + } catch (SQLException e) { + System.err.println("Erreur de connexion ou d'exécution de la requête SQL"); + e.printStackTrace(); + } + + return scores; + } +} diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 58b7fe6..fb35432 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -1,3 +1,4 @@ +// src/main/java/controller/GameController.java package controller; import model.Tile; @@ -20,22 +21,25 @@ public class GameController implements TilePlacer { private TileDatabaseManager dbManager; private List<Tile> currentTiles; private int tileIndex; - private ScoreGameContext scoreGameContext; // Nouveau contexte pour le score + private ScoreGameContext scoreGameContext; - public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel) { + private int placedTileCount = 0; + private int seriesId; + private GameEndListener gameEndListener; + + public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel, int seriesId, GameEndListener gameEndListener) { + this.seriesId = seriesId; this.gameContext = gameContext; this.gridPanel = gridPanel; this.hexagonMap = gameContext.getHexagonMap(); this.availablePositions = gameContext.getAvailablePositions(); this.nextTilePreview = nextTilePreview; - this.dbManager = new TileDatabaseManager(); this.tileIndex = 0; - - // Initialisation de ScoreGameContext this.scoreGameContext = new ScoreGameContext(gameContext, scoreLabel); + this.gameEndListener = gameEndListener; - loadSeries(1); // Charger la série par défaut (ex. série 1) + loadSeries(seriesId); updatePreview(); } @@ -54,16 +58,12 @@ public class GameController implements TilePlacer { return; } - System.out.println("Placement de la tuile avec ID : " + (nextTile != null ? nextTile.getId() : "null") + " à la position : " + position); - - hexTile.setTile(nextTile); // Place la tuile actuelle + hexTile.setTile(nextTile); gridPanel.revalidate(); gridPanel.repaint(); - availablePositions.remove(position); - Point[] adjacentPositions = getAdjacentPositions(position); - for (Point adj : adjacentPositions) { + for (Point adj : getAdjacentPositions(position)) { if (!hexagonMap.containsKey(adj)) { availablePositions.add(adj); addHexagonTile(adj, gridPanel, 50, null, null); @@ -71,38 +71,43 @@ public class GameController implements TilePlacer { } gameContext.repaintGrid(gridPanel); - generateNextTile(); // Génère la tuile suivante - - // Calcul et mise à jour du score + generateNextTile(); scoreGameContext.calculateScore(); + + placedTileCount++; + if (placedTileCount >= 50) { + endGame(); // Appeler endGame pour terminer la partie + } + } + } + + private void endGame() { + int finalScore = scoreGameContext.getScore(); + + // Enregistrer le score dans la base de données + new SendScore().insertscore(seriesId, finalScore); + + // Notifiez le listener de la fin de la partie + if (gameEndListener != null) { + gameEndListener.onGameEnd(finalScore); } } public void initializeGame(CameraController cameraController) { - generateNextTile(); // Génère la première tuile et assigne une tuile valide à `nextTile` - - Tile initialTile = getNextTile(); // Récupère la tuile générée + generateNextTile(); + Tile initialTile = getNextTile(); if (initialTile == null) { System.out.println("Erreur : aucune tuile initiale générée."); - return; // Arrête l'initialisation si aucune tuile n'a été générée + return; } - - System.out.println("ID de la tuile initiale générée : " + initialTile.getId()); // Affiche l'ID de la tuile initiale - + int centerX = gridPanel.getPreferredSize().width / 2; int centerY = gridPanel.getPreferredSize().height / 2; - - Point initialPosition = new Point(0, 0); - initialPosition.setLocation(centerX / 50, centerY / 50); // Calcule la position centrale - - placeInitialTile(initialPosition, cameraController, initialTile); // Place la première tuile - - // Calculer et mettre à jour le score incluant la première tuile + Point initialPosition = new Point(centerX / 50, centerY / 50); + placeInitialTile(initialPosition, cameraController, initialTile); scoreGameContext.calculateScore(); - - generateNextTile(); // Génère la tuile suivante + generateNextTile(); } - public void placeInitialTile(Point position, CameraController cameraController, Tile tile) { if (tile == null) { @@ -110,16 +115,13 @@ public class GameController implements TilePlacer { return; } - System.out.println("Placement de la tuile initiale avec ID : " + tile.getId() + " à la position : " + position); + addHexagonTile(position, gridPanel, 50, cameraController, tile); + availablePositions.remove(position); - addHexagonTile(position, gridPanel, 50, cameraController, tile); // Place la première tuile - availablePositions.remove(position); // Marque la position comme occupée - - Point[] adjacentPositions = getAdjacentPositions(position); - for (Point adj : adjacentPositions) { + for (Point adj : getAdjacentPositions(position)) { if (!hexagonMap.containsKey(adj)) { availablePositions.add(adj); - addHexagonTile(adj, gridPanel, 50, cameraController, null); // Placeholder vide pour les positions adjacentes + addHexagonTile(adj, gridPanel, 50, cameraController, null); } } } @@ -143,18 +145,15 @@ public class GameController implements TilePlacer { yOffset += (int) (Math.sqrt(3) * hexSize / 2); } - boolean isPlaceholder = (tile == null); // Si tile est null, c'est un placeholder + boolean isPlaceholder = (tile == null); HexagonTile hexTile = new HexagonTile(position, isPlaceholder); if (tile != null) { hexTile.setTile(tile); - } else { - System.out.println("Aucun tile n'a été fourni pour cette position : " + position); } hexTile.setBounds(xOffset, yOffset, hexSize, hexSize); hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions)); - hexagonMap.put(position, hexTile); panel.add(hexTile); panel.revalidate(); @@ -164,21 +163,19 @@ public class GameController implements TilePlacer { public void generateNextTile() { if (tileIndex < currentTiles.size()) { nextTile = currentTiles.get(tileIndex++); - System.out.println("Génération de la prochaine tuile avec ID : " + nextTile.getId() + " (index " + tileIndex + ")"); - updatePreview(); // Met à jour l'aperçu de la tuile suivante + updatePreview(); } else { - nextTile = null; // Fin de la série, plus de tuiles à placer - updatePreview(); // Met à jour l'aperçu pour refléter l'absence de prochaine tuile - System.out.println("Fin de la série. Plus de tuiles à placer."); + nextTile = null; + updatePreview(); } } private void updatePreview() { if (nextTilePreview != null) { if (nextTile != null) { - nextTilePreview.setTile(nextTile); // Met à jour avec une tuile valide + nextTilePreview.setTile(nextTile); } else { - nextTilePreview.setTile(null); // Affiche un placeholder ou un message si `nextTile` est null + nextTilePreview.setTile(null); } nextTilePreview.repaint(); } diff --git a/src/main/java/controller/GameEndListener.java b/src/main/java/controller/GameEndListener.java new file mode 100644 index 0000000..2db52b7 --- /dev/null +++ b/src/main/java/controller/GameEndListener.java @@ -0,0 +1,5 @@ +package controller; + +public interface GameEndListener { + void onGameEnd(int finalScore); +} \ No newline at end of file diff --git a/src/main/java/controller/MenuController.java b/src/main/java/controller/MenuController.java deleted file mode 100644 index 998827d..0000000 --- a/src/main/java/controller/MenuController.java +++ /dev/null @@ -1,15 +0,0 @@ -package controller; - -import model.MenuModel; -import view.MenuView; - -public class MenuController { - - public MenuController(MenuModel model, MenuView view, SeriesSelector seriesSelector) { - // Assignation des action listeners aux boutons du menu - view.getQuiButton().addActionListener(new QuiListener()); // Quitte l'application - - // Définir le sélecteur de séries - view.setSeriesSelector(seriesSelector); - } -} diff --git a/src/main/java/controller/SendScore.java b/src/main/java/controller/SendScore.java new file mode 100644 index 0000000..7671b54 --- /dev/null +++ b/src/main/java/controller/SendScore.java @@ -0,0 +1,30 @@ +package controller; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class SendScore { + public void insertscore(int idSerie, int score) { + try { + Class.forName("org.mariadb.jdbc.Driver"); + } catch (ClassNotFoundException e) { + System.err.println("Erreur : pilote JDBC non trouvé"); + System.exit(1); + } + + try (Connection cnx = DriverManager.getConnection( + "jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu", + "akagundu", "dersim62Lodek")) { + try (PreparedStatement pst = cnx.prepareStatement("INSERT INTO Score (id_serie, score) VALUES (?, ?);")) { + pst.setInt(1, idSerie); + pst.setInt(2, score); + pst.executeUpdate(); + } + } catch (SQLException e) { + System.err.println("Erreur de connexion ou d'exécution de la requête SQL"); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/model/MenuModel.java b/src/main/java/model/MenuModel.java deleted file mode 100644 index b0f6aa4..0000000 --- a/src/main/java/model/MenuModel.java +++ /dev/null @@ -1,10 +0,0 @@ -package model; - - -public class MenuModel { - - public MenuModel() { - // rien du tout pour l'instant - } - -} diff --git a/src/main/java/view/App.java b/src/main/java/view/App.java index 666efb2..32b14f2 100644 --- a/src/main/java/view/App.java +++ b/src/main/java/view/App.java @@ -1,17 +1,37 @@ package view; import javax.swing.*; +import java.awt.*; public class App { + public static final String MENU_VIEW = "MenuView"; + public static final String GAME_VIEW = "GameView"; + public static final String SCORE_VIEW = "ScoreView"; + private static JFrame frame; + private static CardLayout cardLayout; + private static JPanel mainPanel; + + static { + frame = new JFrame("Application de Jeu"); + cardLayout = new CardLayout(); + mainPanel = new JPanel(cardLayout); + frame.setContentPane(mainPanel); + frame.setSize(1500, 750); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } public static JFrame getInstance() { - if (frame == null) { - frame = new JFrame("Menu"); - frame.setSize(1500, 750); - frame.setLocationRelativeTo(null); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } return frame; } -} + + public static void addView(JPanel view, String viewName) { + mainPanel.add(view, viewName); + } + + public static void showView(String viewName) { + cardLayout.show(mainPanel, viewName); + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java index dea6cc1..fadd2a9 100644 --- a/src/main/java/view/GameView.java +++ b/src/main/java/view/GameView.java @@ -1,31 +1,23 @@ +// src/main/java/view/GameView.java package view; -import controller.GameController; -import controller.CameraController; -import controller.GameContext; -import controller.MouseWheelController; +import controller.*; import javax.swing.*; import java.awt.*; -public class GameView extends JFrame { +public class GameView extends JPanel implements GameEndListener { private JPanel gridPanel; private HexagonTile nextTilePreview; private GameController gameController; private CameraController cameraController; private GameContext gameContext; private JLabel scoreLabel; - - // Couleurs pour le style - private final Color hoverColor = new Color(200, 150, 100); // Couleur de hover avec transparence - private final Color normalColor = new Color(243, 171, 115); // Couleur normale avec transparence + private int seriesId; public GameView(int seriesId) { - setTitle("Jeu de Tuiles"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.seriesId = seriesId; setLayout(new BorderLayout()); - setSize(1500, 750); - setLocationRelativeTo(null); gameContext = new GameContext(); gridPanel = createHexagonGrid(); @@ -34,27 +26,39 @@ public class GameView extends JFrame { nextTilePreview = new HexagonTile(null, false); scoreLabel = new JLabel("Score: 0"); - scoreLabel.setForeground(Color.BLACK); // Texte noir pour contraste + scoreLabel.setForeground(Color.BLACK); JPanel controlPanel = createControlPanel(); - controlPanel.setPreferredSize(new Dimension(200, 600)); + controlPanel.setPreferredSize(new Dimension(200, getPreferredSize().height)); add(controlPanel, BorderLayout.EAST); - gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel); - gameController.loadSeries(seriesId); // Charge la série + gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel, seriesId, this); + gameController.loadSeries(seriesId); cameraController = new CameraController(gridPanel, gameContext); MouseWheelController wheelController = new MouseWheelController(nextTilePreview, gameController); addMouseWheelListener(wheelController); gameController.initializeGame(cameraController); - setVisible(true); + + JButton backButton = new JButton("Retour"); + backButton.setPreferredSize(new Dimension(100, 40)); + backButton.setBackground(new Color(202, 146, 104)); + backButton.setForeground(Color.BLACK); + backButton.setFocusPainted(false); + backButton.setBorderPainted(false); + + backButton.addActionListener(e -> { + App.showView(App.MENU_VIEW); + }); + + controlPanel.add(backButton); } private JPanel createHexagonGrid() { JPanel panel = new JPanel(); panel.setLayout(null); - panel.setBackground(normalColor); // Couleur de fond de la grille + panel.setBackground(new Color(243, 171, 115)); panel.setPreferredSize(new Dimension(800, 800)); return panel; } @@ -69,16 +73,16 @@ public class GameView extends JFrame { private JPanel createControlPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - panel.setBackground(normalColor); // Couleur normale pour le panneau de contrôle + panel.setBackground(new Color(243, 171, 115)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); JLabel nextTileLabel = new JLabel("Prochaine tuile : "); - nextTileLabel.setForeground(Color.BLACK); // Texte noir pour contraste + nextTileLabel.setForeground(Color.BLACK); panel.add(nextTileLabel); panel.add(Box.createRigidArea(new Dimension(0, 10))); nextTilePreview.setPreferredSize(new Dimension(150, 150)); - nextTilePreview.setBackground(hoverColor); // Couleur hover pour différencier + nextTilePreview.setBackground(new Color(200, 150, 100)); nextTilePreview.setOpaque(true); panel.add(nextTilePreview); @@ -87,4 +91,13 @@ public class GameView extends JFrame { return panel; } + + @Override + public void onGameEnd(int finalScore) { + SwingUtilities.invokeLater(() -> { + ScoreView scoreView = new ScoreView(seriesId, finalScore); + App.addView(scoreView, App.SCORE_VIEW); + App.showView(App.SCORE_VIEW); + }); + } } diff --git a/src/main/java/view/MenuView.java b/src/main/java/view/MenuView.java index c91e3fe..7e2170e 100644 --- a/src/main/java/view/MenuView.java +++ b/src/main/java/view/MenuView.java @@ -1,10 +1,11 @@ package view; +import controller.SeriesSelector; + import javax.swing.*; import java.awt.*; -import controller.SeriesSelector; -public class MenuView extends JComponent { +public class MenuView extends JPanel { private BtnPerso resumeButton; private BtnPerso newGameButton; @@ -18,7 +19,7 @@ public class MenuView extends JComponent { private Image backgroundImage; private ImageIcon logo; private ImageIcon quit; - private JLabel labelImg; // Déclaration de labelImg + private JLabel labelImg; public MenuView() { initMenu(); @@ -51,68 +52,56 @@ public class MenuView extends JComponent { } private void initMenu() { - // Initialisation du panneau latéral panelCote = new JPanel(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); panelCote.setBackground(new Color(243, 171, 115, 150)); panelCote.setPreferredSize(new Dimension(300, 0)); - // Charger les images backgroundImage = new ImageIcon(getClass().getResource("/java/view/img/bg.png")).getImage(); logo = new ImageIcon(getClass().getResource("/java/view/img/D.png")); quit = new ImageIcon(getClass().getResource("/java/view/img/quit.png")); - // Redimensionnement des images Image quit1 = quit.getImage(); Image lg = logo.getImage(); Image resizedlg = lg.getScaledInstance(300, 300, Image.SCALE_SMOOTH); - labelImg = new JLabel(new ImageIcon(resizedlg)); // Initialisation de labelImg + labelImg = new JLabel(new ImageIcon(resizedlg)); - // Configuration du bouton "Quitter" avec une icône redimensionnée int buttonWidth = 65; int buttonHeight = 40; Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH); ImageIcon resizedIcon = new ImageIcon(resizedImage); - // Boutons resumeButton = new BtnPerso("JOUER"); newGameButton = new BtnPerso("COMMENT JOUER"); quitButton = new JButton(resizedIcon); - // Configurer le bouton "Quitter" pour enlever le fond et la bordure quitButton.setPreferredSize(new Dimension(buttonWidth, buttonHeight)); - quitButton.setBackground(new Color(243, 171, 115, 150)); // Fond transparent similaire - quitButton.setBorderPainted(false); // Enlever la bordure pour un look plus propre - quitButton.setOpaque(true); // Rendre le fond visible - quitButton.setFocusPainted(false); // Enlever le focus autour du bouton + quitButton.setBackground(new Color(243, 171, 115, 150)); + quitButton.setBorderPainted(false); + quitButton.setOpaque(true); + quitButton.setFocusPainted(false); - // Ajout des listeners pour les boutons resumeButton.addActionListener(e -> showSeriesButtons()); newGameButton.addActionListener(e -> toggleHowToPlay()); - // Créer le panneau "Comment jouer" et le panneau de séries howToPlayPanel = createHowToPlayPanel(); howToPlayPanel.setVisible(false); seriesPanel = createSeriesPanel(); seriesPanel.setVisible(false); - // Panneau centré pour le contenu dynamique centeredPanel = new JPanel(new GridBagLayout()); centeredPanel.setOpaque(false); centeredPanel.add(howToPlayPanel); - // Ajout des composants au panneau latéral gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(10, 10, 10, 10); gbc.weightx = 1.0; gbc.gridx = 0; - // Ajouter l'image de logo gbc.gridy = 0; - panelCote.add(labelImg, gbc); // Ajout de labelImg ici + panelCote.add(labelImg, gbc); - // Ajouter les boutons gbc.gridy = 1; panelCote.add(resumeButton, gbc); @@ -164,6 +153,9 @@ public class MenuView extends JComponent { int seriesId = i; BtnPerso seriesButton = new BtnPerso("Série " + seriesId); seriesButton.addActionListener(e -> { + GameView gameView = new GameView(seriesId); + App.addView(gameView, App.GAME_VIEW); + App.showView(App.GAME_VIEW); if (seriesSelector != null) { seriesSelector.startGameWithSeries(seriesId); } @@ -180,16 +172,4 @@ public class MenuView extends JComponent { super.paintComponent(g); g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this); } - - public BtnPerso getResumeButton() { - return resumeButton; - } - - public BtnPerso getNewGameButton() { - return newGameButton; - } - - public JButton getQuiButton() { - return quitButton; - } -} +} \ No newline at end of file diff --git a/src/main/java/view/ScoreView.java b/src/main/java/view/ScoreView.java new file mode 100644 index 0000000..471db06 --- /dev/null +++ b/src/main/java/view/ScoreView.java @@ -0,0 +1,90 @@ +// src/main/java/view/ScoreView.java +package view; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; +import java.util.Collections; +import controller.AllScore; + +public class ScoreView extends JPanel { + private int seriesId; + private int finalScore; + private final Color hoverColor = new Color(200, 150, 100,150); + private final Color normalColor = new Color(243, 171, 115, 150); // Couleur avec transparence + + public ScoreView(int seriesId, int finalScore) { + this.seriesId = seriesId; + this.finalScore = finalScore; + initScoreView(); + } + + private void initScoreView() { + setLayout(new BorderLayout()); + setBackground(normalColor); + + // Titre de la vue de score + JLabel title = new JLabel("Fin de la Partie", JLabel.CENTER); + title.setFont(new Font("Helvetica", Font.BOLD, 30)); + add(title, BorderLayout.NORTH); + + // Affichage du score actuel de la partie + JLabel scoreLabel = new JLabel("Votre Score : " + finalScore, JLabel.CENTER); + scoreLabel.setFont(new Font("Helvetica", Font.PLAIN, 20)); + add(scoreLabel, BorderLayout.CENTER); + + // Panneau des scores du top 10 + JPanel topScoresPanel = new JPanel(); + topScoresPanel.setLayout(new BoxLayout(topScoresPanel, BoxLayout.Y_AXIS)); + topScoresPanel.setBorder(BorderFactory.createTitledBorder("Top 10 des Scores")); + topScoresPanel.setBackground(normalColor); + + ArrayList<Integer> scores = AllScore.getScoresForSeries(seriesId); + Collections.sort(scores, Collections.reverseOrder()); + scores = new ArrayList<>(scores.subList(0, Math.min(10, scores.size()))); + + for (Integer score : scores) { + JLabel scoreItem = new JLabel(score.toString(), JLabel.CENTER); + scoreItem.setFont(new Font("Helvetica", Font.PLAIN, 18)); + scoreItem.setAlignmentX(Component.CENTER_ALIGNMENT); + + // Marquer le score final en couleur spéciale + if (score == finalScore) { + scoreItem.setForeground(new Color(128, 0, 128)); // Violet pour le score actuel + } else { + scoreItem.setForeground(Color.BLACK); + } + + topScoresPanel.add(scoreItem); + } + + add(topScoresPanel, BorderLayout.CENTER); + + // Bouton de retour au menu + BtnPerso backButton = new BtnPerso("Retour au Menu"); + backButton.addActionListener(e -> App.showView(App.MENU_VIEW)); + backButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseEntered(java.awt.event.MouseEvent evt) { + backButton.setBackground(hoverColor); + } + + public void mouseExited(java.awt.event.MouseEvent evt) { + backButton.setBackground(normalColor); + } + }); + + // Panneau de score actuel + JPanel currentScorePanel = new JPanel(); + currentScorePanel.setBackground(normalColor); + JLabel currentScoreLabel = new JLabel("Score Actuel : " + finalScore); + currentScoreLabel.setFont(new Font("Helvetica", Font.BOLD, 22)); + currentScorePanel.add(currentScoreLabel); + + // Ajouter le panneau de score actuel et le bouton de retour + JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.add(currentScorePanel, BorderLayout.NORTH); + southPanel.add(backButton, BorderLayout.SOUTH); + + add(southPanel, BorderLayout.SOUTH); + } +}