亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? board.cpp

?? 超強國際象棋引擎
?? CPP
字號:
// board.cpp

// includes

#include "attack.h"
#include "board.h"
#include "color.h"
#include "fen.h"
#include "hash.h"
#include "move_list.h"
#include "move.h"
#include "make_move.h"
#include "evasion.h"
#include "move_gen.h"
#include "valid_move.h"
#include "pawn.h"
#include "piece.h"
#include "position.h"
#include "util.h"
#include "values.h"

// functions

// board_is_ok()

bool board_is_ok(const board_t *board)
    {
    if(board == NULL)
        return false;
    else
        return true;
    }

// board_clear()

void board_clear(board_t *board)
    {
    int sq, sq_64;

    // edge squares

    for ( sq = 0; sq < 256; sq++ )
        {
        board->square[sq] = (1 << 4);
        }

    // empty squares

    for ( sq_64 = 0; sq_64 < 64; sq_64++ )
        {
        sq = SQUARE_FROM_64(sq_64);
        board->square[sq] = 0;
        }

    // misc

    board->turn = -1;
    board->flags = 0;
    board->ep_square = 0;
    board->ply_nb = 0;
    }

// board_copy()

void board_copy(board_t *dst, const board_t *src)
    {

    *dst = *src;
    }

// board_init_list()

void board_init_list(board_t *board)
    {

    int sq_64, sq, piece;
    int color, pos;
    int i, size;
    int square;
    int order;
    int file;

    // init

    for ( sq = 0; sq < 256; sq++ )
        {
        board->pos[sq] = -1;
        }

    board->piece_nb = 0;

    for ( piece = 0; piece < 12; piece++ )
        board->number[piece] = 0;

    // piece lists

    for ( color = 0; color < 2; color++ )
        {

        // piece list

        pos = 0;
        board->piece_material[color] = 0;

        for ( sq_64 = 0; sq_64 < 64; sq_64++ )
            {

            sq = SQUARE_FROM_64(sq_64);
            piece = board->square[sq];

            if(COLOUR_IS(piece, color) && !PIECE_IS_PAWN(piece))
                {

                board->pos[sq] = pos;
                board->piece[color][pos] = sq;
                pos++;

                board->piece_nb++;
                board->number[PIECE_TO_12(piece)]++;

                if(piece != ((1 << 7) | (1 << 0)) && piece != ((1 << 7) | (1 << 1)))
                    board->piece_material[color] += VALUE_PIECE(piece);
                }
            }

        if(board->number[4] >= 10)
            printf("illegal position!\n");

        board->piece[color][pos] = 0;
        board->piece_size[color] = pos;

        // MV sort

        size = board->piece_size[color];

        for ( i = 1; i < size; i++ )
            {

            square = board->piece[color][i];
            piece = board->square[square];
            order = PIECE_ORDER(piece);

            for ( pos = i; pos > 0 && order > PIECE_ORDER(board->square[(sq = board->piece[color][pos - 1])]); pos-- )
                {
                board->piece[color][pos] = sq;
                board->pos[sq] = pos;
                }

            board->piece[color][pos] = square;
            board->pos[square] = pos;
            }

        // pawn list

        for ( file = 0; file < 16; file++ )
            {
            board->pawn_file[color][file] = 0;
            }

        pos = 0;

        for ( sq_64 = 0; sq_64 < 64; sq_64++ )
            {

            sq = SQUARE_FROM_64(sq_64);
            piece = board->square[sq];

            if(COLOUR_IS(piece, color) && PIECE_IS_PAWN(piece))
                {

                board->pos[sq] = pos;
                board->pawn[color][pos] = sq;
                pos++;

                board->piece_nb++;
                board->number[PIECE_TO_12(piece)]++;
                board->pawn_file[color][SQUARE_FILE(sq)] |= BIT(PAWN_RANK(sq, color));

                board->piece_material[color] += VALUE_PIECE(piece);
                }
            }

        board->pawn[color][pos] = 0;
        board->pawn_size[color] = pos;
        }

    // last square

    board->cap_sq = 0;
    board->moving_piece = 0;

    // PST

    board->opening = board_opening(board);
    board->endgame = board_endgame(board);

    // hash key

    for ( i = 0; i < board->ply_nb; i++ )
        board->stack[i] = 0;
    board->sp = board->ply_nb;

    board->key = hash_key(board);
    board->pawn_key = hash_pawn_key(board);
    board->material_key = hash_material_key(board);
    }

// board_is_legal()

bool board_is_legal(const board_t *board)
    {
    return !IS_IN_CHECK(board, COLOUR_OPP(board->turn));
    }

// board_is_check()

bool board_is_check(const board_t *board)
    {
    return IS_IN_CHECK(board, board->turn);
    }

// board_is_mate()

