思路比较简单;
代码比较简单;
#include<stdio.h>
#include<string.h>
int jiyi[8][8]={0};
char ch[8][8];
int yd[8][2]={0,1,0,-1,1,0,-1,0,-1,1,1,-1,1,1,-1,-1};//8个方向的
void bian(char ch[][8],char c,int i,int j,int h)
{
int x,y;
for(x=i+yd[h][0],y=j+yd[h][1];x<8&&y<8&&x>0&&y>0;x=x+yd[h][0],y=y+yd[h][1])
{
if(ch[x][y]==c)
{
for(;i!=x||j!=y;i=i+yd[h][0],j=j+yd[h][1])
{
ch[i][j]=c;
}
break;
}
if(ch[x][y]=='-')
break;
}
for(x=i+yd[h+1][0],y=j+yd[h+1][1];x<8&&y<8&&x>0&&y>0;x=x+yd[h+1][0],y=y+yd[h+1][1])
{
if(ch[x][y]=='-')
break;
if(ch[x][y]==c)
{
for(;i!=x||j!=y;i=i+yd[h+1][0],j=j+yd[h+1][1])
{
ch[i][j]=c;
}
break;
}
}
}
void jian(char ch[][8],char c,int i,int j,int h)
{
int flag=0,dey=0,dex=0,x,y;
for(x=i+yd[h][0],y=j+yd[h][1];x<8&&y<8&&x>=0&&y>=0;x=x+yd[h][0],y=y+yd[h][1])
{
if(ch[x][y]==c)
{
flag++;
break;
}
if(ch[x][y]=='-')
{
dex=x;
dey=y;
break;
}
}
for(x=i+yd[h+1][0],y=j+yd[h+1][1];x<8&&y<8&&x>=0&&y>=0;x=x+yd[h+1][0],y=y+yd[h+1][1])
{
if(ch[x][y]=='-')
{
if(flag)
{
jiyi[x][y]=1;
}
break;
}
if(ch[x][y]==c)
{
if(!flag)
{
jiyi[dex][dey]=1;
}
break;
}
}
}
int show(char ch[][8],char color)
{
int i,j,n=0,flag=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(ch[i][j]!='-' && ch[i][j]!=color)
{
jian(ch,color,i,j,0);
jian(ch,color,i,j,2);
jian(ch,color,i,j,4);
jian(ch,color,i,j,6);
}
}
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(jiyi[i][j])
{
printf("(%d,%d) ",i+1,j+1);
n=1;
}
}
}
if(!n)
printf("No legal move.\n");
else
printf("\n");
return n;
}
void move(char ch[][8],char a[],char color)
{
int i,j,x,y,black=0,white=0;
x=a[0]-'0';y=a[1]-'0';
for(i=0;i<=6;i=i+2)
{
bian(ch,color,x-1,y-1,i);
}
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
if(ch[i][j]=='B')
black++;
if(ch[i][j]=='W')
white++;
}
printf("black - %2d white - %2d\n",black,white);
}
int main()
{
int n,i,j,boo;
char c,a[2]={0},color;
scanf("%d",&n);
getchar();
while(n--)
{
memset(jiyi,0,sizeof(jiyi));
for(i=0;i<8;i++)
{
gets(ch[i]);
}
color=getchar();
getchar();
while((c=getchar())!='Q')
{
if(c=='L')
{
boo=show(ch,color);
getchar();
}
else
{
if(!boo)
{
if(color=='B')
color='W';
else
color='B';
}
a[0]=getchar();
a[1]=getchar();
getchar();
move(ch,a,color);
memset(jiyi,0,sizeof(jiyi));
if(color=='B')
color='W';
else
color='B';
}
}
getchar();
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
printf("%c",ch[i][j]);
}
printf("\n");
}
}
return 0;
}