#2有问题,哪位大佬帮忙调一下,谢谢
查看原帖
#2有问题,哪位大佬帮忙调一下,谢谢
750862
yxyaiunn楼主2024/8/21 16:40
#include <cstdio>
using namespace std;
int game_over=0,red_captain=0,blue_captain=0;
int m[15][15]={
	{1,2,3,4,5,4,3,2,1},
	{0,0,0,0,0,0,0,0,0},
	{6,0,0,0,0,0,0,0,6},
	{7,0,7,0,7,0,7,0,7},	
	{0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0},
	{7,0,7,0,7,0,7,0,7},
	{6,0,0,0,0,0,0,0,6},
	{0,0,0,0,0,0,0,0,0},
	{1,2,3,4,5,4,3,2,1},
};
int v[15][15]={
	{1,1,1,1,1,1,1,1,1},
	{0,0,0,0,0,0,0,0,0},
	{1,0,0,0,0,0,0,0,1},
	{1,0,1,0,1,0,1,0,1},	
	{0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0},
	{2,0,2,0,2,0,2,0,2},
	{2,0,0,0,0,0,0,0,2},
	{0,0,0,0,0,0,0,0,0},
	{2,2,2,2,2,2,2,2,2},
};
void print(int player,int op){
	if(player==0){
		printf("red ");
	}else{
		printf("blue ");
	}
	if(op==1){
		printf("car");
	}else if(op==2){
		printf("horse");
	}else if(op==3){
		printf("elephant");
	}else if(op==4){
		printf("guard");
	}else if(op==5){
		printf("captain");
	}else if(op==6){
		printf("duck");
	}else{
		printf("soldier");
	}
	printf(";");
}
void captain_flag(int player){
	if(player==0){
		red_captain=1;
	}else{
		blue_captain=1;
	}
}
bool will_kill_captain(int x,int y,int player,int op){
	if(op==1){
		int flag=0,kill=0;
		for(int i=y-1;i>=0;i--){
			if(v[x][i]){
				flag=1;
				if(m[x][i]==5&&v[x][i]!=player+1){
					kill=1;
					flag=0;
				}
				break;
			}
		}
		if(kill==1) return true;
		flag=0;
		kill=0;		
		for(int i=y+1;i<9;i++){
			if(v[x][i]){
				flag=1;
				if(m[x][i]==5&&v[x][i]!=player+1){
					kill=1;
					flag=0;
				}
				break;
			}
		}
		if(kill==1) return true;
		flag=0;
		kill=0;		
		for(int i=x-1;i>=0;i--){
			if(v[i][y]){
				flag=1;/*print_in_Chinese(m[i][y],v[i][y]-1);*/
				if(m[i][y]==5&&v[i][y]!=player+1){
					kill=1;
					flag=0;
				}
				break;
			}
		}//printf("1111");
		if(kill==1) return true;
		flag=0;
		kill=0;
		for(int i=x+1;i<=9;i++){
			if(v[i][y]){
				flag=1;
				if(m[i][y]==5&&v[i][y]!=player+1){
					kill=1;
					flag=0;
				}
				break;
			}
		}		
		if(kill==1) return true;	
		return false;	
	}else if(op==2){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){
				if(x+xx*2>=0&&x+xx*2<10&&y+yy>=0&&y+yy<9){
					if(m[x+xx*2][y+yy]==5&&!v[x+xx][y]&&v[x+xx*2][y+yy]!=player+1) return true;
				}else if(x+xx>=0&&x+xx<10&&y+yy*2>=0&&y+yy*2<9){
					if(m[x+xx][y+yy*2]==5&&!v[x][y+yy]&&v[x+xx][y+yy*2]!=player+1) return true;
				}
			}
		}	
		return false;
	}else if(op==3){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){	
				if(x+xx*2>=0&&x+xx*2<10&&y+yy*2>=0&&y+yy*2<9){
					if(!v[x+xx][y+yy]&&m[x+xx*2][y+yy*2]==5&&v[x+xx*2][y+yy*2]!=player+1){
						return true;
					}
				}			
			}
		}
		return false;			
	}else if(op==4){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){	
				if(x+xx>=0&&x+xx<10&&y+yy>=0&&y+yy<9){
					if(m[x+xx][y+yy]==5&&v[x+xx][y+yy]!=player+1) return true;
				}			
			}
		}
		return false;			
	}else if(op==5){
		for(int xx=-1;xx<=1;xx++){
			for(int yy=-1;yy<=1;yy++){	
				if(xx==0&&yy==0) continue;
				if(xx==0||yy==0){
					if(x+xx>=0&&x+xx<10&&y+yy>=0&&y+yy<9){
						if(m[x+xx][y+yy]==5&&v[x+xx][y+yy]!=player+1) return true;
					}
				}			
			}
		}
		return false;				
	}else if(op==6){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){
				if(x+xx*3>=0&&x+xx*3<10&&y+yy*2>=0&&y+yy*2<9){
					if(v[x+xx*2][y+yy]||v[x+xx][y]) continue;
					if(m[x+xx*3][y+yy*2]==5&&v[x+xx*3][y+yy*2]!=player+1) return true;
				}else if(x+xx*2>=0&&x+xx*2<10&&y+yy*3>=0&&y+yy*3<9){
					if(v[x+xx][y+yy*2]||v[x][y+yy]) continue;
					if(m[x+xx*2][y+yy*3]==5&&v[x+xx*2][y+yy*3]!=player+1) return true;
				}
			}
		}	
		return false;				
	}else{
		for(int xx=-1;xx<=1;xx++){
			for(int yy=-1;yy<=1;yy++){	
				if(xx==0&&yy==0) continue;
				if(x+xx>=0&&x+xx<10&&y+yy>=0&&y+yy<9){
					if(m[x+xx][y+yy]==5&&v[x+xx][y+yy]!=player+1) return true;
				}		
			}
		}
		return false;				
	}	
}
int captain_num(int player){
	if(player==0){
		return red_captain;
	}else{
		return blue_captain;
	}
}
bool chess_move(int sx,int sy,int ex,int ey,int player){
	if(m[sx][sy]==1){
		if(sx!=ex&&sy!=ey) return false;
		if(sx==ex){
			int flag=0;
			if(sy<ey){
				for(int i=sy+1;i<ey;i++){
					if(v[sx][i]){
						flag=1;
						break;
					}
				}
				if(flag==1) return false;
				print(player,m[sx][sy]);
				if(m[ex][ey]){
					print(player^1,m[ex][ey]);
				}else{
					printf("NA;");
				}
				red_captain=0;
				blue_captain=0;					
				int a1=v[ex][ey];
				int a2=m[ex][ey];
				int a3=v[sx][sy];
				int a4=m[sx][sy];
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				for(int i=0;i<10;i++){
					for(int j=0;j<9;j++){
						if(m[i][j]){
							if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
								captain_flag((v[i][j]-1)^1);
							}
						}
					}
				}
				v[ex][ey]=a1;
				m[ex][ey]=a2;
				v[sx][sy]=a3;
				m[sx][sy]=a4;				
				if(m[ex][ey]==5){
					game_over=1;
					printf("no;yes");
				}else{
					if(will_kill_captain(ex,ey,player,m[sx][sy])){
						captain_flag(player^1);
						printf("yes;");
					}else if(captain_num(player)||captain_num(player^1)){
						printf("yes;");
					}else{
						printf("no;");
					}
					printf("no");
				}
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				return true;			
			}else{
				for(int i=sy-1;i>ey;i--){
					if(v[sx][i]){
						flag=1;
						break;
					}
				}
				if(flag==1) return false;
				print(player,m[sx][sy]);
				if(m[ex][ey]){
					print(player^1,m[ex][ey]);
				}else{
					printf("NA;");
				}
				red_captain=0;
				blue_captain=0;					
				int a1=v[ex][ey];
				int a2=m[ex][ey];
				int a3=v[sx][sy];
				int a4=m[sx][sy];
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				for(int i=0;i<10;i++){
					for(int j=0;j<9;j++){
						if(m[i][j]){
							if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
								captain_flag((v[i][j]-1)^1);
							}
						}
					}
				}
				v[ex][ey]=a1;
				m[ex][ey]=a2;
				v[sx][sy]=a3;
				m[sx][sy]=a4;					
				if(m[ex][ey]==5){
					game_over=1;
					printf("no;yes");
				}else{
					if(will_kill_captain(ex,ey,player,m[sx][sy])){
						captain_flag(player^1);
						printf("yes;");
					}else if(captain_num(player)||captain_num(player^1)){
						printf("yes;");
					}else{
						printf("no;");
					}
					printf("no");
				}
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				return true;				
			}
		}else if(sy==ey){
			int flag=0;
			if(sx<ex){
				for(int i=sx+1;i<ex;i++){
					if(v[i][sy]){
						flag=1;
						break;
					}
				}
				if(flag==1) return false;
				print(player,m[sx][sy]);
				if(m[ex][ey]){
					print(player^1,m[ex][ey]);
				}else{
					printf("NA;");
				}
				red_captain=0;
				blue_captain=0;					
				int a1=v[ex][ey];
				int a2=m[ex][ey];
				int a3=v[sx][sy];
				int a4=m[sx][sy];
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				for(int i=0;i<10;i++){
					for(int j=0;j<9;j++){
						if(m[i][j]){
							if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
								captain_flag((v[i][j]-1)^1);
							}
						}
					}
				}
				v[ex][ey]=a1;
				m[ex][ey]=a2;
				v[sx][sy]=a3;
				m[sx][sy]=a4;							
				if(m[ex][ey]==5){
					game_over=1;
					printf("no;yes");
				}else{
					if(will_kill_captain(ex,ey,player,m[sx][sy])){
						captain_flag(player^1);
						printf("yes;");
					}else if(captain_num(player)||captain_num(player^1)){
						printf("yes;");
					}else{
						printf("no;");
					}
					printf("no");
				}					
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				return true;		
			}else{
				for(int i=sx+1;i<ex;i++){
					if(v[i][sy]){
						flag=1;
						break;
					}
				}
				if(flag==1) return false;
				print(player,m[sx][sy]);
				if(m[ex][ey]){
					print(player^1,m[ex][ey]);
				}else{
					printf("NA;");
				}
				red_captain=0;
				blue_captain=0;					
				int a1=v[ex][ey];
				int a2=m[ex][ey];
				int a3=v[sx][sy];
				int a4=m[sx][sy];
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				for(int i=0;i<10;i++){
					for(int j=0;j<9;j++){
						if(m[i][j]){
							if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
								captain_flag((v[i][j]-1)^1);
							}
						}
					}
				}
				v[ex][ey]=a1;
				m[ex][ey]=a2;
				v[sx][sy]=a3;
				m[sx][sy]=a4;							
				if(m[ex][ey]==5){
					game_over=1;
					printf("no;yes");
				}else{
					if(will_kill_captain(ex,ey,player,m[sx][sy])){
						captain_flag(player^1);
						printf("yes;");
					}else if(captain_num(player)||captain_num(player^1)){
						printf("yes;");
					}else{
						printf("no;");
					}
					printf("no");
				}					
				v[ex][ey]=player+1;
				m[ex][ey]=m[sx][sy];
				v[sx][sy]=0;
				m[sx][sy]=0;
				return true;
			}
		}
	}else if(m[sx][sy]==2){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){
				if(sx+xx*2==ex&&sy+yy==ey){
					if(v[sx+xx][sy]) return false;
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;
					blue_captain=0;						
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;					
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}									
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}else if(sx+xx==ex&&sy+yy*2==ey){
					if(v[sx][sy+yy]) return false;
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;
					blue_captain=0;						
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;					
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}									
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}
			}
		}	
		return false;
	}else if(m[sx][sy]==3){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){	
				if(sx+xx*2==ex&&sy+yy*2==ey){
					if(v[sx+xx][sy+yy]) return false;
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;
					blue_captain=0;						
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;//printf("\n");
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){//print_in_Chinese(m[i][j],v[i][j]-1);
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}//printf("\n");
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;					
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}									
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}				
			}
		}
		return false;			
	}else if(m[sx][sy]==4){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){	
				if(sx+xx==ex&&sy+yy==ey){
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;
					blue_captain=0;					
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;//printf("\n");
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){//print_in_Chinese(m[i][j],v[i][j]-1);
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}//printf("\n");
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;					
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}									
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}			
			}
		}
		return false;			
	}else if(m[sx][sy]==5){
		for(int xx=-1;xx<=1;xx++){
			for(int yy=-1;yy<=1;yy++){	
				if(xx==0&&yy==0) continue;
				if(xx==0||yy==0){
					if(sx+xx==ex&&sy+yy==ey){
						print(player,m[sx][sy]);
						if(m[ex][ey]){
							print(player^1,m[ex][ey]);
						}else{
							printf("NA;");
						}	
						red_captain=0;
						blue_captain=0;
						int a1=v[ex][ey];
						int a2=m[ex][ey];
						int a3=v[sx][sy];
						int a4=m[sx][sy];
						v[ex][ey]=player+1;
						m[ex][ey]=m[sx][sy];
						v[sx][sy]=0;
						m[sx][sy]=0;//printf("\n");
						for(int i=0;i<10;i++){
							for(int j=0;j<9;j++){
								if(m[i][j]){//print_in_Chinese(m[i][j],v[i][j]-1);
									if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
										captain_flag((v[i][j]-1)^1);
									}
								}
							}//printf("\n");
						}
						v[ex][ey]=a1;
						m[ex][ey]=a2;
						v[sx][sy]=a3;
						m[sx][sy]=a4;
						if(m[ex][ey]==5){
							game_over=1;
							printf("no;yes");
						}else{
							if(will_kill_captain(ex,ey,player,m[sx][sy])){
								captain_flag(player^1);
								printf("yes;");
							}else if(captain_num(player)||captain_num(player^1)){
								printf("yes;");
							}else{
								printf("no;");
							}
							printf("no");
						}							
						v[ex][ey]=player+1;
						m[ex][ey]=m[sx][sy];
						v[sx][sy]=0;
						m[sx][sy]=0;
						return true;
					}
				}			
			}
		}
		return false;				
	}else if(m[sx][sy]==6){
		for(int xx=-1;xx<=1;xx+=2){
			for(int yy=-1;yy<=1;yy+=2){
				if(sx+xx*3==ex&&sy+yy*2==ey){
					if(v[sx+xx*2][sy+yy]||v[sx+xx][sy]) return false;
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;
					blue_captain=0;						
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){//print_in_Chinese(m[i][j],v[i][j]-1);
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}//printf("\n");
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;					
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}								
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}else if(sx+xx*2==ex&&sy+yy*3==ey){
					if(v[sx+xx][sy+yy*2]||v[sx][sy+yy]) return false;
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;/*printf("2.17\n");*/
					blue_captain=0;							
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;//printf("\n");
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){//print_in_Chinese(m[i][j],v[i][j]-1);
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}//printf("\n");
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;							
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}								
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}
			}
		}	
		return false;				
	}else{
		for(int xx=-1;xx<=1;xx++){
			for(int yy=-1;yy<=1;yy++){	
				if(xx==0&&yy==0) continue;
				if(sx+xx==ex&&sy+yy==ey){
					print(player,m[sx][sy]);
					if(m[ex][ey]){
						print(player^1,m[ex][ey]);
					}else{
						printf("NA;");
					}
					red_captain=0;
					blue_captain=0;							
					int a1=v[ex][ey];
					int a2=m[ex][ey];
					int a3=v[sx][sy];
					int a4=m[sx][sy];
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;//printf("\n");
					for(int i=0;i<10;i++){
						for(int j=0;j<9;j++){
							if(m[i][j]){//print_in_Chinese(m[i][j],v[i][j]-1);
								if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
									captain_flag((v[i][j]-1)^1);
								}
							}
						}//printf("\n");
					}
					v[ex][ey]=a1;
					m[ex][ey]=a2;
					v[sx][sy]=a3;
					m[sx][sy]=a4;					
					if(m[ex][ey]==5){
						game_over=1;
						printf("no;yes");
					}else{
						if(will_kill_captain(ex,ey,player,m[sx][sy])){
							captain_flag(player^1);
							printf("yes;");
						}else if(captain_num(player)||captain_num(player^1)){
							printf("yes;");
						}else{
							printf("no;");
						}
						printf("no");
					}						
					v[ex][ey]=player+1;
					m[ex][ey]=m[sx][sy];
					v[sx][sy]=0;
					m[sx][sy]=0;
					return true;
				}	
			}
		}
		return false;				
	}
}
bool check(int sx,int sy,int ex,int ey,int player){
	if(game_over==1) return false;
	if(sx==ex&&sy==ey) return false;
	if(sx<0||sy<0||sx>=10||sy>=9||ex<0||ey<0||ex>9||ey>8) return false;
	if(v[sx][sy]!=player+1) return false;
	if(v[ex][ey]==player+1) return false;
	return chess_move(sx,sy,ex,ey,player);
}
void play(int sx,int sy,int ex,int ey,int &player){
	if(check(sx,sy,ex,ey,player)==false){
		printf("Invalid command");
		player^=1;
	}
	printf("\n");
}
int main(){
	int q;
	scanf("%d",&q);
	int player=0;
	while(q--){
		int sx,sy,ex,ey;
		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
		play(sx,sy,ex,ey,player);
		player^=1;
	}
	return 0;
}
2024/8/21 16:40
加载中...