文档介绍:word
word
1 / 31
word
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
enum TResu
for(i=0;i<BOARDSIZE;++i)
for(j=0;j<BOARDSIZE;++j)
{
clear(b,i,j);
}
//摆放各个棋子
for(i=0;i<BOARDSIZE;++i)
{
//棋盘前两行是白方
b[0][i].side = WHITE;
b[1][i].side = WHITE;
b[1][i].pt = PAWN;//上面第二行是白方的兵
//棋盘最后两行是黑方
b[6][i].side = BLACK;
b[7][i].side = BLACK;
b[6][i].pt = PAWN;//倒数第二行是黑方的兵
}
b[0][0].pt = b[0][7].pt = b[7][0].pt = b[7][7].pt = ROOK;//初始化车的位置
b[0][1].pt = b[0][6].pt = b[7][1].pt = b[7][6].pt = KNIGHT;//初始化马的位置
b[0][2].pt = b[0][5].pt = b[7][2].pt = b[7][5].pt = BISHOP;//初始化象的位置
b[0][3].pt = b[7][3].pt = QUEEN;//初始化后的位置
b[0][4].pt = b[7][4].pt = KING;//初始化王的位置
//初始化王车易位使用的布尔变量
whitecastled = false;
word
word
6 / 31
word
blackcastled = false;
white0rookMoved = false;
white7rookMoved = false;
black0rookMoved = false;
black7rookMoved = false;
whitekingMoved = false;
blackkingMoved = false;
}
void SkipInput(int k)
{//棋局已经完毕,忽略剩余的输入
int i;
char mv[20];
for(i=k;i<n;++i)
{
scanf_s("%s",mv);
}
}
void GetPosition(const string& move,int &x,int &y)
{//从输入的移动步骤中获取棋子的目标位置
int k = 0;
if(move[0]<'a')//首字母是大写字母
k = 1;
x = move[k+1]-'1';//行
y = move[k]-'a';//列
}
word
word
7 / 31
word
bool OutOfBoard(int x,int y)
{//棋子是否超出棋盘界限
if (x<0||y<0)
{
return true;
}
if (x>BOARDSIZE||y>BOARDSIZE)
{
return true;
}
return false;
}
bool CanMovePawn(TBoard b,int x,int y,int x2,int y2,int flag)
{//判断能否把兵从(x,y)移动到(x2,y2),当flag=1时,表示(x,y)直接移动到(x2,y2),flag为其他表示从(x,y)吃子到(x2,y2)
if (flag==1)