diff --git a/CASE/Case.class b/CASE/Case.class index d615a6b..81cb658 100644 Binary files a/CASE/Case.class and b/CASE/Case.class differ diff --git a/CASE/Case.java b/CASE/Case.java index 8728ada..b1d1d56 100644 --- a/CASE/Case.java +++ b/CASE/Case.java @@ -1,26 +1,36 @@ // Tom Monin et Clément Martins -// paintChoix V1 -// class pour l'affichage de la selection des lignes, collonnes et nombre de mines +// paintChoix V3 +// class représentant une case dans la partie import java.awt.*; import javax.swing.*; import javax.swing.JComponent; public class Case extends JComponent{ - private boolean visibilite; - private boolean bombe; - private int voisin; - private int suspition; + //Etat de la case: + private boolean visibilite; //Visible ou pas + private boolean bombe; //Miner ou pas + 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; + + //Constructeur de la Case public Case(){ - this.visibilite=false; - this.bombe=false; - this.voisin=0; - this.suspition=0; - this.interogation= Toolkit.getDefaultToolkit().getImage("./IMAGE/pointintero.png"); + //nous initialisons les valeurs + this.visibilite=false; //la visibiler est fausse donc la case est cacher + this.bombe=false; // ce n'est pas une bombe + this.voisin=0; // elle n'a pas de voisin bombe + 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.imgboombe= Toolkit.getDefaultToolkit().getImage("./IMAGE/bombe.png"); } + + // Nous mettons les getter/setter + public void setVisibiliter(boolean trueorfalse){ this.visibilite=trueorfalse; } @@ -46,6 +56,7 @@ public class Case extends JComponent{ 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(){ if(this.suspition==1){ return true; @@ -59,6 +70,8 @@ public class Case extends JComponent{ public int getVoisin(){ return this.voisin; } + + //on paint la case en fonction de ses attribut et donc son etat @Override protected void paintComponent(Graphics pinceau) { // 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.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){ + //on dessinne un rectangle gris sur un fond noir secondPinceau.setColor(new Color(0,0,0)); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.setColor(new Color(100, 100, 100)); 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){ + //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); } + //si on suspecte que on ne sais pas 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); } } + //si la case est afficher(visible) if(this.visibilite==true){ + //on dessine un rectangle blanc sur un fond noir secondPinceau.setColor(new Color(0,0,0)); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.setColor(new Color(255, 255, 255)); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); secondPinceau.setColor(new Color(255, 0, 0)); + //si la case a au moins 1 voisin qui est une bombe if(this.voisin>0){ + //on ecrit le nombre de voisin que elle a secondPinceau.drawString(String.valueOf(voisin), this.getWidth()/2, this.getHeight()/2); } + //si la case est une bombe if(this.bombe==true){ + //on remplace le rectangle blanc par un rectangle rouge secondPinceau.setColor(new Color(255,0,125)); 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); } } diff --git a/CASE/main_ex.class b/CASE/main_ex.class index 3d3eba0..7bf11f8 100644 Binary files a/CASE/main_ex.class and b/CASE/main_ex.class differ diff --git a/CASE/main_ex.java b/CASE/main_ex.java index 0dcf24f..e170066 100644 --- a/CASE/main_ex.java +++ b/CASE/main_ex.java @@ -1,5 +1,5 @@ // Tom Monint et Clément Martins -// main_ex V1 +// main_ex V4 // Classe ayant pour but d'être executer //importons les packages necessaires @@ -15,21 +15,26 @@ public class main_ex{ fenetre.setLocation(0,0); //on choisi une taille arbitraire 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); fenetre.setLayout(grille); // l'application ne se fermera que si on clique sur fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setVisible(true); + // nous creons le tableau de Case qui représente l'etat du jeu Case[][] tab = new Case[ligne][collonne]; + // on ajoute a la fenetre toute les case (ligne*collonne) for(int i=0; i0 && 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){ - this.diaghautgauche(ligneDelta-1, collonneDelta-1); + this.cliqueEvident(ligneDelta-1, collonneDelta-1); } if(ligneDelta0 && 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 && ligneDelta0 && 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(collonneDelta0 && 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(collonneDelta0 && 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(collonneDelta0 && 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(ligneDelta0 && 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(collonneDelta0 && ligneDelta0 && 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(ligneDelta0 && 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 && ligneDelta0 && 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(ligneDelta0 && 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(collonneDelta0 && 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 && ligneDelta0 && 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(ligneDelta0 && 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 && ligneDelta0 && 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(collonneDelta0 && 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(collonneDelta0 && 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(collonneDelta0 && ligneDelta0 && 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(collonneDelta0 && 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].repaint(); } - if(ligneDelta0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){ + if(ligneDelta0){ this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta].repaint(); } - if(collonneDelta0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){ + if(collonneDelta0){ this.tableau[ligneDelta][collonneDelta+1].setVisibiliter(true); 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].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].repaint(); } - if(collonneDelta>0 && ligneDelta0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){ + if(collonneDelta>0 && ligneDelta0){ this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta-1].repaint(); } - if(collonneDelta0 && 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(collonneDelta0 && 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].repaint(); } - if(collonneDelta0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){ + if(collonneDelta0){ this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta+1].repaint(); } diff --git a/CASE/plateau.class b/CASE/plateau.class index 0e1c9e5..91e72cc 100644 Binary files a/CASE/plateau.class and b/CASE/plateau.class differ diff --git a/CASE/plateau.java b/CASE/plateau.java index 1759351..f6f1840 100644 --- a/CASE/plateau.java +++ b/CASE/plateau.java @@ -1,25 +1,42 @@ +//Tom Monin et Clément Martins +//Class pour des fonction static de jeu +//V2 + + import java.util.*; import java.awt.event.*; public class plateau{ + //-------------------------Fonction plaçant les bombes aléatoirement------------------------ + public static void setAllBombe(int nombre, int ligne, int collonne, Case[][] tableau0){ Random rand = new Random(); + //on répète le nombre de fois le nombre de bombe a placer for(int i=0; i0){ if(tableau0[i-1][t].getBombe()==true){ + //si elle le sont alors nous augmentons le nombre de voisin voisin++; } if(t>0){ @@ -58,36 +75,57 @@ public class plateau{ voisin++; } } + //finalement nous mettons pour cette case sont nombre de voisin tableau0[i][t].setVoisin(voisin); } } } + + //-------------------------------Fonction qui verifie l'etat de jeu(perdu, gagner)------------------------ + public static int etatDeVictoire(Case[][] tableau0){ + //variable pour une condition int condition=0; + //nous parcourons le tableau du jeu for(int i=0; i0){ + //on retourne 0 ici comme une valleur null return 0; } + //sinon le joueur a donc gagner on renvoie 1 return 1; } + //-----------------------------------Fonction après victoire/defaite pour enlever les observateur a chaque Case-------------------------------- + public static void perduGagner(Case[][] tableau0){ + //on parcour le tableau du jeu for(int i=0; i