nettoyage et ajout de commentaires

This commit is contained in:
Haïssous Kayyissa 2022-05-04 23:03:02 +02:00
parent df2232c155
commit cb8c48d334
6 changed files with 187 additions and 217 deletions

View File

@ -2,49 +2,64 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
public class Case extends JPanel { public class Case extends JPanel {
// Definition d'attributs
private Dimension caseSize; private Dimension caseSize;
private int entourage; private int entourage;
private boolean visible; private boolean visible;
private boolean minee; 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(); super();
this.entourage=entourage; this.visible=false; // Par défaut la case est cachée
this.visible=false;
this.minee=minee;
this.caseSize= caseSize; this.caseSize= caseSize;
this.setSize(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); this.addMouseListener(this.listener);
// Mise en page de la page et couleur par défaut
GridLayout unique = new GridLayout(1,1); GridLayout unique = new GridLayout(1,1);
this.setLayout(unique); this.setLayout(unique);
this.setBackground(new Color(70, 70, 70)); this.setBackground(new Color(70, 70, 70));
} }
// Méthode qui permet de montrer la case
public void setVisible(){ public void setVisible(){
this.visible=true; 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) { if (this.minee == true) {
this.setBackground(new Color(236, 0, 140)); this.setBackground(new Color(236, 0, 140));
} else { } else {
this.setBackground(new Color(80, 80, 80)); this.setBackground(new Color(80, 80, 80));
if (this.entourage>0){ 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(); this.updateUI();
} }
// Méthode permettant de savoir si la case est cachée ou visible
public boolean getVisible(){ public boolean getVisible(){
return this.visible; 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(){ public boolean getMine(){
return this.minee; return this.minee;
} }
// Défini combien de mines entourent la case
public void setEntourage(int entourage){
this.entourage=entourage;
}
} }

18
Doute.java Normal file
View File

@ -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);
}
}

21
Entourage.java Normal file
View File

@ -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);
}
}

View File

@ -12,18 +12,15 @@ public class FrameJeu{
JFrame fenetre = new JFrame("Démineur - En Jeu"); JFrame fenetre = new JFrame("Démineur - En Jeu");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Couleur
Color vert = new Color(0, 236, 96);
// Mise en page // Mise en page
fenetre.setLayout(new GridBagLayout()); fenetre.setLayout(new GridBagLayout());
GridBagConstraints miseEnPage = new GridBagConstraints(); 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(); Dimension grilleSize= grille.getGrilleSize();
JPanel banniere= new JPanel(); JPanel banniere= new JPanel();
banniere.setBackground(vert); banniere.setBackground( new Color(0, 236, 96);
Dimension banniereSize=new Dimension(grilleSize.width,grilleSize.height/8); Dimension banniereSize=new Dimension(grilleSize.width,grilleSize.height/8);
banniere.setSize(banniereSize); banniere.setSize(banniereSize);
@ -49,7 +46,6 @@ public class FrameJeu{
fenetre.setSize(grilleSize.width,grilleSize.height*9/8); fenetre.setSize(grilleSize.width,grilleSize.height*9/8);
Dimension fenetreSize=fenetre.getSize(); Dimension fenetreSize=fenetre.getSize();
fenetre.setLocation(screenSize.width/2-(fenetreSize.width/2), screenSize.height/2-(fenetreSize.height/2)); fenetre.setLocation(screenSize.width/2-(fenetreSize.width/2), screenSize.height/2-(fenetreSize.height/2));
//fenetre.setResizable(false);
fenetre.setVisible(true); fenetre.setVisible(true);
} }
} }

View File

