-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQueue.java
209 lines (192 loc) · 5.69 KB
/
Queue.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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
import java.awt.Color;
import java.awt.Graphics;
/**
* La Queue permet d'exercer une force sur la bille
* blanche, cible de la queue. Elle est représenté par
* une ligne qui part de la souris et qui vas jusqu'à la bille
* cible.
*
* @author Jean Guibert, Romain Bressan, Thomas Hennequin-Parey
*/
public class Queue
{
/**
* Abscisse de la souris.
*/
public float xSouris;
/**
* Ordonnée de la souris.
*/
public float ySouris;
/**
* Bille blanche, cible de la queue.
*/
public Bille bBlanche;
/**
* C'est la table qui contient la queue.
*/
public Table t;
/**
* Information a propos du coté où se trouvait le triangle
* de bille au moment de la casse.
* 0 - pas encore définis.
* 1 - coté gauche.
* 2 - Coté droit.
*/
public int coteTriangleCasse;
/**
* Triangle du coté gauche au moment de la casse.
* Constante utilisé pour <code>coteTriangleCasse</code>..
*/
public final static int TRI_COTE_G = 1;
/**
* Triangle du coté droit au moment de la casse.
* Constante utilisé pour <code>coteTriangleCasse</code>..
*/
public final static int TRI_COTE_D = 2;
/**
* Construit une <code>Queue</code>.
*
* @param b
* Bille cible de la queue.
*/
public Queue(Bille b, Table t)
{
this.bBlanche = b;
this.t = t;
}
/**
* Ajoute la bille blanche a la queue.
* @param b
* La bille blanche de la table.
*/
public void addBBlanche (Bille b)
{
this.bBlanche = b;
}
/**
* Convertit une <code>Queue</code> en chaîne de caractères.
*
* @return string contenant des infos a propos de la queue.
*/
public String toString()
{
String cote = " TriCote U";
if (coteTriangleCasse == Queue.TRI_COTE_G)
cote = " TriCote G";
else if (coteTriangleCasse == Queue.TRI_COTE_D)
cote = " TriCote D";
return "{Queue}{xSouris:"+this.xSouris+" ySouris:"+this.ySouris+cote+"}";
}
/**
* Retourne l'abscisse de la souris.
*
* @return Abscisse de la souris.
*/
public float getXSouris()
{
return xSouris;
}
/**
* Retourne l'ordonnée de la souris.
*
* @return Ordonnée de la souris.
*/
public float getYSouris()
{
return ySouris;
}
/**
* Modifie la posiition de la souris. Appelé des que la souris bouge.
*
* @param x
* Abscisse de la souris.
* @param y
* Ordonnée de la souris.
*/
public void setSouris(float x, float y)
{
this.xSouris = x;
this.ySouris = y;
}
/**
* Affiche la queue si les billes ne sont pas en mouvement.
* La queue est une ligne qui va de la bille blanche jusqu'à la souris.
*
* @param g
* Contexte graphique.
*/
public void paint(Graphics g)
{
g.setColor(Color.BLUE);
if (!bBlanche.isMoving())
if (!bBlanche.dansPoche && (t.readyPaint || t.m.calIA))
g.drawLine((int) xSouris, (int) ySouris, (int) bBlanche.x, (int) bBlanche.y);
if (bBlanche.dansPoche)
paintPutBBlanche(g);
}
/**
* Si la bille blanche a été empoché dessine sa remise en jeu
* à la place de la queue. Remise en jeu à droite ou gauche en fonction
* de la position du triangle au moment de la casse.
*
* @param g
* Contexte graphique.
*/
private void paintPutBBlanche (Graphics g)
{
g.setColor(this.bBlanche.couleur);
final int diam = 2 * Bille.RAYON;
// si triangle a droite
if (coteTriangleCasse == Queue.TRI_COTE_D)
paintPutBBlancheG(g);
else
paintPutBBlancheD(g);
// Affiche la bille blanche sous la souris.
g.drawOval((int) this.xSouris - Bille.RAYON,
(int) this.ySouris - Bille.RAYON, diam, diam);
}
/**
* Si la bille blanche a été empoché dessine sa remise en jeu à Gauche.
* à la place de la queue. Remise en jeu à droite ou gauche en fonction
* de la position du triangle au moment de la casse.
*
* @param g
* Contexte graphique.
*/
private void paintPutBBlancheG (Graphics g)
{
/* dessine limite de la zone de remise en jeu. */
g.drawLine(((int) Table.WIDTH) / 4, (int) Table.ORI_Y_T,
((int) Table.WIDTH) / 4, (int) (Table.ORI_Y_T + Table.HEIGHT_T));
/* si la souris est en dehors de la zone, on dessine un cercle rouge */
if (((xSouris <= (Table.WIDTH/4)) && (xSouris >= (Table.ORI_X_T + Bille.RAYON))
&& (ySouris >= Table.ORI_Y_T + Bille.RAYON) && (ySouris <= (Table.ORI_Y_T + Table.HEIGHT_T - Bille.RAYON)))
&& (!t.verifCollision(xSouris, ySouris)))
g.setColor(Color.WHITE);
else
g.setColor(Color.RED);
}
/**
* Si la bille blanche a été empoché dessine sa remise en jeu à Droite.
* à la place de la queue. Remise en jeu à droite ou gauche en fonction
* de la position du triangle au moment de la casse.
*
* @param g
* Contexte graphique.
*/
private void paintPutBBlancheD (Graphics g)
{
g.drawLine((int) (Table.WIDTH / 4) * 3, (int) Table.ORI_Y_T,
(int) (Table.WIDTH / 4) * 3, (int) (Table.ORI_Y_T + Table.HEIGHT_T));
/* si la souris est dans la zone, on dessine un cercle blanc */
if (((xSouris >= (Table.WIDTH / 4) * 3)
&& (xSouris <= Table.ORI_X_T + Table.WIDTH_T - Bille.RAYON)
&& (ySouris>=Table.ORI_Y_T + Bille.RAYON)
&& (ySouris <= (Table.ORI_Y_T + Table.HEIGHT_T - Bille.RAYON)))
&& (!t.verifCollision(xSouris, ySouris)))
g.setColor(Color.WHITE);
else
g.setColor(Color.RED);
}
}