-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPiece.java
More file actions
151 lines (139 loc) · 4.9 KB
/
Piece.java
File metadata and controls
151 lines (139 loc) · 4.9 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import javax.swing.ImageIcon;
public class Piece {
public static final byte EMPTY = 0;
public static final byte PAWN = 1;
public static final byte KNIGHT = 2;
public static final byte BISHOP = 3;
public static final byte ROOK = 4;
public static final byte QUEEN = 5;
public static final byte KING = 6;
private static final ImageIcon WHITE_PAWN = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/white_pawn.png"));
private static final ImageIcon WHITE_KNIGHT = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/white_knight.png"));
private static final ImageIcon WHITE_BISHOP = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/white_bishop.png"));
private static final ImageIcon WHITE_ROOK = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/white_rook.png"));
private static final ImageIcon WHITE_QUEEN = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/white_queen.png"));
private static final ImageIcon WHITE_KING = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/white_king.png"));
private static final ImageIcon BLACK_PAWN = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/black_pawn.png"));
private static final ImageIcon BLACK_KNIGHT = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/black_knight.png"));
private static final ImageIcon BLACK_BISHOP = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/black_bishop.png"));
private static final ImageIcon BLACK_ROOK = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/black_rook.png"));
private static final ImageIcon BLACK_QUEEN = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/black_queen.png"));
private static final ImageIcon BLACK_KING = new ImageIcon(
ClassLoader.getSystemResource("textures/pieces/black_king.png"));
public static boolean isWhite(byte piece) {
return (Math.abs(piece) == piece);
}
public static boolean orthogonalMovesAllowed(byte piece) {
return (Math.abs(piece) == ROOK || Math.abs(piece) == QUEEN);
}
public static boolean diagonalMovesAllowed(byte piece) {
return (Math.abs(piece) == BISHOP || Math.abs(piece) == QUEEN);
}
public static boolean kingMovesAllowed(byte piece) {
return (Math.abs(piece) == KING);
}
public static boolean pawnMovesAllowed(byte piece) {
return (Math.abs(piece) == PAWN);
}
public static byte mapPieceSymbol(char symbol) {
switch (symbol) {
case 'p':
return -PAWN;
case 'n':
return -KNIGHT;
case 'b':
return -BISHOP;
case 'r':
return -ROOK;
case 'q':
return -QUEEN;
case 'k':
return -KING;
case 'P':
return PAWN;
case 'N':
return KNIGHT;
case 'B':
return BISHOP;
case 'R':
return ROOK;
case 'Q':
return QUEEN;
default:
return KING;
}
}
public static ImageIcon mapPieceTexture(byte id) {
switch (id) {
case 1:
return WHITE_PAWN;
case 2:
return WHITE_KNIGHT;
case 3:
return WHITE_BISHOP;
case 4:
return WHITE_ROOK;
case 5:
return WHITE_QUEEN;
case 6:
return WHITE_KING;
case -1:
return BLACK_PAWN;
case -2:
return BLACK_KNIGHT;
case -3:
return BLACK_BISHOP;
case -4:
return BLACK_ROOK;
case -5:
return BLACK_QUEEN;
default:
return BLACK_KING;
}
}
public static double getPieceValue(byte piece) {
/*
* Piece Square Tables, adapted from Sunfish.py:
* https://github.com/thomasahle/sunfish/blob/master/sunfish.py
*/
switch (piece) {
case 1:
return 100;
case 2:
return 320;
case 3:
return 320;
case 4:
return 479;
case 5:
return 929;
case 6:
return 60000;
case -1:
return -100;
case -2:
return -320;
case -3:
return -320;
case -4:
return -479;
case -5:
return -929;
case -6:
return -60000;
default:
return 0;
}
}
}