-
Notifications
You must be signed in to change notification settings - Fork 0
/
Case.java
186 lines (169 loc) · 5.48 KB
/
Case.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Dimension;
import javax.swing.JComponent;
/**
* La classe <code> Case </code> représente une case de Démineur
* @author JUSTINE Yannis
*/
public class Case extends JComponent{
//Si la case est révéler ou non
private boolean clique;
//Si la case est une mine
private boolean estMine;
//Le nombre de voisin de la case qui sont des mines
private int bombeVoisin;
/*Le flag de la case :
0 = sans flag
1 = étoile
2 = ?
3 = utilisé uniquement pour représenter la bombe qui a explosé*/
private int flag;
/**
* Initialise une case qui n'est pas une mine et qui a comme dimension celle fourni par son argument
* @param size dimension de la case
*/
public Case(int size){
super();
this.setOpaque(false);
this.setPreferredSize(new Dimension(size,size));
this.clique = false;
this.estMine = false;
this.bombeVoisin = 0;
this.flag = 0;
}
/**
* Révèle la case et la repaint.
*/
public void reveler(){
this.clique = true;
repaint();
}
/**
* Variante de révéler() spécifique a la mine déclenchée
*/
public void exploser(){
/* Pour la programmation défensive
if(!this.estMine)
throw new IllegalStateException("la case n'est pas une bombe"); */
this.flag = 3; //Bombe a explosé
this.clique = true;
repaint();
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics pinceau = g.create();
int width = this.getWidth();
int height = this.getHeight();
pinceau.setColor(Color.BLACK);
//Si la case est une mine
//this.setBackground(new Color(240,240,240));
if(!this.clique){
if(this.flag == 0)
pinceau.drawImage(Fichier.IMAGE[0],0,0,width,height,this);
else if(this.flag == 1)
pinceau.drawImage(Fichier.IMAGE[13],0,0,width,height,this);
else
pinceau.drawImage(Fichier.IMAGE[12],0,0,width,height,this);
}
else{
if(!this.estMine){
switch(this.bombeVoisin){
case(0):
pinceau.drawImage(Fichier.IMAGE[9],0,0,width,height,this);
break;
case(1):
pinceau.drawImage(Fichier.IMAGE[1],0,0,width,height,this);
break;
case(2):
pinceau.drawImage(Fichier.IMAGE[2],0,0,width,height,this);
break;
case(3):
pinceau.drawImage(Fichier.IMAGE[3],0,0,width,height,this);
break;
case(4):
pinceau.drawImage(Fichier.IMAGE[4],0,0,width,height,this);
break;
case(5):
pinceau.drawImage(Fichier.IMAGE[5],0,0,width,height,this);
break;
case(6):
pinceau.drawImage(Fichier.IMAGE[6],0,0,width,height,this);
break;
case(7):
pinceau.drawImage(Fichier.IMAGE[7],0,0,width,height,this);
break;
case(8):
pinceau.drawImage(Fichier.IMAGE[8],0,0,width,height,this);
break;
}
if(this.flag == 1)
pinceau.drawImage(Fichier.IMAGE[11],0,0,width,height,this);
}
else{
if(this.flag == 3)
pinceau.drawImage(Fichier.IMAGE[14],0,0,width,height,this);
else if (this.flag == 2)
pinceau.drawImage(Fichier.IMAGE[12],0,0,width,height,this);
else if (this.flag == 1)
pinceau.drawImage(Fichier.IMAGE[13],0,0,width,height,this);
else
pinceau.drawImage(Fichier.IMAGE[10],0,0,width,height,this);
}
}
}
/**
* Retourne true si la case est une mine
* @return true si la case est une mine
*/
public boolean estMine(){
return this.estMine;
}
/**
* Retourne le nombre de mine autour de la case
* @return le nombre de mine autour de la case
*/
public int getVoisin(){
return this.bombeVoisin;
}
/**
* Retourne le flag de la case
* @return integer
*/
public int getFlag(){
return this.flag;
}
/**
* Récuperer si la case est révélée
* @return true si la case est révélée
*/
public boolean estClique(){
return this.clique;
}
/**
* Change une case en mine
*/
public void setMine(){
this.estMine = true;
}
/**
* Change le flag de la case
* @param flag le nouveau flag de la cas
*/
public void setFlag(int flag){
this.flag = flag;
}
/**
* Incrémente le nombre de mines aux alentours de la case
*/
public void ajouterBombeVoisin(){
this.bombeVoisin += 1;
}
/**
* Incrémente le flag de la case
*/
public void ajouteFlag(){
this.flag = (this.flag + 1) % 3;
}
}