// Tom Monin et Clément Martins // 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{ //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...) ne sont pas des attributs de la classe Case car //pour faciliter la sauvegarde et donc permettre de sérialiser l'objet les attribut devrons être des classes réalisant Serializable ou Externialisable //Constructeur de la Case public Case(){ //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 mettons les getter/setter public void setVisibiliter(boolean trueorfalse){ this.visibilite=trueorfalse; } public void setBombe(){ this.bombe=true; } public void suspition(){ this.suspition++; if(this.suspition==3){ this.suspition=0; } } public void setSuspition(int n){ this.suspition=n; //valeur sentinel pour montrer que c'est cette case qui a exploser } public boolean getBombe(){ return this.bombe; } public void setVoisin(int nvoisin){ this.voisin=nvoisin; } public int getSuspition(){ return this.suspition; } public boolean getVisibiliter(){ return this.visibilite; } 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 Graphics secondPinceau = pinceau.create(); // obligatoire : si le composant n'est pas censé être transparent if (this.isOpaque()) { // obligatoire : on repeint toute la surface avec la couleur de fond 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 Image etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png"); secondPinceau.drawImage(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){ Image interogation= Toolkit.getDefaultToolkit().getImage("./IMAGE/pointintero.png"); //on affiche le point d'interogation secondPinceau.drawImage(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); //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 if(this.voisin==1){ Image un=Toolkit.getDefaultToolkit().getImage("./IMAGE/un.jpg"); secondPinceau.drawImage(un, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==2){ Image deux=Toolkit.getDefaultToolkit().getImage("./IMAGE/deux.jpg"); secondPinceau.drawImage(deux, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==3){ Image trois=Toolkit.getDefaultToolkit().getImage("./IMAGE/trois.jpg"); secondPinceau.drawImage(trois, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==4){ Image quatre=Toolkit.getDefaultToolkit().getImage("./IMAGE/quatre.jpg"); secondPinceau.drawImage(quatre, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==5){ Image cinq=Toolkit.getDefaultToolkit().getImage("./IMAGE/cinq.png"); secondPinceau.drawImage(cinq, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==6){ Image six=Toolkit.getDefaultToolkit().getImage("./IMAGE/six.jpg"); secondPinceau.drawImage(six, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==7){ Image sept=Toolkit.getDefaultToolkit().getImage("./IMAGE/sept.jpg"); secondPinceau.drawImage(sept, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } if(this.voisin==8){ Image huit=Toolkit.getDefaultToolkit().getImage("./IMAGE/huit.jpg"); secondPinceau.drawImage(huit, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } //si la case est supecter mais visible (possible que si le joueur a perdu) et que ce n'est pas une bombe //on affiche un fond rouge pour mettre en valeur l'erreur if(this.suspition==1 && this.bombe==false){ secondPinceau.setColor(new Color(255, 0, 0)); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); Image etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png"); secondPinceau.drawImage(etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } } //si la case est une bombe if(this.bombe==true){ //si la bombe est suspecter mais afficher (possible que si le joeur perd) if(this.suspition==1){ //on affiche l'etoile sur fond vert pour préciser que le joueur avait raison secondPinceau.setColor(new Color(0, 255, 0)); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); Image etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png"); secondPinceau.drawImage(etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); //autrement nous afficherons l'image de la bombe }else{ Image imgboombe= Toolkit.getDefaultToolkit().getImage("./IMAGE/bombe.png"); //si la suspition est de 4 (possible que si c'est la bombe qui a exploser) valeur sentinelle if(this.suspition==4){ //on dessine un rectangle rouge secondPinceau.setColor(new Color(255,0,0)); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); }else{ //on dessine un rectangle orange pour montrer que la case était une bombe secondPinceau.setColor(new Color(200, 127, 0)); secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18); } //on affiche la bombe secondPinceau.drawImage(imgboombe, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this); } } } } }