@ -6,7 +6,7 @@ public class Grille extends JPanel {
private Dimension grilleSize=new Dimension(0,0); private Dimension grilleSize=new Dimension(0,0);
private Case[] plateau; 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){ 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 // 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); System.out.println("Taille de la Grille : "+grilleSize);
this.setLayout(damier); this.setLayout(damier);
this.setSize(grilleSize); 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 // Instalation des mines
@ -38,241 +39,109 @@ public class Grille extends JPanel {
} }
} }
// On place maintenant les mines sur la plateau // On place maintenant les mines sur la plateau en fixant la variable minee des cases à true
boolean[] minee = new boolean[lignes*colonnes];
for (int i=0; i<lignes*colonnes;i++){ for (int i=0; i<lignes*colonnes;i++){
for (int j=0;j<mines;j++){ for (int j=0;j<mines;j++){
if (caseMine[j]==i){ if (caseMine[j]==i){
minee[i]=true; plateau[i].setMine();
} }
} }
} }
// Connaître le nombre de mines autour de la case // On cherche à connaître le nombre de mines autour de chaque case
int[] entourage = new int[lignes*colonnes];
for (int i=0;i<lignes*colonnes;i++){ for (int i=0;i<lignes*colonnes;i++){
// Gestion des coins int entourage = 0;
// Coin supérieur droit // On vérifie pour chaque case qu'elle n'est pas déjà à l'extrémité du plateau on cherche une case
if (i==colonnes-1){ // Mine au dessus à droite
if ((i>colonnes)&&(i%colonnes!=colonnes-1)){
for (int j=0;j<mines;j++){ for (int j=0;j<mines;j++){
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à gauche
if (caseMine[j]==i+colonnes-1){
entourage[i]+=1;
}
}
}
// Coin suppérieur gauche
else if (i==0){
for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à droite
if (caseMine[j]==i+colonnes+1){
entourage[i]+=1;
}
}
}
// Coin inférieur droit
else if (i==lignes*colonnes-1){
for (int j=0;j<mines;j++){
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à gauche
if (caseMine[j]==i-colonnes-1){
entourage[i]+=1;
}
}
}
// Coin inférieur gauche
else if (i==lignes*colonnes-colonnes){
for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à droite
if (caseMine[j]==i-colonnes+1){ if (caseMine[j]==i-colonnes+1){
entourage[i]+=1; entourage+=1;
} }
} }
} }
// Si la mine est tout en haut // Mine au dessus à gauche
else if (i<colonnes){ if ((i>colonnes)&&(i%colonnes!=0)){
for (int j=0;j<mines;j++){ for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à droite
if (caseMine[j]==i+colonnes+1){
entourage[i]+=1;
}
// Si une mine est en dessous à gauche
if (caseMine[j]==i+colonnes-1){
entourage[i]+=1;
}
}
}
// Si la mine est tout en bas
else if (i>lignes*colonnes-colonnes){ // Vérifier la condition
for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à droite
if (caseMine[j]==i-colonnes+1){
entourage[i]+=1;
}
// Si une mine est au dessus à gauche
if (caseMine[j]==i-colonnes-1){ if (caseMine[j]==i-colonnes-1){
entourage[i]+=1; entourage+=1;
} }
} }
} }
// Si la mine est tout à droite // Mine en dessous à droite
else if (i%colonnes==colonnes-1){ if ((i<=lignes*colonnes-colonnes)&&(i%colonnes!=colonnes-1)){
for (int j=0;j<mines;j++){ for (int j=0;j<mines;j++){
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à gauche
if (caseMine[j]==i-colonnes-1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à gauche
if (caseMine[j]==i+colonnes-1){
entourage[i]+=1;
}
}
}
// Si la mine est tout à gauche
else if (i%colonnes==0){
for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à droite
if (caseMine[j]==i-colonnes+1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à droite
if (caseMine[j]==i+colonnes+1){ if (caseMine[j]==i+colonnes+1){
entourage[i]+=1; entourage+=1;
}
}
} else {
for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à droite
if (caseMine[j]==i-colonnes+1){
entourage[i]+=1;
}
// Si une mine est au dessus à gauche
if (caseMine[j]==i-colonnes-1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à droite
if (caseMine[j]==i+colonnes+1){
entourage[i]+=1;
}
// Si une mine est en dessous à gauche
if (caseMine[j]==i+colonnes-1){
entourage[i]+=1;
} }
} }
} }
// Mine en bas à gauche
if ((i!=lignes*colonnes-colonnes)&&(i%colonnes!=0)){
for (int j=0;j<mines;j++){
if (caseMine[j]==i+colonnes-1){
entourage+=1;
}
}
}
// Mine au dessus
if (i>colonnes){
for (int j=0;j<mines;j++){
if (caseMine[j]==i-colonnes){
entourage+=1;
}
}
}
// Mine en dessous
if (i<=lignes*colonnes-colonnes){
for (int j=0;j<mines;j++){
if (caseMine[j]==i+colonnes){
entourage+=1;
}
}
}
// Mine à droite
if (i%colonnes!=colonnes-1){
for (int j=0;j<mines;j++){
if (caseMine[j]==i+1){
entourage+=1;
}
}
}
// Mine à gauche
if (i%colonnes!=0){
for (int j=0;j<mines;j++){
if (caseMine[j]==i-1){
entourage+=1;
}
}
}
plateau[i].setEntourage(entourage);
} }
// On place les cases à leur état actuel dans la grille // On place les cases à leur état actuel dans la grille
AfficherPlateau(lignes*colonnes, caseSize, entourage, minee); AfficherPlateau(lignes*colonnes);
} }
// Méthode pour Afficher le plateau // Méthode pour Génerer le plateau
protected void AfficherPlateau(int taille, Dimension caseSize, int[] entourage, boolean[] minee){ protected void GenererPlateau(int taille, Dimension caseSize){
this.plateau= new Case[taille];
for (int i=0;i<taille;i++){ for (int i=0;i<taille;i++){
this.plateau[i]= new Case(caseSize,minee[i],entourage[i]); this.plateau[i]= new Case(caseSize);
}
}
// Méthode pour Afficher le plateau
protected void AfficherPlateau(int taille){
for (int i=0;i<taille;i++){
this.plateau[i].setVisible();
this.add(this.plateau[i]); this.add(this.plateau[i]);
} }
} }
// Méthode pour obtenir la taille de la grille de jeu // Méthode pour obtenir la taille de la grille de jeu
public Dimension getGrilleSize() { public Dimension getGrilleSize(){
return grilleSize; return grilleSize;
} }
} }

51
ListenerCase.java Normal file
View File

@ -0,0 +1,51 @@
import java.awt.event.*;
import java.awt.*;
public class ListenerCase implements MouseListener{
private int marquage=0;
@Override
// Méthode qui va servir à détecter le click de la souris
public void mouseClicked(MouseEvent evenement){
Case panel = (Case)evenement.getSource();
// Si le joueur clique gauche, tant que la case n'est pas marquée, elle sera révélée
if ((evenement.getButton() == MouseEvent.BUTTON1)&&(panel.getVisible()==false)&&(this.marquage==0)){
panel.setVisible();
if (panel.getMine()==true){
System.out.println("Perdu!");
}
}
// Si le joueur clique droit, la case sera marquée
if (evenement.getButton() == MouseEvent.BUTTON3) {
// Au premier click, on place une étoile pour indiquer la présence d'une mine
if (this.marquage==0){
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
this.marquage=1;
}
// Au second, on met un point d'interrogation en cas de soupçon pour aider à la réflexion
else if (this.marquage==1){
panel.removeAll();
panel.add(new Doute(panel.getSize()), BorderLayout.CENTER);
this.marquage=2;
}
// Au troisième click on efface tout marquage
else if (this.marquage==2){
panel.removeAll();
this.marquage=0;
}
// On met à jour l'affichage de la case cliquée
panel.updateUI();
}
}
// Les autres méthodes de l'interface n'interviennent pas
public void mouseEntered(MouseEvent evenement){
}
public void mouseExited(MouseEvent evenement){
}
public void mousePressed(MouseEvent evenement){
}
public void mouseReleased(MouseEvent evenement){
}
}