From 50d9ee2f58ddf4fbf34a1f23e1491605057780c4 Mon Sep 17 00:00:00 2001
From: Vincent <xefal77@gmail.com>
Date: Sun, 27 Oct 2024 16:58:15 +0100
Subject: [PATCH]  changements UI

---
 bin/controller/GameController.class           | Bin 6397 -> 6646 bytes
 bin/controller/HowToPlayListener.class        | Bin 0 -> 525 bytes
 bin/controller/MenuController.class           | Bin 671 -> 567 bytes
 bin/controller/QuiListener.class              | Bin 389 -> 389 bytes
 bin/controller/ScoreGameContext.class         | Bin 0 -> 4674 bytes
 bin/controller/SerieListener.class            | Bin 0 -> 573 bytes
 bin/controller/SeriesSelector.class           | Bin 0 -> 1445 bytes
 bin/main/Main.class                           | Bin 2106 -> 2260 bytes
 bin/model/Pocket.class                        | Bin 0 -> 1091 bytes
 bin/model/Tile.class                          | Bin 950 -> 977 bytes
 bin/view/ButtonHoverListener.class            | Bin 817 -> 795 bytes
 bin/view/GameView$1.class                     | Bin 514 -> 0 bytes
 bin/view/GameView.class                       | Bin 3150 -> 3477 bytes
 bin/view/HexagonTile$1.class                  | Bin 754 -> 754 bytes
 bin/view/HexagonTile.class                    | Bin 3009 -> 2843 bytes
 bin/view/HowToPlayView.class                  | Bin 0 -> 1653 bytes
 bin/view/MenuView.class                       | Bin 3150 -> 6798 bytes
 src/main/Main.java                            |  21 +--
 src/main/java/controller/GameController.java  |  79 ++++-----
 .../java/controller/HowToPlayListener.java    |  20 +++
 src/main/java/controller/MenuController.java  |  14 +-
 src/main/java/controller/QuiListener.java     |   3 +-
 src/main/java/controller/ResListener.java     |  17 --
 .../java/controller/ScoreGameContext.java     | 142 ++++++++++++++++
 src/main/java/controller/SerieListener.java   |  19 +++
 src/main/java/controller/SeriesSelector.java  |  12 ++
 src/main/java/model/Pocket.java               |  41 +++++
 src/main/java/model/Tile.java                 |  40 +++--
 src/main/java/view/ButtonHoverListener.java   |  15 +-
 src/main/java/view/GameView.java              |  43 ++---
 src/main/java/view/HexagonTile.java           |  14 +-
 src/main/java/view/HowToPlayView.java         |  35 ++++
 src/main/java/view/MenuView.java              | 156 ++++++++++++++----
 33 files changed, 514 insertions(+), 157 deletions(-)
 create mode 100644 bin/controller/HowToPlayListener.class
 create mode 100644 bin/controller/ScoreGameContext.class
 create mode 100644 bin/controller/SerieListener.class
 create mode 100644 bin/controller/SeriesSelector.class
 create mode 100644 bin/model/Pocket.class
 delete mode 100644 bin/view/GameView$1.class
 create mode 100644 bin/view/HowToPlayView.class
 create mode 100644 src/main/java/controller/HowToPlayListener.java
 delete mode 100644 src/main/java/controller/ResListener.java
 create mode 100644 src/main/java/controller/ScoreGameContext.java
 create mode 100644 src/main/java/controller/SerieListener.java
 create mode 100644 src/main/java/controller/SeriesSelector.java
 create mode 100644 src/main/java/model/Pocket.java
 create mode 100644 src/main/java/view/HowToPlayView.java

diff --git a/bin/controller/GameController.class b/bin/controller/GameController.class
index f6fe2f84aef354edcfd0c044696c5ae576433050..e1fb7aea9d15bd6dcae3a6dcd4e22008de983c96 100644
GIT binary patch
delta 3179
zcmbVOd3@Bx75~m&^V`iNSvJ|gE-Xhl0=o;500DyB9>~>J5E^W0Lb5<$Nf5%>>WT$H
zte|eC1yL-mhE{8VBpVXYYL7s%)+)93uDws|RV@^he&26H()vd~pEjF)^XAQ)nRk9?
z-y8kznAF+#JDvtGUQO`fL)hWPeB3Eyrw_YumvFm<yIZ)=2)RdNj}P9g>RyrDt8t$X
zxwu~@X&=dFg*+fy`$YCRFFud`IXHj^1H9{y59{zq4!(fHIVpS*U($Fq0EH&eJ>tV`
zeA$Pu;BgC21mM7vK7{c#ACBUfkmItkSuSYF;pSGEW@OqXcAgNfU99O4?xclN0XXrr
z?EJbH&)``h-_ZD`4`uk4FGc!o(d@KvIsg~GW8tiq!smp1*E7wc!Tj^#d3?`@EqK8*
z%@&9#jPD2FMw4(aX`J)n8vH;eFN<YAlsjJ$uYaWR;{ZH3WZ|c>d|cya8b8<gg=$`{
z+SFwK`kIDyiR-J^BxW|$HzqbWDn#bikX_f1OeWTqF8ILmBn8jab@g?PQxtAW$DLCP
z=B}#VSiQM){ieG56{WN1Rxe8=)2p1d`j;B7YWynwvU8XEb@NhJz8X=7TMd@t69yke
zrN(azev983d;~Wd{2qTWxCx64K8BB{_qqEotU|Rx0?QTp{uhG`>hMQ{6<BGo2K5HF
z$t8cnpAD9wM&mCAf5mGWe=~R;Z=_#!7p2~`@Rq^b_`AV7cvs^e2Ip}><DUi>aY@0y
zu`aQxbXH<>^@@i2g>}h<h4)1NeS;;q+2AtX&<aK=<xp_dZ%8IB<)ngg8Rb?Ut+Y`V
ztx#SeK3p)^hC7VPA*T$&oNvV^jmlMd2A>k0e6cx&+ta%}rG5NzR4=0fsz9qkqk>p&
zR1ub^U-T5@)~Vh`^&!C~Y)-%FiF!h!9!?L^!;AZhW<M;~Dq>WBHNdEWY7hgYiY+zR
zs3B@-dbJ)>Qm2L)RicI)H9|#ck&4lA6<6@BX{b#kOKq3c$mWcms#GbHTw>X2oit)m
z`fY2gbCfD=UhCcF$j_^(PS$KlRyQW>GHHH2=e)ynmDn>j{aW4#Ri5sh->Sx^pU<D0
zn$I3r_%LhNAqgkHfYt24LVlU{?)hTQSsnHoqiv6@2zzAd*dr^$9+}|oeYM=jVzK2c
z297?i)nOIsYMJb1zql!$lRn@dn>vZy%2>$NhP+nfM_n2CqZ#x%#&v}xX&DS@h;11r
zmh?p)`k@FB^yg<V24WNjVGM>~I)>poln^<Fb0-ThdmZMm^&LE+BpPi&PTvdyttf~(
zTVal)ux~Wgf`WDg6*_n-GU(lNvp@k5<Na~;!bqM!if1-pZT4h!8{1i+;T#Xvv3B%v
zU_Z`q;^rjeAjX8}#ZSY}dtx25+&-NXYV_-*n;bHj5IKSVO>hSWP-md66VI*;;^54n
zI6DmHAeRhrU~x2-!O-+uy^2%A9E6sLEQNGCN@OjhWrM#=sSJj1_o$}JrzvoVFoO|{
zt;8WegP1t#utR(!3dxrdFvrl$u^51Hbi15xPb4Z%VohAlyiZ0grqccC*nk<>gPAy(
zBG?_lwRCI-PT>ZeX7r!KJiNpbyM;$ihrWckMtG6Ny2}ikQ)9kH86|K~q_O@oDxkZi
z8jbu{3K(}D?h6QV&jxJF2As#c7;<2Z?L`Lhl*Cu^7#Jy;BNNXc(!o4Qtg|kcw%{sv
za!U7Pv^!buI*GDMr?U-XD%>G=#9x*Sx=1n@8x6T*JY!r}jO3!8I90Itz>aaTSG??%
z+!R9-#9~&?5)36=mN87z*cx+C#l~62=18ysRxrpb?RZ#Fmr$e`B_*iQ<<>iN%FBay
zjO=ozyvrFn6=7A3&w3LR7yM;$N{5q`V(|7<gR^kRzgL5Gr5dcRU3N8SsfHeZ%9(M{
zI2YT+uwim(WCZIGMI$R<BeTAV4sK@Nx3K8963{ncJ8rdIDTXUoa%Wx1-4-3j?ElOk
z{Uf}Jm+5B;i*7CqOc2LnEtnYbtaK+=mV3xo6k^f|Opfeay=P^)4!JtfKSUImQeg!>
zA&a_I<({AxuA-`3%Vzi5{U{3R?tO)rnjRf2NQEn7L8}eZE4(3hCvrm^G8oi^eAWfS
zIKvKO$Q$Hwkw^wJL*A3PrZVJ}hR|)eHiPTPxnm)3JFa(PaXjSBVAf)mLovUDd*Zef
zy&1RL+5Fq!#~lQR9gN$YJ6U(T*g|(PEW6nmce8o+usZe<`tD~q(^P!`JFyS<@wd=J
zc#yqw5GV04&fpMUz#}-v-!ZS?Fm6fb74<gZ9EOgsk{!U&MFpuWP#wl3vA7^w*#fh~
zRYfFg#|;8Evs=-RzH*VkBB)?GSc-Nl5K^1CqNpM8DlIctl0iSR7*K3O*`xI5G4_5F
zTlWZN@fX-UJkD3*36}GdDLe5VI4)wApWFDpi)lQfhBNjo1i7qELamK(y<{e=orN5k
zu?hv&tPJM$TphNX`WQ5hv%#8)@2$l1Hk#3H-{^+3pY}kd<YDf*F~U)9bj$fi$z&f3
zYLP!hbNJ4ar*UcmJ>vtQa<jE_06YAir=<S{1VrYlk}@P1EU2`B!Isr_%iLG=QX+Cy
z*@~VkLR(gA%k&jl_CQxwYIRHPBeT+@|BnfLswV!ACS;BMpb55Af|gBv9$!eXe7ty;
zHG8%z=ISCRPJG%{+pfj{Q{*96qt!T7#`pLj7vjv>Lk#o7Hhs*dU$yB|Ha%n07j62J
Fe*qRkk@Wxo

delta 3055
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

diff --git a/bin/controller/HowToPlayListener.class b/bin/controller/HowToPlayListener.class
new file mode 100644
index 0000000000000000000000000000000000000000..0e5f2ae8d069dbad3f7a7e1663795520fea7cef4
GIT binary patch
literal 525
zcmZuuT}uK%6g{(UZf;h7rG048n{LrUFFhDRL=s^oBtpH7I>pGk8{?|=vw}(}=m+$p
zqC55>NDp)8-nr+TIdkXZ^YtCT9@cGGNXHOG#=??~2(milEG%1Cv9QVzz2i#wAw#Cx
z;RAl}_J-2Gbx$jbcSV`{`_h-;0Yk3%AE4A=Fpq+^U|6h5U!3>5O`+<%>FE>R3T5Ee
zgt`e-SF{;6zC~O<3|%pxd)>n^<XGorEoNT^ebo{bsRgnp!LT0GJpNFXy-@f<?P!y6
z%wa8#7;J{rK#HOJhig!!+wnN^C@|z(fgh^C^Msm!e#ICPTF&)2z4)Tp5iOcSVSF@g
za6*X`$2NN+Y{;G*ztb#Umm1ilF<W4mrDbSy^aTdxWQO8ARSwk#?Y1)lbGDvgJW|E5
zKyiWo1%x#T9V0YN4~ZY%F7<Rb^@hlm^8{lA^K9FE!OS#2N$eDoNE0(j3<Iezj}~%8

literal 0
HcmV?d00001

diff --git a/bin/controller/MenuController.class b/bin/controller/MenuController.class
index a0fdbcd2f9637a90bc49318a84c98b11692c0aba..faf78fb7440c8d5d289d6844ae3d8ce046ac8f38 100644
GIT binary patch
delta 346
zcmaJ+yH3MU3_Z8K?QKI^Xee!Y1-cbfR52iilr9V`>3}L#VlE!86cQ;(VWZ!GGBNQD
zEQtgXAHa|B7YHX4EZCCmWBVM-FO^KLKEK~S0Gy+5poVn=8)zw52Ff|uL_6<nDRdON
z0@bnhbvzN64BWfmmb}rF{N*&S9QR(+LxJa9IPN0w<1p|%3P&>vHAOS>Xb}gYb2Jx_
zmrN3PdOSO=qo=TKVh6hdonN%;rFL}`lTV?-o{4?fCJu0z*y1Yr5*Nv{a8|8|;=lR=
z_Tb;^=tJ?dxe4|<432Az#{9M9+&j)7hAB$#DBom|DJsL06xG*)VRE#Jy&7bj$rc*u
MqRAo+9+lAi0eyx`?*IS*

delta 384
zcmZ9I%}&BV6ot>w!r)LWMMVXFK>PtjyD`xOqlOI|qK1ueY0Shl!8U0JS@;wU58yMn
zDTySy_dR?K<E?~+&Ln5@ow@f+=8pB3WbgC)?H#}|4g}`0Bv8OI$BKX!!zzlgQ{q??
z;M41Mjtv13!zPLxWsV9%>eO)^b;eK)Pb#6hxH7TDQ8loQ9frca=PKXp_oZ+5WYBd2
zC0*%r>>AiZ%|QKs)ukNHsth!+AAXcrGyLitnGaG?#Nbi32TFM^gH@|{pBy=~+seI`
ze&DqjvVV+`!&+938Y#7NH|rcV*!eRm$kNB-#b}$zky=DIGy#oHyD<i9Mo3Jc-HxG0
sND`$c;6&*u%}pSPG7*f|-=I8c0ZGy{bedHj8I)n*kRD@LAU}b{A6|4!t^fc4

diff --git a/bin/controller/QuiListener.class b/bin/controller/QuiListener.class
index 180a921b94ea0b1148a47d48272e0f6e5d60bf5c..28b48c02e9c8c6900c6b0e737886a5fac5e77988 100644
GIT binary patch
delta 19
acmZo=Ze`w3#mLRYz{tSEz`(%7zzYB+m;!A8

delta 19
acmZo=Ze`w3#mLRgz{tSEz`(%7zzYB+qXKRK

diff --git a/bin/controller/ScoreGameContext.class b/bin/controller/ScoreGameContext.class
new file mode 100644
index 0000000000000000000000000000000000000000..4b2cf7c70ec9b9e12a5130d4b8c98507eb32dd40
GIT binary patch
literal 4674
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
DLEEY#

literal 0
HcmV?d00001

diff --git a/bin/controller/SerieListener.class b/bin/controller/SerieListener.class
new file mode 100644
index 0000000000000000000000000000000000000000..33e475035ef83fb450ce6af472e39802b1107fc3
GIT binary patch
literal 573
zcmaJ;O;5r=6r635N?8T!7YK;nYEA6Hg9nU>A!<m7nqa(_vXYY0CT+prWdfRb@CW##
zjBo1~B*x2Z-`kma)3<N$FRuWOv8yAC^&FP4Az@R;7Rnkb8n!i58CD0*NVLKri9+8O
z5ks}({#5qm!ex_z$0G7Xd^H~RB$>4tvL{~PC8rDx^B-w@|BfNk3j2bg(D4HCX>sfH
zeA#i_#0!HP5#5K;Nc2;)p)+x8=OMAhL<EU_mQv2;cT<|_-EbVa;=+>#Mpx$QcyS^E
z5gke?2S<%#895Fec@1@r9W)rqb3eEsV<@IGeJ2>$*S(=|6NdVqF}^1;sHO~4ne$v+
z8U^)3r=JdrX$2;20(<lnSuki&V91E{R)$PTr$T*>6~a}jj;L1YELhKA*1-&lRhvP5
xq!z7>&_ISzC(M%#Cy|sEQTj44$v`0nx2B|>LVZH!SFNXaCDIziH;AWT?E{ZvfkXfR

literal 0
HcmV?d00001

diff --git a/bin/controller/SeriesSelector.class b/bin/controller/SeriesSelector.class
new file mode 100644
index 0000000000000000000000000000000000000000..4b9fc6abda15957edb84e5ff9140253d5eadcb5f
GIT binary patch
literal 1445
zcmcIkTTc@~6#j-wmu?rRU_q`{EJ{%+-asv)Qst7=OI(B)pQi073)|ghcM9@P{0n{5
z2QirV(l_I8GM?$ybQ=iq#cg(GcIJHNJLfy6^Yi!d4*-i;*P-M50If%KjAAT`aZC(=
zA*tgMrZimEp&_MVTEi8F$dct)a+#rXCcVYbm2*pip+9dq;zhMw5Z)#)*t9d~OYX@v
zUKZPy+%bh`37^boHWX^y=H)_(r%tg+%`@nxTlI=!)oM5ju%@s@QM%sTF5l+{VlWuu
zE3PYj>G8^QA$Q!8-ygx%I1HL*45Tru;hKT#xS?UrKnC-4aI*)u4BW;Y4R;MJV3DDB
z-x3EI73vl(l<zphNYQnq=i0XLGVKu%uZkgKbLT_mWnq`X(s2*>bwu%ibn&VV!!RY9
zZ<)QWI*!sM%P^{TKW6*`i{Pdj-$={0WJ8~r<?OqABG0Apl#|n3C;>wen1{X;W#V<K
zk|7ZwEI0GYvm9wkPw;Y9M;1#AX|rCVIwV=ruh*2Emg_k6nn((n+!fVisa`8{&#Tww
zh`Y@9M9y`JT&e=nii+h(s$rr%HKL##D6zpty6wyiT1CZSlO&07HceD|OT$A0%UCgR
z4si`RRhy>_Q!VWRNiz9H%TS^Dd#)PckReuXeQ8*w=FGe9UbVttY&eeaayIvU)poza
z)J=au%dB&!WD7qP0J9;zn-PX~+JKvf6%jW7_rrklY;3r9nx1pqwoOZ_7D}BECkQqu
z*Xmz+KK=i!n<BjnsTBMpvS($WVU1z>L=vY}gkkb*JG!Hybb+a-lP)c~7ijFIuL+tN
z&E2y{V4rEh&_`pWv8l#>#A#Hf3+SL9Ff?|o=5Ofyf-YKj178toVf%;zM5hQ7h{bi)
zvrQjU4SGQT4(;ve5qh>;xPUWC7V4Vqz#yK`tP}DPp5ZY@$Q$Ua14Cppj0^Nm(&@!N
DB#etH

literal 0
HcmV?d00001

diff --git a/bin/main/Main.class b/bin/main/Main.class
index 9c0bb69318782619dca3e7c6c6a47c65c88f7d7f..e9b291ca26fd235cce9339e8f52cc7836544f715 100644
GIT binary patch
delta 936
zcmZ{jNmCP16otQzNgh0&k}xSC1P~MnB+fWbI7^&R5$7hf(iqd20cWHB1FL_5f50ls
zDx{>!jXTSwYxn*Iwba{LXt}Vu>YToPPTxMa>%Mof&+*E~pYPrS!#vk?kZh3qb(-~T
zP;As}VzXuo!vSoqV;kE8*ip+)cGa+3vxmKkeF5)RjA-gfDh_Dk0Uy*fk_?JNio==~
zj%bc@Omm#k05Ub26Phq56{lW2dSab^@jY4TBw-QT?|G$SsbJ4$oYJ&6RjiM4CPqSN
z%y5=-it~nXE?Csww%vR>BcPZtT;!7Cvf&C>4cEA?unm)B4O1i(j^PG3Em{w`*=g4)
zblK%8*XwfgrGi(UvnO-Cj$+#2(r3{)W6#;?oSna!K6o$d%$8g)A4oI)2dk$dO|o9_
zUM}Yp(qm4+b&6w7&dHX%g5egqe+?NYUmp46H*|7aA?-Y76?Y5;iiQ$p89tpU7u{^S
z8ZC9#o-_0YabkbtoSdBTM?y_CbKDJn;Jr83LgCPsc+n~So5P~BfAqg8cdR{cvD^O=
z?r!_P$-f$|_)8*9b@vSqcw*=$;rB!~TTlH9k+0!r7JdG!$a4QzB<fE_Q}GVjAtaN0
znuK7N|1#Rr+%3<dQo%B6>0wn>`4nwy4HQjCFh&jCqROyU^;h(CB~UkD1p82|rj9k@
z>!*pev@;<7r1%HrT1T2x6^CVkS6BOmf6%K~^9?2Yxm3k;5I*QF>U|=T5_T<8Kk=5>
z@kQdo4Wo-R3O8kvgY#6H7ipOoNDjVb`S=1WP7EdIX&oO5&(qe>zQD@Y(!r7xNER&^
zml+x)VKXaa;X7!RFSbj%l`=(#oU??Soi3J0dSvDS9t&&f@Q@0R#62jrk$OlxDbgWQ
FzX7svw^9HA

delta 775
zcmYL{OHUJF6o#L#wEfC3gaHazXpu|7mV!kT@q#xLZ-9Uo5WJRBpj=vP3nDC7xOHRZ
zKe$&DAdvV2Oxzh)Zd@4S(ycMZGu@a;-uHZS&dhnv%=uioZ*714yZ-^`W6PkPNR`B0
z21ki&x($xeV{n`kj`Wssl0HXHm2#RhKF%8Sb53*K@e7)Z1{Fj!mkcV27z}XP;0lA9
zs|Gb(a}L*i+%Rx+Q!}LSzJ9f(hHamUZ8s29SOeK?Az#QPR!35Wh3ss;!pn$7Q0$h;
zC}Wy&liS=;l&&PwnfQo^=B~*-CNz^K_n9)8=7Hv+$s-<{JRzugYLZ|^Q9YMVE~Hbr
zrgWx|%dV{_W|mW$q)Fo}Es|bLtS92jiOhU_a3h&oEu^y<lUY*s7u8~E=1k^U(4<Wk
zS+WDJMqdNVCM#s@QCCe#GcESKD_osr)fw`cq9nJLQPf7F_BWUR{X5rpWtV$4Rjd8U
z-P{_TP#F1CVIrMR3y8uUnU2aFIg>okP1*?BZ#=!~h5gm@)4i!^vwwLT?H}H*{(AXQ
zNDGC0IMI-tLgGr?)3J+sD}ka>)LXn+PAP|Jk~n0K>H2_^F>r}i;FG#i1iqMksmHgS
zY!9YrD_S_pXvg9Rej?H^DzzPiiP1@1t}eP|W%@*0<p~S-AHtgOZ}fnsTw8`SiSusB
zCIz}gJbpmM)GpT00hQua!+TVZbjEh@Pad#TGu08>rFOE@y+d8qp*;fs=V=jMr;AUv
s%%WPD{Ia@r!V?g(ppb;5L%Y<tgm_)tklqD0SSwZ_b1C63De}ku0hUX7i2wiq

diff --git a/bin/model/Pocket.class b/bin/model/Pocket.class
new file mode 100644
index 0000000000000000000000000000000000000000..11cc732a15aedc06df27f6163ce5ba4b0d71b7ae
GIT binary patch
literal 1091
zcmZ`%YflqF6g{(TS=uhoQne^552X*KzL7vk3<=Q$m86YEzfHHBvasDH?N*~d$WMOI
zL?me95Aa7B&&)2iR?KGayv{xM+%xm@*S8-4R<V|Wg==YKaoxmn28n1<%%X&{3KbP@
zsBkkw)QX9!iCY5M(CKuf>(}2MIs&<!cF=UZYQ4X?E|3ac&*=(G?Ci@ovfAUaT6034
zq-$==mtn8N-1)yxH=?C{8&-D%*ALe>i67Z;eK*_`I9EKQQt5?2a*F~~Dc5(N_1X=m
zQ<n{oJL4@U9FQfDFP6^W5HJa>x$l{hD3+dZEt}0c8(??EVNI%{We0vp2fF_Sy`}|i
zr_&<E)T!>>z&@Y_ieRi3O8elcJUmruOV93kGIVNopq$Cnf?mgVwzY_Cl)0j;w2;GX
z3u723bKl#?vb#rrElgn2#2pKFF>B!-?pt`E!YUqGC}5V_qw9(&1tv9zC;e9Sd1K$P
zL+yc**e543UG7E((HdoBWXnL_dWk)co*Kh@Bk+;u2^3<iegj*9=dp+z_{3wL&&uLs
zH2AS2J!1o4YkEEnlk*&A81vj&<0CaV=F7(r<;oF^@^>U&9V2;!)Mp;>l`u{t$(Uud
zkS6gAsRhpCLQFHqQ4o<Te}VDoPuhsyoMNO=jH==SM+MCgnmWOVz{eqcp63^FDaIFd
zFMy@+l@pi-UiO7$wE6<2DgHTJj<XiytZbY$YW!11X}*H1al%%dFsnMK@c)1*ovT%*
r<D!OkW1OZzTfM->mN)}<M1fQb1AQ7?t3JO*|K4z)%RFBs!obpR9R|)Q

literal 0
HcmV?d00001

diff --git a/bin/model/Tile.class b/bin/model/Tile.class
index 127aa6af34093ebd01916e0f201131ada450f0a6..cd877385dbf38369da966c22fa88bbb36042fdd7 100644
GIT binary patch
delta 362
zcmYL^ze>YU6vn@M6LU?XwN08fCb3l$t!PEapp&>cI0^LuEEtMITM6A=UCSK>2OmH(
zh=W6BaqIhtcy18oz<2)KbAIQZH?a`?&+qpVzzKR5meDmKuqm*m{I-%<Ng}W#usiQR
z$u>LonxkxXmF4;Hc5*(=2ia(xO=k0tOF3o%^W_68?@j2iV8X^aR?x*N64b!pqDk7I
zjc4FwKr4KN8}7eCFP~v4AEpH>=!L@}twAGoh@fUYGEjvnOzRIepk~z;E0A$hzc8-r
z#@%T|+0rjnOA7_p(|@!>p9BIzhlGvDIu+gk`$EKMLmR#v@<ThW4q$YQ%02nQeY;1s
cJ?aS%$^}ov0mV@jyK+ry*hiFa5TB#-1B2}{nE(I)

delta 355
zcmY+9Jx{_=7=_R62iJc1K}#uk(W+EIgAOKYjDt>1SX|%_G};h|LQ+vj{R^a<CJrnt
z4i3h_fghlgf5`Z@VKFy(-t(Sw?@8_t|KN?U-_I$4Bh+=wVNC<aI>$yjt10{xn;csl
zwNc|GaoPFk`{2asM8j6pxsLk7n_v*Pqc{$`eFml8+-@@Ht-)=45e40=h(T-9*z1LN
zp@~Hll1DZbIusbtV4{q9cvyf>8G}vvsq7>bxnx+B*yK5xw`&w>cWE!eP3~o%3(_Uh
zW7&W3NSCop%+qg<A<+Q};u(3Nj$!V+LlOHEDC~`V2^KL&w}C1Ikwdc1IApRaSeexv
i&T4G&1f3ex3G}60DlT9Dx45WfH7X<{VDx-7%e_D4M=@gn

diff --git a/bin/view/ButtonHoverListener.class b/bin/view/ButtonHoverListener.class
index 6315df6a6dbee8bec7594514aa0a6a014ce54104..874630d056484c58ef08eccb5342be6aa1911d4b 100644
GIT binary patch
delta 438
zcma)%J4*vW6ot>^HD;V_b~l>DjqkUsunK~Rjc8*dsGViN6pFZ#grv-GkU&8E30473
zKtZ$<3;&G0cxJT_E1Prg+{^vWnQrPPwf^?`@C0B3O9~1_i4lbuyfo4%85va=!??tR
zg2bf6l*IJa=KHpVtblb^Zj^&^vmWe*=V4XD!i>fsv_=M6Vpd}g^8%U1X{8zL)GrPy
z)mo^rfW`Ka*lKsgWh+fv(9$(`>|Aro8VC8vQf<Bt=`L8;{62*Lh}f}%R|g&Ygtd?O
zJrY0D4+pn)jjL#y?D9y!p;|<Om;`_2(NxeXht@ZLj|t4WwA@4L1@am>(>+7(ulRRJ
w^e|vZv54f7VR(x1T*mXLL!2<ON9-`M|Dq;IUHyyA6I&p#NUZl8n~(epUqfp*uK)l5

delta 439
zcmajayGjE=7>40@*0__bo3ome=VP)7u7x0CBia~6D-kRMf+&(ej7G5V8YCcyR}s(%
z3Zk7@cuC?vLBT?>nfZ2S=9zD9?Y6!2{`vR}EK+jlBcsVWSmZ)D44E`+(ul(-W14Y?
zAQPHN&D7Px$7Yn6B63tYtN4{>!(Xc%*Xk}&rd?dZCe64+2y13t@)Q(Fv-#XVX&zP&
z{EgMqMx$1B@hG-d)v~tp<#M^O+qzKo6;lT(U>T~L1d_Q2C2mZ{xO{D+CBdBcfbyQO
z_Ts$7xsL6(=B@N)?>%-~mK6yZBXSsdK|r3A5?<=i{|&9nMP@Zu?4Vx>-jFouh2U1n
zyCcvcWFV^xC4@j)IMO2_J+cA~$RFvJ6>soI-QgeB{)0^kn-(@BZ0<Lk>fWFJ0;j|^
As{jB1

diff --git a/bin/view/GameView$1.class b/bin/view/GameView$1.class
deleted file mode 100644
index 09a5b533f4ea99dfc2b011aa855466e82c064217..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 514
zcmZ`$TT22#6#mBB>bB;k`vnS<GK03BdN6_zv%n-Od|%x|PUx)ct_uCDpbPZS59mil
zXQT*&24=o<zH`oZ&dhv#zP$rD!g>lZ%$tZKZz6{U1B(Wh1rlLb2E_w`Ok*TzY}cJW
zwb-a|=vXQlo(SYie`32WfmqdZNta1Q&0)Vy{;kvQF_Z0h{eh=Qh1V3w2XX}prN+H8
za%^WD+BD*bUH!?aX}6*U%^Pp%cj!!Nk@U|T`?`?Z)KsVE1ybEzQrPue11lDiSQSV%
zDG1NKAheKxVPQ>^nW?)J4+X3XrO2=LoFJe;VB^1ePF-gZlFt)NNeDzsddN(N$0fh+
zOZUoA)Waq}Yn)$LWV5<ITM^z#q`)^~tH8cy%<|qdMEMnwNA?6}_)IVYTYOqbf9Dq&
rCko{!h!;eEv&{*=%{_Lw=PXx7kU^F)#vhu;+=R(tiP2=07$dJQT?1=n

diff --git a/bin/view/GameView.class b/bin/view/GameView.class
index 7671e64103794498ed0a92b1832dbbd14560c867..ad40ca61a8b3a96581b2262fd350d86f2331dd62 100644
GIT binary patch
literal 3477
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

delta 1667
zcmZ9MX?Igq6o#Lhp*Oufr4uPg0RvJfH-%zllrpx^mJ~tkKm@IkMhvtGbf5*%I8Qhr
zS8&F81Q80o0g4EM!}5d6Z+_6lPjLAQT<()}fwHphIeR+$?DySg=WxZZ6Vt!^bN(W*
zh@UKcv;}ClSV@P;X1zyE?zPCHO)FdUvQ;nlncQztKwG{jo!at%mSS3ZFu*pwcbUX3
z%6Le7wrk77CJBoP?68>0&H&veJ!y*yk~$=1vddyByS375(q}P^etm90$L!J4pvjOv
zEal8(OFnzqr=>@<Z@-ov&6oU-X*I2-$90iU=;cY1rz~oDS|57G;#r>4@y}PAyb$0;
zO9(ii4KG=|%qzO?ojUSWElK(^4w}5?G#I}Z<kcmTiT>pV-YRFWXRGsvr?xgii$USK
z_&}&D9%>y(bjSM?hj0u^cf|I@hHCl-6Ups0>(=(hdg6-LIqY<LCp8`64aJ+hrFffn
z49d5qlKs7@?(TSRO``<Xiy9y5S2VLuv4M?>RjgLrt#8Y#kBhfg@h<N<m%YL22uBt5
zG$=N)aqQxn*kFH6L!u|1>`SDQiip1JeLip&`YH<|e5hE%T7wGbnpt6K_eY9Gnw*2a
z8R-ZgD?Z^<#b<o3_<}EQMzb-Nj7tx{QXJ#B;%iPQzTu?e6vK+soKcKu)zwl)UwxKy
z2EqSQvN|=?65E>^5R?(lD@HkPazXK}$wkF?Tym~?Cpb0!pdG={U@x0|ueich#Si+{
zA9Y=YdlK=%ENAT^I6eNAeqUAd>~`mv|D1CuZ;r9bxs<oUBZleb-y6s20<zT9r@B+U
z2L6tw=GHX^#V!B$ES1cC@&47ZZ9BL3rUsH-24z(@$4JspV7S0)X>M$4?QGn%Dth|2
zfMKM4S~SR)1RHk6b`QkmIj@uv13w<!NRd3cVcA{!klls->@F>r-G?Exw8*+1jA|J~
zuUN0z84SDB<KngRT>SPZdC?4}OTaGi|5@Vs%OyW;8!nc(3dE&GD70;taU&GTR&3j6
zC@L*+DV2b-sNu~peuSX7%3H#tOo*27bBSkjhKVk>*x}MixyXvBoGa94<qKw*Ji-)7
zFjbqisW8K>BZNko7PZq7A*LxArmwfFU2fBgd?A+^w$G*Vlpry<OV)ORvX%<kGAzbZ
zB>E)EnIRKATcr6+p^lKSH(gk%q=Q*(rHUT$_EXIP=5UmGoRIlG%>pjUFkeZtSm>3Z
z$&n|LrX6ODGE*3t)e;tds=~v}cCmAqy`d6sD2F+G@_KdUauAjhkQxeECiN|s8dgX$
znZvQ<G3kr$%o1TREFg<q($!~})8+536Vu$BNh~#DSteRx#blRxTFAL>zrjZCzIx%K
zK^Ryg*wzY^M!8SsdhEUnV_^1Q2Qx}-H0;Z8M-J3{H!Y}&t=#V{3tSco$VJi8#Tk~k
z+}V+Z>@Btg?^%{=i&PTK_5Mf+N3uNBY1=T%T$XD|+O|T&3uY7CplGiA!6K~*$YTu(
iDU;>7R)&T0B~o!j>h9zo611|LHug#X4AJ%LZ~Yfz=3Wp0

diff --git a/bin/view/HexagonTile$1.class b/bin/view/HexagonTile$1.class
index 29970983ad6f76674b6177c45aa1d6348b70b49a..1927cf8300689e07f5b298323314f22cba14ec06 100644
GIT binary patch
delta 13
Ucmeyw`iXVJ5+=sD$xE4h0VweWD*ylh

delta 13
Ucmeyw`iXVJ5+=rk$xE4h0Vw+gEdT%j

diff --git a/bin/view/HexagonTile.class b/bin/view/HexagonTile.class
index 1d2ae2af19de63520db1a29bb8d8507ea79a96ed..e4b508cb6347c4cc73a8ea4fa7da6f9662d653c2 100644
GIT binary patch
delta 1475
zcmZ8hU2_v<6n=KIn@zT_A*2mW+N97*izI;{0ySxclwzs26iW-Gl#hlawCPtgjZ^^*
zDjF5B;`#}SiXZjcw&SFXopHt+o$<y$;f>yS>vU}OoHbU*i+$eroOjPT&w1Xn`(5Sr
zb@?AxzWEkFBW87MMYkPWaEPIYp;yCU9V(9KWb`o{<+u7Z9AjgE;W)zy9Xd|(?vxz?
z46+$#IL&54LsE&wKz0RE>^{RVq+|FD(i}Cy_Naz29X@pHm_UZ%L57EPbRf$x$&llW
z58DyOSshb&gw018&M}<Va6zZ_F*Y98kk@cg!xMAAHA+=aN+?fe<5Rt<Y&M>r=t&KY
zrzUcf5~_`u>@|+bA?YcjAdfUP;*!8!*deeJy9DmUb_uSL_}O?kK9vjaOH<fnIx`_i
zwWkH1K|$bI4%vr$jgZBYcn;4CTxPfr_Y1s$D+2q`F7P6z1zy5cftT55U|K@OYT~`|
z$#kM8m(7f(IQ1(6ui`a<*KtL|8v<|Qnm{KG2wcZo#++sIz}o^h@Q%Q{4DT`A#QOpt
zFnq{_KH_>a_*lay0-rLW&)D-h!xvoKv0A(}GnUD6*)IjY!nCnd`PGQ37wh!#OfoeV
z?oE%Si0e=)S5mJnlPw8o{H!hox6oJs7Ram??PS)^TuDM&?T{$<-GmXtuI-Sb#%`^4
zdlQ=3L+5^4C0f<M*N|svBOyv?HJz1&_h2_+#JH+$=;RX@6vAp6P9Keq9}d*e`5wgh
zEjsycLgoJnYw4vH>@^cEYc-*NOVy*5f>p?6F^MYBjh6ELLQaj2&Kvt}u@+|_<aaA>
zwTLw{aE9jLEMjfQYc0YRl8SJUr<^^DsOWdO7qG5~O7qw=M>%9fjh}46d>2V_m_!*s
z69!3&A?h+meV(H}m_`MZ71V3cC8<SPMuViGO;9w=Qi;_C;>4_4EW1><>a^ZOgakB+
zd85`~fEiU0k)Y45B#CiSbt}XCIGf#Sp0J4OOR6;U=l3OEl&gwV2i4c9dpGsJ9&L0N
zt)y(b$;uA-4_KrnA}sTOm#8dKn4rMHMfmy`;EyV+oZ7kCaN!neBG&4Hzu>Xn!uruf
zK4SBgtPP`yi0)ReVU1Vu*gSd>wKEX^?CVU53tpv&+r8#xl7dufE6NBvXt+92jsr9S
zT?pbJDf$2@*-hknaEQ*1;s{Ql&t&h0vJ9c2Lt5E}W{bu0J8VmQ;rwZpTDf7`Kwt0&
zX!F=OJCFKc5e<f;Y*T&{S$EL0d3F(jerMfUTz1wiAV{tdJsWw}{-)PJ#6Xv;;5ckJ
zN#DaMqQ(~;CoxYG(F74pmPFNTL1N>u&_~o|rZ`AlfPy9Z)or7li_(U18||Dn8u|{5
G!~PeObpUbz

delta 1685
zcmYjRTXz#x6#h;!laovjZ3rEj+KaT<Qkp;jp;}s?g$k{5DYOWcTSGf-18ssy1TSc~
zRIB0z9P0%X6)#mmZ3|9Wb}iTPMc4Ap-{6~1KKP)l1-SQ+RZZ4>bM|-kKIhx}>@$}Z
z{#26t_0A7J0(b~B23DXefEc<Nb~8LKvB!Xpy#^UQ3{SAvK8gKo9AG%eaL9mxUITF)
zX0tDVDEgVR7zWrJlo--lT0pjm1k*<dayZIS!we%Fn&g?3#4!Vv=rWK-h9S%Fl!0wH
z&TxX^X<qi309N8z1JB_ko6j@6z>t$TWzhRH8)qcWN{mXpD4;r$Nh`f+IG)K^nW?|(
zgm}rW@PxzVbz6_bkH=&26WQ37bo|&*qA#<mt*OJ_>WPUl`=sYcQzKqhSc3*d^?F$0
zL97-C%>}h3MyzBekxD8w;uVEgaZcei4%v(?c9l1rdmV2myvgtwwkn**1&Oy5Y-T#}
zsKVPAS9k~SD!hja3h!fFpm=VBjqyyPuPd8Q9kqCiiwc+Ufx?IEdKn)ne2h;Nwqu9F
z6?`gCHWxW)rAA_%_9;!buX{uLK2!J{Unop4e97<?zE-%(aE%3j!#cjjcM_8dQ!H<q
znd=NUSXANM(wkDlsWi*^Ucte*y-52bJd*0ShGX4{VN0N3(8}&gW#d^Yj4k!E^(GNr
z)*#g?o7tR7cU$RnJdqU8>N=Ko2pBY-=j?0xtw@X-4)DUm<))E`55RrX8PGcbL7T57
zY_fmztrpF;PgcowSno2+<wCQWynJK<C4?K$;?DHQMLC`cK_e`qE-$Cft3V<3oj@x#
zvKP%%(3@lR`Ww(DX&~_5f>mT~LK`8wuAn!&&STe~A+-r;-fKj7{ufe%M~KnkDQGF7
zq`5cp;eV1!NpolHB7aMJNqw}!)J%6<2SpBo69`79G2cNbTIzGKASxUb5>w2~EX<zJ
z!Won}2)omzQ};Hu&-){}-PExAsa%Ii=OBqmVjbO>^*BxCU^&Im?x04(5TaGw#xfz%
zu1GdDWnSFxBrQOm1Du=J!F>%rZ-X>t(02vhrZn~5pzm0NKVte#VnX$Kw=xIi6UY_0
zw&s9sk{c;EwSG#kUpKWOeuB-WBydnMD#gUzt9kLXVLhD+=rjx}bTO5>k_6XM)z(nm
zT4~&db{wKPi==WYP0(&*o)CAj1ObT{CzTWK50sX17X@>Cp7sze5&Z{?DP_8u`IKkr
zJQS_iJB!Mm8Qi~C^ET+F&Kb9pUVUinCKfgN%El_j!oHiRI@;IhFV7p*WEiG?5k;k1
z*q;j<4i-;9vBBd9Ms><^rj#mDQ|flry%t$c;y|Ca0NvsR*g?s5B7&WCa=Ylny68N1
z(`Y;P(*FQ@+=NX|SV?RXchKzhdjE$17WWr_2=bYPFS`V=C-MvAG-@ZOu_WT4&K@$B
z<d%|EPfuiW7SWzy^?aNQR?lD=QOoJ6<)*(UuhwmW1Jtz#;YTms$GF>6&FG_B)ld6b
uByzx&6@c_dNKT=bE^nv1#7@!<3KsOqUPYr2ExQu)XcY8Qs@w1+0{;Tc$}OV+

diff --git a/bin/view/HowToPlayView.class b/bin/view/HowToPlayView.class
new file mode 100644
index 0000000000000000000000000000000000000000..689894b8ac0b4853510db2bba55ca88baafbc3f1
GIT binary patch
literal 1653
zcmZ`(O;j6I6#j-Jykr<4Nl8meTc-XXgwSZKR7q(C0s<z0gaRr4J(6cSI+?-A1ZdYD
z*Y4bVj>p4s<tFjSDH}E(H||`ya_vUlxU$|i!FJMfoaDT@_s(~J-o4*@KmGH=34oi}
z4I`yO$2db;MF0~F*Hna%k;=;quc!#)x>Rm3yc))9Dta)<a5Ie8RrKKvsZTLvgLf#N
zRBlP|bQrh8xD&>k3^OW{m{l={oQh#g%Vl0J3k+{DEGp=}WmtxLTfv3V{KtHsA7<(Y
zhE>fhFF3p=vSXVHf^&97DCo}{mRM=jc7?OScTKYN7F}Ncq`>z)oneV#S%F%#8%|j)
z7!nd+v=27yHIqNsG{nI*nSuP~>{?A&uD)zHgrngq-X>&6_BCz^Q+~-SNcg|Z+J|}m
zz;3wmV?o0TRu%L~M1~)@nK|3Ey@+cX-og5_Ve@=fn6iM?LScSoLtkFKJHIX?70LJ{
z$bxOT3L=Zb+!wA<<`S@>;V!5dUYTd9YJ0Xt+t9FuZ4D*dQ;^P`9_^XDEF9hBdYRWw
zj~uQ~>1EUSv?270V;in6tdDG~e0ro{a?P$2v?A)d+n|QkpF*p=QNAzqdc)BhmcB=Y
zxcYr@$g7l7!NjU#P-^ZPw$<rguub8*luF17>NE?Z?k_uMQ0wdDCU>>N@UDjU@V<r*
zu%qEaaKi4>s4^XcQ*h2dgyo#UO}qMRcRk9`ymmU7<TX93V5H43uX$~DdAN+piEl;M
zA=+i{Nx}t2<vQqt&(TCU(a*^)$xo5GaN8_UFyw=^Z3S-eDnTWZjV{q6rC#!xCAwA}
zyJ1ymLq0!`H6A{3X7$%3z0XcZN3HF+jN-Nl6Zb`w7B8SoJ7XGEOA>yY4%6s@j2GY)
zsv+g`pfk~?Q+BM~mNuRLGb#wtR-|jce-d;Y$WnF$cg4C<H7YYCb_RYj@c#=ecThAQ
z5~~s<<?XV^s&!$~dtYqWPj}y0(%2?3XqYZA`6%?eisxv3o|MnQ=sE)aOpV8tU<+Nx
z2$Wg~7ShKEmC|JCZi0~#F2(Ry4BtlUG5pv<qzUyHJ*BwTLhs7NG5SjJ{$TV<3(+QG
z6Y+CR45TNTNNjni^MslTdg28shCFdlirw9hC{7?5ES7@FP_YzBb{D5ulATP31Cx<N
zBoY1!Gf9?+T%S^tlv5@OL<ic5l4?8CF_NV~RBhqn_ZX5{(@9mnK8q;dJU&UKo4B-<
zigj(rlrNgNoEmT9%6GKuF1$eNCK9wp=nn5e6dEq07dOz4Y0?Uap@=x$83U*g&c=B>
z#2~(=>$-`Hc!VMRj7#{1Y`;>Ef1@t{PW}CZI{YF<9YNP)d<m6dm|=t=K<)PZUs4p{
NZ{%niqh38@{{kmQp&I}I

literal 0
HcmV?d00001

diff --git a/bin/view/MenuView.class b/bin/view/MenuView.class
index 6e6ee660c6fd36e9bc8478bef846348ac4c97681..8fc06790094c6f8b79a02f2b03a54b267159109f 100644
GIT binary patch
literal 6798
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
AlmGw#

delta 1734
zcmZvdYfzL`7{`Byy}Y}xuiOM=6%a&p-4#(xw8b<8Bn;3*#nnnF3Go8vl2}%&-Ly1Q
z-!i+{#j-NZG~C^EQ#0+N%`|>#nyC*>Uz@&l@mte#7L~@Do%8>n=YO8_>~o%Td3R0y
zE<bwt@6%_2X<Ra?V}(Jx!F?tUR+yx5zn5B88g!T#dhh`gFP(a1l|h$@#cFM=F<5J|
zj&2V<ChK|7B!dkaB04~?hlez8^w6hylflC#BY4Cln!#p+M@<TOOb<P75cROdq?oPR
ze!|0(nx8Uw+GOm2(=)oaM#Cx%+ca#~@T|deCKGk;#q7|^4zDD>)8KiNDRgRMmxdQK
z>=vkEk6yrD1KT8|C)V<!hnF<()fL&NdoOF)Z}JMS8oXxkx_wnGv9F{xk2cr0cXzC<
z?diR6Sdr7Tx_x8&riw^kS9fQ{-1&N_+8*g>vd1`g+96k=qm_mB9@ivKD+es*G2g!A
znmn$RH!R-dEk(ATU(w#zTT$1wuA@8B)zfX!%G(wPdB-ks`wZT-IK+E)joX*U`xYN?
zSbKbEafG85bGg%A@Af&GXtsB{3yNB3R;1sE+PJR0v%}&ej_FAs+vnZGt6Mp4aTf~|
zLpOGH^i|C6?VjJUA=0C8FQ{)_)LgG!PgvA5N8xFyZ!2!7(P9I0>;fY{`wki{KB3>@
zq=p#%c8RyZOPqwor<}648pHBAP152s&RCq~l*Ks>pL5<mYWPO;1qT$)wvI@zMH@>j
zE^yJ}OD-CGW$`uN*sHz4{&8kZxt#u`;}_dM4k@ye>9^Y3tT|3c`^uH}w^qphBRvwO
zL^i5U&a+20RWg=dn$9%El4**iNGX;grC5rTV%d)rOEH99C|USI!9^0}oSc^-psofI
zs6djma1uv2fir<ChC7KNh9}w-IH?V9IE&x2IFcF3VqXF?&X9otE1ab!I1&tvlP*y*
z!htxM*;#S26AX)!6C-y}&Kr<p3?J0;uWLRD=#v@E!o!7I$|Z7Cnh|GY$f;xdB)Ni+
zOC}eFeXayWF-D0|9L_FDFgix*fH5Xzlx5abxikG$#)MpVu8|7jNd@ufAYO4D8}@k<
zjEmuyzw{@u!rC*nmhsn=XgISnv-024e=8BtzK%FS&CWOzuG!^DCQ1z}LZ%3%KB?Ix
z>6BgX_;qJ;P>Nj{Ofn^$X%74n+!AAIFe64)&=HL>E$E0bU1qwajS9xOHRv1^N>hRa
zx$aSx65NA=UkkF@kmOPwXNFGKoqb!JnJ45>C>9IGDHqJb$uRQBp@>|0K=Wvf;$ww8
zY`u(RyU4p4#eR8;4#~MZPAO+7<FdR;Kj7yl#`7})ekI7Cl&dr*svIiRSSG1iOjZq4
zs(DONZA?`ws8U@_QyZABHWN}?s8%*J)P82F1I$tfsZqzMRndOx)H%7R7imyeXjI=b
zSN%eh`c2+}zi5$+<$etuX?g7oxg0Pe5KJ&jZ%3}fA?NXSX*JSjw+*g1T|NlNwQ$Lm
z@TD$An5Ea^6bdUDbp=jFC_OH{fhxIEYMbD)|MR8nX4hrndN=n7%8io`!i})_Z+2ZS
LgZGM48q5Cy$3a}z

diff --git a/src/main/Main.java b/src/main/Main.java
index b2ac1d9..af0d52f 100644
--- a/src/main/Main.java
+++ b/src/main/Main.java
@@ -1,7 +1,8 @@
 package main;
 
 import model.MenuModel;
-import controller.*;
+import controller.MenuController;
+import controller.SeriesSelector;
 import view.*;
 
 import javax.sound.sampled.AudioInputStream;
@@ -16,31 +17,31 @@ public class Main {
             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);
-
-            // Créer le contrôleur
-            new MenuController(model, view);
-
             frame.setVisible(true);
 
-            // Chargement de la musique
             PlayMusic("/Music/audio.wav");
         });
     }
 
-    public static void PlayMusic(String location){
+    public static void PlayMusic(String location) {
         try {
-            // Utilisation de getResource pour charger l'audio
             URL url = Main.class.getResource(location);
-
             if (url != null) {
                 AudioInputStream audioInput = AudioSystem.getAudioInputStream(url);
                 Clip clip = AudioSystem.getClip();
                 clip.open(audioInput);
                 clip.start();
             } else {
-                System.out.println("fichier introuvable");
+                System.out.println("Fichier audio introuvable");
             }
         } catch (Exception e) {
             System.out.println(e);
diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java
index 7d49ad6..58b7fe6 100644
--- a/src/main/java/controller/GameController.java
+++ b/src/main/java/controller/GameController.java
@@ -20,8 +20,9 @@ public class GameController implements TilePlacer {
     private TileDatabaseManager dbManager;
     private List<Tile> currentTiles;
     private int tileIndex;
+    private ScoreGameContext scoreGameContext;  // Nouveau contexte pour le score
 
-    public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview) {
+    public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview, JLabel scoreLabel) {
         this.gameContext = gameContext;
         this.gridPanel = gridPanel;
         this.hexagonMap = gameContext.getHexagonMap();
@@ -31,6 +32,9 @@ public class GameController implements TilePlacer {
         this.dbManager = new TileDatabaseManager();
         this.tileIndex = 0;
 
+        // Initialisation de ScoreGameContext
+        this.scoreGameContext = new ScoreGameContext(gameContext, scoreLabel);
+
         loadSeries(1); // Charger la série par défaut (ex. série 1)
         updatePreview();
     }
@@ -40,7 +44,6 @@ public class GameController implements TilePlacer {
         tileIndex = 0;
         System.out.println("Série " + idSeries + " chargée avec " + currentTiles.size() + " tuiles.");
     }
-    
 
     @Override
     public void placeTile(Point position) {
@@ -52,7 +55,7 @@ public class GameController implements TilePlacer {
             }
 
             System.out.println("Placement de la tuile avec ID : " + (nextTile != null ? nextTile.getId() : "null") + " à la position : " + position);
-            
+
             hexTile.setTile(nextTile);  // Place la tuile actuelle
             gridPanel.revalidate();
             gridPanel.repaint();
@@ -69,46 +72,49 @@ public class GameController implements TilePlacer {
 
             gameContext.repaintGrid(gridPanel);
             generateNextTile();  // Génère la tuile suivante
+
+            // Calcul et mise à jour du score
+            scoreGameContext.calculateScore();
         }
     }
 
-
-
     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
         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
         }
-        
+    
         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
-        generateNextTile();
     
+        // Calculer et mettre à jour le score incluant la première tuile
+        scoreGameContext.calculateScore();
+    
+        generateNextTile();  // Génère la tuile suivante
     }
     
-    
 
     public void placeInitialTile(Point position, CameraController cameraController, Tile tile) {
         if (tile == null) {
             System.out.println("Erreur : tuile initiale non définie.");
             return;
         }
-    
+
         System.out.println("Placement de la tuile initiale avec ID : " + tile.getId() + " à la position : " + 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) {
             if (!hexagonMap.containsKey(adj)) {
@@ -123,38 +129,37 @@ public class GameController implements TilePlacer {
             System.out.println("Erreur : position ou panel est null");
             return;
         }
-    
+
         int xOffset = position.x * (int) (hexSize * 3 / 2);
         int yOffset = position.y * (int) (Math.sqrt(3) * hexSize);
-    
+
         if (cameraController != null) {
             Point viewOffset = cameraController.getViewOffset();
             xOffset += viewOffset.x;
             yOffset += viewOffset.y;
         }
-    
+
         if (position.x % 2 != 0) {
             yOffset += (int) (Math.sqrt(3) * hexSize / 2);
         }
-    
+
         boolean isPlaceholder = (tile == null);  // Si tile est null, c'est un placeholder
         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();
         panel.repaint();
     }
-    
 
     public void generateNextTile() {
         if (tileIndex < currentTiles.size()) {
@@ -167,9 +172,6 @@ public class GameController implements TilePlacer {
             System.out.println("Fin de la série. Plus de tuiles à placer.");
         }
     }
-    
-    
-    
 
     private void updatePreview() {
         if (nextTilePreview != null) {
@@ -181,7 +183,6 @@ public class GameController implements TilePlacer {
             nextTilePreview.repaint();
         }
     }
-    
 
     public Tile getNextTile() {
         return nextTile;
@@ -190,21 +191,21 @@ public class GameController implements TilePlacer {
     private Point[] getAdjacentPositions(Point position) {
         if (position.x % 2 == 0) {
             return new Point[]{
-                    new Point(position.x + 1, position.y),
-                    new Point(position.x - 1, position.y),
-                    new Point(position.x, position.y + 1),
-                    new Point(position.x, position.y - 1),
-                    new Point(position.x + 1, position.y - 1),
-                    new Point(position.x - 1, position.y - 1)
+                new Point(position.x + 1, position.y),
+                new Point(position.x - 1, position.y),
+                new Point(position.x, position.y + 1),
+                new Point(position.x, position.y - 1),
+                new Point(position.x + 1, position.y - 1),
+                new Point(position.x - 1, position.y - 1)
             };
         } else {
             return new Point[]{
-                    new Point(position.x + 1, position.y),
-                    new Point(position.x - 1, position.y),
-                    new Point(position.x, position.y + 1),
-                    new Point(position.x, position.y - 1),
-                    new Point(position.x + 1, position.y + 1),
-                    new Point(position.x - 1, position.y + 1)
+                new Point(position.x + 1, position.y),
+                new Point(position.x - 1, position.y),
+                new Point(position.x, position.y + 1),
+                new Point(position.x, position.y - 1),
+                new Point(position.x + 1, position.y + 1),
+                new Point(position.x - 1, position.y + 1)
             };
         }
     }
diff --git a/src/main/java/controller/HowToPlayListener.java b/src/main/java/controller/HowToPlayListener.java
new file mode 100644
index 0000000..d327a5a
--- /dev/null
+++ b/src/main/java/controller/HowToPlayListener.java
@@ -0,0 +1,20 @@
+package controller;
+
+import view.HowToPlayView;
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class HowToPlayListener implements ActionListener {
+    private JFrame parent;
+
+    public HowToPlayListener(JFrame parent) {
+        this.parent = parent;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        HowToPlayView howToPlayDialog = new HowToPlayView(parent);
+        howToPlayDialog.setVisible(true);
+    }
+}
diff --git a/src/main/java/controller/MenuController.java b/src/main/java/controller/MenuController.java
index 7596a77..998827d 100644
--- a/src/main/java/controller/MenuController.java
+++ b/src/main/java/controller/MenuController.java
@@ -1,15 +1,15 @@
 package controller;
-import model.*;
-import view.*;
 
+import model.MenuModel;
+import view.MenuView;
 
 public class MenuController {
 
-    public MenuController(MenuModel model, MenuView view) {
+    public MenuController(MenuModel model, MenuView view, SeriesSelector seriesSelector) {
+        // Assignation des action listeners aux boutons du menu
+        view.getQuiButton().addActionListener(new QuiListener());                 // Quitte l'application
 
-        view.getResumeButton().addActionListener(new ResListener());
-        view.getNewGameButton().addActionListener(new NewListener());
-        view.getQuiButton().addActionListener(new QuiListener());
+        // Définir le sélecteur de séries
+        view.setSeriesSelector(seriesSelector);
     }
 }
-
diff --git a/src/main/java/controller/QuiListener.java b/src/main/java/controller/QuiListener.java
index e42a344..c7c95b5 100644
--- a/src/main/java/controller/QuiListener.java
+++ b/src/main/java/controller/QuiListener.java
@@ -1,12 +1,11 @@
 package controller;
 
-import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 
 public class QuiListener implements ActionListener {
     @Override
     public void actionPerformed(ActionEvent e) {
         System.exit(0);
-        
     }
 }
diff --git a/src/main/java/controller/ResListener.java b/src/main/java/controller/ResListener.java
deleted file mode 100644
index d53191e..0000000
--- a/src/main/java/controller/ResListener.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package controller;
-import view.App;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.SwingUtilities;
-
-import view.GameView;
-
-public class ResListener implements ActionListener {
-    @Override
-    public void actionPerformed(ActionEvent e) {
-        SwingUtilities.invokeLater(() -> new GameView());
-        App.getInstance().dispose();
-        
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/controller/ScoreGameContext.java b/src/main/java/controller/ScoreGameContext.java
new file mode 100644
index 0000000..f04a388
--- /dev/null
+++ b/src/main/java/controller/ScoreGameContext.java
@@ -0,0 +1,142 @@
+package controller;
+
+import model.Tile;
+import model.TerrainType;
+import model.Pocket;
+import view.HexagonTile;
+
+import javax.swing.*;
+import java.awt.Point;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public class ScoreGameContext {
+    private GameContext gameContext;
+    private int score;
+    private JLabel scoreLabel;
+    private Map<Point, Pocket> pocketMap;  // Map des Pockets pour chaque tuile
+    private Set<Pocket> pockets;  // Ensemble de toutes les Pockets
+
+    public ScoreGameContext(GameContext gameContext, JLabel scoreLabel) {
+        this.gameContext = gameContext;
+        this.scoreLabel = scoreLabel;
+        this.pocketMap = new HashMap<>();
+        this.pockets = new HashSet<>();
+        this.score = 0;
+    }
+
+    // Méthode principale pour recalculer le score en reconstruisant toutes les Pockets
+    public void calculateScore() {
+        score = 0;
+        pockets.clear();
+        pocketMap.clear();
+
+        // Parcourt chaque tuile dans la grille pour créer des Pockets par type de terrain
+        for (Map.Entry<Point, HexagonTile> entry : gameContext.getHexagonMap().entrySet()) {
+            Point position = entry.getKey();
+            HexagonTile hexTile = entry.getValue();
+
+            if (hexTile.isFilled()) {
+                Tile tile = hexTile.getTile();
+                
+                // Crée ou fusionne une Pocket pour chaque type de terrain de la tuile
+                for (int segment = 0; segment < 6; segment++) {
+                    TerrainType terrainType = tile.getTerrainForSegment(segment);
+                    if (terrainType != null) {
+                        Pocket pocket = findOrCreatePocket(position, segment, terrainType);
+                        pocketMap.put(position, pocket);
+                    }
+                }
+            }
+        }
+
+        // Calcule le score total en additionnant le score de chaque Pocket
+        System.out.println("Pockets and their sizes:");
+        for (Pocket pocket : pockets) {
+            System.out.println("Pocket with terrain " + pocket.getTerrainType() + " has size " + pocket.getSize());
+            score += pocket.calculateScore();
+        }
+
+        updateScoreDisplay();
+    }
+
+    // Recherche ou crée une Pocket pour un terrain spécifique dans une tuile
+    private Pocket findOrCreatePocket(Point position, int segment, TerrainType terrainType) {
+        Pocket newPocket = new Pocket(terrainType);
+        newPocket.addTile(position);
+
+        // Vérifie les voisins pour fusionner les Pockets si les segments se touchent
+        for (int adjSegment = 0; adjSegment < 6; adjSegment++) {
+            Point neighborPos = getAdjacentPositionForSegment(position, adjSegment);
+            Pocket neighborPocket = pocketMap.get(neighborPos);
+
+            if (neighborPocket != null && neighborPocket.getTerrainType() == terrainType) {
+                // Vérifie si les segments de terrain se touchent avant de fusionner les Pockets
+                if (areSegmentsConnected(position, neighborPos, segment, adjSegment, terrainType)) {
+                    System.out.println("Merging pocket at " + position + " with pocket at " + neighborPos + " for terrain " + terrainType);
+                    neighborPocket.merge(newPocket);
+                    pockets.remove(newPocket);  // Supprime la Pocket fusionnée
+                    return neighborPocket;  // Retourne la Pocket fusionnée
+                }
+            }
+        }
+
+        System.out.println("New pocket created at " + position + " for terrain " + terrainType);
+        pockets.add(newPocket);  // Ajoute la nouvelle Pocket si aucune fusion n'a eu lieu
+        return newPocket;
+    }
+
+    // Vérifie si les segments de deux tuiles se touchent et partagent le même type de terrain
+    private boolean areSegmentsConnected(Point position1, Point position2, int segment1, int segment2, TerrainType terrainType) {
+        Tile tile1 = gameContext.getHexagonMap().get(position1).getTile();
+        Tile tile2 = gameContext.getHexagonMap().get(position2).getTile();
+
+        if (tile1 == null || tile2 == null) return false;
+
+        TerrainType terrainSegment1 = tile1.getTerrainForSegment(segment1);
+        TerrainType terrainSegment2 = tile2.getTerrainForSegment(segment2);
+
+        boolean connected = terrainSegment1 == terrainType && terrainSegment2 == terrainType;
+        if (connected) {
+            System.out.println("Segments connected between " + position1 + " and " + position2 + " for terrain " + terrainType);
+        }
+        return connected;
+    }
+
+    // Obtenir la position adjacente pour un segment spécifique (0 à 5)
+    private Point getAdjacentPositionForSegment(Point position, int segment) {
+        if (position.x % 2 == 0) {
+            switch (segment) {
+                case 0: return new Point(position.x + 1, position.y);
+                case 1: return new Point(position.x + 1, position.y - 1);
+                case 2: return new Point(position.x, position.y - 1);
+                case 3: return new Point(position.x - 1, position.y - 1);
+                case 4: return new Point(position.x - 1, position.y);
+                case 5: return new Point(position.x, position.y + 1);
+                default: return position;
+            }
+        } else {
+            switch (segment) {
+                case 0: return new Point(position.x + 1, position.y);
+                case 1: return new Point(position.x + 1, position.y + 1);
+                case 2: return new Point(position.x, position.y + 1);
+                case 3: return new Point(position.x - 1, position.y + 1);
+                case 4: return new Point(position.x - 1, position.y);
+                case 5: return new Point(position.x, position.y - 1);
+                default: return position;
+            }
+        }
+    }
+
+    // Met à jour l'affichage du score dans GameView
+    private void updateScoreDisplay() {
+        System.out.println("Updated Score: " + score); // Débogage du score
+        scoreLabel.setText("Score: " + score);
+    }
+
+    public int getScore() {
+        return score;
+    }
+}
diff --git a/src/main/java/controller/SerieListener.java b/src/main/java/controller/SerieListener.java
new file mode 100644
index 0000000..6b60ead
--- /dev/null
+++ b/src/main/java/controller/SerieListener.java
@@ -0,0 +1,19 @@
+package controller;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class SerieListener implements ActionListener {
+    private final GameController gameController;
+    private final int seriesNumber;
+
+    public SerieListener(GameController gameController, int seriesNumber) {
+        this.gameController = gameController;
+        this.seriesNumber = seriesNumber;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        gameController.loadSeries(seriesNumber);
+    }
+}
diff --git a/src/main/java/controller/SeriesSelector.java b/src/main/java/controller/SeriesSelector.java
new file mode 100644
index 0000000..a573282
--- /dev/null
+++ b/src/main/java/controller/SeriesSelector.java
@@ -0,0 +1,12 @@
+package controller;
+
+import view.GameView;
+import javax.swing.SwingUtilities;
+
+public class SeriesSelector {
+
+    public void startGameWithSeries(int seriesId) {
+        SwingUtilities.invokeLater(() -> new GameView(seriesId)); // Démarre GameView avec l'ID de série donné
+        System.out.println("Série " + seriesId + " sélectionnée et jeu démarré.");
+    }
+}
diff --git a/src/main/java/model/Pocket.java b/src/main/java/model/Pocket.java
new file mode 100644
index 0000000..4ae2071
--- /dev/null
+++ b/src/main/java/model/Pocket.java
@@ -0,0 +1,41 @@
+package model;
+
+import java.awt.Point;
+import java.util.HashSet;
+import java.util.Set;
+
+public class Pocket {
+    private TerrainType terrainType;  // Type de terrain de cette Pocket
+    private Set<Point> tiles;  // Ensemble des positions des tuiles de la Pocket
+
+    public Pocket(TerrainType terrainType) {
+        this.terrainType = terrainType;
+        this.tiles = new HashSet<>();
+    }
+
+    public TerrainType getTerrainType() {
+        return terrainType;
+    }
+
+    public int getSize() {
+        return tiles.size();
+    }
+
+    public void addTile(Point position) {
+        tiles.add(position);
+    }
+
+    public boolean containsTile(Point position) {
+        return tiles.contains(position);
+    }
+
+    public void merge(Pocket other) {
+        if (this.terrainType == other.terrainType) {
+            this.tiles.addAll(other.tiles);
+        }
+    }
+
+    public int calculateScore() {
+        return getSize() * getSize();  // La taille au carré donne le score
+    }
+}
diff --git a/src/main/java/model/Tile.java b/src/main/java/model/Tile.java
index 29cbfa6..ff5048a 100644
--- a/src/main/java/model/Tile.java
+++ b/src/main/java/model/Tile.java
@@ -1,17 +1,34 @@
 package model;
 
 public class Tile {
-    private int id;  // Ajoute l'attribut id
-    private TerrainType[] terrains;  // 2 terrains maximum par tuile
-    private int segmentsForTerrain1;
-    private int rotation;
+    private int id;  // ID de la tuile
+    private TerrainType[] terrains;  // Tableau contenant deux types de terrains (ex. MER, FORET)
+    private int segmentsForTerrain1;  // Nombre de segments pour le premier terrain
+    private int rotation;  // Rotation de la tuile (en multiple de 60 degrés)
 
-    // Constructeur modifié pour inclure l'ID
     public Tile(int id, TerrainType terrain1, TerrainType terrain2, int segmentsForTerrain1) {
         this.id = id;
         this.terrains = new TerrainType[]{terrain1, terrain2};
         this.segmentsForTerrain1 = segmentsForTerrain1;
-        this.rotation = 0;
+        this.rotation = 0;  // Initialisation de la rotation à 0
+    }
+
+    // Renvoie le terrain pour l'index donné (0 ou 1)
+    public TerrainType getTerrain(int index) {
+        if (index >= 0 && index < terrains.length) {
+            return terrains[index];
+        }
+        return null;  // Retourne null si l'index est invalide
+    }
+
+    // Méthode pour obtenir le terrain associé à un segment spécifique (prend en compte la rotation)
+    public TerrainType getTerrainForSegment(int segmentIndex) {
+        int adjustedIndex = (segmentIndex - rotation + 6) % 6;
+        if (adjustedIndex < segmentsForTerrain1) {
+            return terrains[0];
+        } else {
+            return terrains[1];
+        }
     }
 
     public void rotateClockwise() {
@@ -19,9 +36,8 @@ public class Tile {
     }
 
     public void rotateCounterClockwise() {
-        rotation = (rotation + 5) % 6;  // Tourner dans le sens inverse, équivalent à -1 dans un modulo 6
+        rotation = (rotation + 5) % 6;  // Tourner dans le sens inverse
     }
-    
 
     public int getRotation() {
         return rotation;
@@ -30,12 +46,4 @@ public class Tile {
     public int getId() {
         return id;
     }
-
-    public TerrainType getTerrain(int index) {
-        return index >= 0 && index < 2 ? terrains[index] : null;
-    }
-
-    public int getSegmentsForTerrain(int index) {
-        return index == 0 ? segmentsForTerrain1 : 6 - segmentsForTerrain1;
-    }
 }
diff --git a/src/main/java/view/ButtonHoverListener.java b/src/main/java/view/ButtonHoverListener.java
index a97fc0b..81cbf30 100644
--- a/src/main/java/view/ButtonHoverListener.java
+++ b/src/main/java/view/ButtonHoverListener.java
@@ -1,28 +1,27 @@
 package view;
 
-import javax.swing.*;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.Color;
 
 public class ButtonHoverListener extends MouseAdapter {
 
-    private Color hoverColor = new Color(200, 150, 100);
-    private Color normalColor = new Color(243, 171, 115, 150);
+    private final Color hoverColor = new Color(200, 150, 100, 200); // Couleur de hover avec transparence
+    private final Color normalColor = new Color(243, 171, 115, 150); // Couleur normale avec transparence
 
     @Override
     public void mouseEntered(MouseEvent e) {
-        if (e.getSource() instanceof JButton) {
-            JButton button = (JButton) e.getSource();
+        if (e.getSource() instanceof BtnPerso) { // Applique uniquement aux boutons de type BtnPerso
+            BtnPerso button = (BtnPerso) e.getSource();
             button.setBackground(hoverColor);
         }
     }
 
     @Override
     public void mouseExited(MouseEvent e) {
-        if (e.getSource() instanceof JButton) {
-            JButton button = (JButton) e.getSource();
+        if (e.getSource() instanceof BtnPerso) { // Applique uniquement aux boutons de type BtnPerso
+            BtnPerso button = (BtnPerso) e.getSource();
             button.setBackground(normalColor);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java
index 62469a2..dea6cc1 100644
--- a/src/main/java/view/GameView.java
+++ b/src/main/java/view/GameView.java
@@ -14,52 +14,48 @@ public class GameView extends JFrame {
     private GameController gameController;
     private CameraController cameraController;
     private GameContext gameContext;
+    private JLabel scoreLabel;
 
-    public GameView() {
+    // 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
+
+    public GameView(int seriesId) {
         setTitle("Jeu de Tuiles");
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setLayout(new BorderLayout());
         setSize(1500, 750); 
         setLocationRelativeTo(null);
 
-        // Initialiser le contexte de jeu
         gameContext = new GameContext();
-
-        // Créer la grille d'hexagones
         gridPanel = createHexagonGrid();
-        
-        // Calculer et centrer la grille dans GameView
         centerGridPanel();
-
         add(gridPanel, BorderLayout.CENTER);
 
-        // Initialiser la preview pour la prochaine tuile
         nextTilePreview = new HexagonTile(null, false);
+        scoreLabel = new JLabel("Score: 0");
+        scoreLabel.setForeground(Color.BLACK); // Texte noir pour contraste
 
         JPanel controlPanel = createControlPanel();
         controlPanel.setPreferredSize(new Dimension(200, 600));
         add(controlPanel, BorderLayout.EAST);
 
-        // Initialiser les contrôleurs avec le contexte de jeu
-        gameController = new GameController(gameContext, gridPanel, nextTilePreview);
+        gameController = new GameController(gameContext, gridPanel, nextTilePreview, scoreLabel);
+        gameController.loadSeries(seriesId); // Charge la série
         cameraController = new CameraController(gridPanel, gameContext);
 
-        // Ajouter un écouteur pour la molette de la souris
         MouseWheelController wheelController = new MouseWheelController(nextTilePreview, gameController);
-
         addMouseWheelListener(wheelController);
 
-        // Appeler l'initialisation du jeu
         gameController.initializeGame(cameraController);
-
         setVisible(true);
     }
 
     private JPanel createHexagonGrid() {
         JPanel panel = new JPanel();
-        panel.setLayout(null); // Permet de placer des composants avec des coordonnées absolues
-        panel.setBackground(Color.WHITE);
-        panel.setPreferredSize(new Dimension(800, 800));  // Peut être ajusté si nécessaire
+        panel.setLayout(null);
+        panel.setBackground(normalColor); // Couleur de fond de la grille
+        panel.setPreferredSize(new Dimension(800, 800));
         return panel;
     }
 
@@ -67,23 +63,28 @@ public class GameView extends JFrame {
         int centerX = (getWidth() - gridPanel.getPreferredSize().width) / 2;
         int centerY = (getHeight() - gridPanel.getPreferredSize().height) / 2;
         gameContext.updateOffset(centerX, centerY);
-        gameContext.repaintGrid(gridPanel);  // Rappel pour centrer initialement les tuiles
+        gameContext.repaintGrid(gridPanel);
     }
 
     private JPanel createControlPanel() {
         JPanel panel = new JPanel();
         panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
-        panel.setBackground(Color.LIGHT_GRAY);
+        panel.setBackground(normalColor); // Couleur normale pour le panneau de contrôle
         panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
 
-        panel.add(new JLabel("Prochaine tuile : "));
+        JLabel nextTileLabel = new JLabel("Prochaine tuile : ");
+        nextTileLabel.setForeground(Color.BLACK); // Texte noir pour contraste
+        panel.add(nextTileLabel);
         panel.add(Box.createRigidArea(new Dimension(0, 10)));
 
         nextTilePreview.setPreferredSize(new Dimension(150, 150));
-        nextTilePreview.setBackground(Color.GRAY);
+        nextTilePreview.setBackground(hoverColor); // Couleur hover pour différencier
         nextTilePreview.setOpaque(true);
         panel.add(nextTilePreview);
 
+        panel.add(Box.createRigidArea(new Dimension(0, 30)));
+        panel.add(scoreLabel);
+
         return panel;
     }
 }
diff --git a/src/main/java/view/HexagonTile.java b/src/main/java/view/HexagonTile.java
index 09e7362..28945ee 100644
--- a/src/main/java/view/HexagonTile.java
+++ b/src/main/java/view/HexagonTile.java
@@ -10,7 +10,7 @@ import java.awt.geom.Path2D;
 public class HexagonTile extends JPanel {
     private Tile tile;
     private Point position;
-    private boolean isPlaceholder;  // Nouveau champ pour indiquer si l'hexagone est un placeholder
+    private boolean isPlaceholder;  // Indicateur si l'hexagone est un placeholder
 
     public HexagonTile(Point position, boolean isPlaceholder) {
         this.position = position;
@@ -50,7 +50,7 @@ public class HexagonTile extends JPanel {
         g2d.setClip(largeHexagon);
 
         if (tile != null) {
-            drawTerrainSegments(g2d, centerX, centerY, largeRadius, tile.getRotation());
+            drawTerrainSegments(g2d, centerX, centerY, largeRadius);
         } else {
             g2d.setColor(Color.LIGHT_GRAY);
             g2d.fill(largeHexagon);
@@ -62,13 +62,11 @@ public class HexagonTile extends JPanel {
         g2d.draw(largeHexagon);
     }
 
-    private void drawTerrainSegments(Graphics2D g2d, int centerX, int centerY, int radius, int rotation) {
-        int segmentsTerrain1 = tile.getSegmentsForTerrain(0);
+    private void drawTerrainSegments(Graphics2D g2d, int centerX, int centerY, int radius) {
+        // Parcourt les segments de 0 à 5 pour dessiner chaque segment en fonction du terrain associé
         for (int i = 0; i < 6; i++) {
-            int segmentIndex = (i + rotation) % 6;
-            g2d.setColor(segmentIndex < segmentsTerrain1 ? 
-                         getTerrainColor(tile.getTerrain(0)) : 
-                         getTerrainColor(tile.getTerrain(1)));
+            TerrainType terrain = tile.getTerrainForSegment(i);  // Récupère le terrain du segment, en prenant en compte la rotation
+            g2d.setColor(getTerrainColor(terrain));
             g2d.fillArc(centerX - radius, centerY - radius, 2 * radius, 2 * radius, 60 * i, 60);
         }
     }
diff --git a/src/main/java/view/HowToPlayView.java b/src/main/java/view/HowToPlayView.java
new file mode 100644
index 0000000..e0fee4d
--- /dev/null
+++ b/src/main/java/view/HowToPlayView.java
@@ -0,0 +1,35 @@
+package view;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class HowToPlayView extends JDialog {
+
+    public HowToPlayView(JFrame parent) {
+        super(parent, "Comment Jouer", true);
+        
+        JPanel panel = new JPanel();
+        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+        panel.setBackground(new Color(243, 171, 115, 200));
+        
+        JLabel titleLabel = new JLabel("COMMENT JOUER");
+        titleLabel.setFont(new Font("Helvetica", Font.BOLD, 30));
+        titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
+        panel.add(titleLabel);
+        
+        JLabel instruction1 = new JLabel("Déplacer la caméra : clique droit enfoncé");
+        JLabel instruction2 = new JLabel("Poser des tuiles : clique gauche sur un petit hexagone");
+        JLabel instruction3 = new JLabel("Orientation des tuiles : Molette de la souris");
+
+        for (JLabel label : new JLabel[]{instruction1, instruction2, instruction3}) {
+            label.setFont(new Font("Helvetica", Font.PLAIN, 20));
+            label.setAlignmentX(Component.CENTER_ALIGNMENT);
+            panel.add(Box.createRigidArea(new Dimension(0, 10)));
+            panel.add(label);
+        }
+        
+        add(panel);
+        setSize(600, 400);
+        setLocationRelativeTo(parent);
+    }
+}
diff --git a/src/main/java/view/MenuView.java b/src/main/java/view/MenuView.java
index 2a28573..c91e3fe 100644
--- a/src/main/java/view/MenuView.java
+++ b/src/main/java/view/MenuView.java
@@ -2,79 +2,177 @@ package view;
 
 import javax.swing.*;
 import java.awt.*;
+import controller.SeriesSelector;
 
 public class MenuView extends JComponent {
+
     private BtnPerso resumeButton;
     private BtnPerso newGameButton;
     private JButton quitButton;
+    private JPanel panelCote;
+    private JPanel howToPlayPanel;
+    private JPanel centeredPanel;
+    private JPanel seriesPanel;
+    private SeriesSelector seriesSelector;
 
     private Image backgroundImage;
     private ImageIcon logo;
     private ImageIcon quit;
-    private JPanel panelCoté;
-    private JLabel labelImg;
+    private JLabel labelImg; // Déclaration de labelImg
 
     public MenuView() {
+        initMenu();
+    }
 
-        panelCoté = new JPanel(new GridBagLayout());
+    public void setSeriesSelector(SeriesSelector seriesSelector) {
+        this.seriesSelector = seriesSelector;
+    }
+
+    // Méthode pour afficher les boutons de sélection de série
+    public void showSeriesButtons() {
+        howToPlayPanel.setVisible(false);
+        centeredPanel.removeAll();
+        centeredPanel.add(seriesPanel);
+        seriesPanel.setVisible(true);
+
+        revalidate();
+        repaint();
+    }
+
+    // Méthode pour afficher/masquer le panneau "Comment jouer"
+    private void toggleHowToPlay() {
+        seriesPanel.setVisible(false);
+        howToPlayPanel.setVisible(!howToPlayPanel.isVisible());
+        centeredPanel.removeAll();
+        centeredPanel.add(howToPlayPanel);
+
+        revalidate();
+        repaint();
+    }
+
+    private void initMenu() {
+        // Initialisation du panneau latéral
+        panelCote = new JPanel(new GridBagLayout());
         GridBagConstraints gbc = new GridBagConstraints();
-        panelCoté.setBackground(new Color(243, 171, 115, 150));
-        panelCoté.setPreferredSize(new Dimension(300, 0));
+        panelCote.setBackground(new Color(243, 171, 115, 150));
+        panelCote.setPreferredSize(new Dimension(300, 0));
 
-        // Utilisation de getResource pour charger les images
+        // 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);
-        ImageIcon logoIcon = new ImageIcon(resizedlg);
-
-        labelImg = new JLabel(logoIcon);
-
-        resumeButton = new BtnPerso("RESUME");
-        newGameButton = new BtnPerso("NEW GAME");
+        labelImg = new JLabel(new ImageIcon(resizedlg)); // Initialisation de labelImg
 
+        // 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.setPreferredSize(new Dimension(50, 50));
-        quitButton.setBackground(new Color(243, 171, 115, 150));
-        quitButton.setBorderPainted(false);
-        quitButton.setOpaque(true);
-        quitButton.setFocusPainted(false);
+        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
 
-        ButtonHoverListener hoverListener = new ButtonHoverListener();
-        resumeButton.addMouseListener(hoverListener);
-        newGameButton.addMouseListener(hoverListener);
-        quitButton.addMouseListener(hoverListener);
+        // 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
 
-        panelCoté.add(labelImg, gbc);
-
+        // Ajouter les boutons
         gbc.gridy = 1;
-        panelCoté.add(resumeButton, gbc);
+        panelCote.add(resumeButton, gbc);
 
         gbc.gridy = 2;
-        panelCoté.add(newGameButton, gbc);
+        panelCote.add(newGameButton, gbc);
 
         gbc.gridy = 3;
-        panelCoté.add(quitButton, gbc);
+        panelCote.add(quitButton, gbc);
 
         setLayout(new BorderLayout());
-        add(panelCoté, BorderLayout.WEST);
+        add(panelCote, BorderLayout.WEST);
+        add(centeredPanel, BorderLayout.CENTER);
+    }
+
+    private JPanel createHowToPlayPanel() {
+        JPanel panel = new JPanel();
+        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+        panel.setBackground(new Color(243, 171, 115, 200));
+        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
+
+        JLabel titleLabel = new JLabel("COMMENT JOUER");
+        titleLabel.setFont(new Font("Helvetica", Font.BOLD, 30));
+        titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
+        panel.add(titleLabel);
+
+        String[] instructions = {
+            "Déplacer la caméra : clique droit enfoncé",
+            "Poser des tuiles : clique gauche sur un petit hexagone",
+            "Orientation des tuiles : Molette de la souris"
+        };
+
+        for (String text : instructions) {
+            JLabel label = new JLabel(text);
+            label.setFont(new Font("Helvetica", Font.PLAIN, 20));
+            label.setAlignmentX(Component.CENTER_ALIGNMENT);
+            panel.add(Box.createRigidArea(new Dimension(0, 10)));
+            panel.add(label);
+        }
+
+        panel.setPreferredSize(new Dimension(700, 350));
+        return panel;
+    }
+
+    private JPanel createSeriesPanel() {
+        JPanel panel = new JPanel(new GridLayout(2, 2, 10, 10));
+        panel.setOpaque(false);
+
+        for (int i = 1; i <= 4; i++) {
+            int seriesId = i;
+            BtnPerso seriesButton = new BtnPerso("Série " + seriesId);
+            seriesButton.addActionListener(e -> {
+                if (seriesSelector != null) {
+                    seriesSelector.startGameWithSeries(seriesId);
+                }
+            });
+
+            seriesButton.addMouseListener(new ButtonHoverListener());
+            panel.add(seriesButton);
+        }
+        return panel;
     }
 
     @Override