📄 中国象棋.txt
字号:
drawbmp(x,y,chessfile[n]);
}
if(redtemppos.x==redoldpos.x&&redtemppos.y==redoldpos.y&&redstate==MOVE)
drawselecursor(redoldpos);
drawcursor(redcurpos);
redtemppos.x=redcurpos.x;
redtemppos.y=redcurpos.y;
}
}
redright()
{
int x,y,n;
if(redcurpos.y<8)
{
redcurpos.y++;
x=position[redtemppos.x][redtemppos.y].x;
y=position[redtemppos.x][redtemppos.y].y;
if(board[redtemppos.x][redtemppos.y]==0)
drawbmp(x,y,boardfile[redtemppos.x][redtemppos.y]);
else if(!(redtemppos.x==redoldpos.x&&redtemppos.y==redoldpos.y&&redstate==MOVE))
{
n=board[redtemppos.x][redtemppos.y];
drawbmp(x,y,chessfile[n]);
}
if(redtemppos.x==redoldpos.x&&redtemppos.y==redoldpos.y&&redstate==MOVE)
drawselecursor(redoldpos);
drawcursor(redcurpos);
redtemppos.x=redcurpos.x;
redtemppos.y=redcurpos.y;
}
}
reddo()
{
int i,j,x,y,n;
if(redstate==SELECT&&redcanselect())
{
if(board[redcurpos.x][redcurpos.y]<=RED&&board[redcurpos.x][redcurpos.y]>0)
{
redstate=MOVE;
drawselecursor(redcurpos);
redoldpos.x=redcurpos.x;
redoldpos.y=redcurpos.y;
}
}
else if(redstate==MOVE&&redcanmove())
{
x=position[redoldpos.x][redoldpos.y].x;
y=position[redoldpos.x][redoldpos.y].y;
drawbmp(x,y,boardfile[redoldpos.x][redoldpos.y]);
x=position[redcurpos.x][redcurpos.y].x;
y=position[redcurpos.x][redcurpos.y].y;
n=board[redoldpos.x][redoldpos.y];
drawbmp(x,y,chessfile[n]);
if(board[redcurpos.x][redcurpos.y]==BLACK_JIANG)
{
winner=RED;
finish=1;
return;
}
board[redcurpos.x][redcurpos.y]=n;
board[redoldpos.x][redoldpos.y]=0;
for(i=0;i<=2;i++)
for(j=3;j<=5;j++)
if(board[i][j]==BLACK_JIANG)
{x=i;y=j;}
for(i=x+1,j=y,n=0;i<=9;i++)
{
if(board[i][j]==RED_JIANG&&n==0)
{winner=BLACK;finish=1;break;}
else if(board[i][j]!=0) n++;
}
turn=BLACK;
blackstate=SELECT;
drawcursor(blackcurpos);
drawbmp(30,438,"bmp\\bzq.wfb"); /*转交控制权给黑方*/
}
}
redundo()
{
int x,y,n;
if(redstate==MOVE)
{
x=position[redoldpos.x][redoldpos.y].x;
y=position[redoldpos.x][redoldpos.y].y;
n=board[redoldpos.x][redoldpos.y];
drawbmp(x,y,chessfile[n]);
redoldpos.x=redcurpos.x;
redoldpos.y=redcurpos.y;
drawcursor(redcurpos);
redstate=SELECT;
}
}
/*--------------------黑方操作----------------------*/
int blackcanselect()
{
int x,y;
x=blackcurpos.x;
y=blackcurpos.y;
if(board[x][y]>=BLACK_JU&&board[x][y]<=BLACK_BIN)
return 1;
else
return 0;
}
int blackcanmove()
{
int i,j,min,max,oldx,oldy,x,y;
oldx=blackoldpos.x;
oldy=blackoldpos.y;
x=blackcurpos.x;
y=blackcurpos.y;
/*case1 目标位置是否是自己人*/
if(board[x][y]>=BLACK_JU&&board[x][y]<=BLACK_BIN)
return 0;
/* 军、马、炮、相、士、将、卒的走法正确性的判断*/
switch(board[oldx][oldy])
{
case BLACK_JU: /*完成*/
if(x!=oldx&&y!=oldy) return 0;
else if(x!=oldx)
{ min=(x>oldx)?oldx:x;
max=(x>oldx)?x:oldx;
for(i=min+1;i<max;i++)
if(board[i][y]!=0) return 0;
}
else if(y!=oldy)
{ min=(y>oldy)?oldy:y;
max=(y>oldy)?y:oldy;
for(i=min+1;i<max;i++)
if(board[x][i]!=0) return 0;
}
break;
case BLACK_MA: /*完成*/
if((x-oldx)==2&&((y-oldy)==1||(oldy-y)==1))
{
if(board[oldx+1][oldy]!=0) return 0;
}else
if((oldx-x)==2&&((y-oldy)==1||(oldy-y)==1))
{
if(board[oldx-1][oldy]!=0) return 0;
}else
if((y-oldy)==2&&((x-oldx)==1||(oldx-x)==1))
{
if(board[oldx][oldy+1]!=0) return 0;
}else
if((oldy-y)==2&&((x-oldx)==1||(oldx-x)==1))
{
if(board[oldx][oldy-1]!=0) return 0;
}else
return 0;
break;
case BLACK_PAO: /*完成*/
if(x!=oldx&&y!=oldy) return 0;
if(board[x][y]==0)
{
if(x!=oldx)
{ min=(x>oldx)?oldx:x;
max=(x>oldx)?x:oldx;
for(i=min+1;i<max;i++)
if(board[i][y]!=0) return 0;
}
else if(y!=oldy)
{ min=(y>oldy)?oldy:y;
max=(y>oldy)?y:oldy;
for(i=min+1;i<max;i++)
if(board[x][i]!=0) return 0;
}
}
else
{
j=0;
if(x!=oldx)
{ min=(x>oldx)?oldx:x;
max=(x>oldx)?x:oldx;
for(i=min+1;i<max;i++)
if(board[i][y]!=0) j++;
if(j!=1) return 0;
}
else if(y!=oldy)
{ min=(y>oldy)?oldy:y;
max=(y>oldy)?y:oldy;
for(i=min+1;i<max;i++)
if(board[x][i]!=0) j++;
if(j!=1) return 0;
}
}
break;
case BLACK_XIANG:
if(x>4) return 0;
if(x!=oldx&&y!=oldy)
{
if((x-oldx)==2&&(y-oldy)==2)
{i=oldx+1;j=oldy+1;}
else if((x-oldx)==2&&(oldy-y)==2)
{i=oldx+1;j=oldy-1;}
else if((oldx-x)==2&&(y-oldy)==2)
{i=oldx-1;j=oldy+1;}
else if((oldx-x)==2&&(oldy-y)==2)
{i=oldx-1;j=oldy-1;}
else return 0;
if(board[i][j]!=0) return 0;
}
else return 0;
break;
case BLACK_SHI:
if(oldx==0||oldx==2)
{if(x!=1||y!=4) return 0;}
else if(oldx==1)
{if(x==0&&y==3) return 1;
else
if(x==0&&y==5) return 1;
else
if(x==2&&y==3) return 1;
else
if(x==2&&y==5) return 1;
else return 0;
}else return 0;
break;
case BLACK_JIANG:
if(x!=oldx&&y!=oldy) return 0;
if(x!=oldx)
if((x-oldx)>1||(oldx-x)>1) return 0;
else if(x>2) return 0;
else if(y!=oldy)
if((y-oldy)>1||(oldy-y)>1) return 0;
else if(y<3||y>5) return 0;
break;
case BLACK_BIN:
if(oldx<=4)
{ if(y!=oldy||(x-oldx)!=1) return 0;}
else
{ if(x==(oldx+1)&&y==oldy) return 1;
else
if(x==oldx&&y==(oldy+1)) return 1;
else
if(x==oldx&&y==(oldy-1)) return 1;
else
return 0;
}
break;
}
return 1;
}
blackup()
{
int x,y,n;
if(blackcurpos.x>0)
{
blackcurpos.x--;
x=position[blacktemppos.x][blacktemppos.y].x;
y=position[blacktemppos.x][blacktemppos.y].y;
if(board[blacktemppos.x][blacktemppos.y]==0)
drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
{
n=board[blacktemppos.x][blacktemppos.y];
drawbmp(x,y,chessfile[n]);
}
if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
drawselecursor(blackoldpos);
drawcursor(blackcurpos);
blacktemppos.x=blackcurpos.x;
blacktemppos.y=blackcurpos.y;
}
}
blackdown()
{
int x,y,n;
if(blackcurpos.x<9)
{
blackcurpos.x++;
x=position[blacktemppos.x][blacktemppos.y].x;
y=position[blacktemppos.x][blacktemppos.y].y;
if(board[blacktemppos.x][blacktemppos.y]==0)
drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
{
n=board[blacktemppos.x][blacktemppos.y];
drawbmp(x,y,chessfile[n]);
}
if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
drawselecursor(blackoldpos);
drawcursor(blackcurpos);
blacktemppos.x=blackcurpos.x;
blacktemppos.y=blackcurpos.y;
}
}
blackleft()
{
int x,y,n;
if(blackcurpos.y>0)
{
blackcurpos.y--;
x=position[blacktemppos.x][blacktemppos.y].x;
y=position[blacktemppos.x][blacktemppos.y].y;
if(board[blacktemppos.x][blacktemppos.y]==0)
drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
{
n=board[blacktemppos.x][blacktemppos.y];
drawbmp(x,y,chessfile[n]);
}
if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
drawselecursor(blackoldpos);
drawcursor(blackcurpos);
blacktemppos.x=blackcurpos.x;
blacktemppos.y=blackcurpos.y;
}
}
blackright()
{
int x,y,n;
if(blackcurpos.y<8)
{
blackcurpos.y++;
x=position[blacktemppos.x][blacktemppos.y].x;
y=position[blacktemppos.x][blacktemppos.y].y;
if(board[blacktemppos.x][blacktemppos.y]==0)
drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
{
n=board[blacktemppos.x][blacktemppos.y];
drawbmp(x,y,chessfile[n]);
}
if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
drawselecursor(blackoldpos);
drawcursor(blackcurpos);
blacktemppos.x=blackcurpos.x;
blacktemppos.y=blackcurpos.y;
}
}
blackdo()
{
int i,j,x,y,n;
if(blackstate==SELECT&&blackcanselect())
{
if(board[blackcurpos.x][blackcurpos.y]<=BLACK&&board[blackcurpos.x][blackcurpos.y]>0)
{
blackstate=MOVE;
drawselecursor(blackcurpos);
blackoldpos.x=blackcurpos.x;
blackoldpos.y=blackcurpos.y;
}
}
else if(blackstate==MOVE&&blackcanmove())
{
x=position[blackoldpos.x][blackoldpos.y].x;
y=position[blackoldpos.x][blackoldpos.y].y;
drawbmp(x,y,boardfile[blackoldpos.x][blackoldpos.y]);
x=position[blackcurpos.x][blackcurpos.y].x;
y=position[blackcurpos.x][blackcurpos.y].y;
n=board[blackoldpos.x][blackoldpos.y];
drawbmp(x,y,chessfile[n]);
if(board[blackcurpos.x][blackcurpos.y]==RED_JIANG)
{
winner=BLACK;
finish=1;
return;
}
board[blackcurpos.x][blackcurpos.y]=n;
board[blackoldpos.x][blackoldpos.y]=0;
for(i=0;i<=2;i++)
for(j=3;j<=5;j++)
if(board[i][j]==BLACK_JIANG)
{x=i;y=j;}
for(i=x+1,j=y,n=0;i<=9;i++)
{
if(board[i][j]==RED_JIANG&&n==0)
{winner=RED;finish=1;break;}
else if(board[i][j]!=0) n++;
}
turn=RED;
redstate=SELECT;
drawcursor(redcurpos);
drawbmp(30,438,"bmp\\rzq.wfb"); /*转交控制权给红方*/
}
}
blackundo()
{
int x,y,n;
if(blackstate==MOVE)
{
x=position[blackoldpos.x][blackoldpos.y].x;
y=position[blackoldpos.x][blackoldpos.y].y;
n=board[blackoldpos.x][blackoldpos.y];
drawbmp(x,y,chessfile[n]);
blackoldpos.x=blackcurpos.x;
blackoldpos.y=blackcurpos.y;
drawcursor(blackcurpos);
blackstate=SELECT;
}
}
/*----------------------------------------------------*/
start()
{
drawcursor(blackcurpos);
drawbmp(30,438,"bmp\\bzq.wfb");
while(!finish)
{
key=getkey();
switch(key){
case RED_UP:
if(turn==RED)
redup();
break;
case RED_DOWN:
if(turn==RED)
reddown();
break;
case RED_LEFT:
if(turn==RED)
redleft();
break;
case RED_RIGHT:
if(turn==RED)
redright();
break;
case RED_DO:
if(turn==RED)
reddo();
break;
case RED_UNDO:
if(turn==RED)
redundo();
break;
case BLACK_UP:
if(turn==BLACK)
blackup();
break;
case BLACK_DOWN:
if(turn==BLACK)
blackdown();
break;
case BLACK_LEFT:
if(turn==BLACK)
blackleft();
break;
case BLACK_RIGHT:
if(turn==BLACK)
blackright();
break;
case BLACK_DO:
if(turn==BLACK)
blackdo();
break;
case BLACK_UNDO:
if(turn==BLACK)
blackundo();
break;
case ESCAPE: finish=1;break;
}
}
}
main()
{
init();
initpos();
initchessmap();
drawbmp(0,0,"bmp\\board.wfb");
initdrawchess();
/*初始化光标位置*/
redcurpos.x=redoldpos.x=redtemppos.x=9;
redcurpos.y=redoldpos.y=redtemppos.y=8;
blackcurpos.x=blackoldpos.x=blacktemppos.x=0;
blackcurpos.y=blackoldpos.y=blacktemppos.y=0;
/*开始*/
start();
if(winner==RED)
drawbmp(200,200,"bmp\\redwin.wfb");
else if(winner==BLACK)
drawbmp(200,200,"bmp\\blackwin.wfb");
else
drawbmp(200,200,"bmp\\exit.wfb");
getch();
end();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -