-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKing.java
More file actions
131 lines (107 loc) · 6.05 KB
/
Copy pathKing.java
File metadata and controls
131 lines (107 loc) · 6.05 KB
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
import java.util.ArrayList;
public class King extends Piece {
//Implemented getPossibleMoves function
@Override
public ArrayList<String> getPossibleMoves(String originalcoord, boolean isWhitePlaying) {
possibleMoves.clear();
//Extracts row and column values from coordinates of piece position
int row = Character.getNumericValue(originalcoord.charAt(1));
int col = Character.getNumericValue(originalcoord.charAt(0));
//Adds each square adjacent to King piece's position provided square is unoccupied or occupied by piece of opposing side as those are the only validations required, which are performed by addIfValid()
addIfValid(row+1, col, isWhitePlaying);
addIfValid(row+1, col+1, isWhitePlaying);
addIfValid(row, col+1, isWhitePlaying);
addIfValid(row-1, col+1, isWhitePlaying);
addIfValid(row-1, col, isWhitePlaying);
addIfValid(row-1, col-1, isWhitePlaying);
addIfValid(row, col-1, isWhitePlaying);
addIfValid(row+1, col-1, isWhitePlaying);
//Generates all possible castling moves that can be performed in current board state
if(Main_Display.gui.hasKing1Moved == false && isWhitePlaying && Main_Display.gui.hasRook1Moved == false && logic_board.logicBoard[7][0] == "R1" && !logic_board.isKingInCheck(isWhitePlaying) && row == 8){
//Checks if squares that will be moved through by king piece are empty, as required for castling
if(logic_board.logicBoard[row-1][col-1] == "" && logic_board.logicBoard[row-1][col-2] == ""){
//Tries moving white king piece (king1) to first square piece must move through
logic_board.tryMove("K", Integer.toString(row-1)+Integer.toString(col-1));
//If king piece is not in check in that square, as required for castling:
if(!logic_board.isKingInCheck(isWhitePlaying)){
//Move is reverted
logic_board.revertLogicBoard();
//Tries moving king piece to second square king must move through
logic_board.tryMove("K", Integer.toString(row-1)+Integer.toString(col-2));
//If king piece is not in check in that square as required:
if(!logic_board.isKingInCheck(isWhitePlaying)){
//Move is reverted
logic_board.revertLogicBoard();
//Move is added as it fully complies with castling requirements
addIfValid(row, col-2, isWhitePlaying);
}
else{
logic_board.revertLogicBoard();
}
}
else{
logic_board.revertLogicBoard();
}
}
}
if(Main_Display.gui.hasKing1Moved == false && isWhitePlaying && Main_Display.gui.hasRook2Moved == false && logic_board.logicBoard[7][7] == "R2" && !logic_board.isKingInCheck(isWhitePlaying) && row == 8){
if(logic_board.logicBoard[row-1][col+1] == "" && logic_board.logicBoard[row-1][col+2] == ""){
logic_board.tryMove("K", Integer.toString(row-1)+Integer.toString(col+1));
if(!logic_board.isKingInCheck(isWhitePlaying)){
logic_board.revertLogicBoard();
logic_board.tryMove("K", Integer.toString(row-1)+Integer.toString(col+2));
if(!logic_board.isKingInCheck(isWhitePlaying)){
logic_board.revertLogicBoard();
addIfValid(row, col+2, isWhitePlaying);
}
else{
logic_board.revertLogicBoard();
}
}
else {
logic_board.revertLogicBoard();
}
}
}
if(Main_Display.gui.hasKing2Moved == false && !isWhitePlaying && Main_Display.gui.hasRook3Moved == false && logic_board.logicBoard[0][0] == "r1" && !logic_board.isKingInCheck(isWhitePlaying) && row == 1){
if(logic_board.logicBoard[row-1][col-1] == "" && logic_board.logicBoard[row-1][col-2] == ""){
logic_board.tryMove("k", Integer.toString(row-1)+Integer.toString(col-1));
if(!logic_board.isKingInCheck(isWhitePlaying)){
logic_board.revertLogicBoard();
logic_board.tryMove("k", Integer.toString(row-1)+Integer.toString(col-2));
if(!logic_board.isKingInCheck(isWhitePlaying)){
logic_board.revertLogicBoard();
addIfValid(row, col-2, isWhitePlaying);
}
else{
logic_board.revertLogicBoard();
}
}
else{
logic_board.revertLogicBoard();
}
}
}
if(Main_Display.gui.hasKing2Moved == false && !isWhitePlaying && Main_Display.gui.hasRook4Moved == false && logic_board.logicBoard[0][7] == "r2" && !logic_board.isKingInCheck(isWhitePlaying) && row == 1){
if(logic_board.logicBoard[row-1][col+1] == "" && logic_board.logicBoard[row-1][col+2] == ""){
logic_board.tryMove("k", Integer.toString(row-1)+Integer.toString(col+1));
if(!logic_board.isKingInCheck(isWhitePlaying)){
logic_board.revertLogicBoard();
logic_board.tryMove("k", Integer.toString(row-1)+Integer.toString(col+2));
if(!logic_board.isKingInCheck(isWhitePlaying)){
logic_board.revertLogicBoard();
addIfValid(row, col+2, isWhitePlaying);
}
else{
logic_board.revertLogicBoard();
}
}
else{
logic_board.revertLogicBoard();
}
}
}
//Returns List of moves (coordinates of squares piece can move to)
return possibleMoves;
}
}