Je suis nouveau en dev Java, j’essaye de réaliser mon premier programme, le jeu du Morpion.
Seulement voila, je ne sais pas comment faire un contrôle sur 3 cases identiques.
Exemple 3 cases alignées en O ou X affiche un message d'information : Le joueur XXXX a gagné
Mon programme
Le jeu du morpion
Voici mon code
Class Start
package morpion;
public class Start {
public static void main(String[] args) {
// TODO code application logic here
Fenetre fen = new Fenetre();
fen.setVisible(true);
}
}
Class Fenetre pour définir l'aspect graphique + action sur les boutons
package morpion;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Fenetre extends JFrame implements ActionListener {
private String nomJoueur1 = "xxxxxxxx";
private String nomJoueur2 = "xxxxxxxx";
private JPanel conteneurP = new JPanel();
private JPanel panGrille = new JPanel();
private JPanel panJouer = new JPanel();
private JPanel panIdentifiant = new JPanel();
private JLabel labelJoueur1 = new JLabel("Joueur n°1 : " + nomJoueur1);
private JLabel labelJoueur2 = new JLabel("Joueur n°2 : " + nomJoueur2);
//Bouton hérité de JButon pour les personnaliser
private Bouton boutonPlay = new Bouton("Start");
private Bouton2 boutonRePlay = new Bouton2("Re Jouer");
String[] tab_morpion = {"", "", "", "", "", "", "", "", ""};
BoutonGrille[] tab_bouton = new BoutonGrille[tab_morpion.length];
public Fenetre() {
this.setTitle("Le Morpion");
this.setSize(500, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Définir les conteneurs
this.setContentPane(conteneurP);
conteneurP.setBackground(Color.DARK_GRAY);
conteneurP.setLayout(new BorderLayout());
panJouer.setLayout(new GridLayout(1, 2));
panGrille.setLayout(new GridLayout(3, 3));
panIdentifiant.add(labelJoueur1);
panIdentifiant.add(labelJoueur2);
//Emboiter les conteneurs
conteneurP.add(panGrille, BorderLayout.CENTER);
conteneurP.add(panJouer, BorderLayout.SOUTH);
conteneurP.add(panIdentifiant, BorderLayout.NORTH);
boutonPlay.addActionListener(this);
boutonRePlay.addActionListener(this);
boutonPlay.setPreferredSize(new Dimension(100, 90));
panGrille.setVisible(false);
//Ajouter les boutons
panJouer.add(boutonPlay);
panJouer.add(boutonRePlay);
boutonRePlay.setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == boutonPlay) {
//Commancement de la partie , Initilisation de la grille de bouton, Nom des joueurs
nomJoueur1 = JOptionPane.showInputDialog(null, "Nom du joueur n°1 : ", "Identification", JOptionPane.QUESTION_MESSAGE);
nomJoueur2 = JOptionPane.showInputDialog(null, "Nom du joueur n°2 : ", "Identification", JOptionPane.QUESTION_MESSAGE);
JOptionPane.showMessageDialog(null, "La partie va commencer", "Information", JOptionPane.INFORMATION_MESSAGE);
labelJoueur1.setText("Joueur n°1 : " + nomJoueur1 + " = O ");
labelJoueur2.setText("Joueur n°2 : " + nomJoueur2 + " = X ");
panGrille.setVisible(true);
panGrille.removeAll();
for (int i = 0; i < tab_bouton.length; i++) {
tab_bouton[i] = new BoutonGrille(tab_morpion[i]);
panGrille.add(tab_bouton[i]);
}
boutonRePlay.setEnabled(true);
}
// Réinitialisation de la partie sans redéfinir le nom des joueurs
if (e.getSource() == boutonRePlay) {
panGrille.setVisible(false);
panGrille.removeAll();
panGrille.setVisible(true);
for (int i = 0; i < tab_bouton.length; i++) {
tab_bouton[i] = new BoutonGrille(tab_morpion[i]);
panGrille.add(tab_bouton[i]);
}
}
}
//--------------------------------------------------
// Getters and Setters
//-------------------------------------------------
public BoutonGrille[] getTab_bouton() {
return tab_bouton;
}
public void setTab_bouton(BoutonGrille[] tab_bouton) {
this.tab_bouton = tab_bouton;
}
}
Class boutonGrille
package morpion;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class BoutonGrille extends JButton implements ActionListener {
private String name;
Font police = new Font("Arial", Font.BOLD, 48);
private static int joueur = 0;
public BoutonGrille(String str) {
super(str);
this.name = str;
this.addActionListener(this);
this.setFont(police);
}
@Override
//Controle du joueur 1 ou 2 pour définir une X ou un O
public void actionPerformed(ActionEvent e) {
joueur = (joueur + 1) % 2;
if (joueur == 0) {
this.setText("X");
} else {
this.setText("O");
}
this.setEnabled(false);
}
}
Je vous l'accorde mon code n'est surement pas des plus propres ou optimisé mais je débute
Merci par avance de votre aide
Le jeu du Morpion (Gestion de 3 cases identique)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.