ajout de l'interface graphique du jeu avec les logiques clic droit et gauche et les actions des cases et mise a jour du makefile :D
This commit is contained in:
@@ -0,0 +1,33 @@
|
|||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
import javax.swing.Swing.Utilities;
|
||||||
|
|
||||||
|
public class ActionCase implements MouseListener {
|
||||||
|
|
||||||
|
private FenetreJeu fenetrejeu;
|
||||||
|
private int ligne;
|
||||||
|
private int colonne;
|
||||||
|
|
||||||
|
public ActionCase(FenetreJeu f, int l, int c) {
|
||||||
|
this.fenetreJeu = f;
|
||||||
|
this.ligne = l;
|
||||||
|
this.colonne = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
// Clic droit
|
||||||
|
if (SwingUtilities.isRightMouseButton(e)) {
|
||||||
|
fenetreJeu.clicDroit(ligne, colonne);
|
||||||
|
}
|
||||||
|
// clic gauche
|
||||||
|
else if (SwingUtilities.isLeftMouseButton(e)) {
|
||||||
|
fenetreJeu.clicGauche(ligne, colonne);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mousePressed(MouseEvent e) {}
|
||||||
|
public void mouseReleased(MouseEvent e) {}
|
||||||
|
public void mouseEntered(MouseEvent e) {}
|
||||||
|
public void mouseExited(MouseEvent e) {}
|
||||||
|
}
|
||||||
|
|
||||||
+105
@@ -0,0 +1,105 @@
|
|||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
// Fenetre principal du jeu (ou il y a la grille de boutons)
|
||||||
|
|
||||||
|
public class FenetreJeu {
|
||||||
|
|
||||||
|
private JFrame fenetre;
|
||||||
|
private JPanel panneauGrille;
|
||||||
|
private JButton[][] boutons;
|
||||||
|
private Grille grille;
|
||||||
|
|
||||||
|
public FenetreJeu(Grille g) {
|
||||||
|
this.grille = g;
|
||||||
|
int l = grille.getLigne();
|
||||||
|
int c = grille.getColonne();
|
||||||
|
|
||||||
|
fenetre = new JFrame("Demineur");
|
||||||
|
fenetre.setDefaultCloseOpertion(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
panneauGrille = new JPanel();
|
||||||
|
panneauGrille.setLayout(new GridLayout(l, c));
|
||||||
|
boutons = new JButton [l][c];
|
||||||
|
|
||||||
|
// creation de tous les boutons de la grille
|
||||||
|
|
||||||
|
for (int i = 0; i < l; i++) {
|
||||||
|
for (int j = 0; j < c; j++) {
|
||||||
|
boutons[i][j] = new JButton();
|
||||||
|
boutons[i][j].setPreferredSize(new Dimension(45, 45));
|
||||||
|
boutons[i][j].setFont(new Font("Arial", Font.BOLD, 16));
|
||||||
|
// ecouteur de clics
|
||||||
|
boutons[i][j].addMouseListener(new ActionCase(this, i, j));
|
||||||
|
panneauGrille.add(boutons[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fenetre.add(panneauGrille);
|
||||||
|
fenetre.pack();
|
||||||
|
fenetre.setLocationRelativeTo(null);
|
||||||
|
fenetre.setVisible(true);
|
||||||
|
|
||||||
|
actualiserAffichage();
|
||||||
|
}
|
||||||
|
|
||||||
|
// logique du clic droit
|
||||||
|
public void clicDroit(int l, int c) {
|
||||||
|
Case caseCliquee = grille.getCase(l, c);
|
||||||
|
caseCliquee.boucleMarqueur();
|
||||||
|
actualiserAffichage();
|
||||||
|
}
|
||||||
|
|
||||||
|
// logique clic gauche
|
||||||
|
public void clicGauche(int l, int c) {
|
||||||
|
Case caseCliquee = grille.getCase(l, c);
|
||||||
|
|
||||||
|
// secu on ne peut pas cliquer une une case avec un marqueur etoile ou ?
|
||||||
|
|
||||||
|
if (caseCliquee.getMarqueur() != 0) return;
|
||||||
|
|
||||||
|
if (caseCliquee.getEstMinee()) {
|
||||||
|
System.out.println("BOOM ! Vous avez touché une mine... !");
|
||||||
|
caseCliquee.setEstRevelee(true);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
caseCliquee.setEstRevelee(true);
|
||||||
|
}
|
||||||
|
actualiserAffichage();
|
||||||
|
}
|
||||||
|
|
||||||
|
// mise à jour du texte et couleurs de tous les boutons
|
||||||
|
public void actualiserAffichage() {
|
||||||
|
int l = grille.getLigne();
|
||||||
|
int c = grille.getColonne();
|
||||||
|
|
||||||
|
for (int i = 0; i < l; i++) {
|
||||||
|
for (int j = 0; j < c; j++) {
|
||||||
|
Case currentCase = grille.getCase(i, j);
|
||||||
|
JButton btn = boutons[i][j];
|
||||||
|
|
||||||
|
if (currentCase.getEstRevelee()) {
|
||||||
|
btn.setEnabled(false); // pour rendre le bouton incliquable
|
||||||
|
if (currentCase.getEstMinee()) {
|
||||||
|
btn.setText("¤");
|
||||||
|
btn.setBackground(Color.RED);
|
||||||
|
} else {
|
||||||
|
int nb = currentCase.getNbMinesautour();
|
||||||
|
if (nb > 0) {
|
||||||
|
btn.setText(String.valueOf(nb));
|
||||||
|
} else {
|
||||||
|
btn.setText(""); // case viiiide
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
btn.setEnabled(true);
|
||||||
|
int mq = currentCase.getMarqueur();
|
||||||
|
if (mq == 1) btn.setText("*");
|
||||||
|
else if (mq == 2) btn.setText("?");
|
||||||
|
else btn.setText("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -59,5 +59,11 @@ public void compterMinesVoisines(int l, int c){
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// interface graphique
|
||||||
|
|
||||||
|
public int getLigne() { return ligne; }
|
||||||
|
public int getColonne() { return colonne; }
|
||||||
|
public Case getCase(int l, int c) { return grille[l][c]; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
Case.class : Case.java
|
Case.class : Case.java
|
||||||
javac -implicit:none Case.java
|
javac -implicit:none Case.java
|
||||||
|
|
||||||
@@ -7,7 +9,10 @@ Grille.class : Grille.java Case.class
|
|||||||
Quitter.class : Quitter.java
|
Quitter.class : Quitter.java
|
||||||
javac -implicit:none Quitter.java
|
javac -implicit:none Quitter.java
|
||||||
|
|
||||||
NouvellePartie.class : NouvellePartie.java Menu.class Grille.class
|
FenetreJeu.class ActionCase.class : FenetreJeu.java ActionCase.java Grille.class
|
||||||
|
javac -implicit:none FenetreJeu.java ActionCase.java
|
||||||
|
|
||||||
|
NouvellePartie.class : NouvellePartie.java Menu.class Grille.class FenetreJeu.class
|
||||||
javac -implicit:none NouvellePartie.java
|
javac -implicit:none NouvellePartie.java
|
||||||
|
|
||||||
Menu.class : Menu.java NouvellePartie.class Quitter.class
|
Menu.class : Menu.java NouvellePartie.class Quitter.class
|
||||||
|
|||||||
@@ -38,4 +38,8 @@ public class Menu {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cacher le menu quand on lance le jeu
|
||||||
|
|
||||||
|
public JFrame getFenetre() { return fenetre; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,5 +13,16 @@ public class NouvellePartie implements ActionListener {
|
|||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
System.out.println("Lancement de la nouvelle partie...");
|
System.out.println("Lancement de la nouvelle partie...");
|
||||||
|
// cache menu
|
||||||
|
menu.getFenetre().setVisible(false);
|
||||||
|
|
||||||
|
//grille test (10x10 avec 10 mines)
|
||||||
|
Grille g = new Grille(10, 10);
|
||||||
|
g.placerMines(10);
|
||||||
|
g.calculerToutesLesMines();
|
||||||
|
|
||||||
|
// on lance l'interface graphique du jeu
|
||||||
|
new FenetreJeu(g);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user