• 大小: 8.2MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-02
  • 语言: C/C++
  • 标签:

资源简介

《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个文件信息

评论

共有 条评论

相关资源