📄 piece.cpp
字号:
// piece.cpp
// includes
#include <cstring>
#include "piece.h"
// "constants"
const int pawn_make[2] =
{
((1 << 2) | (1 << 0)), ((1 << 3) | (1 << 1))
};
const int PieceFrom12[12] =
{
((1 << 2) | (1 << 0)), ((1 << 3) | (1 << 1)), ((1 << 4) | (1 << 0)), ((1 << 4) | (1 << 1)), ((1 << 5) | (1 << 0)),
((1 << 5) | (1 << 1)), ((1 << 6) | (1 << 0)), ((1 << 6) | (1 << 1)), (((1 << 5) | (1 << 6)) | (1 << 0)),
(((1 << 5) | (1 << 6)) | (1 << 1)), ((1 << 7) | (1 << 0)), ((1 << 7) | (1 << 1)),
};
static const char piece_string[12 + 1] = "PpNnBbRrQqKk";
const inc_t pawn_move_inc[2] =
{
+16, -16,
};
const inc_t knight_inc[8 + 1] =
{
-33, -31, -18, -14, +14, +18, +31, +33, 0
};
const inc_t bishop_inc[4 + 1] =
{
-17, -15, +15, +17, 0
};
const inc_t rook_inc[4 + 1] =
{
-16, -1, +1, +16, 0
};
const inc_t queen_inc[8 + 1] =
{
-17, -16, -15, -1, +1, +15, +16, +17, 0
};
const inc_t king_inc[8 + 1] =
{
-17, -16, -15, -1, +1, +15, +16, +17, 0
};
// variables
int piece_to_12[256];
int piece_order[256];
const inc_t *piece_inc[256];
// functions
// piece_init()
void piece_init()
{
int piece, piece_12;
// piece_to_12[]
for ( piece = 0; piece < 256; piece++ )
piece_to_12[piece] = -1;
for ( piece_12 = 0; piece_12 < 12; piece_12++ )
{
piece_to_12[PieceFrom12[piece_12]] = piece_12;
}
// piece_order[]
for ( piece = 0; piece < 256; piece++ )
piece_order[piece] = -1;
for ( piece_12 = 0; piece_12 < 12; piece_12++ )
{
piece_order[PieceFrom12[piece_12]] = piece_12 >> 1;
}
// piece_inc[]
for ( piece = 0; piece < 256; piece++ )
{
piece_inc[piece] = NULL;
}
piece_inc[((1 << 4) | (1 << 0))] = knight_inc;
piece_inc[((1 << 5) | (1 << 0))] = bishop_inc;
piece_inc[((1 << 6) | (1 << 0))] = rook_inc;
piece_inc[(((1 << 5) | (1 << 6)) | (1 << 0))] = queen_inc;
piece_inc[((1 << 7) | (1 << 0))] = king_inc;
piece_inc[((1 << 4) | (1 << 1))] = knight_inc;
piece_inc[((1 << 5) | (1 << 1))] = bishop_inc;
piece_inc[((1 << 6) | (1 << 1))] = rook_inc;
piece_inc[(((1 << 5) | (1 << 6)) | (1 << 1))] = queen_inc;
piece_inc[((1 << 7) | (1 << 1))] = king_inc;
}
// piece_is_ok()
bool piece_is_ok(int piece)
{
if(piece < 0 || piece >= 256)
return false;
if(piece_to_12[piece] < 0)
return false;
return true;
}
// piece_from_12()
int piece_from_12(int piece_12)
{
return PieceFrom12[piece_12];
}
// piece_to_char()
int piece_to_char(int piece)
{
return piece_string[PIECE_TO_12(piece)];
}
// piece_from_char()
int piece_from_char(int c)
{
const char *ptr;
ptr = strchr(piece_string, c);
if(ptr == NULL)
return 0;
return piece_from_12(ptr - piece_string);
}
// end of piece.cpp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -