众所周知,开局库在黑白棋中是非常重要的。以下是我设想的开局库数据结构。为了简单,设计成一个链表,而没有采用树形结构。align这些都是为了字节对齐而加的,没有实际意义。
typedef struct BOOK_MOVE_Tag
{
char x; //走法
char y;
char _align0;
char _align1;
long score; //得分,根据数据库数据生成(直接累加由此走法导致的结果比分),如果某走法在数据库中没有,赋值为负最大(-INF)
long count; //这个走法在数据库中出现的次数
} BOOK_MOVE;
typedef struct BOOKEX_Tag
{
unsigned char board[BOARD_SIZE * BOARD_SIZE / 4]; //当前局面,每个点用2bits表示,00-White, 01-Black, 10-Blank, 11-NA
char side; //当前局面该谁走棋
char _align0;
char _align1;
char _align2;
long move_count; //当前局面下side一方的可行走法数
BOOK_MOVE *ml; //走法列表,动态分配内存。<