-
Notifications
You must be signed in to change notification settings - Fork 0
/
Bateau.java
225 lines (191 loc) · 6.48 KB
/
Bateau.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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/**
* @author Vincent F et Thomas B
*/
/**
* Classe de gestion du plateau des bateaux.
*/
public class Bateau {
private int numero;
private int longueur;
private boolean horizontal;
private boolean alive = false;
private int[][] lieuEtat = null; // Deux première colonne pour les coordonnées, la troisième pour l'état
/** Méthode qui créé un bateau à partir de ses coordonnées de placement, et qui met à jour sa longueur.
* @param xDebut : valeur sur les x de début du bateau (inclus)
* @param yDebut : valeur sur les y de début du bateau (inclus)
* @param xFin : valeur sur les x de fin du bateau (inclus)
* @param yFin : valeur sur les y de fin du bateau (inclus)
* @param numero : numero du bateau qui correspond à son identifiant.
*/
public Bateau(int xDebut, int yDebut, int xFin, int yFin, int numero){
if(xDebut==xFin){ // si le bateau est horizontal
lieuEtat = new int[(yFin-yDebut+1)][3]; // On créé un tableau de (yMax-Ymin)+1 en hauteur (soit pour la case 1 à 4, 3 cases + 1, soit bien 4 cases de long.
horizontal = true;
for(int i=0 ; i<(yFin-yDebut+1) ; i++){ // On parcourt chaque case et on ajoute ses coodonnées en X et en Y. le +1 est pour la même raison qu'au dessus.
lieuEtat[i][0] = xDebut;
lieuEtat[i][1] = yDebut+i;
}
} else if (yDebut==yFin) { // si le bateau est vertical
lieuEtat = new int[(xFin-xDebut+1)][3]; // On créé un tableau de (xMax-xMin)+1 en hauteur (soit pour la case 1 à 4, 3 cases + 1, soit bien 4 cases de long.
horizontal = false;
for(int i=0 ; i<(xFin-xDebut+1) ; i++){ // On parcourt chaque case et on ajoute ses coodonnées en X et en Y. le +1 est pour la même raison qu'au dessus.
lieuEtat[i][0] = xDebut+i;
lieuEtat[i][1] = yDebut;
}
}
this.numero = numero; // on lui attribue un numero
rendreAlive(); //on le rend alive en mettant toute la colonne 2 à "1"
}
/** Régénère un bateau. Le rend alive en mettant toute la colonne 2 (son état) à 1. ça pourrait être vu comme un regen du bateau, quel que soit son état.
*/
public void rendreAlive(){
for(int i =0; i<lieuEtat.length ; i++){
lieuEtat[i][2] = 1; //on passe toute la colonne "de Vie" à 1 comme vivant
}
alive = true;
}
/** Méthode qui coule un bateau, quel que soit son état, mettant toute la colonne 2 (son état) à 0.
*/
public void rendreCouler(){
for(int i =0; i<lieuEtat.length ; i++){
lieuEtat[i][2] = 0; //on passe toute la colonne "de Vie" à 0 comme mort
}
alive = false;
}
/** Méthode qui demande à un bateau si il est présent sur la case des coordonées passées en argument.
* @param x : hauteur de la case, son indice en vertical. (ordonnée)
* @param y : largeur de la case, son indice en horizontal. (abscisse)
* @return un boolean qui vaut true si le batau est présent sur la case, false si le bateau n'est pas présent sur la case.
*/
public boolean estPresentSurCetteCase(int x, int y){
boolean jeSuisPresent = false; // On pose une variable à retourner
for(int i=0; i< lieuEtat.length ; i++){ // On parcourt le tableau de coordonnées du bateau en question
if(lieuEtat[i][0] == x && lieuEtat[i][1]==y){ // Si les coordonnées en argument correspondent à un binome du tableau ( si à la ligne i, la colonne 0 = x et la colonne 1 = y, alors on renvois true
jeSuisPresent = true;
}
}
return jeSuisPresent;
}
/** Méthode qui devait être présente selon le sujet.
* @param plateauJoueur : un plateau
* @param x : x
* @param y : y
*/
public void tir(Plateau plateauJoueur, int x, int y){
//C'était dans le sujet. Il n'est pas dit qu'on doit vraiment s'en servir.
}
/** Méthode qui permet d'effectuer une modification sur un case occupée par un bateau.
* @param x : ordonnée
* @param y : abscisse
* @param modification : nombre signé ( il faut mettre le -) qui modifie la case correspondante, sur laquelle se trouve le bateau.
*/
public void recevoirModification(int x, int y, int modification){
for(int i =0; i<lieuEtat.length ; i++){
if(lieuEtat[i][0] == x && lieuEtat[i][1] == y){
lieuEtat[i][2] += modification; // Le bateau subit la modification notifiée dans la colonne 3 de son tableau d'état.
}
}
this.verifierAlive();
// DEBUG MODE //
/* Pour connaitre les etats des bateaux, cheat.
String etat = "";
for(int i =0; i<lieuEtat.length ; i++){
etat += "[" +lieuEtat[i][0] + "," + lieuEtat[i][1]+"]"+lieuEtat[i][2] ;
}
System.out.println("Etat du bateau tiré : " + etat);
*/
// FIN DEBUG MODE //
}
/** Méthode qui permet de recevoir un tir, donc par défaut, une modification de -1 sur la case x/y
* @param x : ordonnée
* @param y : abscisse
*/
public void recevoirTir(int x, int y){
this.recevoirModification(x, y, -1); // Le bateau subit une modification de vie de -1
}
/** Méthode qui vérifie si le bateau est alive, donc si toutes ces cases ont été touchées ou non. (Si la colonne 2 est complètement à 0). Modifie la variable alive du bateau courant.
*/
public void verifierAlive(){
boolean aliveOrNot = false;
for(int i =0; i<lieuEtat.length ; i++){
if(lieuEtat[i][2] > 0){
aliveOrNot = true;
}
}
this.alive = aliveOrNot;
}
/** Donne les coordonnées d'une case d'un bateau alive.
* @return des coordonnés
*/
public int[] donnerCoordonnesAlive(){
int coordonnes[] = new int[2];
for(int i =0; i<lieuEtat.length ; i++){
if(lieuEtat[i][2] > 0){
coordonnes[0] = lieuEtat[i][0];
coordonnes[1] = lieuEtat[i][1];
}
}
return coordonnes;
}
// ********** LES GETTERS ET SETTERS ********** //
/**
* @return the numero
*/
public int getNumero() {
return numero;
}
/**
* @param numero the numero à setter
*/
public void setNumero(int numero) {
this.numero = numero;
}
/**
* @return the longueur
*/
public int getLongueur() {
return longueur;
}
/**
* @param longueur the longueur à setter
*/
public void setLongueur(int longueur) {
this.longueur = longueur;
}
/**
* @return the horizontal
*/
public boolean isHorizontal() {
return horizontal;
}
/**
* @param horizontal the horizontal à setter
*/
public void setHorizontal(boolean horizontal) {
this.horizontal = horizontal;
}
/**
* @return the alive
*/
public boolean isAlive() {
return alive;
}
/**
* @param alive the alive à setter
*/
public void setAlive(boolean alive) {
this.alive = alive;
}
/**
* @return the lieuEtat
*/
public int[][] getLieuEtat() {
return lieuEtat;
}
/**
* @param lieuEtat the lieuEtat à setter
*/
public void setLieuEtat(int[][] lieuEtat) {
this.lieuEtat = lieuEtat;
}
}