/
Pion.java
91 lines (82 loc) · 2.23 KB
/
Pion.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
import java.util.ArrayList;
import java.util.Random;
public class Pion extends Piesa{
public Pion(Position po,int clr){
p=po;
Color=clr;
}
@Override
boolean canMoveTo(Position pn, Board b) {
if(!pn.chessOK()) return false;
if(!b.isFree(pn)){//daca e ocupata pozitia verificam culoarea
if(pn.coloana==p.coloana) return false; //verific sa nu incerce captura pe linia de mers
if(b.getPieceOnPosition(pn).Color==this.Color)
return false;
else
if (pn.linie == p.linie + this.Color && Math.abs(pn.coloana-p.coloana) == 1)
return true;
else
return false;
}
else{
if(pn.coloana!=p.coloana){//daca miscarea nu e pe aceeasi coloana
return false;
}
else{
if (pn.linie == p.linie + this.Color)
return true;
else{
if ((this.Color == ChessColors.Black && p.linie == 7) || (this.Color == ChessColors.White && p.linie == 2))
if ((pn.linie == p.linie + 2 * this.Color) && (b.isFree(p.linie + this.Color, p.coloana)))
return true;
else
return false;
else
return false;
}
}
}
}
@Override
Position fastMove(Board b) {
ArrayList<Position> ap= new ArrayList<Position>();
Position po=new Position(p.linie,p.coloana);
int[] dl={this.Color,this.Color,this.Color, 2*this.Color};
int[] dc={-1, +1, 0, 0};
Random r=new Random();
for(int i=0;i<dl.length;i++){
po.linie=po.linie+dl[i];
po.coloana=po.coloana+dc[i];
if(this.canMoveTo(po, b) && !this.possibleCheck(po, b)){
ap.add(new Position(po.linie, po.coloana));
}
po.linie=p.linie;
po.coloana=p.coloana;
}
if(ap.size()>0)
return ap.get(r.nextInt(ap.size()));
return null;
}
@Override
public int hashCode() {
return 'p';
}
@Override
ArrayList<Position> genMoves(Board b) {
ArrayList<Position> ap= new ArrayList<Position>();
Position po=new Position(p.linie,p.coloana);
int[] dl={this.Color,this.Color,this.Color, 2*this.Color};
int[] dc={-1, +1, 0, 0};
Random r=new Random();
for(int i=0;i<dl.length;i++){
po.linie=po.linie+dl[i];
po.coloana=po.coloana+dc[i];
if(this.canMoveTo(po, b) && !this.possibleCheck(po, b)){
ap.add(new Position(po.linie, po.coloana));
}
po.linie=p.linie;
po.coloana=p.coloana;
}
return ap;
}
}