c语言国际象棋(带王车易位判定)

将每个棋子按下列编号

#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啊,唠嗑啊,点赞啊,之后出注释:)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值