172 lines
8.1 KiB
Java
172 lines
8.1 KiB
Java
// 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.jpg");
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |