⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 piece.cpp

📁 超强国际象棋引擎
💻 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 + -