diff --git a/Case.java b/Case.java index e89fb1c..8b99cd3 100644 --- a/Case.java +++ b/Case.java @@ -2,49 +2,64 @@ import javax.swing.*; import java.awt.*; public class Case extends JPanel { + // Definition d'attributs private Dimension caseSize; private int entourage; private boolean visible; private boolean minee; - private Listener listener; + private ListenerCase listener; - public Case(Dimension caseSize, boolean minee, int entourage) { + // Définition du constructeur + public Case(Dimension caseSize) { super(); - this.entourage=entourage; - this.visible=false; - this.minee=minee; + this.visible=false; // Par défaut la case est cachée this.caseSize= caseSize; - this.setSize(caseSize); - this.listener = new Listener(); + // On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur + this.listener = new ListenerCase(); this.addMouseListener(this.listener); + // Mise en page de la page et couleur par défaut GridLayout unique = new GridLayout(1,1); this.setLayout(unique); this.setBackground(new Color(70, 70, 70)); } + // Méthode qui permet de montrer la case public void setVisible(){ this.visible=true; + + // On affiche une mine si la case est minée, sinon le nombre de mines autour d'elle if (this.minee == true) { this.setBackground(new Color(236, 0, 140)); } else { this.setBackground(new Color(80, 80, 80)); if (this.entourage>0){ - this.add(new Chiffre(entourage,caseSize)); + this.add(new Entourage(this.entourage,caseSize)); } } + // Mise à jour de l'affichage de la case this.updateUI(); } + // Méthode permettant de savoir si la case est cachée ou visible public boolean getVisible(){ return this.visible; } - + // Mathode pour déclarer la présence d'une mine sur une case + public void setMine(){ + this.minee=true; + } + // Permet de savoir si une case est minée public boolean getMine(){ return this.minee; } + + // Défini combien de mines entourent la case + public void setEntourage(int entourage){ + this.entourage=entourage; + } } diff --git a/Doute.java b/Doute.java new file mode 100644 index 0000000..d090373 --- /dev/null +++ b/Doute.java @@ -0,0 +1,18 @@ +import javax.swing.JComponent; +import java.awt.*; + +public class Doute extends JComponent { + private Dimension caseSize; + public Doute(Dimension caseSize) { + super(); + this.caseSize=caseSize; + } + @Override + protected void paintComponent(Graphics pinceau) { + Graphics chiffre = pinceau.create(); + Font font = new Font("Arial", Font.BOLD, caseSize.width*3/5); + chiffre.setFont(font); + chiffre.setColor(new Color(236, 0, 140)); + chiffre.drawString("?",caseSize.width*3/10,caseSize.height*4/5); + } +} diff --git a/Entourage.java b/Entourage.java new file mode 100644 index 0000000..0446dac --- /dev/null +++ b/Entourage.java @@ -0,0 +1,21 @@ +import javax.swing.JComponent; +import java.awt.*; + +public class Entourage extends JComponent { + private int entourage; + private Dimension caseSize; + public Entourage(int entourage, Dimension caseSize) { + super(); + this.entourage = entourage; + this.caseSize=caseSize; + } + @Override + protected void paintComponent(Graphics pinceau) { + Graphics chiffre = pinceau.create(); + Font font = new Font("Arial", Font.BOLD, caseSize.width*2/5); + chiffre.setFont(font); + Color jaune = new Color(236, 214, 0); + chiffre.setColor(jaune); + chiffre.drawString(Integer.toString(this.entourage),caseSize.width*2/5,caseSize.height*3/5); + } +} diff --git a/FrameJeu.java b/FrameJeu.java index 93faa4c..d9dff05 100644 --- a/FrameJeu.java +++ b/FrameJeu.java @@ -11,19 +11,16 @@ public class FrameJeu{ // On crée ensuite notre fenêtre avec des valeurs par défaut JFrame fenetre = new JFrame("Démineur - En Jeu"); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - // Couleur - Color vert = new Color(0, 236, 96); // Mise en page fenetre.setLayout(new GridBagLayout()); GridBagConstraints miseEnPage = new GridBagConstraints(); - // Création de la bannière (qui sera dans une autre classe) + // Création de la bannière (qui sera dans une autre classe plus tard) Dimension grilleSize= grille.getGrilleSize(); JPanel banniere= new JPanel(); - banniere.setBackground(vert); + banniere.setBackground( new Color(0, 236, 96); Dimension banniereSize=new Dimension(grilleSize.width,grilleSize.height/8); banniere.setSize(banniereSize); @@ -49,7 +46,6 @@ public class FrameJeu{ fenetre.setSize(grilleSize.width,grilleSize.height*9/8); Dimension fenetreSize=fenetre.getSize(); fenetre.setLocation(screenSize.width/2-(fenetreSize.width/2), screenSize.height/2-(fenetreSize.height/2)); - //fenetre.setResizable(false); fenetre.setVisible(true); } } \ No newline at end of file diff --git a/Grille.java b/Grille.java index 0442197..e18b23d 100644 --- a/Grille.java +++ b/Grille.java @@ -6,7 +6,7 @@ public class Grille extends JPanel { private Dimension grilleSize=new Dimension(0,0); private Case[] plateau; - // On crée La grille de jeu + // Définition du constructeur qui correspond à une grille de jeu public Grille(int lignes, int colonnes, int mines){ // Découpage de l'espace en fonction des paramètres pour la mise en place de la grille @@ -18,7 +18,8 @@ public class Grille extends JPanel { System.out.println("Taille de la Grille : "+grilleSize); this.setLayout(damier); this.setSize(grilleSize); - this.plateau= new Case[lignes*colonnes]; + // On génère le plateau contenant les cases + GenererPlateau(lignes*colonnes, caseSize); // Instalation des mines @@ -38,241 +39,109 @@ public class Grille extends JPanel { } } - // On place maintenant les mines sur la plateau - boolean[] minee = new boolean[lignes*colonnes]; + // On place maintenant les mines sur la plateau en fixant la variable minee des cases à true for (int i=0; icolonnes)&&(i%colonnes!=colonnes-1)){ for (int j=0;jcolonnes)&&(i%colonnes!=0)){ for (int j=0;jlignes*colonnes-colonnes){ // Vérifier la condition - for (int j=0;jcolonnes){ + for (int j=0;j