📄 setchess.cpp
字号:
int nChessID;
//bool flag;
int i,j;
m_nMoveCount=0;
for(j=0;j<9;j++)
for(i=0;i<10;i++)
{
if(ChessBoard[i][j]!=NOCHESS)
{
nChessID=ChessBoard[i][j];
if(!nSide&&IsRed(nChessID))
continue;
if(nSide&&IsBlack(nChessID))
continue;
//if(nChessID==R_CANON||nChessID==B_CANON)
//{
switch(nChessID)
{
case R_KING:
case B_KING:
Gen_KingMove(ChessBoard,i,j,nPly);
break;
case R_BISHOP:
Gen_RBishopMove(ChessBoard,i,j,nPly);
break;
case B_BISHOP:
Gen_BBishopMove(ChessBoard,i,j,nPly);
break;
case R_ELEPHANT:
case B_ELEPHANT:
Gen_ElephantMove(ChessBoard,i,j,nPly);
break;
case R_HORSE:
case B_HORSE:
Gen_HorseMove(ChessBoard,i,j,nPly);
break;
case R_CAR:
case B_CAR:
Gen_CarMove(ChessBoard,i,j,nPly);
break;
case R_PAWN:
Gen_RPawnMove(ChessBoard,i,j,nPly);
break;
case B_PAWN:
Gen_BRawnMove(ChessBoard,i,j,nPly);
break;
case B_CANON:
case R_CANON:
Gen_CanonMove(ChessBoard,i,j,nPly);
break;
default:
break;
}//end of switch
//}
}
}
return m_nMoveCount;
}
//i是纵坐标,j是横坐标
void SetChess::Gen_BRawnMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y;
int nChessID;
nChessID=ChessBoard[i][j];
x=j;
y=i+1;//向前
if(y<10&&!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
//是否过河
if(i>4)
{
y=i;
x=j+1;//右边
if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
x=j-1;
if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
}
}
void SetChess::Gen_RPawnMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y;
int nChessID;
nChessID=ChessBoard[i][j];
x=j;
y=i-1;//向前
if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
//是否过河
if(i<5)
{
y=i;
x=j+1;//右边
if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
x=j-1;
if(y>0&&!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
}
}
void SetChess::Gen_CarMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y;
int nChessID;
nChessID=ChessBoard[i][j];
//插入右边可走位置
x=j+1;
y=i;
while(x<9)
{
if(ChessBoard[y][x]==NOCHESS)
AddMove(j,x,i,y,nPly);
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
x++;
}
x=j-1;
y=i;
while(x>=0)
{
if(ChessBoard[y][x]==NOCHESS)
AddMove(j,x,i,y,nPly);
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
x--;
}
x=j;
y=i+1;
while(y<10)
{
if(ChessBoard[y][x]==NOCHESS)
AddMove(j,x,i,y,nPly);
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
y++;
}
x=j;
y=i-1;
while(y>=0)
{
if(ChessBoard[y][x]==NOCHESS)
AddMove(j,x,i,y,nPly);
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
y--;
}
}
void SetChess::Gen_HorseMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y;
//右二下一
x=j+2;
y=i+1;
int ID;
CPoint s,s1;
s.x=j*35+20;s.y=i*35+20;
ID=FindChess(s,NULL);
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j+2;
y=i-1;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j-2;
y=i+1;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j-2;
y=i-1;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j+1;
y=i+2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j+1;
y=i-2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j-1;
y=i-2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j-1;
y=i+2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
}
void SetChess::Gen_ElephantMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y;
//插入右下方的有效走法
x=j+2;
y=i+2;
int ID;
CPoint s,s1;
s.x=j*35+20;s.y=i*35+20;
ID=FindChess(s,NULL);
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j+2;
y=i-2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j-2;
y=i+2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
x=j-2;
y=i-2;
s.x=x*35+20;s.y=y*35+20;
if(x<9&&y<10&&CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
}
void SetChess::Gen_BBishopMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y,ID;
CPoint s,s1;
s.x=j*35+20;s.y=i*35+20;
ID=FindChess(s,NULL);
for(y=0;y<3;y++)
{
for(x=3;x<6;x++)
{
s.x=x*35+20;s.y=y*35+20;
if(CanMove(s,ID,true))
{
AddMove(j,x,i,y,nPly);
}
}
}
}
void SetChess::Gen_RBishopMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y,ID;
CPoint s,s1;
s.x=j*35+20;s.y=i*35+20;
ID=FindChess(s,NULL);
for(y=7;y<10;y++)
{
for(x=3;x<6;x++)
{
s.x=x*35+20;s.y=y*35+20;
if(CanMove(s,ID,true))
{
AddMove(j,x,i,y,nPly);
}
}
}
}
void SetChess::Gen_KingMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y,ID;
CPoint s,s1;
s.x=j*35+20;s.y=i*35+20;
ID=FindChess(s,NULL);
for(y=0;y<3;y++)
{
for(x=3;x<6;x++)
{
s.x=x*35+20;s.y=y*35+20;
if(CanMove(s,ID,true))
{
AddMove(j,x,i,y,nPly);
}
}
}
for(y=7;y<10;y++)
{
for(x=3;x<6;x++)
{
s.x=x*35+20;s.y=y*35+20;
if(CanMove(s,ID,true))
AddMove(j,x,i,y,nPly);
}
}
}
void SetChess::Gen_CanonMove(int ChessBoard[10][9], int i, int j, int nPly)
{
int x,y;
bool flag;
int nChessID;
nChessID=ChessBoard[i][j];
//插入向右方向的可走步法
x=j+1;
y=i;
flag=false;
while(x<9)
{
if(ChessBoard[y][x]==NOCHESS)
{
if(!flag)//是否隔着棋子
AddMove(j,x,i,y,nPly);
}
else
{
if(!flag)
flag=true;
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
}
x++;
}
x=j-1;
y=i;
flag=false;
while(x>=0)
{
if(ChessBoard[y][x]==NOCHESS)
{
if(!flag)//是否隔着棋子
AddMove(j,x,i,y,nPly);
}
else
{
if(!flag)
flag=true;
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
}
x--;
}
x=j;
y=i+1;
flag=false;
while(y<10)
{
if(ChessBoard[y][x]==NOCHESS)
{
if(!flag)//是否隔着棋子
AddMove(j,x,i,y,nPly);
}
else
{
if(!flag)
flag=true;
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
}
y++;
}
x=j;
y=i-1;
flag=false;
while(y>=0)
{
if(ChessBoard[y][x]==NOCHESS)
{
if(!flag)//是否隔着棋子
AddMove(j,x,i,y,nPly);
}
else
{
if(!flag)
flag=true;
else
{
if(!lsSameSide(nChessID,ChessBoard[y][x]))
AddMove(j,x,i,y,nPly);
break;
}
}
y--;
}
}
void SetChess::init()
{
site[0].x=10+140;site[0].y=10;
site[0].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BKING);
site[1].x=10+105;site[1].y=10;
site[1].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BSHOP);
site[2].x=10+175;site[2].y=10;
site[2].hIcon=site[1].hIcon;
site[3].x=10+70;site[3].y=10;
site[3].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BELEPHANT);
site[4].x=10+210;site[4].y=10;
site[4].hIcon=site[3].hIcon;
site[5].x=10+35;site[5].y=10;
site[5].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BHORSE);
site[6].x=10+245;site[6].y=10;
site[6].hIcon=site[5].hIcon;
site[7].x=10;site[7].y=10;
site[7].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BCAR);
site[8].x=10+280;site[8].y=10;
site[8].hIcon=site[7].hIcon;
site[9].x=10+35;site[9].y=10+70;
site[9].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BCANON);
site[10].x=10+245;site[10].y=10+70;
site[10].hIcon=site[9].hIcon;
site[11].x=10;site[11].y=10+105;
site[11].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BPAWN);
site[12].x=10+70;site[12].y=10+105;
site[12].hIcon=site[11].hIcon;
site[13].x=10+140;site[13].y=10+105;
site[13].hIcon=site[11].hIcon;
site[14].x=10+210;site[14].y=10+105;
site[14].hIcon=site[11].hIcon;
site[15].x=10+280;site[15].y=10+105;
site[15].hIcon=site[11].hIcon;
///////////
site[16].x=10+140;site[16].y=10+315;
site[16].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RKING);
site[17].x=10+105;site[17].y=10+315;
site[17].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RSHOP);
site[18].x=10+175;site[18].y=10+315;
site[18].hIcon=site[17].hIcon;
site[19].x=10+70;site[19].y=10+315;
site[19].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RELEPHANT);
site[20].x=10+210;site[20].y=10+315;
site[20].hIcon=site[19].hIcon;
site[21].x=10+35;site[21].y=10+315;
site[21].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RHORSE);
site[22].x=10+245;site[22].y=10+315;
site[22].hIcon=site[21].hIcon;
site[23].x=10;site[23].y=10+315;
site[23].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RCAR);
site[24].x=10+280;site[24].y=10+315;
site[24].hIcon=site[23].hIcon;
site[25].x=10+35;site[25].y=10+245;
site[25].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RCANON);
site[26].x=10+245;site[26].y=10+245;
site[26].hIcon=site[25].hIcon;
site[27].x=10;site[27].y=10+210;
site[27].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_RPAWN);
site[28].x=10+70;site[28].y=10+210;
site[28].hIcon=site[27].hIcon;
site[29].x=10+140;site[29].y=10+210;
site[29].hIcon=site[27].hIcon;
site[30].x=10+210;site[30].y=10+210;
site[30].hIcon=site[27].hIcon;
site[31].x=10+280;site[31].y=10+210;
site[31].hIcon=site[27].hIcon;
/////////
site[32].x=10;site[32].y=10;
site[32].hIcon=AfxGetApp()->LoadIcon(IDI_ICON_BEGIN);
///////
for(int i=0;i<10;i++)
for(int j=0;j<9;j++)
board.ChessBoard[i][j]=ChessB[i][j];
for(int i1=0;i1<33;i1++)
site[i1].flag=true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -