ajout de commentaires

This commit is contained in:
martins 2022-04-28 21:31:03 +02:00
parent 4542c594ba
commit a2836b2f08
8 changed files with 130 additions and 191 deletions

Binary file not shown.

View File

@ -1,26 +1,36 @@
// Tom Monin et Clément Martins // Tom Monin et Clément Martins
// paintChoix V1 // paintChoix V3
// class pour l'affichage de la selection des lignes, collonnes et nombre de mines // class représentant une case dans la partie
import java.awt.*; import java.awt.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.JComponent; import javax.swing.JComponent;
public class Case extends JComponent{ public class Case extends JComponent{
private boolean visibilite; //Etat de la case:
private boolean bombe; private boolean visibilite; //Visible ou pas
private int voisin; private boolean bombe; //Miner ou pas
private int suspition; private int voisin; //Le nombre de mine aux alentours
private int suspition; // son Etat de suspition ( 0:pas une bombe, 1:en est une, 2:je doute)
// Les Images de la case (point d'interogation, etoile et bombe)
private Image interogation, etoile, imgboombe; private Image interogation, etoile, imgboombe;
//Constructeur de la Case
public Case(){ public Case(){
this.visibilite=false; //nous initialisons les valeurs
this.bombe=false; this.visibilite=false; //la visibiler est fausse donc la case est cacher
this.voisin=0; this.bombe=false; // ce n'est pas une bombe
this.suspition=0; this.voisin=0; // elle n'a pas de voisin bombe
this.interogation= Toolkit.getDefaultToolkit().getImage("./IMAGE/pointintero.png"); this.suspition=0; // la suspition est a 0 (pas une bombe)
// nous chargeons les images
this.interogation= Toolkit.getDefaultToolkit().getImage("./IMAGE/pointintero.png");
this.etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png"); this.etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png");
this.imgboombe= Toolkit.getDefaultToolkit().getImage("./IMAGE/bombe.png"); this.imgboombe= Toolkit.getDefaultToolkit().getImage("./IMAGE/bombe.png");
} }
// Nous mettons les getter/setter
public void setVisibiliter(boolean trueorfalse){ public void setVisibiliter(boolean trueorfalse){
this.visibilite=trueorfalse; this.visibilite=trueorfalse;
} }
@ -46,6 +56,7 @@ public class Case extends JComponent{
return false; return false;
} }
} }
// il y a deux suspition pour faciliter( le deux pour savoir si elle est suspecter sur 1:c'est une bombe et l'autre sur 0:pas une bombe)
public boolean getSuspition2(){ public boolean getSuspition2(){
if(this.suspition==1){ if(this.suspition==1){
return true; return true;
@ -59,6 +70,8 @@ public class Case extends JComponent{
public int getVoisin(){ public int getVoisin(){
return this.voisin; return this.voisin;
} }
//on paint la case en fonction de ses attribut et donc son etat
@Override @Override
protected void paintComponent(Graphics pinceau) { protected void paintComponent(Graphics pinceau) {
// obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard // obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard
@ -69,30 +82,44 @@ public class Case extends JComponent{
secondPinceau.setColor(this.getBackground()); secondPinceau.setColor(this.getBackground());
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
} }
//On paint ce que l'on veut maintenant
//si la case est cacher (pas visible)
if(this.visibilite==false){ if(this.visibilite==false){
//on dessinne un rectangle gris sur un fond noir
secondPinceau.setColor(new Color(0,0,0)); secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
secondPinceau.setColor(new Color(100, 100, 100)); secondPinceau.setColor(new Color(100, 100, 100));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
//si on supecte que c'est une bome
if(this.suspition==1){ if(this.suspition==1){
//on affiche l'etoile
secondPinceau.drawImage(this.etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); secondPinceau.drawImage(this.etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
} }
//si on suspecte que on ne sais pas
if(this.suspition==2){ if(this.suspition==2){
//on affiche le point d'interogation
secondPinceau.drawImage(this.interogation, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); secondPinceau.drawImage(this.interogation, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
} }
} }
//si la case est afficher(visible)
if(this.visibilite==true){ if(this.visibilite==true){
//on dessine un rectangle blanc sur un fond noir
secondPinceau.setColor(new Color(0,0,0)); secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
secondPinceau.setColor(new Color(255, 255, 255)); secondPinceau.setColor(new Color(255, 255, 255));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
secondPinceau.setColor(new Color(255, 0, 0)); secondPinceau.setColor(new Color(255, 0, 0));
//si la case a au moins 1 voisin qui est une bombe
if(this.voisin>0){ if(this.voisin>0){
//on ecrit le nombre de voisin que elle a
secondPinceau.drawString(String.valueOf(voisin), this.getWidth()/2, this.getHeight()/2); secondPinceau.drawString(String.valueOf(voisin), this.getWidth()/2, this.getHeight()/2);
} }
//si la case est une bombe
if(this.bombe==true){ if(this.bombe==true){
//on remplace le rectangle blanc par un rectangle rouge
secondPinceau.setColor(new Color(255,0,125)); secondPinceau.setColor(new Color(255,0,125));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
//on affiche la bombe
secondPinceau.drawImage(this.imgboombe, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); secondPinceau.drawImage(this.imgboombe, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
} }
} }

Binary file not shown.

View File

@ -1,5 +1,5 @@
// Tom Monint et Clément Martins // Tom Monint et Clément Martins
// main_ex V1 // main_ex V4
// Classe ayant pour but d'être executer // Classe ayant pour but d'être executer
//importons les packages necessaires //importons les packages necessaires
@ -15,21 +15,26 @@ public class main_ex{
fenetre.setLocation(0,0); fenetre.setLocation(0,0);
//on choisi une taille arbitraire //on choisi une taille arbitraire
fenetre.setSize(1500,800); fenetre.setSize(1500,800);
//nous utiliserons un gestionnaire GridLayout //nous utiliserons un gestionnaire GridLayout de dimensions choisi précédament
GridLayout grille = new GridLayout(ligne,collonne); GridLayout grille = new GridLayout(ligne,collonne);
fenetre.setLayout(grille); fenetre.setLayout(grille);
// l'application ne se fermera que si on clique sur // l'application ne se fermera que si on clique sur
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setVisible(true); fenetre.setVisible(true);
// nous creons le tableau de Case qui représente l'etat du jeu
Case[][] tab = new Case[ligne][collonne]; Case[][] tab = new Case[ligne][collonne];
// on ajoute a la fenetre toute les case (ligne*collonne)
for(int i=0; i<ligne; i++){ for(int i=0; i<ligne; i++){
for(int t=0; t<collonne; t++){ for(int t=0; t<collonne; t++){
tab[i][t]= new Case(); tab[i][t]= new Case();
//nous ajoutons aussi a chaque case son observateur de case
tab[i][t].addMouseListener(new observateurCase(i, t, tab)); tab[i][t].addMouseListener(new observateurCase(i, t, tab));
fenetre.add(tab[i][t]); fenetre.add(tab[i][t]);
} }
} }
//nous disposons les bombe dans le jeu
plateau.setAllBombe(8, ligne, collonne, tab); plateau.setAllBombe(8, ligne, collonne, tab);
//maitenant que les bombe sont mise nous pouvons modifier le nombre de voisin des cases
plateau.setAllVoisin(tab); plateau.setAllVoisin(tab);
} }
} }

Binary file not shown.

View File

@ -1,6 +1,6 @@
//Tom Monin et Clément Martins //Tom Monin et Clément Martins
// observateurChoix V1 // observateurChoix V4
//Class pour la selection du nombre de collone et ligne et de Mine a la souris //Class de l'observateur des Cases
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import javax.swing.*; import javax.swing.*;
@ -16,29 +16,41 @@ public class observateurCase implements MouseListener{
} }
@Override @Override
public void mouseClicked(MouseEvent evenement){ public void mouseClicked(MouseEvent evenement){
//si on clique gauche
if(evenement.getButton() == MouseEvent.BUTTON1){ if(evenement.getButton() == MouseEvent.BUTTON1){
//si la case n'est pas suspecter(d'etre une bombe ou je sais pas) et que elle n'est pas visible
if(this.tableau[this.ligne][this.collonne].getSuspition()==false && this.tableau[this.ligne][this.collonne].getVisibiliter()==false){ if(this.tableau[this.ligne][this.collonne].getSuspition()==false && this.tableau[this.ligne][this.collonne].getVisibiliter()==false){
//nous la rendons visible et la reafichons
this.tableau[this.ligne][this.collonne].setVisibiliter(true); this.tableau[this.ligne][this.collonne].setVisibiliter(true);
this.tableau[this.ligne][this.collonne].repaint(); this.tableau[this.ligne][this.collonne].repaint();
//si elle n'a pas de voisin nous pouvons afficher les case aux alentours qui serons évidentes a cliquer
if(this.tableau[this.ligne][this.collonne].getVoisin()==0 && this.tableau[this.ligne][this.collonne].getBombe()==false){ if(this.tableau[this.ligne][this.collonne].getVoisin()==0 && this.tableau[this.ligne][this.collonne].getBombe()==false){
this.cliqueEvident(this.ligne, this.collonne); this.cliqueEvident(this.ligne, this.collonne);
} }
//nous testons si le joueur a gagner/perdu
int resultat=plateau.etatDeVictoire(this.tableau); int resultat=plateau.etatDeVictoire(this.tableau);
//si il perd
if(resultat==-1){ if(resultat==-1){
plateau.perduGagner(this.tableau); plateau.perduGagner(this.tableau);
} }
//si il gagne
if(resultat==1){ if(resultat==1){
plateau.perduGagner(this.tableau); plateau.perduGagner(this.tableau);
} }
} }
} }
//si clique droit
if(evenement.getButton() == MouseEvent.BUTTON3){ if(evenement.getButton() == MouseEvent.BUTTON3){
//nous modifions la suspitions de la case et la reafichons
this.tableau[this.ligne][this.collonne].suspition(); this.tableau[this.ligne][this.collonne].suspition();
this.tableau[this.ligne][this.collonne].repaint(); this.tableau[this.ligne][this.collonne].repaint();
//nous testons si le joeur a gagner/perdu
int resultat=plateau.etatDeVictoire(this.tableau); int resultat=plateau.etatDeVictoire(this.tableau);
//si perdu
if(resultat==-1){ if(resultat==-1){
System.out.println("perdu"); System.out.println("perdu");
} }
//si gagner
if(resultat==1){ if(resultat==1){
System.out.println("gagner"); System.out.println("gagner");
} }
@ -59,223 +71,80 @@ public class observateurCase implements MouseListener{
public void mouseReleased(MouseEvent evenement){ public void mouseReleased(MouseEvent evenement){
} }
//--------------------------------fonction permettant d'afficher toutes les case n'ayant pas de voisin adjacente utilisant plusieur fonction récursive-----------------------------
private void cliqueEvident(int ligneDelta, int collonneDelta){ private void cliqueEvident(int ligneDelta, int collonneDelta){
//nous affichons la case
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
//nous affichons les cases possédants des voisins
this.affichageVoisinEvident(ligneDelta, collonneDelta); this.affichageVoisinEvident(ligneDelta, collonneDelta);
//si la case du haut existe et n'est pas visible et n'a pas de voisin et n'est pas une bombe
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){ if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
this.haut(ligneDelta-1, collonneDelta); //on utilise la fonction recurisve sur la case du haut
this.cliqueEvident(ligneDelta-1, collonneDelta);
} }
//la même chose pour les 8 cases possible donc recursivite possible (voir principe en haut)
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){ if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.diaghautgauche(ligneDelta-1, collonneDelta-1); this.cliqueEvident(ligneDelta-1, collonneDelta-1);
} }
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){ if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.bas(ligneDelta+1, collonneDelta); this.cliqueEvident(ligneDelta+1, collonneDelta);
} }
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){ if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.droite(ligneDelta, collonneDelta+1); this.cliqueEvident(ligneDelta, collonneDelta+1);
} }
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){ if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.gauche(ligneDelta, collonneDelta-1); this.cliqueEvident(ligneDelta, collonneDelta-1);
} }
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){ if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.diagbasgauche(ligneDelta+1, collonneDelta-1); this.cliqueEvident(ligneDelta+1, collonneDelta-1);
} }
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){ if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.diaghautdroite(ligneDelta-1, collonneDelta+1); this.cliqueEvident(ligneDelta-1, collonneDelta+1);
} }
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){ if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.diagbasdroite(ligneDelta+1, collonneDelta+1); this.cliqueEvident(ligneDelta+1, collonneDelta+1);
}
}
private void haut(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
this.haut(ligneDelta-1, collonneDelta);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.gauche(ligneDelta, collonneDelta-1);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.droite(ligneDelta, collonneDelta+1);
}
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.diaghautgauche(ligneDelta-1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.diaghautdroite(ligneDelta-1, collonneDelta+1);
}
}
private void bas(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.bas(ligneDelta+1, collonneDelta);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.gauche(ligneDelta, collonneDelta-1);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.droite(ligneDelta, collonneDelta+1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.diagbasgauche(ligneDelta+1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.diagbasdroite(ligneDelta+1, collonneDelta+1);
}
}
private void gauche(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
this.haut(ligneDelta-1, collonneDelta);
}
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.bas(ligneDelta+1, collonneDelta);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.gauche(ligneDelta, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.diaghautgauche(ligneDelta-1, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.diagbasgauche(ligneDelta+1, collonneDelta-1);
}
}
private void droite(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
this.haut(ligneDelta-1, collonneDelta);
}
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.bas(ligneDelta+1, collonneDelta);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.droite(ligneDelta, collonneDelta+1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.diaghautdroite(ligneDelta-1, collonneDelta+1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.diagbasdroite(ligneDelta+1, collonneDelta+1);
}
}
private void diaghautgauche(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
this.haut(ligneDelta-1, collonneDelta);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.gauche(ligneDelta, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.diaghautgauche(ligneDelta-1, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.diagbasgauche(ligneDelta+1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.diaghautdroite(ligneDelta-1, collonneDelta+1);
}
}
private void diagbasgauche(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.bas(ligneDelta+1, collonneDelta);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.gauche(ligneDelta, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.diaghautgauche(ligneDelta-1, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.diagbasgauche(ligneDelta+1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.diagbasdroite(ligneDelta+1, collonneDelta+1);
}
}
private void diaghautdroite(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
this.haut(ligneDelta-1, collonneDelta);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.droite(ligneDelta, collonneDelta+1);
}
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.diaghautgauche(ligneDelta-1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.diaghautdroite(ligneDelta-1, collonneDelta+1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.diagbasdroite(ligneDelta+1, collonneDelta+1);
}
}
private void diagbasdroite(int ligneDelta, int collonneDelta){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
this.affichageVoisinEvident(ligneDelta, collonneDelta);
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.bas(ligneDelta+1, collonneDelta);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.droite(ligneDelta, collonneDelta+1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.diagbasgauche(ligneDelta+1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.diaghautdroite(ligneDelta-1, collonneDelta+1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.diagbasdroite(ligneDelta+1, collonneDelta+1);
} }
} }
//--------------------------------------fonction qui affiche toutes les case possédant un voisin d'une case donnée------------------------------------------
private void affichageVoisinEvident(int ligneDelta, int collonneDelta){ private void affichageVoisinEvident(int ligneDelta, int collonneDelta){
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){ //nous regardons les 8 case adjacentes et si elle a des voisin
//si elle en a alors nous la rendons visible
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()>0){
this.tableau[ligneDelta-1][collonneDelta].setVisibiliter(true); this.tableau[ligneDelta-1][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta].repaint(); this.tableau[ligneDelta-1][collonneDelta].repaint();
} }
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()>0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){ if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()>0){
this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta].repaint(); this.tableau[ligneDelta+1][collonneDelta].repaint();
} }
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){ if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()>0){
this.tableau[ligneDelta][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta+1].repaint(); this.tableau[ligneDelta][collonneDelta+1].repaint();
} }
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){ if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()>0){
this.tableau[ligneDelta][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta-1].repaint(); this.tableau[ligneDelta][collonneDelta-1].repaint();
} }
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){ if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()>0){
this.tableau[ligneDelta-1][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta-1][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta-1].repaint(); this.tableau[ligneDelta-1][collonneDelta-1].repaint();
} }
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){ if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()>0){
this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta-1].repaint(); this.tableau[ligneDelta+1][collonneDelta-1].repaint();
} }
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){ if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()>0){
this.tableau[ligneDelta-1][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta-1][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta+1].repaint(); this.tableau[ligneDelta-1][collonneDelta+1].repaint();
} }
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){ if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()>0){
this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta+1].repaint(); this.tableau[ligneDelta+1][collonneDelta+1].repaint();
} }

