习题4-3

#include<cstdio>
#include<cstring>
int board[9][9];
int boardCopy[9][9];
int color;
bool judge(int row,int col);
void commandQ(){
	for(int i=1;i<9;i++)
		for(int j=1;j<9;j++){
			if(board[i][j]==1) printf("W");
			else if(board[i][j]==-1) printf("B");
			else if(board[i][j]==0) printf("-");

			if(j==8) printf("\n");
		}
		printf("\n");
}
void commandL(){
	memset(boardCopy,0,sizeof(board));
	int OK=0;
	for(int i=1;i<9;i++)
		for(int j=1;j<9;j++)
			if(judge(i,j)) { OK=1;boardCopy[i][j]=1;}
	if(OK){
		int cnt=0;
	for(int i=1;i<9;i++)
		for(int j=1;j<9;j++)
			if( boardCopy[i][j]==1) {
				cnt++;
				if(cnt==1)printf("(%d,%d)",i,j);
				else printf(" (%d,%d)",i,j);
			}
	}
	else printf("No legal move.");
		
	printf("\n");
}
void change(int row,int col){
	
	for(int i=-1;i<2;i++)
		for(int j=-1;j<2;j++)
			if(row+i<9&&row+i>0&&col+j<9&&col+j>0)//not out
				if(i!=0||j!=0)//not same point
					if(board[row+i][col+j]+color==0){
						int r=row+i;int c=col+j;
						int OK=board[r][c];
						while(r>0&&r<9&&c>0&&c<9&&OK!=0){
							if(board[r][c]+OK==0){
								OK=0;
								int m=row,y=col;
								for( ;m!=r||y!=c;m+=i,y+=j)
									board[m][y]=color;
							}
							if(board[r][c]==0) break;
							r+=i; c+=j;
						}
					}
}


void commandM(){
	int r,c;
	scanf("%d",&r);
	c=r%10;
	r=r/10;

	
	int OK=0;
	for(int i=1;i<9;i++)
		for(int j=1;j<9;j++)
			if(judge(i,j))  OK=1;
	
	if(OK){
		change(r,c);
		color=0-color;
	}
	else {
		color=0-color;
		change(r,c);
		color=0-color;
	}
	int cntB=0,cntW=0;
	for(int i=1;i<9;i++)
		for(int j=1;j<9;j++)
			if(board[i][j]==1) cntW++;
			else if(board[i][j]==-1) cntB++;

	printf("Black - %2d White - %2d\n",cntB,cntW);
}
void input(int i){
	char s[9];
	scanf("%s\n",s);
	for(int j=0;j<8;j++)
		if(s[j]=='B') board[i][j+1]=-1;
		else if(s[j]=='W') board[i][j+1]=1;
}
bool judge(int row,int col){
	for(int i=-1;i<2;i++)
		for(int j=-1;j<2;j++)
			if(row+i<9&&row+i>0&&col+j<9&&col+j>0&&board[row][col]==0)//not out
				if(i!=0||j!=0)//not same point
					if(board[row+i][col+j]+color==0){//the different color
						int r=row+i,c=col+j;
						int OK=board[r][c];
						while(r>0&&r<9&&c>0&&c<9&&OK!=0){
							if(board[r][c]+OK==0) OK=0;
							if(board[r][c]==0) break;
							r+=i;
							c+=j;
						}
						if(!OK) return 1;
					}
					return 0;							
}
int main(){
	int t;//the number of games

	//freopen("D:\\in.txt","r",stdin);
	//freopen("D:\\out.txt","w",stdout);

	scanf("%d",&t);
	for(int a=0;a<t;a++){
		printf("/n");
		memset(board,0,sizeof(board));
		
		for(int i=1;i<9;i++)
		input(i);		//finish the input

		

	char c;
	scanf("%c",&c);
	if(c=='W') color=1;
	else if(c=='B') color=-1;
	
	//change(3,5);
	/*printf("\njudge(1 1)=%d\n",judge(1,1));
	printf("\ncolor=%d",color);*/

	while(scanf("%c",&c)){
		if (c=='Q') { commandQ(); break;}
		else if(c=='L') commandL();
		else if(c=='M') commandM();
	}
	}
	return 0;
}
posted @ 2019-02-03 09:24  少年留不住  阅读(126)  评论(0编辑  收藏  举报