bool board_is_mate(const board_t *board)
    {

    attack_t attack[1];
    attack_set(attack, board);

    if(!ATTACK_IN_CHECK(attack))
        return false; // not in check => not mate

    if(legal_evasion_exist(board, attack))
        return false; // legal move => not mate

    return true;      // in check and no legal move => mate
    }

// board_is_stalemate()

bool board_is_stalemate(board_t *board)
    {

    list_t list[1];
    int i, move;

    // init

    if(IS_IN_CHECK(board, board->turn))
        return false; // in check => not stalemate

    // move loop

    gen_moves(list, board);

    for ( i = 0; i < LIST_SIZE(list); i++ )
        {
        move = LIST_MOVE(list, i);

        if(pseudo_is_legal(move, board))
            return false; // legal move => not stalemate
        }

    return true;          // in check and no legal move => mate
    }

// board_is_repetition()

bool board_is_repetition(const board_t *board)
    {

    int i;

    // 50-move rule

    if(board->ply_nb >= 100)
        { // potential draw
        if(board->ply_nb > 100)
            return true;

        return !board_is_mate(board);
        }

    // position repetition

    for ( i = 4; i <= board->ply_nb; i += 2 )
        {
        if(board->stack[board->sp - i] == board->key)
            return true;
        }

    return false;
    }

// board_opening()

int board_opening(const board_t *board)
    {

    int opening;
    int color;
    const sq_t *ptr;
    int sq, piece;

    opening = 0;

    for ( color = 0; color < 2; color++ )
        {
        for ( ptr = &board->piece[color][0]; (sq = *ptr) != 0; ptr++ )
            {
            piece = board->square[sq];
            opening += PST(PIECE_TO_12(piece), SQUARE_TO_64(sq), 0);
            }

        for ( ptr = &board->pawn[color][0]; (sq = *ptr) != 0; ptr++ )
            {
            piece = board->square[sq];
            opening += PST(PIECE_TO_12(piece), SQUARE_TO_64(sq), 0);
            }
        }

    return opening;
    }

// board_endgame()

int board_endgame(const board_t *board)
    {

    int endgame;
    int color;
    const sq_t *ptr;
    int sq, piece;

    endgame = 0;

    for ( color = 0; color < 2; color++ )
        {
        for ( ptr = &board->piece[color][0]; (sq = *ptr) != 0; ptr++ )
            {
            piece = board->square[sq];
            endgame += PST(PIECE_TO_12(piece), SQUARE_TO_64(sq), 1);
            }

        for ( ptr = &board->pawn[color][0]; (sq = *ptr) != 0; ptr++ )
            {
            piece = board->square[sq];
            endgame += PST(PIECE_TO_12(piece), SQUARE_TO_64(sq), 1);
            }
        }

    return endgame;
    }

