-
Notifications
You must be signed in to change notification settings - Fork 0
/
Type.java
178 lines (155 loc) · 5.75 KB
/
Type.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
/**
* @author Vincent F et Thomas B
*/
/**
* Classe de gestion de la forme du plateau;
* Note : le mot clé static permet d'éviter d'instancier la classe pour y avoir accès (aucune sens d'instancier la classe Type)
*/
public class Type {
/** Classe statique qui créé un plateau carré (tableau 2D avec toutes les cases vides à 0)
* @param x : hauteur du plateau de jeu renvoyé (taille vertical)
* @param y : largeur du plateau de jeu renvoyé (taille horizontal)
* @return un tableau qui est remplis avec un motif carré (que des 0 partout)
*/
public static int[][] carre(int x, int y){
int[][] tab = new int[x][y]; // on créé le tableau qu'on va renvoyer de la taille x(vertical)*y(horizontal)
for(int i=0 ; i<x; i++){
for(int j=0 ; j<y ; j++){
tab[i][j] = 0; // on remplis le tableau de case "0" équivalente à de l'eau.
}
}
return tab; // on renvois le tableau créé.
}
/** Classe qui gère l'appel des autres méthodes qui créé les formes de plateaux.
* @param x : hauteur du plateau de jeu renvoyé (taille vertical) // rayon pour le rond // diagonale pour le triangle
* @param y : largeur du plateau de jeu renvoyé (taille horizontal)
* @param numeroDeType : 1 pour rond, 2 pour triangle, 3 pour rectangle, défaut carré
* @return le tableau avec des cases d'eau (0) qui correspondent à la forme donnée en argument.
*/
public static int[][] forme(int x, int y, int numeroDeType){
int[][] tab;
switch (numeroDeType)
{
case 0 :
tab = carre(x,y);
break;
case 1:
tab = rond(x);
break;
case 2:
tab = triangle(x,y);
break;
case 3:
tab = rectangle(x,y);
break;
case 4 :
tab = recifs(x,y);
break;
default:
tab = rectangle(x,y);
break;
}
return tab;
}
/** Classe qui créer un plateau rond (tableau 2D avec les cases aux angles à -2)
* @param d : dimaètre du cercle à créer
* @return un tableau avec un cercle d'eau (de cases à 0)
*/
public static int[][] rond(int d){
int[][] tab = new int[d][d];
int rayon = (int)((d)*0.5); // On recupère en fait le diamètre !
for(int i=0 ; i<tab.length; i++){
for(int j=0 ; j<tab[0].length ; j++){
if( (rayon*rayon) <= ( (((i+.5)-rayon)*((i+.5)-rayon)) + (((j+.5)-rayon)*((j+.5)-rayon)) ) ){ // Ne me demande pas pourquoi il faut mettre 0.5, c'est ce qui marche.
tab[i][j]= -2; // On mes des cases interdites.
} else {
tab[i][j] = 0 ; // on remplis le tableau de case "0" équivalente à de l'eau.
}
}
}
return tab;
}
/** Classe qui créer un plateau triangle (tableau 2D avec des cases en coin à -2)
* @param hauteur : hauteur du triangle. (x)
* @param cote : coté du triangle à créer (y)
* @return un tableau avec un trangle d'eau (de cases à 0)
*/
public static int[][] triangle(int hauteur, int cote){
int[][] tab =new int[hauteur][cote] ;
for(int i=0 ; i<tab.length; i++){
for(int j=0 ; j<tab[0].length ; j++){
if(j < (-(tab[0].length*0.5)/(double)(tab.length))*i + (int)(tab[0].length*0.5) || j > ((tab[0].length*0.5)/(double)(tab.length))*i + (int)(tab[0].length*0.5)){ // ON NE TOUCHE PAS A CA, CA MARCHE !
tab[i][j]= -2; // On mes des cases interdites.
} else {
tab[i][j] = 0 ; // on remplis le tableau de case "0" équivalente à de l'eau.
}
}
}
return tab;
}
/** Classe qui créer un plateau rectangle (tableau 2D avec toutes les cases vides à 0)
* @param x : hauteur du plateau de jeu renvoyé (taille vertical)
* @param y : largeur du plateau de jeu renvoyé (taille horizontal)
* @return un tableau rectangulaire d'eau (de cases à 0)
*/
public static int[][] rectangle(int x, int y){
int[][] tab = new int[x][y]; // on créé le tableau qu'on va renvoyer de la taille x(vertical)*y(horizontal)
for(int i=0 ; i<x; i++){
for(int j=0 ; j<y ; j++){
tab[i][j] = 0; // on remplis le tableau de case "0" équivalente à de l'eau.
}
}
return tab; // on renvois le tableau créé.
}
/** Classe qui créer un plateau rectangle avec des récifs
* @param x : hauteur du plateau de jeu renvoyé (taille vertical)
* @param y : largeur du plateau de jeu renvoyé (taille horizontal)
* @return un tableau rectangulaire d'eau (de cases à 0) avec des récifs (-1)
*/
public static int[][] recifs(int x, int y){
int[][] tab = new int[x][y];
double pourcentage = 0;
pourcentage = 0.3; // On a des problèmes avec la saisie joueur. Il faudrait déclarer cette classe pour créer en fait un seul pourcentage pour tous les joueurs pour pouvoir leur demander !
for(int i=0 ; i<x; i++){
for(int j=0 ; j<y ; j++){
tab[i][j] = 0; // on remplis le tableau de case "0" équivalente à de l'eau.
}
}
for(int i=0 ; i<x; i++){
for(int j=0 ; j<y ; j++){
if(Math.random()<pourcentage*0.2){
tab[i][j] = -2;
if(Math.random()<0.5){ // Au random ..
if(i+1<x && j+1<y){
tab[i+1][j+1] = -2; // Si c'est correct, on ajoute une case invalide.
}
if(i+1<x && j<y){
tab[i+1][j] = -2; // Si c'est correct, on ajoute une case invalide.
}
} else if (Math.random()<0.1) { // encore plus au random
if(i+1<x && j-1>0){
tab[i+1][j-1] = -2; // Si c'est correct, on ajoute une case invalide.
}
if(i-1>0 && j<y){
tab[i-1][j] = -2;// Si c'est correct, on ajoute une case invalide.
}
if(i-1>0 && j-1>0){
tab[i-1][j-1] = -2;// Si c'est correct, on ajoute une case invalide.
}
} else if (Math.random()>0.9) { // encore encore plus au random
if(i+2<x && j<y){
tab[i+2][j] = -2; // Si c'est correct, on ajoute une case invalide.
}
if(i+1<x && j<y){
tab[i+1][j] = -2; // Si c'est correct, on ajoute une case invalide.
}
if(i-1>0 && j-1>0){
tab[i-1][j-1] = -2; // Si c'est correct, on ajoute une case invalide.
}
}
}
}
}
return tab;
}
}