From 35c9fcd873ec43ea5af2d54422f01d9907d2064c Mon Sep 17 00:00:00 2001 From: dick Date: Wed, 8 Oct 2025 14:08:10 +0200 Subject: [PATCH] Fenetre fix dessin temp --- src/Dessin.class | Bin 0 -> 1799 bytes src/Fenetre$1.class | Bin 0 -> 522 bytes src/Fenetre$2.class | Bin 0 -> 926 bytes src/Fenetre$PlaceholderDrawPanel.class | Bin 0 -> 1118 bytes src/Fenetre.class | Bin 0 -> 5065 bytes src/Fenetre.java | 89 +++++++------------------ src/Partie.class | Bin 0 -> 271 bytes src/Pendu.class | Bin 0 -> 255 bytes 8 files changed, 25 insertions(+), 64 deletions(-) create mode 100644 src/Dessin.class create mode 100644 src/Fenetre$1.class create mode 100644 src/Fenetre$2.class create mode 100644 src/Fenetre$PlaceholderDrawPanel.class create mode 100644 src/Fenetre.class create mode 100644 src/Partie.class create mode 100644 src/Pendu.class diff --git a/src/Dessin.class b/src/Dessin.class new file mode 100644 index 0000000000000000000000000000000000000000..7e611f9a5043f09ff31883d55adc7d869c246a99 GIT binary patch literal 1799 zcmX^0Z`VEs1_pD6OfCi)26c7@4K4;I22CyoX$CEJ25l||Rt6mqM;9cm$Hkz}V8G5` z$jM;DU<@KmxEQz?OxYRCSR5P}7`Pbt7|cN;7Mu*M43;346-cu+h_K;euw}3ViP?h) z2N2=N!QjNs;LOh8!pOj8lbM%UV#mn9tf3jk$iU*9pOVVR!0(fpm+DuVo0M7DSHj33rs0#7SeB@tSYD#d0z*7ILn04D5<@Z%LkdGG4?`M=NC!Ecfsug?;vuLvD)fuXGxO5*y#f;R zQgav?ST#I7L7^m2oLUl4l$w@WRFs+$oLQC1$RLgsqHvFcgOp9f6QYZ^IJLwnF*!TE zD8Do>g^@uRNeehIz{&;T9)fwCk%29_C^fMpm61Ud7AGhX$H*WK*A$eRmy!yKK#$D4 zl43>%0dLpHct^hwPe&h5$6!xCcXoyhMh0f@)JjGM9?!hI)FS7c#Ny)AVnzm8NOXgY zMm0snJGIi9kwGZT(I?auVOYGsA0vYhL=!lT_$OthCYM+kAd0g%wFDBepi~J_3UVbx3><2lE{;Lo@$Ny6k&Fxi2o;cEWn|zePAvhm z85uazQ%k}#Q%XRgprPr>$iSJNTH=wKnVwMsOPyfP_$Gptu?kKMU_t+~#2iKj_LR)xg8brCMh0md5d!iogCc`8gA4-*Ff%YR$TG+=Ffzz9 zFfjNrurV+)FfeFoZD(NA+ReZeDaaHd$QZYsfq5GPi`H%i)<{8yuMo7Ifo&TD`$h%^ z21W)21_lNp1{MYe27U$>20;c<1|bGb24MykP?mz2&BVvR&LG0Tz?i3{y`6zWdm97i z0R}E#olOkfn;3YuG4Sf_X5fny;@{37u#G`bXA^_aHU?p>Z44rITH6>z%~)hbS#~gp z3Gn2Yv5K;YvZk1^>4>t5vdOaMh_Y>C5Eo^Y72wH9Fk{ydWfx@=Wfx`L#vm@smSe^N z5?~c&7v)F*i$S<70$e!>qU>NjU}3NVGfq)fGcHk9Q5LXS+&ZG1qFkb!qTC>}AodI7 znDK~mn(>Nqi}ECx@#%>2it?n0@_`5*)(lY|){Jco5+Htp8NVpMD2o7FPJ)>LNEyE< zuc!dXAOWr%GeNMNL{5U45J*l)lvh+RMN~+XML;AcVH<-uTrdGi5ae1jVUU!7D6gn+ zil~4nivR~)Jyy z7?c?t8Ppg&7}Oa;8MGMU7_=F(81xwO8T1+I7>pREGMF*UVK8S{z+l0!ioud$8-oqQ zK?YlfqYQQoXBg}m9x*sGyku};_{`wS@Snkhk(I%dk)OefQH8;W(UKv6(ViiYF@zzQ zF_R&TF_$5nfssL(K?RaF7^E2(!Rd}!NNNK-K|zvY3XVq^$l KFk%Q~;RFDvrFsRt8Zn20;cfb_Q{F21!N+wvvp@Vif~M22LNh)V$P^ zqEu@}1~!|_yv!0iMg|@YxTt0rBLjEH$r0-w~|D6~wj%8O9ZyUs{x$>Xr#IfCp;1 z9!L`-1HWrta!!76W?s5)YDq?Z3Oj=o4}&y=3?l=FUutoQM}Bb$4+9$mI}ZZ~gDek& z9D^()11Ho76+=b_9?!hI)FS7c#Ny)AVnzljkf{~=#pRiK>H3aI#U(|F$t4i?Ffy=1 z^)WICBp0P7mZW;-6_l0)B<7{&Ffxc~XoCF#)9eKnw`OEu)&Ti|r?@mJH?zbiwWK7q zh(UpYg@KiUfq_v#0OU9Z1_mYu1_llWP6kE>E(Qh$B?cz22$z=jRt83`?F>vCL8=+J z85kJY7#JBC7-AS08F(0Yq3RVF7{Tf}w6-uXZew6ZR~^g1!oUZ%g`Yuyfq{XAL6AX+ VK^QC|$RNSMz`(`8$iTt?1^|=IY)k+E literal 0 HcmV?d00001 diff --git a/src/Fenetre$2.class b/src/Fenetre$2.class new file mode 100644 index 0000000000000000000000000000000000000000..67ef0ce018f8747852cd2e5652677c370517500b GIT binary patch literal 926 zcmX^0Z`VEs1_pBm7fuFl1{p2}9tK%11~~?KE(Qe#MNS4u1|=>AWd;>422}<%kc2u& zLIcFoWM|M~XV76}U@OVUELJgKWZ?91OU+9yDN40wWMH$&%*!mXV`SjbfQxE|F*2|? z=clAHGVuFk=B4_T<|d^Ug(N2Bq%tyaWT#e!R2HPBFfzz!_+%xPCF&=Zm*}UKrRJ6B zd#6^qf*95yBY1;L5|gui6APd^xq|aci;`2_GC{`hK%JlmGJ%nS-!(5eC%-r|FWon_ zBqKkCok5p}L61S7k%7Z6wYbD1zqo{lftP`ghk>8LfStjRhrx)!n4Q6dhryJ=jEBLT z!GfK^l83>H!J3`HhKIqH!H$Q)p22{J!GXb%hrx-#nUR4LYNLt~BLk0TUS4XEb53G$ zacVImgCxiisNQf)Nh~NyEn;L~hiYSF5J)acO)N?E%qu7@2}sOK&0%B^)6fJ5L4|&C zd1hX^z86^BnvsE70~7+{nC60mhmnCRJ+;I;wbD5wu?Vc#nUO<T-nzFI^uboR|!@ zo+Go^C$$93WYKWejACTq&H?km&R}GaK(#+4wW7o=Gc_m0nvp>aWFXvSa2ZAh_Vm;e z5SNib1nPc$u(iP@MVWc&){G1SAf3o!j0|i!sd?!o8DPhHGBU6y=jRod=B6?-aF^tV z78IlwIVTpUGBSYN=*-B#RgC04kXRUl0s}V#4+8@OqksS?A{iJMm>3us_!$Hk7#Rc^ z7#Nfon7|@jTH0F~7`3)DFl_{>W)NavU|?flWME)OVqjztW)Oj@k7rU+uI2f4!Fvv2pu`{qRh=Cm`&LF|Sz`(*F$solb4Hl7P Q&}Lv@;9_88;AQ{=03K`0E&u=k literal 0 HcmV?d00001 diff --git a/src/Fenetre$PlaceholderDrawPanel.class b/src/Fenetre$PlaceholderDrawPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..5876f880ef7d8b0503a33083739720e89f099f38 GIT binary patch literal 1118 zcmX^0Z`VEs1_pBmKQ0DQ1_cnI$j+d|&Y;Z2z`~%y#lXy<%EchUpavq;L0ke3!?S781xwoK!hQPYsAiA%+6rO$iQZknU`5&$H>5}p&7== zz~Y>rlFG=y?~|FA>Q|bZlv)&$n3R*s$iP>Sn3-4NoS$2epO>0f!pI<|;ggkEmZ+at zUZU?_lvt3FnOtlQGJ-2OzqBYh)h!dGjmIrDFSVp7RS%?=k%7Z6wYbD1zqo{*!JLOd zj6s}-L5e||kwF+FjbfCM3nPOFT+}JCI5Ro8q$oc-6{O9AhryD;iig3P!G?#y7DU)F z*z+(rFgP+Y@WM5@<>!^~FgP(d^DwwDxH2-RM&;+FDx`o=adBpzf<{qlZb43Ba%z!6 zL1K}DODafIlZU~L!JVDKgNMPB!Hb8%8)Ui85x8?uB*^5F3-$M*Y|>IWrv!~$iSlE1`0yX;?xp| zZy6axkir=v1`cJ8^wg5@%#@N0aLjo!GH|A+mUyIQre~BeGH|36C6))JCYLZWuxogF zdU}EkWlv8n0R;&ogP?{cBJMy!){G2XDXB%7WvL(@BZIJpryHgc_F|X;LP%}`=>WTk z4{E+|YDrOMaxo)=1iCd)8EfR21!;$hGcs@&mlS2@r9=HC3biFCF)v*|7%XG03H7OC zaWXg+a)Epbkz-^K$D#q`cLoIp5e88P5MW|p0wp^JMg|E61_oIMMg~R(1_oBG?F@_? z85kHC86+7P7}&sq3mI5Ii4&@H6$2XsI|BnlmX`K*1}5zT49vbdyBSy_dABpLZew86 z5#SQw(%QzrE+CSkwT*#8KqO@w1E-GGHU=&hA)ajvyxSP~g!uh*wlN4;v4GS`vgmGO z5KLjsF=GX(mt@(-Ae6wGW5%YVE6OU$wv9m;;T}B(ZUzR1#SE+rOBlEqmNJMjEMw4N zSk7R@u!6ysVI_kz!zzX#hSdxS3~LxN8P+l|GsrM7FfcL5GRT2xc?MGkP?5mMAi^Ne IV8Xx!0EXuRvj6}9 literal 0 HcmV?d00001 diff --git a/src/Fenetre.class b/src/Fenetre.class new file mode 100644 index 0000000000000000000000000000000000000000..a58014962a64853bd37d77b51a38e00ad5ef719e GIT binary patch literal 5065 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 literal 0 HcmV?d00001 diff --git a/src/Fenetre.java b/src/Fenetre.java index 830c436..44a7586 100644 --- a/src/Fenetre.java +++ b/src/Fenetre.java @@ -4,19 +4,18 @@ import java.awt.event.*; import java.util.function.Consumer; /** -* La classe Fenetre gère uniquement l'interface graphique : -* - zone de dessin (remplaçable par la classe Dessin) -* - affichage du mot masqué -* - saisie d'une lettre (événement remonté via un handler) -* -* Aucune logique de jeu (choix/vérification du mot) n'est ici. -* -* * @version 0.3 -* @author Adrien -* Date : 08-10-25 -* Licence : -*/ - + * La classe Fenetre gère uniquement l'interface graphique : + * - zone de dessin (assurée par la classe Dessin) + * - affichage du mot masqué + * - saisie d'une lettre (événement remonté via un handler) + * + * Aucune logique de jeu (choix/vérification du mot) n'est ici. + * + * @version 1.0 + * @author Adrien + * Date : 08-10-25 + * Licence : + */ public class Fenetre { // --- Composants de l'interface (UI only) --- @@ -24,18 +23,18 @@ public class Fenetre { private JLabel wordLabel; private JTextField letterInput; private JButton sendButton; - private JPanel drawZone; // remplaçable par la classe Dessin + private JPanel drawZone; // instance de Dessin // Handler externe pour la lettre soumise (fourni par la classe Partie / contrôleur) private Consumer onLetterSubmitted; - // --- Constructeur (courte orchestration uniquement) --- + // --- Constructeur (orchestration courte) --- public Fenetre() { setupWindow(); JPanel root = createRoot(); window.setContentPane(root); - drawZone = createDrawZone(); + drawZone = createDrawZone(); // -> new Dessin() root.add(drawZone); wordLabel = createWordLabel(); @@ -65,12 +64,9 @@ public class Fenetre { } // --- Sous-composants UI --- - /** Crée la zone de dessin placeholder (à remplacer par Dessin). */ + /** Crée la zone de dessin via la classe Dessin. */ private JPanel createDrawZone() { - JPanel panel = new PlaceholderDrawPanel(); - panel.setPreferredSize(new Dimension(600, 350)); - panel.setBackground(new Color(245, 245, 245)); - return panel; + return new Dessin(); } /** Crée le label d'affichage du mot (placeholder jusqu'à injection par Partie). */ @@ -113,38 +109,19 @@ public class Fenetre { return inputPanel; } - // --- Partie et Dessin --- + // --- Partie <-> UI --- /** Définit le texte du mot affiché (ex: "_ _ A _ _") fourni par la classe Partie. */ public void setWordDisplay(String maskedWord) { wordLabel.setText(maskedWord != null ? maskedWord : ""); } - /** Définit le panneau de dessin (remplace le placeholder par la classe Dessin). */ - public void setDrawPanel(JPanel dessinPanel) { - if (dessinPanel == null) return; - Container parent = drawZone.getParent(); - int index = -1; - for (int i = 0; i < parent.getComponentCount(); i++) { - if (parent.getComponent(i) == drawZone) { index = i; break; } - } - if (index != -1) { - parent.remove(index); - drawZone = dessinPanel; - drawZone.setPreferredSize(new Dimension(600, 350)); - parent.add(drawZone, index); - parent.revalidate(); - parent.repaint(); - } - } - /** Définit le handler appelé quand l'utilisateur soumet une lettre. */ public void setOnLetterSubmitted(Consumer handler) { this.onLetterSubmitted = handler; } // --- Méthodes privées UI --- - /** Récupère la lettre et notifie le handler externe (aucune logique de jeu ici). */ private void submitLetter() { String text = letterInput.getText().trim().toUpperCase(); @@ -157,28 +134,12 @@ public class Fenetre { else JOptionPane.showMessageDialog(window, "Lettre soumise (placeholder) : " + text); } - // --- Placeholder de dessin (pour tester la fenêtre seule) --- - private static class PlaceholderDrawPanel extends JPanel { - @Override protected void paintComponent(Graphics g) { - super.paintComponent(g); - Graphics2D g2 = (Graphics2D) g; - g2.setStroke(new BasicStroke(2f)); - g2.drawRect(10, 10, getWidth() - 20, getHeight() - 20); - g2.setFont(getFont().deriveFont(Font.BOLD, 16f)); - String txt = "Zone de dessin (remplacer par Dessin)"; - FontMetrics fm = g2.getFontMetrics(); - int x = (getWidth() - fm.stringWidth(txt)) / 2; - int y = (getHeight() + fm.getAscent()) / 2; - g2.drawString(txt, x, y); - } + // --- Méthode principale de test --- + public static void main(String[] args) { + Fenetre f = new Fenetre(); + f.setWordDisplay("_ _ _ _ _"); // placeholder + f.setOnLetterSubmitted(ch -> + JOptionPane.showMessageDialog(null, "Lettre reçue : " + ch + " (sans logique de jeu)") + ); } - - // --- Méthode principale de test : exécuter Fenetre seule (sans Partie/Dessin) --- - public static void main(String[] args) { - Fenetre f = new Fenetre(); - f.setWordDisplay("_ _ _ _ _"); // placeholder - f.setDrawPanel(new Dessin()); // dessin - f.setOnLetterSubmitted(ch -> JOptionPane.showMessageDialog(null,"Lettre reçue : " + ch + " (sans logique de jeu)")); - } - } diff --git a/src/Partie.class b/src/Partie.class new file mode 100644 index 0000000000000000000000000000000000000000..85cd51fcbd3a82959e9ab4396dbd59e9fb42f688 GIT binary patch literal 271 zcmX^0Z`VEs1_pBmK`sUs23`&ZK6VCvb_M}P1~!|_yv!0iMh0dL%`ip=7U%qwR7M7V zpUk{eztY^K)S{5Yq?}Yn29A>a;F6-uymUqe5e-eBti-ZJ{hY+SbbW}ZH6sI8aDHh~ za;jSvVo^zEsvbxk4+AR$8zTb)BLf>ml#xLIBo5KG*e=O4g literal 0 HcmV?d00001 diff --git a/src/Pendu.class b/src/Pendu.class new file mode 100644 index 0000000000000000000000000000000000000000..3fd926e95f461b7b4fe4cb40edf5abe45b33463e GIT binary patch literal 255 zcmX^0Z`VEs1_pBmel7-P1|D_>UUmjPMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvG9rexJ;| zRKL>Pq|~C2#H5^5Mh2GL#LPTK1~H9jpRB~PME#t^ymbBGlA_GKbZd}CuHgLAqU2P! zOps!(fYiK{QazAD9tIW$Rz?O^um~fA07wj?**_^OHMxXAk%5VUnE?ct7#Kl{85kMZ z7#J9285kKD85kH?wYD=bZe(C!U}RutU|?Va3vw}VGH@_(LX}E_Wf?G)@iH(na4|42 IFfnig0FgN=lK=n! literal 0 HcmV?d00001