// end of board.cpp

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久66| 日本乱人伦一区| 蜜桃av一区二区| 中文字幕在线不卡一区| 国产精品欧美一区喷水| 国产精品毛片a∨一区二区三区| 久久久久久久av麻豆果冻| 日韩欧美一区二区在线视频| 日韩精品专区在线影院重磅| 欧美成人福利视频| 欧美精品一区二区高清在线观看| 欧美大片日本大片免费观看| 日韩一级成人av| 337p日本欧洲亚洲大胆色噜噜| 精品少妇一区二区三区日产乱码| 欧美精品一区二区高清在线观看| 国产午夜亚洲精品羞羞网站| 国产精品女人毛片| 一区二区三区四区乱视频| 亚洲图片欧美综合| 久久精品国产第一区二区三区| 国产成人在线色| 99国产麻豆精品| 欧美电影一区二区| 国产日韩综合av| 亚洲精品自拍动漫在线| 三级不卡在线观看| 国产69精品久久久久毛片| 色一情一乱一乱一91av| 欧美一区二区三区免费大片| 久久久另类综合| 亚洲成av人在线观看| 国产福利精品一区二区| 欧美视频一区二区三区四区| 欧美精品一区在线观看| 亚洲黄色免费网站| 国产呦精品一区二区三区网站| 一本色道久久加勒比精品| 日韩午夜电影av| 亚洲乱码国产乱码精品精98午夜| 日韩av高清在线观看| www.久久久久久久久| 91精品国产一区二区三区蜜臀| 26uuu亚洲| 五月综合激情网| 成人福利视频在线看| 欧美人与禽zozo性伦| 国产精品福利一区| 国产在线精品免费av| 欧美乱妇20p| 玉米视频成人免费看| 大尺度一区二区| 欧美一级日韩免费不卡| 亚洲综合自拍偷拍| 波多野洁衣一区| 久久久久国产精品人| 日本va欧美va精品发布| 91福利精品视频| 亚洲欧美福利一区二区| 国产成人鲁色资源国产91色综| 9191成人精品久久| 亚洲成av人片在www色猫咪| 99久久综合国产精品| 国产拍揄自揄精品视频麻豆| 卡一卡二国产精品 | 2022国产精品视频| 亚洲国产视频在线| 色婷婷久久久久swag精品| 中文天堂在线一区| 成人听书哪个软件好| 日本一区二区三区免费乱视频| 免费av成人在线| 欧美一区二区在线不卡| 天涯成人国产亚洲精品一区av| 一本一本大道香蕉久在线精品| 国产精品久久久久久久久免费樱桃 | 成人亚洲精品久久久久软件| 国产午夜精品一区二区三区四区| 国产一区在线观看麻豆| 久久精品视频免费观看| 成人黄色国产精品网站大全在线免费观看 | 爽好久久久欧美精品| 欧美精品日韩一本| 亚洲国产一区视频| 欧美一区二区成人| 精品中文av资源站在线观看| 精品久久久久久久久久久院品网| 韩国女主播一区| 中文字幕精品一区二区精品绿巨人 | 亚洲欧美自拍偷拍| 欧美伊人久久大香线蕉综合69| 午夜欧美2019年伦理| 精品精品国产高清a毛片牛牛| 国内精品嫩模私拍在线| 国产日韩精品一区二区浪潮av| eeuss影院一区二区三区| 一区二区三区色| 欧美一区午夜视频在线观看| 久久精品国产99| 中文字幕中文字幕一区| 欧美又粗又大又爽| 久久99日本精品| 国产日韩欧美麻豆| 色狠狠av一区二区三区| 日韩av不卡在线观看| 国产精品素人视频| 欧美日韩高清一区二区不卡| 极品少妇xxxx偷拍精品少妇| 亚洲四区在线观看| 欧美一卡2卡3卡4卡| av在线一区二区| 五月激情综合网| 中文字幕巨乱亚洲| 欧美一二三区在线观看| 成人免费三级在线| 五月婷婷另类国产| 国产精品国产a级| 日韩午夜电影在线观看| 色综合久久久久综合体| 精品一区二区免费在线观看| 亚洲色图都市小说| 亚洲主播在线观看| 精品国产麻豆免费人成网站| 色综合久久88色综合天天6| 狠狠色丁香久久婷婷综合丁香| 一区二区三区在线影院| 欧美国产亚洲另类动漫| 精品久久一区二区三区| 日本韩国一区二区三区视频| 国产精品一区不卡| 日本中文字幕一区| 一区二区在线观看免费| 欧美国产精品久久| 久久久久久久免费视频了| 欧美一级生活片| 欧美日韩免费电影| 色综合久久久久综合99| 波多野结衣91| www.视频一区| 国产91高潮流白浆在线麻豆| 国产在线精品免费| 久久 天天综合| 美女脱光内衣内裤视频久久影院| 亚洲激情中文1区| 亚洲欧美另类久久久精品| 国产精品成人免费在线| 中文字幕精品一区二区精品绿巨人 | 国产91精品露脸国语对白| 韩国v欧美v亚洲v日本v| 精品一区二区三区免费播放| 久久精品国产**网站演员| 日韩高清在线不卡| 成人免费高清视频在线观看| 国产成人免费视频一区| 福利一区福利二区| 成人综合在线观看| 成人av综合在线| 东方欧美亚洲色图在线| 成人免费不卡视频| 99精品久久只有精品| 色综合久久综合网欧美综合网| 一本久久a久久免费精品不卡| 一本色道a无线码一区v| 欧美少妇一区二区| 欧美一区二区三区人| 亚洲精品一线二线三线| 欧美国产日韩亚洲一区| 亚洲日本中文字幕区| 亚洲综合小说图片| 日本午夜精品视频在线观看 | 亚洲国产成人91porn| 日日夜夜免费精品| 精品一区二区三区在线视频| 国产91丝袜在线播放九色| 99精品国产热久久91蜜凸| 欧美午夜精品理论片a级按摩| 在线观看91精品国产入口| 91精品国产综合久久福利软件| 久久久蜜桃精品| 一区二区三区色| 精品一区二区av| 成人精品视频一区二区三区| 在线观看一区二区精品视频| 日韩欧美国产一区二区三区| 中文字幕电影一区| 丝袜美腿亚洲色图| 国模套图日韩精品一区二区| 日本乱人伦aⅴ精品| 欧美精品一区二区三区高清aⅴ| 亚洲欧洲www| 精品一区二区三区在线视频| 色婷婷精品久久二区二区蜜臀av| 日韩欧美色综合网站| 亚洲色图.com| 国内久久婷婷综合| 欧美福利视频一区| 最好看的中文字幕久久| 经典三级在线一区| 欧美性受极品xxxx喷水| 中文字幕av一区二区三区免费看|