From b6ef8ef731dd1faa266efa66686cdc613de86b94 Mon Sep 17 00:00:00 2001 From: Moncef STITI Date: Tue, 10 Dec 2024 14:45:36 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20d'une=20ic=C3=B4ne=20d'application=20et?= =?UTF-8?q?=20am=C3=A9lioration=20du=20panneau=20BarChart=20avec=20des=20m?= =?UTF-8?q?=C3=A9thodes=20de=20dessin=20centr=C3=A9es=20et=20une=20gestion?= =?UTF-8?q?=20des=20barres=20plus=20efficace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/Settings/speaker-high-volume.png | Bin 15886 -> 0 bytes .../images/Settings/speaker-mute-volume.png | Bin 8358 -> 0 bytes src/fr/monkhanny/dorfromantik/Main.java | 8 + .../dorfromantik/gui/BarChartPanel.java | 160 ++++++++++++------ .../monkhanny/dorfromantik/gui/GameOver.java | 2 +- 5 files changed, 120 insertions(+), 50 deletions(-) delete mode 100644 ressources/images/Settings/speaker-high-volume.png delete mode 100644 ressources/images/Settings/speaker-mute-volume.png diff --git a/ressources/images/Settings/speaker-high-volume.png b/ressources/images/Settings/speaker-high-volume.png deleted file mode 100644 index 34f36e981a287c64b31479f6b1bbc3588a122709..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15886 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 DO0E!Z diff --git a/ressources/images/Settings/speaker-mute-volume.png b/ressources/images/Settings/speaker-mute-volume.png deleted file mode 100644 index 5ebcb078a40601efebeeb1ec52f0de7ecc7275e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8358 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8Y9Bd2>45zQ%?_ywJ;4JWnEM{QfI|9OtQ?>b| z85mdsGD9LtB7A+UlJj%*5>xV%QuQiw3m8Da#=fE;F*!T6L?J0PJu}Z%{r&F!>I#`D zw(8-gz6QPp&Z!xh9#uuD!Bu`C$yM3OmMQA?c3d_URu#Dgxv3?I3Kh9IdBs*0w(4MW zt@4VkK*IX!c3d_^DQQ+gE^bgIMJZ{v>KP>^1y=g{<>lpi<;HsXMd|v6mX?ULaQ3Scu_Qj3#|G7CyF^YauyW+o=(mzLP7t8*zpjdm<4 zDauTOo1Ry!mk1Uq1!>Vs&d=3POexkk)H47%OF_W~qTb3erPz*3K>=b(aB3l#1L5Ul zf^8~DEGkY7sVqpfRS!xn&Mz%WPF07ff*ayol$uzQnqp^UU}U0eXsByoW}^=^A0`E| z17WLcMTuvMogrKmgpaDmEy***&eX`%$jsEz(8SQ(($vBLt^q8Gsy-yYG&uw0PCFyG zGK3gdt&Kh?=yEc_&WCWIUWV&{gaS^92Arm<$&WiC0Rc;Cp9-UuLKkW zhR_&DNwzAJ_>vscDI&IVI|LALdVKSI|{3 zgg6q#H&6p?^pVVlC?m@+1xU#il%T-529%TvQquGd^^Bn&DM(4Pax5*$$S<<<&Cg3t zO;ZRC@eJ{_(MOWtQlP*c6}biQKt*v!MPdO`lCH=tumY#I{GyQj{2V*y#JsXZ1&yH8 zyp+_U)FMqAeRLIAT?KJykc*ogmyJF=liP72iiy;`6kGKob$h!@AD@RYFi8LLba4!+ znDgdt{F?b+9glxJpIQIc{r~qZBAh@3m?SiV2SLsH?jSK`(lxhVZxk9Xbr z_UHHCdG9|z|LRqBb>8!zF($RofBu_y*;tHW!N+4>{0t0X{udY*u(HT9L^%*-B(Ta= zJUMyWJonCrlX2_KH< zv~QC13VlcR9X*TB^Oo(e`g24+|8CJ)ceA`37qs`LAAEh^?(3&*y0i1|{omIa?v=kV zF6^5lzeBgJ#qTTc=UUbNx-swLT=v%@pH*&dOZ{BBes0a<&P&!SQe5TNAM$so`Gndg3Mb>IJK_Wk<9U-jdx_pLTG^q*Avx+?qF zv19)>ec^kx*s{KwvF*j@ez}{QD=#lou0B@2Z~2#LQ)kVu|DCgbd)fDY-+kw3>}~yI zvygf2=T`UqMd!CZ-rZ+v`ONdu>$S0;Pnqxk3UWHTBfHhpf9~`C^uAty`}5Ikv)q{Y zs?!E*Ua#G|`wQEvg<<#m7!ADQt^Qm+zHWEfp8HGApAz4k`1jZMY4;p#Ijk;l^2^pe zd-474-M#C-^d;WjP zu>GlE$%3*YGSmDoG)4&)M@TxdXE~oqe99ubg4MA7>dUEe23gG~|K0Vpn~@SeX|8zP zS#`_8hu2qo?z1s8|LwDJ;)TK_zSY-HE#O!CZ9nzNJr#M+O}U)$pKdpw{C9owo%v7B zt3ONoUt99Jp}W(P=Xk_R#=|Bv-rS$~#Mra0Wa{)^uT|y?mPzOu%J)5wuX!oUo^SoZ z>80$Ht6l0}4yOFK_57!_n*V20zv|B$37h`!RGB|(#_YfI6=TJBIGjn`A@x7#PQs@B z_9yMrDh&7E*y}k@%IDj9>4RGrZayN@w*I1{ywA7yK1C|e<13`6&Yt||a%(U{!qg)& zZi_d9r0P{qE>w}$-f@@LbDo^fxB4Yb)sESnmOXyT&2}^1+@JQuUwhx%b1MD3YQN=I z{MdJaD~WIM)g2(8zW4oqOr=WC0`{u0{uTG)-_i8eQ||i`zUQ5mQ!aLZEZ;r(jsD)pS~B~ckH~msxm=ih zC${Q

0oAwPyig!A*71FB!eJ*q(gI{eQnrN!twPN?*=jy-V434sTQ0Jnza&F2nY! z46h5Xzm@$?lG%TmGl}o(#VHHSKOUdnWwloAS%AJT=dWv*n8Pv@U)cpO4?QCDYPqJP zeOT22t(^YzS26_++pDs?F2rluCQOytf0-+Z@9Whm3--rU9T4cS>Q#FdknhX+%YM3? zfyyF3?dE-yv%0E@k zAf?VrdTW{8Gxh(WXBJA%68U1UW1GNIc4V@Z>6g1R^8X*a6y2~i)8~Tvv$XlXpB!Gw zDnIx!H%hQLW7#p5zfJeGY!h5u=0*t=XRLE$txd}Nc7M{Jx|g!bn?B6^weOPi3pK;` zwCs=zlT(uNzFqeGx9&@y;7vjOQ-KXLoIjiDy%7HsGim1~Ww#?At)~hVXSBPqfy^kG zWIgGR`%7KrM?dCzby#k3S8krCB3!&#U;SsN%Kyl!(;XId=}V5t+*-QP(f^NEt~eajX}Kj_y9p%dc4pz-DB&+IR~~vDk-4=# z)Y0EXR!{ZW1>UvXRZ6cmIGkB%9VPk2<%;8(h0#&cUtF%d)H7^ISi>+YkE&nqMZ(D&3%+xnzw-WubBsj3X{-t7w^O?pa&5r(7!e7;0 z_WnI06LI0>0`<8azt(kBt?sle*m#c3_UF76^?N@|2^9P~O{n-m&|JPMrB^2XGnl7e z{<%Q? zoR!44rfq?K^9o~-*t7-ulUEq$B=PYyFIeBO!dNGXkEeUV`UxvGMkd{fk3hzfr#6DnR{;;8R%<@VEu%I@<;!915Mw;zIdca8TI zZ~DT=;Hd9$Ww!5`Mk~QDhg|l~JR-9~+HpN&V7{0k`zwzN*-lqxJDzFWCGN%sciRO!?oY;y&q4NX03SJ$GNvt^3u-U;l3D?7TnkFGY)e z{wH5`{rLBHlJ(^;WeZgGYaTz9u3z^5@o}&B3)aNFWQ@57im-zz|F3N^d6oVAx%u5s zKPJzwc{FeSxsxB~E`1(zH9Gy7w|~QGtLk@mc3zU!I6twvS662L{Mg;kq?c~*IrPhX z|K$09Zad$s`{VLblc87rg{hgT?dN3vnpe~RKe?b^_vKe`^!6$9jD;5QtuBA}#!`O1 z(u-0PQ`^t)R=%9+>^aY`==n?C*~LH7-*>HGE>LZXQx3jtJbT%)bi3J4vOVAJ`SIOF zwqdp4msvAr&AU1M$xfC1bxZA)UopgVF1UW+%9k^>o_%SY`J20~3RZ43O}M@7YodAxHhJtg2`8RO&ZRTL0GT%Jz8{kyTt*=BbwmIqIinRi)KW zVh=Cw)pPlKnE&726^E5<7Eb1<5)8g?N+Y`sdzNdc`2C z`a*Qpta(36CfP3D)4qbaWb%UW*ZZ{clwL91Rem8lbJje|2~XyR-u1u2xXbmz>d)Sx z_XDml?sC4c`twC0bJ5Za`}^D6lwM4oF>Bt>MipzXyYW{R-mSSU)wv)%wf-gJBEAcG zO>w=oOW9Qx@m)x3itCL6=^uG6)BkhF;J?IYt7A;!JEs)b7%cCgG1b&*w2b4)i4WbbglVA-*P`H0dBnVe}W_W%E}{a!Fb znNUfek@J=Pe_lR+dN*GF>pZ3nQx_C(c@tRw{!#zaCkLGa*`0(-x=zS_EsvYiZ6z>k zL2%Cs<}b=GL{wif)N)uI?X+^JZt@dd#CKuZg5cg2%v+RSgs8q^$mOuQ+G*ub+vF#_ zh%aFJg3CQCn6D_mFj0NQP|9I-w$sX?vdK?;5nsTx1($nQFi%l_QDW+S<-JYSoocQL za~52_D--xX@Jiz6Yle1M1x#Kb+_i#P#_a;< z^GEkqu3%oH@}foM6~k)|tHe&L1OHg&UT~33uy69KSj4ws_5x#;K=vDc7bM$OFz2Yf z;Bmden5X`N$NdUpo={1f$}5I^p^`S$R}BA!OWM?4F|6mXIxJku;Hb_S$eyPDVu|9b z17}#~hPcSin7Uwc-wI}9p^_k>(gd?6zo_5KSU)Lv{*4`f#o zE{Slw(zt>}HcY5gLCLY5xx-4JcfsLC7ugP%3lBLK@wq6zC{PJxR}v`ENSL+4zVcQz z*M`Og&Wgbc_CR$?&++7{wwhC0x3I z&9R-&MOMT2!b0Idb}yll7ams{gIHv(gi9B&IJPsm$XZNW;4H9+PsaIzqCg-!pXv*N zo)ygP0wo+CR~omn$TkU;Ch$78A8?VqF@1q^!6Lpl&KD9H7V*7NdSSp3$i7XmM51E_ z^K1?)9=9uvw>hkMJgziu=d|MSy3+WXMV3wN)d5k*_Jf^P8+4lZG&`&mUQB3Narh34 ztdL;ojOh!UjTZ403zc|yTuHQR;`8jZI^%jl(J-*RlEX?x{gnZ`V>@Su)f4p>2AqNI zcUWZAlwM7kzTj|*i)@il$&3jrob8(UCJU9GaJ`V2w1}^g!^+3+iXyusyNj%lKuJQR zSYZ1_POA^MOakk_?fEXE;di0Yyu+%;^FpKaCHKE4g9FuN9oh4~TD>Z_e`ULrD^Ok9 zk=<<9p89Qb>i_qyILyEzd*juo?(?p)Yzi+9_$}i5$Z54fJh1%+i|mcrE1YAR_|_=B z5}3Szd3C4N5#<*L99?9S1WO(yEaEHVuqqGwV1WSxxR@{MDf*y=?j>Tc36E; ze&GtAM#HoNJr-OcY-QOkco! zw!`X*@(YLHMSP_kRu|^1aIS3PD^YwEFl_!n?Yr+eAQN`IpEGf2zJNP=*b;*>Tx|7P(ocnj+!Ys&VR3d_npHkAbSxXw=$@6XLZK^!s@~`Ul=m10^3&$f60>3wPm>F zaOL4Cmc3FoiK74|(R9<~}%(7Ri-HX3rn_%gW#HP63_0#1Ta#db^5OQ39%pSy6 zeN`}VLHOg1mzWovb&+M+D-=9g__)%e*-OhEW~cW3y3nzWunPB=#0aOXj`4RS`Kqf@V_e%e{Y4eaSKa~i$Q=H9#VYK8lejE<_Trnm!Fo*enE^eEi>eM64RTr=S>PRrEP z<@!2SUb0q@4qU#LW$%KOCp-Du`A<4Nb(w1>^ySbpHFY~V!Tq6C>?z8xw)BEpD^HHh zcRez#+-d6Vh=I>h_KQ4FN2(023 zG%t@6Ucc|}!sfP3MBtpE8#_!h&yWG)j9ptMnH61#?z4zqz-$yfnsU z?R`PP?e0guZR#!(_)_CCS54?k+wHyS?_~uGi(U3uDXr7ASw8jHy$`pl>pq39m(ktZ zoYiUNtNdaEL;Rik2h!5l`g^9{bKL4OS52@aLLu__bHciZc&0j048J#I(-z1;Y*cWHad;}$+v*@~K~qZ4N)|9`q4JF4P57wy}6`L&#u?UI)^r)8xcY>T#fZu{GI zxyt#v`jo1i8t0dazRz3ucpoj97v41aSH1g@GWD-Zi=Eop3WLtSK05i=sfVC6^!4GA zeL78iyvnaC&*t6}IWE7$|4L<~-cD!doqy(C*Pd6SweJ7o{-YOO8ZTYW({=j2x5A4H z35(`UU-5Y{i>#F2mCr(@de7yoOy*R-s+=o*SLV3<4*jHz7cMV#nIFyjrNm*irD4VM z(!7%5GyCdFl$83W-!oEJw9lc5Pgn6(W$kP8_dly#dfHbkS9@_mY0Mq7>3ZR>H7u2cBR3H1NKqt=Yc4 zUpiU^N*3h1*sk{uye}%K?v*dua9`gxL6JrFg?8Zi)t6t_nJSgJ{Pufgz3lk0>(k^6 zrq z7ceuczN##(y1U-B`rXR@X%JN)BQ8Jv{&M5T(xv7xy$hJ9f=m(lI@^nXhm<3`mh!90 zttzj!=B2GY&iEF@QFwJ<-}XTki|mRyE1s7|Uh$uHZ&SqFxbHtNNw0Ie(5U2MyS~j% z?c2&r%+HixI2eMHO|6O2J+ZTvE8pweCfGIciKxD+jP3fhF2n7LeSFn{8Wvd%kTU|V z><d|vWz_fmG9mIcgPm0nd| z{qpIzxYgcwjhB?goGvup68yR+OXBOwOUz%dY=%6^ENRtpcJK z%?syU^sjtw+;@Jiz27H+Yu|a{2Umb95v{uOslp`-zCj{FO3*+2%QSx1Bj-!2?(X`> zc~=xP4h#0uUpJRKQqA>$UcE1=y1RR}#Agmib}5%DpI?31S=HUz({kZA0$wsQ zco#nS_)^q8t

_T}tfoFVimV`@1*Y?C#%dx%YMVF3!4~{8(D~(Y+l%7`K`0KAQi} z*QI9F<=1sp3WvD_OBQT&`MYS1aP@DICyth-Q={oAhpOZt%+|-*NVwg7cj5= z{6BEMrCIdV&-)izII>5*1QlrR*Y0hIymIo;{e{eHzaRa}{xA3NuZc%(Jl6!~?Oyu$ zf6<%^jo+$&&(7cdb*HmC+h5<4)?_H!&h zAF2lp%yU>xIJdhj_kQ_@51*y^WoQ2EzZ5;~^_!c;^)XeI>higPgJ+Z{N+mZTIKP_xZbDK6v>2|ImEIMKlPqNt;Is-m`^kJ*FTx7{5tQ)lU>r+_H6nx?dKVpxwVhhM%O=kcFB4Lza#q( zL6A-DW^3ek)_+|!_4>4XpNjhCTUZu9KfiC|xBVpnx{mBSn$G__eEnb2-xIgu<1KAs zX8(SD+<(q2TPthpU*}|_`KR7<+RI^ez((%Y_o;WyW9skjeSK}+&48@KH#a{&CqK{f z*YxtcmB05cH4DgZ;@jX*|F=~?fA70pSLGwOKl`Pt9nQCZ(W>vZM#XP7US59w&euNK za+~n0)t79V_%^W2|Mh43`(1foSC#Yg$5+2zHTAIhx+u#(!hb97?%cVPTit)|JX>?~ z@*hV|UamJX5vl*$xBX7x2Kn{AyE&~GwlpkYcHrh9l5yZaBSV4sL66*N8K9K}p00i_ I>zopr0F>%K3jhEB diff --git a/src/fr/monkhanny/dorfromantik/Main.java b/src/fr/monkhanny/dorfromantik/Main.java index d2a3a35..6fe8c50 100644 --- a/src/fr/monkhanny/dorfromantik/Main.java +++ b/src/fr/monkhanny/dorfromantik/Main.java @@ -11,6 +11,7 @@ import fr.monkhanny.dorfromantik.controller.TutorialController; import fr.monkhanny.dorfromantik.controller.GameModeController; import fr.monkhanny.dorfromantik.gui.GameModeSelectionPanel; +import javax.swing.ImageIcon; import javax.swing.JFrame; /** @@ -76,14 +77,21 @@ public class Main { isMusicPlayed = true; // Marquer la musique comme jouée } + // 4. Créer les fenêtres à nouveau comme au début + ImageIcon icon = new ImageIcon("./ressources/images/Application/Application_Icon.jpg"); + gameModeFrame = new JFrame("Choix des séries - Dorfromantik"); gameModeFrame.setMinimumSize(Options.MINIMUM_FRAME_SIZE); + gameModeFrame.setIconImage(icon.getImage()); gameFrame = new JFrame("Jeu - Dorfromantik"); + gameFrame.setIconImage(icon.getImage()); gameFrame.setMinimumSize(Options.MINIMUM_FRAME_SIZE); settingsFrame = new JFrame("Paramètres - Dorfromantik"); + settingsFrame.setIconImage(icon.getImage()); settingsFrame.setMinimumSize(Options.MINIMUM_FRAME_SIZE); howToPlayFrame = new JFrame("Comment jouer ? - Dorfromantik"); + howToPlayFrame.setIconImage(icon.getImage()); howToPlayFrame.setMinimumSize(Options.MINIMUM_FRAME_SIZE); // Re-créer et réinitialiser les panels et les contrôleurs diff --git a/src/fr/monkhanny/dorfromantik/gui/BarChartPanel.java b/src/fr/monkhanny/dorfromantik/gui/BarChartPanel.java index f44aa53..6128f8a 100644 --- a/src/fr/monkhanny/dorfromantik/gui/BarChartPanel.java +++ b/src/fr/monkhanny/dorfromantik/gui/BarChartPanel.java @@ -2,69 +2,131 @@ package fr.monkhanny.dorfromantik.gui; import java.awt.*; import java.util.List; +import java.util.Objects; import javax.swing.*; public class BarChartPanel extends JPanel { - private List groupAverages; - private int highlightedGroup; - - public BarChartPanel(List groupAverages, int highlightedGroup, JPanel mainPanel) { - this.groupAverages = groupAverages; + private final List groupAverages; + private final int highlightedGroup; + private static final Color PLAYER_GROUP_COLOR = new Color(204, 0, 0); + private static final Color OTHER_GROUP_COLOR = new Color(0, 0, 204); + private static final Color SHADOW_COLOR = new Color(0, 0, 0, 60); + private static final Color TEXT_COLOR = Color.BLACK; + private static final Font AVERAGE_FONT = new Font("Arial", Font.ITALIC, 12); + private static final Font GROUP_LABEL_FONT = new Font("Arial", Font.BOLD, 16); + private static final Font SCORE_FONT = new Font("Arial", Font.BOLD, 14); + private static final int PADDING = 30; + private static final int SHADOW_OFFSET = 2; + + public BarChartPanel(List groupAverages, int highlightedGroup) { + this.groupAverages = Objects.requireNonNull(groupAverages, "Group averages cannot be null"); this.highlightedGroup = highlightedGroup; - // Rendre le fond transparent et ajouter une bordure noire - setBackground(new Color(0, 0, 0, 0)); // Fond transparent - setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer horizontalement + // Configuration du panneau + setOpaque(false); + setBackground(new Color(0, 0, 0, 0)); + setAlignmentX(Component.CENTER_ALIGNMENT); } - + @Override protected void paintComponent(Graphics g) { super.paintComponent(g); - int width = getWidth(); - int height = getHeight(); - int barWidth = width / (groupAverages.size() + 1); // Espacement entre les groupes - int maxScore = groupAverages.stream().max(Integer::compare).orElse(0); + + if (groupAverages.isEmpty()) { + return; + } - // Dessiner les barres et leurs étiquettes (moyennes des scores) - for (int i = 0; i < groupAverages.size(); i++) { - int barHeight = (int) ((double) groupAverages.get(i) / maxScore * (height - 50)); // Ajuster la hauteur des barres - int xPosition = (i + 1) * barWidth; // Espacement entre les groupes + Graphics2D g2d = (Graphics2D) g.create(); + try { + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - // Appliquer une couleur de barre (mettre en évidence le groupe du joueur en rouge, les autres en bleu) - if (i == highlightedGroup) { - g.setColor(new Color(204, 0, 0)); // Couleur rouge pour le groupe du joueur - } else { - g.setColor(new Color(0, 0, 204)); // Bleu pour les autres groupes + int width = getWidth(); + int height = getHeight(); + int barWidth = width / (groupAverages.size() + 1); + int maxScore = groupAverages.stream() + .mapToInt(Integer::intValue) + .max() + .orElse(0); + + for (int i = 0; i < groupAverages.size(); i++) { + int barHeight = calculateBarHeight(maxScore, height, groupAverages.get(i)); + int xPosition = (i + 1) * barWidth; + + Color barColor = (i == highlightedGroup) ? PLAYER_GROUP_COLOR : OTHER_GROUP_COLOR; + + g2d.setColor(SHADOW_COLOR); + g2d.fillRect(xPosition + SHADOW_OFFSET, height - barHeight - PADDING + SHADOW_OFFSET, barWidth - 5, barHeight); + + g2d.setColor(barColor); + g2d.fillRect(xPosition, height - barHeight - PADDING, barWidth - 5, barHeight); + + // Ajustez dynamiquement la position des textes + int textY = height - barHeight - PADDING - 20; // Score position + if (textY < PADDING) { + textY = PADDING - 2; // Éviter le chevauchement au sommet + } + + String avgScoreText = String.valueOf(groupAverages.get(i)); + g2d.setFont(SCORE_FONT); + g2d.setColor(TEXT_COLOR); + drawCenteredString(g2d, avgScoreText, xPosition, barWidth, textY); + + // Position de "Score moyen" + int labelY = textY - 15; // Placer légèrement au-dessus du score + if (labelY < PADDING) { + labelY = PADDING - 17; // Éviter les débordements + } + + g2d.setFont(AVERAGE_FONT); + drawCenteredString(g2d, "Score moyen : ", xPosition, barWidth, labelY); + + g2d.setFont(GROUP_LABEL_FONT); + String groupLabel = "Groupe " + (i + 1); + drawCenteredString(g2d, groupLabel, xPosition, barWidth, height - 10); + } + } finally { + g2d.dispose(); } + } - // Ajouter des ombres à la barre pour un effet 3D - g.fillRect(xPosition, height - barHeight - 30, barWidth - 5, barHeight); - g.setColor(new Color(0, 0, 0, 60)); // Ombre - g.fillRect(xPosition + 2, height - barHeight - 28, barWidth - 5, barHeight); - // Dessiner le texte (moyenne) au-dessus de chaque barre - String avgScoreText = String.valueOf(groupAverages.get(i)); - FontMetrics metrics = g.getFontMetrics(); - int textWidth = metrics.stringWidth(avgScoreText); - int textX = xPosition + (barWidth - textWidth) / 2; // Centrer le texte - int textY = height - barHeight - 35; // Placer le texte juste au-dessus de la barre + /** + * Calcule la hauteur d'une barre proportionnellement au score maximum. + * + * @param maxScore Le score maximum parmi tous les groupes + * @param height La hauteur totale du composant + * @param score Le score du groupe courant + * @return La hauteur de la barre + */ + private int calculateBarHeight(int maxScore, int height, int score) { + return (int) ((double) score / maxScore * (height - 2 * PADDING)); + } - g.setColor(Color.BLACK); // Couleur du texte - g.drawString(avgScoreText, textX, textY); - - // Ajouter un label pour préciser que c'est la "moyenne" - g.setFont(new Font("Arial", Font.ITALIC, 12)); // Police italique plus petite pour le label "Moyenne" - String label = "Score moyen : "; - int labelWidth = metrics.stringWidth(label); - g.drawString(label, xPosition + (barWidth - labelWidth) / 2, textY - 15); // Placer "Moyenne" au-dessus du score - - // Dessiner l'étiquette de groupe (Groupe 1, Groupe 2, ...) - String groupLabel = "Groupe " + (i + 1); - g.setColor(Color.BLACK); - g.setFont(new Font("Arial", Font.PLAIN, 14)); // Police plus petite pour les étiquettes - int groupLabelWidth = g.getFontMetrics().stringWidth(groupLabel); - g.drawString(groupLabel, xPosition + (barWidth - groupLabelWidth) / 2, height - 10); // Positionner l'étiquette sous la barre - } -} + /** + * Dessine une chaîne centrée horizontalement dans une section de la largeur du composant. + * + * @param g2d Le contexte graphique + * @param text Le texte à dessiner + * @param xOffset La position x de départ de la section + * @param sectionWidth La largeur de la section + * @param y La position y où dessiner le texte + */ + private void drawCenteredString(Graphics2D g2d, String text, int xOffset, int sectionWidth, int y) { + FontMetrics metrics = g2d.getFontMetrics(); + int textWidth = metrics.stringWidth(text); + int textX = xOffset + (sectionWidth - textWidth) / 2; + g2d.drawString(text, textX, y); + } + /** + * Retourne la taille préférée du panneau. + * + * @return La taille préférée + * @see Dimension + */ + @Override + public Dimension getPreferredSize() { + // Définir une taille préférée par défaut si non spécifiée + return new Dimension(400, 200); + } } \ No newline at end of file diff --git a/src/fr/monkhanny/dorfromantik/gui/GameOver.java b/src/fr/monkhanny/dorfromantik/gui/GameOver.java index 35942f8..d352543 100644 --- a/src/fr/monkhanny/dorfromantik/gui/GameOver.java +++ b/src/fr/monkhanny/dorfromantik/gui/GameOver.java @@ -120,7 +120,7 @@ public class GameOver extends JPanel { groupTitleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); groupPanel.add(groupTitleLabel); - BarChartPanel barChartPanel = new BarChartPanel(groupAverages, playerGroup - 1, mainPanel); + BarChartPanel barChartPanel = new BarChartPanel(groupAverages, playerGroup - 1); barChartPanel.setPreferredSize(new Dimension(700, 400)); barChartPanel.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer horizontalement groupPanel.add(barChartPanel);