将每个棋子按下列编号
#include <stdio.h>
char rk;
short x1,x2,y1,y2,n,i,j;
short board[8][8]=
{
{29,25,27,31,32,28,26,30},
{17,18,19,20,21,22,23,24},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{1,2,3,4,5,6,7,8},
{13,9,11,15,16,12,10,14}
};
short flagw[8][8]=
{
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{1,2,3,4,5,6,7,8},
{1,2,3,4,5,6,7,8},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
short flagb[8][8]=
{
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{17,18,19,20,21,22,23,24},
{17,18,19,20,21,22,23,24},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
void scan(void);
void print(void);
void move(void);
void clear(void);
int rkc(void);
int gameover(void);
int main()
{
while(1)
{
print();
scan();
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]>=1 && board[i][j]<=8)//wP
{
if(board[i-1][j]>=1 && board[i-1][j]<=32) flagw[i-1][j]=board[i][j];
if(board[i-1][j-1]>=1 && board[i-1][j-1]<=32) flagw[i-1][j-1]=board[i][j];
if(board[i-1][j+1]>=1 && board[i-1][j+1]<=32) flagw[i-1][j+1]=board[i][j];
}
else if(board[i][j]>=17 && board[i][j]<=24 )//bP
{
if(board[i+1][j]>=1 && board[i+1][j]<=32) flagb[i+1][j]=board[i][j];
if(board[i+1][j-1]>=1 && board[i+1][j-1]<=32) flagb[i+1][j-1]=board[i][j];
if(board[i+1][j+1]>=1 && board[i+1][j+1]<=32) flagb[i+1][j+1]=board[i][j];
}
else if(board[i][j]==9 || board[i][j]==10)//wN
{
flagw[i+1][j+2]=board[i][j];
flagw[i+1][j-2]=board[i][j];
flagw[i-1][j+2]=board[i][j];
flagw[i-1][j-2]=board[i][j];
flagw[i+2][j+1]=board[i][j];
flagw[i+2][j-1]=board[i][j];
flagw[i-2][j+1]=board[i][j];
flagw[i-2][j-1]=board[i][j];
}
else if(board[i][j]==25 || board[i][j]==26)//bN
{
flagb[i+1][j+2]=board[i][j];
flagb[i+1][j-2]=board[i][j];
flagb[i-1][j+2]=board[i][j];
flagb[i-1][j-2]=board[i][j];
flagb[i+2][j+1]=board[i][j];
flagb[i+2][j-1]=board[i][j];
flagb[i-2][j+1]=board[i][j];
flagb[i-2][j-1]=board[i][j];
}
else if(board[i][j]==11 || board[i][j]==12)//wB
{
n=1; while(board[i+n][j+n]!=0) {flagw[i+n][j+n]=board[i][j]; n++;}
n=1; while(board[i+n][j-n]!=0) {flagw[i+n][j-n]=board[i][j]; n++;}
n=1; while(board[i-n][j+n]!=0) {flagw[i-n][j+n]=board[i][j]; n++;}
n=1; while(board[i-n][j-n]!=0) {flagw[i-n][j-n]=board[i][j]; n++;}
}
else if(board[i][j]==27 || board[i][j]==28)//bB
{
n=1; while(board[i+n][j+n]!=0) {flagb[i+n][j+n]=board[i][j]; n++;}
n=1; while(board[i+n][j-n]!=0) {flagb[i+n][j-n]=board[i][j]; n++;}
n=1; while(board[i-n][j+n]!=0) {flagb[i-n][j+n]=board[i][j]; n++;}
n=1; while(board[i-n][j-n]!=0) {flagb[i-n][j-n]=board[i][j]; n++;}
}
else if(board[i][j]==13 || board[i][j]==14)//wR
{
n=1; while(board[i+n][j]!=0) {flagw[i+n][j]=board[i][j]; n++;}
n=1; while(board[i-n][j]!=0) {flagw[i-n][j]=board[i][j]; n++;}
n=1; while(board[i][j+n]!=0) {flagw[i][j+n]=board[i][j]; n++;}
n=1; while(board[i][j-n]!=0) {flagw[i][j-n]=board[i][j]; n++;}
}
else if(board[i][j]==29 || board[i][j]==30 )//bR
{
n=1; while(board[i+n][j]!=0) {flagb[i+n][j]=board[i][j]; n++;}
n=1; while(board[i-n][j]!=0) {flagb[i-n][j]=board[i][j]; n++;}
n=1; while(board[i][j+n]!=0) {flagb[i][j+n]=board[i][j]; n++;}
n=1; while(board[i][j-n]!=0) {flagb[i][j-n]=board[i][j]; n++;}
}
else if(board[i][j]==15)//wQ
{
n=1; while(board[i+n][j+n]!=0) {flagw[i+n][j+n]=board[i][j]; n++;}
n=1; while(board[i+n][j-n]!=0) {flagw[i+n][j-n]=board[i][j]; n++;}
n=1; while(board[i-n][j+n]!=0) {flagw[i-n][j+n]=board[i][j]; n++;}
n=1; while(board[i-n][j-n]!=0) {flagw[i-n][j-n]=board[i][j]; n++;}
n=1; while(board[i+n][j]!=0) {flagw[i+n][j]=board[i][j]; n++;}
n=1; while(board[i-n][j]!=0) {flagw[i-n][j]=board[i][j]; n++;}
n=1; while(board[i][j+n]!=0) {flagw[i][j+n]=board[i][j]; n++;}
n=1; while(board[i][j-n]!=0) {flagw[i][j-n]=board[i][j]; n++;}
}
else if(board[i][j]==31 )//bQ
{
n=1; while(board[i+n][j+n]!=0) {flagb[i+n][j+n]=board[i][j]; n++;}
n=1; while(board[i+n][j-n]!=0) {flagb[i+n][j-n]=board[i][j]; n++;}
n=1; while(board[i-n][j+n]!=0) {flagb[i-n][j+n]=board[i][j]; n++;}
n=1; while(board[i-n][j-n]!=0) {flagb[i-n][j-n]=board[i][j]; n++;}
n=1; while(board[i+n][j]!=0) {flagb[i+n][j]=board[i][j]; n++;}
n=1; while(board[i-n][j]!=0) {flagb[i-n][j]=board[i][j]; n++;}
n=1; while(board[i][j+n]!=0) {flagb[i][j+n]=board[i][j]; n++;}
n=1; while(board[i][j-n]!=0) {flagb[i][j-n]=board[i][j]; n++;}
}
else if(board[i][j]==16)//wK
{
if(flagb[i+1][j]==0) flagw[i+1][j]=board[i][j];
if(flagb[i-1][j]==0) flagw[i-1][j]=board[i][j];
if(flagb[i][j+1]==0) flagw[i][j+1]=board[i][j];
if(flagb[i][j-1]==0) flagw[i][j-1]=board[i][j];
if(flagb[i+1][j+1]==0) flagw[i+1][j+1]=board[i][j];
if(flagb[i+1][j-1]==0) flagw[i+1][j-1]=board[i][j];
if(flagb[i-1][j+1]==0) flagw[i-1][j+1]=board[i][j];
if(flagb[i-1][j-1]==0) flagw[i-1][j-1]=board[i][j];
}
else if(board[i][j]==32)//bK
{
if(flagw[i+1][j]==0) flagb[i+1][j]=board[i][j];
if(flagw[i-1][j]==0) flagb[i-1][j]=board[i][j];
if(flagw[i][j+1]==0) flagb[i][j+1]=board[i][j];
if(flagw[i][j-1]==0) flagb[i][j-1]=board[i][j];
if(flagw[i+1][j+1]==0) flagb[i+1][j+1]=board[i][j];
if(flagw[i+1][j-1]==0) flagb[i+1][j-1]=board[i][j];
if(flagw[i-1][j+1]==0) flagb[i-1][j+1]=board[i][j];
if(flagw[i-1][j-1]==0) flagb[i-1][j-1]=board[i][j];
}
rkc();
if(i==x1 && j==y1 && flagw[x2][y2] == board[x1][y1] || flagb[x2][y2] == board[x1][y1]) move();
}
}
clear();
if(gameover())
{
printf("gameover");
break;
}
}
return 0;
}
void scan(void)
{
scanf("%d,%d to %d,%d",&x1,&y1,&x2,&y2);
x1--;
x2--;
y1--;
y2--;
}
void print(void)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
switch(board[i][j])
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8: printf("wP "); break;
case 9:
case 10: printf("wN "); break;
case 11:
case 12: printf("wB "); break;
case 13:
case 14: printf("wR "); break;
case 15: printf("wQ "); break;
case 16: printf("wK "); break;
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24: printf("bP "); break;
case 25:
case 26: printf("bN "); break;
case 27:
case 28: printf("bB "); break;
case 29:
case 30: printf("bR "); break;
case 31: printf("bQ "); break;
case 32: printf("bK "); break;
default: printf(".. ");
}
}
printf("\n");
}
printf(": ");
}
void move(void)
{
board[x2][y2]=board[x1][y1];
board[x1][y1]=0;
}
void clear(void)
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
flagw[i][j]=0;
flagb[i][j]=0;
}
}
}
int rkc(void)
{
if(board[7][4]==16 && board[7][0]==13 && flagb[7][3]==0 && flagb[7][2]==0 && board[7][1]==0 && board[7][2]==0 && board[7][3]==0)
{
printf("0-0?(y/n)");
scanf("%c",rk);
if(rk=='y') move();
}
if(board[7][4]==16 && board[7][7]==13 && flagb[7][5]==0 && flagb[7][6]==0 && board[7][6]==0 && board[7][5]==0)
{
printf("0-0?(y/n)");
scanf("%c",rk);
if(rk=='y') move();
}
if(board[0][4]==16 && board[0][0]==13 && flagb[0][3]==0 && flagb[0][2]==0 && board[0][1]==0 && board[0][2]==0 && board[0][3]==0)
{
printf("0-0?(y/n)");
scanf("%c",rk);
if(rk=='y') move();
}
if(board[0][4]==16 && board[0][7]==13 && flagb[0][5]==0 && flagb[0][6]==0 && board[0][6]==0 && board[0][5]==0)
{
printf("0-0?(y/n)");
scanf("%c",rk);
if(rk=='y') move();
}
}
int gameover(void)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==16 || board[i][j]==32) return 0;
}
}
}
欢迎debug啊,唠嗑啊,点赞啊,之后出注释:)