14 static const uint8 MakePawn[ColourNb] = { PieceNone256, BlackPawn256, WhitePawn256 }; // -BW
\r
16 static const uint8 PieceFrom12[12] = {
\r
17 BlackPawn256, WhitePawn256,
\r
18 BlackKnight256, WhiteKnight256,
\r
19 BlackBishop256, WhiteBishop256,
\r
20 BlackRook256, WhiteRook256,
\r
21 BlackQueen256, WhiteQueen256,
\r
22 BlackKing256, WhiteKing256,
\r
25 static const char PieceString[12+1] = "pPnNbBrRqQkK";
\r
29 static sint8 PieceTo12[256];
\r
39 for (piece = 0; piece < 256; piece++) PieceTo12[piece] = -1;
\r
41 for (piece = 0; piece < 12; piece++) {
\r
42 PieceTo12[PieceFrom12[piece]] = piece;
\r
48 bool piece_is_ok(int piece) {
\r
50 if (piece < 0 || piece >= 256) return false;
\r
52 if (PieceTo12[piece] < 0) return false;
\r
57 // piece_make_pawn()
\r
59 int piece_make_pawn(int colour) {
\r
61 ASSERT(colour_is_ok(colour));
\r
63 return MakePawn[colour];
\r
68 int piece_pawn_opp(int piece) {
\r
70 ASSERT(piece==BlackPawn256||piece==WhitePawn256);
\r
77 int piece_colour(int piece) {
\r
79 ASSERT(piece_is_ok(piece));
\r
86 int piece_type(int piece) {
\r
88 ASSERT(piece_is_ok(piece));
\r
95 bool piece_is_pawn(int piece) {
\r
97 ASSERT(piece_is_ok(piece));
\r
99 return (piece & PawnFlags) != 0;
\r
102 // piece_is_knight()
\r
104 bool piece_is_knight(int piece) {
\r
106 ASSERT(piece_is_ok(piece));
\r
108 return (piece & KnightFlag) != 0;
\r
111 // piece_is_bishop()
\r
113 bool piece_is_bishop(int piece) {
\r
115 ASSERT(piece_is_ok(piece));
\r
117 return (piece & QueenFlags) == BishopFlag;
\r
122 bool piece_is_rook(int piece) {
\r
124 ASSERT(piece_is_ok(piece));
\r
126 return (piece & QueenFlags) == RookFlag;
\r
129 // piece_is_queen()
\r
131 bool piece_is_queen(int piece) {
\r
133 ASSERT(piece_is_ok(piece));
\r
135 return (piece & QueenFlags) == QueenFlags;
\r
140 bool piece_is_king(int piece) {
\r
142 ASSERT(piece_is_ok(piece));
\r
144 return (piece & KingFlag) != 0;
\r
147 // piece_is_slider()
\r
149 bool piece_is_slider(int piece) {
\r
151 ASSERT(piece_is_ok(piece));
\r
153 return (piece & QueenFlags) != 0;
\r
158 int piece_to_12(int piece) {
\r
160 ASSERT(piece_is_ok(piece));
\r
162 return PieceTo12[piece];
\r
167 int piece_from_12(int piece) {
\r
169 ASSERT(piece>=0&&piece<12);
\r
171 return PieceFrom12[piece];
\r
176 int piece_to_char(int piece) {
\r
178 ASSERT(piece_is_ok(piece));
\r
180 return PieceString[piece_to_12(piece)];
\r
183 // piece_from_char()
\r
185 int piece_from_char(int c) {
\r
189 ptr = strchr(PieceString,c);
\r
190 if (ptr == NULL) return PieceNone256;
\r
192 return piece_from_12(ptr-PieceString);
\r
197 bool char_is_piece(int c) {
\r
199 return strchr("PNBRQK",c) != NULL;
\r
202 // end of piece.cpp
\r