Binary file not shown.

View File

@ -1,25 +1,42 @@
//Tom Monin et Clément Martins
//Class pour des fonction static de jeu
//V2
import java.util.*; import java.util.*;
import java.awt.event.*; import java.awt.event.*;
public class plateau{ public class plateau{
//-------------------------Fonction plaçant les bombes aléatoirement------------------------
public static void setAllBombe(int nombre, int ligne, int collonne, Case[][] tableau0){ public static void setAllBombe(int nombre, int ligne, int collonne, Case[][] tableau0){
Random rand = new Random(); Random rand = new Random();
//on répète le nombre de fois le nombre de bombe a placer
for(int i=0; i<nombre; i++){ for(int i=0; i<nombre; i++){
//on genere 2 chiffre aléatoire(ligne et collonne)
int x=rand.nextInt(ligne); int x=rand.nextInt(ligne);
int y=rand.nextInt(collonne); int y=rand.nextInt(collonne);
//si il n'y a pas de bombe ici
if(tableau0[x][y].getBombe()==false){ if(tableau0[x][y].getBombe()==false){
//on en place une
tableau0[x][y].setBombe(); tableau0[x][y].setBombe();
}else{ }else{
//autrement nous recomencerons 1 fois de plus le tirage pour ne pas modifier le nombre de bombe
i--; i--;
} }
} }
} }
//-------------------------Fonction mettant le nombre de bombe voisin a chaque Case------------------
public static void setAllVoisin(Case[][] tableau0){ public static void setAllVoisin(Case[][] tableau0){
//nous parcourons le tableau du jeu
for(int i=0; i<tableau0.length; i++){ for(int i=0; i<tableau0.length; i++){
for(int t=0; t<tableau0[i].length; t++){ for(int t=0; t<tableau0[i].length; t++){
int voisin=0; int voisin=0;
//nous regardons dans les cases adjacentes(si elles existe) si elle sont des bombes
if(i>0){ if(i>0){
if(tableau0[i-1][t].getBombe()==true){ if(tableau0[i-1][t].getBombe()==true){
//si elle le sont alors nous augmentons le nombre de voisin
voisin++; voisin++;
} }
if(t>0){ if(t>0){
@ -58,36 +75,57 @@ public class plateau{
voisin++; voisin++;
} }
} }
//finalement nous mettons pour cette case sont nombre de voisin
tableau0[i][t].setVoisin(voisin); tableau0[i][t].setVoisin(voisin);
} }
} }
} }
//-------------------------------Fonction qui verifie l'etat de jeu(perdu, gagner)------------------------
public static int etatDeVictoire(Case[][] tableau0){ public static int etatDeVictoire(Case[][] tableau0){
//variable pour une condition
int condition=0; int condition=0;
//nous parcourons le tableau du jeu
for(int i=0; i<tableau0.length; i++){ for(int i=0; i<tableau0.length; i++){
for(int t=0; t<tableau0[i].length; t++){ for(int t=0; t<tableau0[i].length; t++){
//si une case n'est pas visible mais que ce n'est pas une bombe
if(tableau0[i][t].getVisibiliter()==false && tableau0[i][t].getBombe()==false){ if(tableau0[i][t].getVisibiliter()==false && tableau0[i][t].getBombe()==false){
//nous augmentons la conditions pour montrer que la partie est toujour en cours
condition++; condition++;
} }
//si une bombe est visible
if(tableau0[i][t].getVisibiliter()==true && tableau0[i][t].getBombe()==true){ if(tableau0[i][t].getVisibiliter()==true && tableau0[i][t].getBombe()==true){
//on retourne une valeur représentant la défaite: -1
return -1; return -1;
} }
//si une bombe n'est pas susposer comme tel
if(tableau0[i][t].getSuspition2()==false && tableau0[i][t].getBombe()==true){ if(tableau0[i][t].getSuspition2()==false && tableau0[i][t].getBombe()==true){
//nous augmentons la conditions pour montrer que la partie n'est pas fini
condition++; condition++;
} }
} }
} }
//si la partie n'est pas fini
if(condition>0){ if(condition>0){
//on retourne 0 ici comme une valleur null
return 0; return 0;
} }
//sinon le joueur a donc gagner on renvoie 1
return 1; return 1;
} }
//-----------------------------------Fonction après victoire/defaite pour enlever les observateur a chaque Case--------------------------------
public static void perduGagner(Case[][] tableau0){ public static void perduGagner(Case[][] tableau0){
//on parcour le tableau du jeu
for(int i=0; i<tableau0.length; i++){ for(int i=0; i<tableau0.length; i++){
for(int t=0; t<tableau0[i].length; t++){ for(int t=0; t<tableau0[i].length; t++){
//on récupere le tableau d'observateur
MouseListener[] tabListener; MouseListener[] tabListener;
tabListener=tableau0[i][t].getMouseListeners(); tabListener=tableau0[i][t].getMouseListeners();
//que nous parcourons
for(int longeur=0; longeur<=tabListener.length-1; longeur++){ for(int longeur=0; longeur<=tabListener.length-1; longeur++){
//on enleve a chaque case les observateur 1 par 1
tableau0[i][t].removeMouseListener(tabListener[longeur]); tableau0[i][t].removeMouseListener(tabListener[longeur]);
} }
} }