-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPlayer.js
275 lines (217 loc) · 11 KB
/
Player.js
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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
import Echequier from "./Echequier_js.js";
import Lancier from "./Piece_js/Lancier.js";
import Fou from "./Piece_js/Fou.js";
import GeneralArgent from "./Piece_js/GeneralArgent.js";
import GeneralOr from "./Piece_js/GeneralOr.js";
import Tour from "./Piece_js/Tour.js";
import Pion from "./Piece_js/Pion.js";
import Cavalier from "./Piece_js/Cavalier.js";
import Roi from "./Piece_js/Roi.js";
import Lancier_u from "./Piece_js/Lancier_u.js";
import Fou_u from "./Piece_js/Fou_u.js";
import GeneralArgent_u from "./Piece_js/GeneralArgent_u.js";
import Tour_u from "./Piece_js/Tour_u.js";
import Pion_u from "./Piece_js/Pion_u.js";
import Cavalier_u from "./Piece_js/Cavalier_u.js";
export default class Player {
echequier;
// Voir à réduire en une seul liste
listePieceGagne;
whoPlay
playerNum
constructor(echequier,whoPlay,playerNum){
this.echequier = echequier;
this.whoPlay = whoPlay;
this.listePieceGagne = new Map();
this.playerNum = playerNum;
}
/*
Permet de faire évoluer une pièces qui arrive sur l'une des 3 dernières cases du plateau
*/
evolvePiece(x,y,j,k,piece,sure){
if (!(piece.type() == "Roi" || piece.type() == "GeneralOr")){
var newPiece = null;
if (sure == false){
if (window.confirm("Voulez vous faire évoluer votre pièce") == true){
if (piece.type() == "Fou"){
newPiece = new Fou_u(piece.getCampDeLaPiece())
this.echequier.pieceEvolve(x,y,j,k,new Fou_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Tour"){
newPiece = new Tour_u(piece.getCampDeLaPiece())
this.echequier.pieceEvolve(x,y,j,k,new Tour_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "GeneralArgent"){
newPiece = new GeneralArgent_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new GeneralArgent_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Pion"){
newPiece = new Pion_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new Pion_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Lancier"){
newPiece = new Lancier_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new Lancier_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Cavalier"){
newPiece = new Cavalier_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new Cavalier_u(piece.getCampDeLaPiece()));
}
}
}
else {
if (piece.type() == "Fou"){
newPiece = new Fou_u(piece.getCampDeLaPiece())
this.echequier.pieceEvolve(x,y,j,k,new Fou_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Tour"){
newPiece = new Tour_u(piece.getCampDeLaPiece())
this.echequier.pieceEvolve(x,y,j,k,new Tour_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "GeneralArgent"){
newPiece = new GeneralArgent_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new GeneralArgent_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Pion"){
newPiece = new Pion_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new Pion_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Lancier"){
newPiece = new Lancier_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new Lancier_u(piece.getCampDeLaPiece()));
}
if (piece.type() == "Cavalier"){
newPiece = new Cavalier_u(piece.getCampDeLaPiece());
this.echequier.pieceEvolve(x,y,j,k,new Cavalier_u(piece.getCampDeLaPiece()));
}
}
//var a = document.getElementById(x+", "+y);
//a.firstElementChild.src = newPiece.href();
}
}
/* Joue une piece et doit influencer en consequence l'echequier
x et y sont les coordonnees de la piece choisi et j, k sont
les coordonnees de l'endroit ou on veut que la piece aille
doit également gérer les échecs
Return un booléen, true si le mouvement est possible et a été effectué sinon renvoie false.
*/
Player1playPiece(x,y,j,k){
var piece;
var string;
var i;
if (x == j && y == k){ // L'endroit de depart et d'arrive sont les memes donc il ne faut rien faire
return (false);
}
// console.log( "y, x"; // Il faut mettre une difference de 1 car le 0 n'existe pas sur un plateau
piece = this.echequier.getPieceCellule()[y][x]; // Recuperation de la piece au coordonne x,y
if (piece == null){
console.log( "La piece selectionne n'existe pas");
return false;
}
string = "le mouvement demande n'est pas authorise par cette piece";
//console.log(piece);
if (piece.isAuthorizedMovementPlayer(j,k,this.echequier)){ // Si le mouvement qu'essaie de faire la piece est authorise par rapport a la piece choisie
string = "la case de destination n'est pas vide";
if (this.echequier.getPieceCellule()[k][j] == null || this.echequier.getPieceCellule()[k][j].getCampDeLaPiece() != this.echequier.getPieceCellule()[y][x].getCampDeLaPiece()){ // Si l'endroit ou veut aller la piece n'a pas deja une piece sur cette position ou bien si c'est une piece ennemi
if (this.echequier.isEchec(piece.getCampDeLaPiece()) == true){
var piece2 = this.echequier.getPieceCellule()[k][j];
this.echequier.changeCellule(j,k,piece);
this.echequier.changeCellule(x,y,null);
console.log("Vous êtes échec");
if (this.echequier.isEchec(piece.getCampDeLaPiece()) == true) {
console.log("ça ne règle pas votre échec");
this.echequier.changeCellule(j,k,piece2);
this.echequier.changeCellule(x,y,piece);
return false;
}
}
else if (this.echequier.getPieceCellule()[k][j] == null){
this.echequier.changeCellule(j,k,piece);
this.echequier.changeCellule(x,y,null);
}
else{
console.log("chiottttte");
var type = this.echequier.getPieceCellule()[k][j].type();
// Pour incrémenter la bonne case dans la map
if (type == "Pion_u") type = "Pion";
if (type == "Lancier_u") type = "Lancier";
if (type == "GeneralArgent_u") type = "GeneralArgent";
if (type == "Tour_u") type = "Tour";
if (type == "Fou_u") type = "Fou";
if (type == "Cavalier_u") type = "Cavalier";
console.log(this.listePieceGagne.get(type) == undefined);
if (this.listePieceGagne.get(type) == undefined) this.listePieceGagne.set(type,1);
else this.listePieceGagne.set(type,this.listePieceGagne.get(type)+1);
this.echequier.changeCellule(j,k,piece);
this.echequier.changeCellule(x,y,null);
}
if (piece.getCampDeLaPiece() == 1 && k == 8 && piece.isEvolve() == false && this.playerNum == 1){
this.evolvePiece(x,y,j,k,piece,true);
}
else if (piece.getCampDeLaPiece() == 1 && k > 5 && piece.isEvolve() == false && this.playerNum == 1){
this.evolvePiece(x,y,j,k,piece,false);
}
if (piece.getCampDeLaPiece() == 2 && k == 0 && piece.isEvolve() == false && this.playerNum == 0){
this.evolvePiece(x,y,j,k,piece,true);
}
else if (piece.getCampDeLaPiece() == 2 && k < 3 && piece.isEvolve() == false && this.playerNum == 0){
this.evolvePiece(x,y,j,k,piece,false);
}
/*
this.echequier.getPieceCellule()[k][j] = piece;
console.log( this.echequier.getPieceCellule()[k][j]);
this.echequier.getPieceCellule()[y][x] = null;
console.log( this.echequier.getPieceCellule()[y][x]; // Ne change pas rellement la valeur du tableau, j'ai donc cree une methode dans echequier pour reellement changer la valeur des cases;
*/
return(true); // Faire en sorte que la piece change de place
}
}
console.log(string);
return (false);
}
isParachutable(x,y){
if (this.echequier.getPieceCellule()[y][x] == null) console.log("La place pour être parachuté est libre");
else console.log("La place pour être parachuté est déjà prise");
return this.echequier.getPieceCellule()[y][x] == null;
}
// Parachute une piece et doit influencer en consequence l'echequier à l'indice x,y, le camp indique le camp que devra avoir la nouvelle pieces, le nomPiece indique la
// pièce qui devra être créée
parachutagePiece(x,y,camp,nomPiece){
//console.log(x,y);
//console.log(nomPiece);
if (nomPiece == "Pion") var piecePlace = new Pion(camp,x,y);
if (nomPiece == "Lancier") var piecePlace = new Lancier(camp,x,y);
if (nomPiece == "Fou") var piecePlace = new Fou(camp,x,y);
if (nomPiece == "Tour") var piecePlace = new Tour(camp,x,y);
if (nomPiece == "GeneralOr") var piecePlace = new GeneralOr(camp,x,y);
if (nomPiece == "GeneralArgent") var piecePlace = new GeneralArgent(camp,x,y);
if (nomPiece == "Cavalier") var piecePlace = new Cavalier(camp,x,y);
this.echequier.changeCellule(x,y,piecePlace);
}
getEchequier(){
return this.echequier;
}
toString(){
var string = "";
listePieceGagne.forEach(function(key,value,map){
string += key + value + "\n";
});
return string;
}
// renvoie un string si la p
get(string){
this.listePieceGagne.get(string);
}
changeWhoPlay(){
if (this.whoPlay) this.whoPlay = false;
else this.whoPlay = true;
}
getWhoPlay(){
return this.whoPlay;
}
}
/*
var echequier = new Echequier();
var player = new Player(echequier);
console.log(player.getEchequier());
*/