UVA220 黑白棋

思路比较简单;
代码比较简单;
#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值