-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpiece.cpp
143 lines (92 loc) · 2.54 KB
/
piece.cpp
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
// piece.cpp
// includes
#include <cstring>
#include "colour.h"
#include "piece.h"
#include "util.h"
// "constants"
const int PawnMake[ColourNb] = { WhitePawn256, BlackPawn256 };
const int PieceFrom12[12] = {
WhitePawn256, BlackPawn256,
WhiteKnight256, BlackKnight256,
WhiteBishop256, BlackBishop256,
WhiteRook256, BlackRook256,
WhiteQueen256, BlackQueen256,
WhiteKing256, BlackKing256,
};
static const char PieceString[12+1] = "PpNnBbRrQqKk";
const inc_t PawnMoveInc[ColourNb] = {
+16, -16,
};
const inc_t KnightInc[8+1] = {
-33, -31, -18, -14, +14, +18, +31, +33, 0
};
const inc_t BishopInc[4+1] = {
-17, -15, +15, +17, 0
};
const inc_t RookInc[4+1] = {
-16, -1, +1, +16, 0
};
const inc_t QueenInc[8+1] = {
-17, -16, -15, -1, +1, +15, +16, +17, 0
};
const inc_t KingInc[8+1] = {
-17, -16, -15, -1, +1, +15, +16, +17, 0
};
// variables
int PieceTo12[PieceNb];
int PieceOrder[PieceNb];
const inc_t * PieceInc[PieceNb];
// functions
// piece_init()
void piece_init() {
int piece, piece_12;
// PieceTo12[]
for (piece = 0; piece < PieceNb; piece++) PieceTo12[piece] = -1;
for (piece_12 = 0; piece_12 < 12; piece_12++) {
PieceTo12[PieceFrom12[piece_12]] = piece_12;
}
// PieceOrder[]
for (piece = 0; piece < PieceNb; piece++) PieceOrder[piece] = -1;
for (piece_12 = 0; piece_12 < 12; piece_12++) {
PieceOrder[PieceFrom12[piece_12]] = piece_12 >> 1;
}
// PieceInc[]
for (piece = 0; piece < PieceNb; piece++) {
PieceInc[piece] = NULL;
}
PieceInc[WhiteKnight256] = KnightInc;
PieceInc[WhiteBishop256] = BishopInc;
PieceInc[WhiteRook256] = RookInc;
PieceInc[WhiteQueen256] = QueenInc;
PieceInc[WhiteKing256] = KingInc;
PieceInc[BlackKnight256] = KnightInc;
PieceInc[BlackBishop256] = BishopInc;
PieceInc[BlackRook256] = RookInc;
PieceInc[BlackQueen256] = QueenInc;
PieceInc[BlackKing256] = KingInc;
}
// piece_is_ok()
bool piece_is_ok(int piece) {
if (piece < 0 || piece >= PieceNb) return false;
if (PieceTo12[piece] < 0) return false;
return true;
}
// piece_from_12()
int piece_from_12(int piece_12) {
ASSERT(piece_12>=0&&piece_12<12);
return PieceFrom12[piece_12];
}
// piece_to_char()
int piece_to_char(int piece) {
ASSERT(piece_is_ok(piece));
return PieceString[PIECE_TO_12(piece)];
}
// piece_from_char()
int piece_from_char(int c) {
const char *ptr;
ptr = strchr(PieceString,c);
if (ptr == NULL) return PieceNone256;
return piece_from_12(ptr-PieceString);
}
// end of piece.cpp