ArduChess/Types.h

60 lines
1.0 KiB
C

#ifndef __TYPES_H_INC
#define __TYPES_H_INC
enum Piece: byte {
P_EMPTY = 0b0000,
P_ANY = 0b1000,
W_PAWN = 0b0001,
W_KNGT = 0b0010,
W_KING = 0b0011,
W_BSHP = 0b0101,
W_ROOK = 0b0110,
W_QUEN = 0b0111,
B_PAWN = 0b1001,
B_KNGT = 0b1010,
B_KING = 0b1011,
B_BSHP = 0b1101,
B_ROOK = 0b1110,
B_QUEN = 0b1111,
};
#ifdef _ACF_FAST_PIECE
Piece char_to_piece(char c) {
switch(c) {
case 'p': return W_PAWN;
case 'n': return W_KNGT;
case 'k': return W_KING;
case 'b': return W_BSHP;
case 'r': return W_ROOK;
case 'q': return W_QUEN;
case 'P': return B_PAWN;
case 'N': return B_KNGT;
case 'K': return B_KING;
case 'B': return B_BSHP;
case 'R': return B_ROOK;
case 'Q': return B_QUEN;
default: return P_EMPTY;
}
}
#else // _ACF_FAST_PIECE
const char CHAR_STRS[] PROGMEM = " pnkbrq PNKBRQ";
Piece char_to_piece(char c) {
for(byte i = 0; i < 0b1111; i++) {
if(pgm_read_byte_near(CHAR_STRS + i) == c)
return (Piece)i;
}
return P_EMPTY;
}
char piece_to_char(Piece p) {
return CHAR_STRS[p];
}
#endif // _ACF_FAST_PIECE
#endif