资源简介
《C/C++中国象棋程序入门与提高》由浅入深地介绍了中国象棋博弈程序的各个基本知识点,以实际案例来促进读者对算法的理解,提高实际编程能力。主要内容包括:中国象棋博弈,局面表示,走法表示及生成走法,局面评估,基本搜索算法,人机博弈,机器对弈,置换表,算法分析及测试技术,时间控制策略等,这是该书的随书源代码
代码片段和文件信息
// Board.cpp: implementation of the CBoard class.
//
//////////////////////////////////////////////////////////////////////
#include “Board.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CBoard g_Board;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBoard::CBoard()
{
StackTop = 0;
ply =0;
MaxDepth = 4;
}
CBoard::~CBoard()
{
}
//棋子整数值转换成字符表示
char CBoard::IntToChar(int a)
{
if(a <32)
{
switch(a)
{
case 16: return ‘K‘;
case 17:
case 18: return ‘A‘;
case 19:
case 20: return ‘B‘;
case 21:
case 22: return ‘N‘;
case 23:
case 24: return ‘R‘;
case 25:
case 26: return ‘C‘;
case 27:
case 28:
case 29:
case 30:
case 31: return ‘P‘;
default: return 0;
}
}
else
{
a = a-16;
switch(a)
{
case 16: return ‘k‘;
case 17:
case 18: return ‘a‘;
case 19:
case 20: return ‘b‘;
case 21:
case 22: return ‘n‘;
case 23:
case 24: return ‘r‘;
case 25:
case 26: return ‘c‘;
case 27:
case 28:
case 29:
case 30:
case 31: return ‘p‘;
default: return 0;
}
}
}
void CBoard::ClearBoard() //清空棋盘数组
{
int i;
side = 0;
for (i = 0; i < 256; i ++)
{
board[i] = 0;
}
for (i = 0; i < 48; i ++)
{
piece[i] = 0;
}
StackTop=0;
ZobristKey = 0;
ZobristKeyCheck = 0;
}
//FEN串中棋子对应的数组下标
//下标0,1,2,3,4,5,6分别对应表示将,仕,象,马,车,炮,兵
int CBoard::CharToSubscript(char ch)
{
switch(ch)
{
case ‘k‘:
case ‘K‘:return 0;
case ‘a‘:
case ‘A‘:return 1;
case ‘b‘:
case ‘B‘:return 2;
case ‘n‘:
case ‘N‘:return 3;
case ‘r‘:
case ‘R‘:return 4;
case ‘c‘:
case ‘C‘:return 5;
case ‘p‘:
case ‘P‘:return 6;
default:return 7;
}
}
void CBoard::AddPiece(int pos int pc) //增加棋子
{
int pt;
board[pos] = pc;
piece[pc] = pos;
pt = PieceNumToType[pc];
if (pc>=32)
{
pt += 7;
}
ZobristKey ^= ZobristTable[pt][pos];
ZobristKeyCheck ^= ZobristTableCheck[pt][pos];
}
//将FEN串表示的局面转换成一维数组
void CBoard::StringToArray(const char *FenStr)
{
int i j k;
int pcWhite[7]={16171921232527};
int pcBlack[7]={32333537394143};
const char *str;
ClearBoard();
str = FenStr;
if (*str == ‘\0‘)
{
return;
}
i = 3;
j = 3;
while (*str != ‘ ‘)
{
if (*str == ‘/‘)
{
j = 3;
i ++;
if (i > 12)
{
break;
}
}
else if (*str >= ‘1‘ && *str <= ‘9‘)
{
for (k = 0; k < (*str - ‘0‘); k ++)
{
if (j >= 11)
{
break;
}
j ++;
}
}
else if (*str >= ‘A‘ && *str <= ‘Z‘)
{
if (j <= 11)
{
k = CharToSubscript(*str);
if (k < 7)
{
if (pcWhite[k] < 32)
{
AddPiece((i<<4)+jpcWhite[k]);
pcWhite[k]++;
}
}
j ++;
}
}
else if (*str >= ‘a‘
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-04-01 10:21 C、C++中国象棋程序入门与提高\
文件 240 2008-06-24 00:15 C、C++中国象棋程序入门与提高\光盘目录.txt
目录 0 2012-04-01 10:21 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\
目录 0 2012-04-01 10:21 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\
文件 4477 2008-05-10 21:48 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\Board.cpp
文件 3372 2008-06-14 11:05 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\Board.h
文件 5011 2008-05-10 21:41 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\chessengine.dsp
文件 547 2007-09-19 12:54 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\chessengine.dsw
文件 328704 2008-06-14 15:31 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\chessengine.ncb
文件 268800 2008-06-14 15:31 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\chessengine.opt
文件 2019 2008-06-14 11:05 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\chessengine.plg
文件 1478 2008-06-07 10:48 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\def.h
文件 2422 2008-06-14 11:05 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\engine.cpp
文件 539 2008-06-07 11:23 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\evaluate.cpp
文件 10334 2008-06-14 11:05 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\genmoves.cpp
文件 2283 2008-06-06 00:19 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\hash.cpp
文件 2670 2007-09-19 13:02 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\pipe.cpp
文件 476 2007-09-19 13:00 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\pipe.h
文件 5073 2008-06-07 15:42 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\search.cpp
文件 5293 2007-09-19 13:03 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\ucci.cpp
文件 3935 2007-09-19 13:03 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\chessengine9-7\ucci.h
目录 0 2012-04-01 10:21 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\
文件 20732 2008-06-07 10:01 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\6-2.cpp
文件 21036 2008-06-07 10:01 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\6-3.cpp
目录 0 2012-04-01 10:21 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\Debug\
文件 4361 2008-06-07 11:21 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\象棋程序.dsp
文件 541 2007-08-28 13:59 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\象棋程序.dsw
文件 91136 2008-06-23 23:50 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\象棋程序.ncb
文件 266752 2008-06-23 23:50 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\象棋程序.opt
文件 1262 2008-06-07 09:45 C、C++中国象棋程序入门与提高\第10章 算法分析与测试技术\第六章\象棋程序.plg
目录 0 2012-04-01 10:21 C、C++中国象棋程序入门与提高\第11章 时间控制策略\
............此处省略450个文件信息
评论
共有 条评论