C语言象棋小程序1.0版(def C++版)

Posted 红芝鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言象棋小程序1.0版(def C++版)相关的知识,希望对你有一定的参考价值。

做了一周,用def C++搞了个实现双人对抗的象棋小程序,泻药,已经是在笑带学生惹。欢迎白嫖,欢迎各位大佬指点问题,欢迎提问😀😀,原理是用一个二维数组当棋盘,玩家输入来控制棋子的移动,下棋方式是输入两个坐标,用逗号隔开,系统判断输入的位置是否符合该棋子的移动逻辑。胜利条件是吃掉对方的将,演示如下

开局先输入两位玩家的名字,准备好了输入1就开始游戏,输入0还能重新更改名字(这里不演示了),第二位输入的玩家先手,当然也可以在开始游戏的时候输入‘q’ ,先手的玩家自动跳过一回合,轮到下一位玩家开始下棋

 棋盘显示棋子种类个数,以及谁的回合,控制的是哪一方的棋子比较直观显示出来

  输入的格式如下,比如我(帥阵营)开局想炮二平五(架中炮)应该这样输入

从8行2列坐标,移动到8行5列坐标(注意!!不支持中文逗号)。此时棋盘是这样的,其实我也想做炮二平五的中文输入...下次一定吧,等1.1版本呗(说真的       

 而在二维数组中的储存是这样的

 我做了一个debug的函数可以随时把这个二维数组输出出来,主要作用还是在开发的时候看看坐标有没有错,棋子是否移动了位置而又发出警报,移动位置有没有到达预期之类的错误

这个debug函数主要作用,把这个二维数组的储存的字符串都输出出来,原理如下:

int debug(int size1,char size[size1+1][size1])//测试函数 
{
	int i,j;//行列 
	for(i=0;i<10;i++)//棋盘行 
	{
	for(j=0;j<9;j++)//棋盘列 
	{
	printf("%c ",size[i][j]);
    }
    printf("\\n");
	}
}

 而输出到棋盘上,还要进行美化,美化的部分结构方法如下:

 原理就是,打个比方,我检测到了这里有一粒石头,于是我向上面报告说这里有一块大蛋糕,这样,原本不好看的东西,就因为我们而让他变好看了。

红芝鸟玩家跳马

 答火鸡玩家也跳马,注意,虽然傌在行为10的坐标,此时输入会多出来一个三位数,但是这是没问题的,演示如下

系统会自动分辨出坐标是几位数,并作出判断你想要移动的方式

 吃子的判定如下,先让对面方跳个象

稍微提一下,每个棋子我都做了相应的移动限制,不合理的移动会有提示的

 炮吃兵(这里只是作为演示,现实中可别这样学我下棋)输入演示如下

棋盘变化如下

 此时下方棋子数也跟着变少了

此时将军了是吧,此时我们让红鸟玩家走一步闲棋来进行我们的胜利判定

 

OK已经胜利了,此时输入1,重新开始一局新游戏,输入0结束游戏

这里就不展开了,代码如下,欢迎白嫖😀,有问题也欢迎一起讨论丫

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct Player//定义玩家信息 
{
	char name[16];//姓名 
	int coinCount;//棋子数量 
	int s;//将,士,象,马,炮,车 ,兵
	int i;
	int x;
	int m;
	int c;
	int p;
	int b;
	int first;//先手后手 
	int camp;//阵营,将,帥 
}play;

    play Player[2];//定义两个玩家 
	char size[10][9];//定义b p c m x i s 棋子的棋盘 

int main()
{	
	printf("-----欢迎使用象棋小程序-----\\n");

	int sizePu(int size1,char size[size1+1][size1]);//输出当前棋盘 
	int sizeNew(int size1,char size[size1+1][size1]);//新棋盘 
	int sizeCol(int size1,char size[size1+1][size1],char coin[10]);//下棋控制的棋子 
	int length(char coin[]);//判断长度的方法 
	int camps(int i);//判断阵营 
	
	int i,j;//临时变量 行,列 
	
	for(i=0;i<2;i++)//输入姓名,开始游戏 
    {
    	printf("请输入第%d位玩家姓名:",i+1);
    	scanf("%s",Player[i].name);
    	printf("%s玩家做好准备!!\\n\\n",Player[i].name);
	}
	
	//区分阵营 
	Player[0].camp=0;//将 
	Player[1].camp=1;//帥 
	
	do{//做开始游戏准备 
		i=0;
		printf("------现在开始游戏吗?(1 or 0)------\\n");
		scanf("%d",&i);
		if(i==0)
		{
		for(j=0;j<2;j++)//输入姓名,开始游戏 
        {
    	printf("\\n请重新输入第%d位玩家姓名:",j+1);
    	scanf("%s",Player[j].name);
    	printf("%s玩家做好准备!!\\n\\n",Player[j].name);
    	Player[j].coinCount=16;
	    }
		}
		else if(i!=1&&i!=0)printf("请重新输入\\n"); 
	  }while(i!=1);
	printf("------------------------首局--------------------------\\n\\n"); 
    	
	//int debug(int size1,char size[size1+1][size1]);//测试函数 
	//debug(9,size);//测试函数 
	
	int star=0;//游戏进行条件 
	int player=1;//1,2玩家循环输入 
	char coin[10];//玩家输入 
	int trans;//交换先后手 
	int p1=0,p2=0;//游戏比分
	int game=0;//游戏局数 
	
	printf("\\n--------------------%s玩家先手----------------------\\n",Player[player].name);
	Player[0].first=0;//先手1,后手0
	Player[1].first=1;//先手1,后手0
	
	sizeNew(9,size);//整理棋盘 
	sizePu(9,size);//输出棋盘 
	
	
	do{//比赛判断 
	   printf("\\n%s玩家回合\\n",Player[player].name);//下棋开始 
	   
	   printf("你的棋局是:");//局势判断 
	   camps(Player[player].camp);//判断阵营 
	   printf("\\n你的步骤为(上步坐标,下步坐标):");//输入提示 
	   scanf("%s",coin);//读取玩家输入 
	   
	   if(coin[0]=='q')//跳过这个玩家的回合 Debug快速下棋用 
	   {
	   	camps(Player[player].camp);//判断阵营 
	   	printf("玩家跳过本回合下一步\\n");
	   	player++; 
	     if(player==2)//使player循环,1,2玩家 
	     player=0;
	     
	   trans=Player[0].first;
	   Player[0].first=Player[1].first;
	   Player[1].first=trans;//交换1,2玩家先后顺序,全局变量 
	   sizePu(9,size);//输出棋盘  
	   	continue;
	   }
	   
	   
	   if(length(coin)<5||length(coin)>7)
	   {
	   	printf("\\n请重新输入\\n");
	   	continue;
	   }
	   if(sizeCol(9,size,coin)==1)//下棋控制的棋子)
	   {
	   	printf("坐标出错,请重新输入\\n");
	   	continue;
	   }
	   
	   
	   
	   player++;
	   if(player==2)//使player循环,1,2玩家 
	   player=0;
	   
	   trans=Player[0].first;
	   Player[0].first=Player[1].first;
	   Player[1].first=trans;//交换1,2玩家先后顺序,全局变量 
	   
	   
	   sizePu(9,size);//输出棋盘 
	   
	   for(i=0;i<2;i++)//判断胜负 
	   {
	   	if(Player[i].s==0)//将被吃了 
		   {
		   	sizePu(9,size);//输出棋盘
		   	if(i==0)//帥 
		   	{
		   	//Player[i].camp=3;
		   	//Player[i+1].camp=1;
		   	printf("\\n\\n----------------------%s玩家胜利----------------------\\n\\n",Player[i+1].name);	
			}
		   
		   	else if(i==1)//将 
		   	{
		   	//Player[i].camp=2;
		   	//Player[i-1].camp=0;
		   	printf("\\n\\n----------------------%s玩家胜利----------------------\\n\\n",Player[i-1].name);	
			}
		   	
 
		   	
		   	game+=1;//玩了一把游戏 
		   	
		   	printf("\\n-------------------------是否继续游戏?-------------------------\\n");
		   	printf("\\n------------------- 1         or         0 ---------------------\\n");
		   	
		   	int k=0;//判断输入合法性
		   	do{
		   	scanf("%s",coin);//读取玩家输入
		   	if(coin[0]=='1')//开始新回合
	        {
	         k=1; 
	   	     sizeNew(9,size);//整理棋盘
	   	     sizePu(9,size);//输出棋盘
	        }
	        else if(coin[0]=='0')
			 {
			 	k=1;
			 	printf("游戏结束");
				star=1;
			 }
			 else 
			 printf("\\n请重新输入:");
			 }while(k!=1);
		   	
		   }
	   }
	   
	  }while(star!=1);//游戏结束 
      printf("\\n感谢你的游玩");
	
	return 0;
}

int sizeNew(int size1,char size[size1+1][size1])//新棋盘的布局 
{
	int i,j;//行,列 

	for(i=0;i<10;i++)
	{
	for(j=0;j<9;j++)
	{
		switch(i)
		{
			case 0:
				{
					//玩家1
					switch(j)
					{//车,马,象,士,帅,士,象,马,车 (第1排 
						case 0:size[i][j]='c';
						break; 
						case 1:size[i][j]='m';
						break; 
						case 2:size[i][j]='x';
						break; 
						case 3:size[i][j]='i';
						break; 
						case 4:size[i][j]='s';
						break; 
						case 5:size[i][j]='i';
						break; 
						case 6:size[i][j]='x';
						break; 
						case 7:size[i][j]='m';
						break; 
						case 8:size[i][j]='c';
					}break;
				}
			case 2:
				{
				    switch(j)
					{//炮(第2排 
						case 1:size[i][j]='p';
						break; 
						case 7:size[i][j]='p';
						break; 
						default:size[i][j]='+'; 
						
					}	
				}break; 
			case 3:
			    {
			    	switch(j)
					{//兵(第4排 
						case 0:size[i][j]='b';
						break; 
						case 2:size[i][j]='b';
						break; 
						case 4:size[i][j]='b';
						break; 
						case 6:size[i][j]='b';
						break; 
						case 8:size[i][j]='b';
						break; 
						default:size[i][j]='+'; 
					}	
				}break;
				//玩家2 
			case 6:
			    {
			    	switch(j)
					{//兵(第6排 
						case 0:size[i][j]='B';
						break; 
						case 2:size[i][j]='B';
						break; 
						case 4:size[i][j]='B';
						break; 
						case 6:size[i][j]='B';
						break; 
						case 8:size[i][j]='B';
						break; 
						default:size[i][j]='+'; 
					}	
				}break; 
			case 7:
				{
				    switch(j)
					{//炮(第7排 
						case 1:size[i][j]='P';
						break; 
						case 7:size[i][j]='P';
						break; 
						default:size[i][j]='+'; 
					}	
				}break; 
			case 9:
				{
					//玩家1
					switch(j)
					{//车,马,象,士,帅,士,象,马,车 (第9排 
						case 0:size[i][j]='C';
						break; 
						case 1:size[i][j]='M';
						break; 
						case 2:size[i][j]='X';
						break; 
						case 3:size[i][j]='I';
						break; 
						case 4:size[i][j]='S';
						break; 
						case 5:size[i][j]='I';
						break; 
						case 6:size[i][j]='X';
						break; 
						case 7:size[i][j]='M';
						break; 
						case 8:size[i][j]='C';
					}break; 
				}
				default:size[i][j]='+'; 
		}
	}	
	}
} 

int sizePu(int size1,char size[size1+1][size1])//输出当前棋盘 ,美化输出 
{
	
	int i,j;//行,列 
	int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	
	first=sizes();//判断谁先手
	later=sizee();//判断谁后手
	
	for(i=0;i<2;i++)//清空输入 
	{
		Player[i].coinCount=0;//将,士,象,马,炮,车 ,兵
    	Player[i].s=0;
		Player[i].i=0;
		Player[i].x=0;
		Player[i].m=0;
		Player[i].c=0;
		Player[i].p=0;
		Player[i].b=0;	
	}

	if((Player[first].camp==0)||(Player[first].camp==2))//将 
	{
	printf("|");
    for(i=0;i<9;i++)
	{
	printf("---%d--",i+1);
	}
	printf("|\\n");//1-9坐标位置 	 
	
	for(i=0;i<10;i++)
	{
	printf("|");
	for(j=0;j<9;j++)
	{
		switch(size[i][j])
		{//黑棋 
			case 'b':printf("-(卒)-");Player[first].b+=1;break;
			case 'p':printf("-(砲)-");Player[first].p+=1;break;
			case 'c':printf("-(車)-");Player[first].c+=1;break;
			case 'm':printf("-(馬)-");Player[first].m+=1;break;
			case 'x':printf("-(象)-");Player[first].x+=1;break;
			case 'i':printf("-(士)-");Player[first].i+=1;break;
			case 's':printf("-(将)-");Player[first].s+=1;break;
		//红棋
			case 'B':printf("-(兵)-");Player[later].b+=1;break;
			case 'P':printf("-(炮)-");Player[later].p+=1;break;
			case 'C':printf("-(车)-");Player[later].c+=1;break;
			case 'M':printf("-(傌)-");Player[later].m+=1;break;
			case 'X':printf("-(相)-");Player[later].x+=1;break;
			case 'I':printf("-(仕)-");Player[later].i+=1;break;
			case 'S':printf("-(帥)-");Player[later].s+=1;break;
			default: printf("---%c--",size[i][j]);
		}	
	}
		printf("|%d\\n",i+1);
		if(i<9&&i!=4)
		{
		printf("|   |     |     |     |     |     |     |     |     |  |\\n");//棋盘 
		printf("|   |     |     |     |     |     |     |     |     |  |\\n");
		}
		else if(i==4)
	    {
		printf("|   |         楚河          |          汉界         |  |\\n");//棋盘
		printf("|   |                       |                       |  |\\n");
		}
		
	}
	printf("|");
    for(i=0;i<9;i++)
	{
		printf("---%d--",i+1);
	}
	printf("|\\n");//1-9坐标位置 
	//输出棋子个数量 
	printf("\\n%d将,%d士,%d象,%d車,%d馬,%d砲,%d卒\\n",
	Player[first].s,Player[first].i,Player[first].x,
	Player[first].c,Player[first].m,Player[first].p,Player[first].b);
	printf("\\n%d帥,%d仕,%d相,%d车,%d傌,%d炮,%d兵\\n",
    Player[later].s,Player[later].i,Player[later].x,
	Player[later].c,Player[later].m,Player[later].p,Player[later].b);
	}
	
	else if((Player[first].camp==1)||(Player[first].camp==3))//帥 
	{
	printf("|");
    for(i=0;i<9;i++)
	{
	printf("---%d--",i+1);
	}
	printf("|\\n");//1-9坐标位置 	 
	
	for(i=0;i<10;i++)
	{
	printf("|");
	for(j=0;j<9;j++)
	{
		switch(size[i][j])
		{//黑棋 
			case 'b':printf("-(卒)-");Player[later].b+=1;break;
			case 'p':printf("-(砲)-");Player[later].p+=1;break;
			case 'c':printf("-(車)-");Player[later].c+=1;break;
			case 'm':printf("-(馬)-");Player[later].m+=1;break;
			case 'x':printf("-(象)-");Player[later].x+=1;break;
			case 'i':printf("-(士)-");Player[later].i+=1;break;
			case 's':printf("-(将)-");Player[later].s+=1;break;
		//红棋
			case 'B':printf("-(兵)-");Player[first].b+=1;break;
			case 'P':printf("-(炮)-");Player[first].p+=1;break;
			case 'C':printf("-(车)-");Player[first].c+=1;break;
			case 'M':printf("-(傌)-");Player[first].m+=1;break;
			case 'X':printf("-(相)-");Player[first].x+=1;break;
			case 'I':printf("-(仕)-");Player[first].i+=1;break;
			case 'S':printf("-(帥)-");Player[first].s+=1;break;
			default: printf("---%c--",size[i][j]);
		}
		
	}
		printf("|%d\\n",i+1);
		if(i<9&&i!=4)
		{
		printf("|   |     |     |     |     |     |     |     |     |  |\\n");//棋盘 
		printf("|   |     |     |     |     |     |     |     |     |  |\\n");
		}
		else if(i==4)
	   {
		printf("|   |         楚河          |          汉界         |  |\\n");//棋盘
		printf("|   |                       |                       |  |\\n");
		}
		
	}
	printf("|");
    for(i=0;i<9;i++)
	{
		printf("---%d--",i+1);
	}
	printf("|\\n");//1-9坐标位置 
	//输出棋子个数量 
	printf("\\n%d帥,%d仕,%d相,%d车,%d傌,%d炮,%d兵\\n",
	Player[first].s,Player[first].i,Player[first].x,
	Player[first].c,Player[first].m,Player[first].p,Player[first].b);
	printf("\\n%d将,%d士,%d象,%d車,%d马,%d砲,%d卒\\n",
    Player[later].s,Player[later].i,Player[later].x,
	Player[later].c,Player[later].m,Player[later].p,Player[later].b);
	}
	
	 /* Player[i].coinCount=16;//将,士,象,马,炮,车 ,兵
    	Player[i].s=1;
		Player[i].i=2;
		Player[i].x=2;
		Player[i].m=2;
		Player[i].c=2;
		Player[i].p=2;
		Player[i].b=5;    */
	
	
}

int debug(int size1,char size[size1+1][size1])//测试函数 
{
	int i,j;
	for(i=0;i<10;i++)
	{
	for(j=0;j<9;j++)
	{
	printf("%c ",size[i][j]);
    }
    printf("\\n");
	}
}

int sizeCol(int size1,char size[size1+1][size1],char coin[10])//下棋控制的棋子 
{
	int x[3],y[3];//棋子的坐标
	int xy[2];//1,2坐标
	int i=0,j=0;//临时变量 
	
	int sizeMove(int size1,char size[size1+1][size1],int x[2]);//控制棋子的移动,x为两个坐标 
	
	if(1)
	{//判断输入是否合法 
	x[0]=0;x[1]=0,x[2]=0,y[1]=0,y[2]=0,y[0]=0;//置零 
	for(;i<3;i++)//对输入的读取 
	{
		switch(coin[i])
		{//记录前两个棋子 
		    case ',':break;
			case '0':x[i]=0;break;
			case '1':x[i]=1;break;
			case '2':x[i]=2;break;
			case '3':x[i]=3;break;
			case '4':x[i]=4;break;
			case '5':x[i]=5;break;
			case '6':x[i]=6;break;
			case '7':x[i]=7;break;
			case '8':x[i]=8;break;
			case '9':x[i]=9;break;
		}	
	}
	
	if(coin[2]!=',')//对i进行判断,是否处理完x的坐标 
	i=3;
	else i=2;
	
	for(;coin[i]!='\\0';i++)
	{
		switch(coin[i])
		{//记录后两个棋子 
		    case ',':break; 
			case '0':y[j]=0;j++;break;
			case '1':y[j]=1;j++;break;
			case '2':y[j]=2;j++;break;
			case '3':y[j]=3;j++;break;
			case '4':y[j]=4;j++;break;
			case '5':y[j]=5;j++;break;
			case '6':y[j]=6;j++;break;
			case '7':y[j]=7;j++;break;
			case '8':y[j]=8;j++;break;
			case '9':y[j]=9;j++;break;
		}
	}
	}
	
	printf("\\n玩家走棋:");
	if(x[2]==0&&x[0]!=0&&x[1]!=0)
	{
		printf("%d,%d—>",x[0],x[1]);//10初始的移动坐标
		xy[0]=x[0]*10+x[1];//让坐标变成2位数 
	}
    
    else if(x[1]==0&&x[0]==1&&x[2]!=0)
    {
    	printf("%d%d,%d—>",x[0],x[1],x[2]);//100初始的移动坐标
    	xy[0]=x[0]*100+x[1]*10+x[2];//让坐标变成2位数 
	}
     
    
    if(y[2]==0&&y[0]!=0&&y[1]!=0)
    {
    	printf("%d,%d\\n",y[0],y[1]);//10变化的移动坐标    
    	xy[1]=y[0]*10+y[1];//让坐标变成2位数 
	}
    
    else if(y[1]==0&&y[0]==1&&y[2]!=0)
    {
    	 printf("%d%d,%d\\n",y[0],y[1],y[2]);//100变化的移动坐标    
    	 xy[1]=y[0]*100+y[1]*10+y[2];//让坐标变成2位数
	}
   
    else return 1;//坐标错误 

    if(sizeMove(9,size,xy)==0)
    {
    //int debug(int size1,char size[size1+1][size1]);//测试函数 
	//debug(9,size);//测试函数 
	return 1;//出错 
	}
	//printf("%d,%d,%d%d,%d,%d\\n",x[0],x[1],x[2],y[0],y[1],y[2]);//从一个坐标跳到另外一个坐标 
	return 0;
}

int sizeMove(int size1,char size[size1+1][size1],int x[2])//控制棋子的移动,x为两个坐标 
{
	int camps(int i);//判断阵营
	int sizes();//判断棋子的类型 大小写 
	int end=0;
	
	int k,i[2],j[2],camp;
	for(k=0;k<2;k++)//对坐标进行拆开 
	{
	if(x[k]>=100)
	{
		i[k]=10;
		j[k]=x[k]-100;
	}
	else if(x[k]<=100)
	{
	    i[k]=x[k]/10;
	    j[k]=x[k]%10;
	}
	}
	//交换元素 
    char c1=size[i[0]-1][j[0]-1];//映射真实坐标 
    char c2=size[i[1]-1][j[1]-1];//映射真实坐标 
    
    camp=sizes();
    switch(Player[camp].camp)//判断大小写 阵营 
	{
		case 0://0是判断将 
			{
				switch(c1)//映射真实坐标 
				{//车,马,象,士,帅,士,象,马,车
				        case 'c':{
				        	int c(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(c(9,size,i,j,'c')==1)
							return 0;//出错 
							break;
						}
						case 'm':{
							int m(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(m(9,size,i,j,'m')==1)
							return 0;//出错 
							break;
						}
						case 'x':{
							int x(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(x(9,size,i,j,'x')==1)
							return 0;//出错
							break;
						}
						case 'i':{
							int i1(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(i1(9,size,i,j,'i')==1)
							return 0;//出错 
							break;
						} 
						case 's':{
							int s(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(s(9,size,i,j,'s')==1)
							return 0;//出错 
							break;
						}
						case 'b':{
							int b(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(b(9,size,i,j,'b')==1)
							return 0;//出错 
							break;
						}
						case 'p':{
							int p(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(p(9,size,i,j,'p')==1)
							return 0;//出错 
							break;
						}
						
						default:
						{
						printf("请控制");
						camps(Player[camp].camp);
						printf("的棋子\\n");
						return 0;///返回0  
						}
				}
			}break;
		case 1://1是判断帥
			{
				switch(c1)//映射真实坐标 
				{//车,马,象,士,帅,士,象,马,车
				        case 'C':{
				        	int c(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
				        	if(c(9,size,i,j,'C')==1)
							return 0;//出错 
							break;
						}
						case 'M':{
							int m(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(m(9,size,i,j,'M')==1)
							return 0;//出错 
							break;
						}
						case 'X':{
							int x(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(x(9,size,i,j,'X')==1)
							return 0;//出错
							break;
						}
						case 'I':{
							int i1(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(i1(9,size,i,j,'I')==1)
							return 0;//出错 
							break;
						} 
						case 'S':{
							int s(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(s(9,size,i,j,'S')==1)
							return 0;//出错 
							break;
						}
						case 'B':{
							int b(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(b(9,size,i,j,'B')==1)
							return 0;//出错 
							break;
						}
						case 'P':{
							int p(int size1,char size[size1+1][size1],int x[2], int y[2],char c1);//格局,xy为坐标
							if(p(9,size,i,j,'P')==1)
							return 0;//出错 
							break;
						}
						
						default:
						{
						printf("请控制");
						camps(Player[camp].camp);
						printf("的棋子\\n");
						return 0;//返回0   
						}
						   
				}
			}break;
	}
	return 1;
}
int length(char coin[])//判断输入的长度的方法,以及输入的合法性 
{
	int i,j=0,doc=0,num;
	for(i=0;coin[i]!='\\0';i++)
	{
		num=coin[i];
		j++;
		if(coin[i]==',')
		{
		doc=1;//要有逗号 
		}
		if(num<=48&&num>=57)//防止越界 
		return 0;
	}
	if(doc==1)
	return j;
	
	else return 0;
} 

int camps(int i)//判断阵营 
{
	if(i==0)
	{
		printf("“将”"); 
		return 1;
	}
	if(i==1)
	{
		printf("“帥”"); 
		return 0;
	}
	if(i==2)
	{
		printf("“⊙”"); 
		return 1;
	}
	if(i==3)
	{
		printf("“〇”");
		return 0;
	}
}

int sizes()//判断棋子的先手类型 
{
	int i;
	for(i=0;i<2;i++)
	{
		if(Player[i].first==1)
		{
			return i;//返回一个先手的值 
		}
	}
}
int sizee()//判断棋子的后手类型 
{
	int i;
	for(i=0;i<2;i++)
	{
		if(Player[i].first==0)
		{
			return i;//返回一个后手的值 
		}
	}
}

int b(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//兵 V
{
	int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手
	later=sizee();//判断谁后手 
	
	int chuhan(int x,char c1);//楚河汉界 
	int len(int size1,char size[size1+1][size1],int x[2], int y[2]);//移动距离
	
	if((y[0]==y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]==x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//兵的路径合法 
	{
	if(len(9,size,x,y)!=1)//判断兵走的距离
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能走大于1的距离\\n");
		return 1;
	}
	
	switch(c1)
	{
		case 'b':
			{
			if(chuhan(x[1],c1)==1)//没过河 
	        {
		    if(y[1]!=y[0])//不能横走 
		    {
		    sized(9,size,x[0]-1,y[0]-1);
		    printf("未过河不能平\\n");
		    return 1;
	       	}
	        }
	        if(x[1]<x[0])
	        {
		    sized(9,size,x[0]-1,y[0]-1);
		    printf("不能退\\n");
		    return 1;
	        }
				
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{	
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
				}
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				break;
			}
		case 'B':
			{
			if(chuhan(x[1],c1)!=1)//没过河 
	        {
		    if(y[1]!=y[0])//不能横走 
		    {
		    sized(9,size,x[0]-1,y[0]-1);
		    printf("未过河不能平\\n");
		    return 1;
	       	} 	
	        }
	        if(x[1]>x[0])
	        {
		    sized(9,size,x[0]-1,y[0]-1);
		    printf("不能退\\n");
		    return 1;
	        }
				
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				break; 
			}
	}
			size[x[1]-1][y[1]-1]=c1;//下棋 
	        size[x[0]-1][y[0]-1]='+';		
	}
	else return 1;  
	
	return 0;
}	
int p(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//炮 V
{
    int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手 
	later=sizee();//判断谁后手 
	
	int jump;//判断跳跃的棋子 
	jump=cp(9,size,x,y);
	
	int cp(int size1,char size[size1+1][size1],int x[2], int y[2]);//车炮移动判定 
	void sized(int size1,char size[size1+1][size1],int i,int j);//返回棋子的值
	
	if((y[0]==y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]==x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//炮的路径合法 
	{
	if(jump>=2)//判断车中间棋子 
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能跨多于两个棋子移动\\n");
		return 1;
	}
	switch(c1)
	{
		case 'p':
			{
				if(size[x[1]-1][y[1]-1]=='+'&&jump==0)//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0;
				}
				else if(size[x[1]-1][y[1]-1]!='+'&&jump==1)
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				else //if(jump==1&&size[x[1]-1][y[1]-1]=='+')
				{
					sized(9,size,x[0]-1,y[0]-1);
					printf("移动非法\\n");
					return 1;
				}
				break; 
			}
		case 'P':
			{
				if(size[x[1]-1][y[1]-1]=='+'&&jump==0)//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+'&&jump==1)
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				else //if(jump==1&&size[x[1]-1][y[1]-1]=='+')
				{
					sized(9,size,x[0]-1,y[0]-1);
					printf("移动非法\\n");
					return 1;
				}
				break; 
			}
	}
			size[x[1]-1][y[1]-1]=c1;//下棋 
	        size[x[0]-1][y[0]-1]='+';		
	}
	else return 1;  
	
	return 0;
}
int c(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//车 V
{
	int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手 
	later=sizee();//判断谁后手 
	
	int cp(int size1,char size[size1+1][size1],int x[2], int y[2]);//车炮移动判定 
	void sized(int size1,char size[size1+1][size1],int i,int j);//返回棋子的值
	
	if((y[0]==y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]==x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//车的路径合法 
	{
	if(cp(9,size,x,y)!=0)//判断车中间棋子 
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能跨棋子移动\\n");
		return 1;
	}
	switch(c1)
	{
		case 'c':
			{
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
				}
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				break; 
			}
		case 'C':
			{
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+')
				{		
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				break; 
			}
	}
			size[x[1]-1][y[1]-1]=c1;//下棋 
	        size[x[0]-1][y[0]-1]='+';		
	}
	else return 1;  
	
	return 0;
}
int m(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//马 V
{
	int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手
	later=sizee();//判断谁后手 
	
	int len(int size1,char size[size1+1][size1],int x[2], int y[2]);//移动距离
	void sized(int size1,char size[size1+1][size1],int i,int j);//返回棋子的值
	
	if((x[0]==x[1])||(y[0]==y[1]))
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("走“日”字\\n");
		return 1;
	}
	
	if((y[0]!=y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]!=x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//马路径合法 
	{
	if(len(9,size,x,y)!=333)//判断马走的距离
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("走“日”字\\n");
		return 1;
	}
	//马脚的判断 
	if(x[0]>x[1])//上+左右移动 
	{
		if(y[0]>y[1])//上+左移动 
		{
			if((y[0]-y[1]==2)&&(size[x[0]-1][y[0]-2]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
			else if((y[0]-y[1]==1)&&(size[x[0]-2][y[0]-1]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
		}
		else if(y[0]<y[1])//上+右移动
		{
			if((y[1]-y[0]==2)&&(size[x[0]-1][y[0]-2]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
			else if((y[1]-y[0]==1)&&(size[x[0]-2][y[0]-1]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
		}
	}
	if(x[0]<x[1])//下+左右移动 
	{
		if(y[0]>y[1])//下+左移动
		{
			if((y[0]-y[1]==2)&&(size[x[0]-1][y[0]-2]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
			else if((y[0]-y[1]==1)&&(size[x[0]][y[0]-1]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
		}
		else if(y[0]<y[1])//下+右移动
		{
			if((y[1]-y[0]==2)&&(size[x[0]-1][y[0]-2]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
			else if((y[1]-y[0]==1)&&(size[x[0]][y[0]-1]!='+'))
			{
				sized(9,size,x[0]-1,y[0]-1);
			    printf("脚\\n");
				return 1;
			}
		}
	}
	
    switch(c1)
	{
		case 'm':
			{
		    
			if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0;
				}
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				break;
			}
		case 'M':
			{
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				break; 
			}
	}
	size[x[1]-1][y[1]-1]=c1;//下棋 
	size[x[0]-1][y[0]-1]='+';
	return 0;
	}else return 1;
}
int x(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//象 V
{
	int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手
	later=sizee();//判断谁后手 
	
	int chuhan(int x,char c1);//楚河汉界
	int len(int size1,char size[size1+1][size1],int x[2], int y[2]);//移动距离
	void sized(int size1,char size[size1+1][size1],int i,int j);//返回棋子的值
	
	if((x[0]==x[1])||(y[0]==y[1]))
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("走“田”字\\n");
		return 1;
	}
	
	if((y[0]!=y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]!=x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//象路径合法 
	{
	if(len(9,size,x,y)!=222)//判断象走的距离
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("走“田”字\\n");
		return 1;
	}
	if(x[0]>x[1])//判断象脚 象往上跳 
	{
	   if(y[0]>y[1])//判断象脚 象往上跳 象往左跳
		{	
			if(size[x[1]][y[1]]!='+')
			{
			   sized(9,size,x[0]-1,y[0]-1);
			   printf("脚\\n");
			   return 1;
			}
		}
		else if(y[0]<y[1])//判断象脚 象往上跳 象往右跳
		{
			if(size[x[1]][y[0]]!='+')
			{
			   sized(9,size,x[0]-1,y[0]-1);
			   printf("脚\\n");
			   return 1;
			}	
		}
		    	
	}
	else if(x[0]<x[1])//判断象脚 象往下跳
	{
				if(y[0]>y[1])//判断象脚 象往下跳 象往左跳
				{
				    if(size[x[0]][y[1]]!='+')
			        {
			         sized(9,size,x[0]-1,y[0]-1);
			         printf("脚\\n");
			         return 1;
			        }	
				}
				else if(y[0]<y[1])//判断象脚 象往下跳 象往右跳
				{
					if(size[x[0]][y[0]]!='+')
			        {
			         sized(9,size,x[0]-1,y[0]-1);
			         printf("脚\\n");
			         return 1;
			        }	
				} 
    }
	
	switch(c1)
	{
		case 'x':
			{
			if(chuhan(x[1],c1)!=1)//过河 
		    {
		    sized(9,size,x[0]-1,y[0]-1);
		    printf("不能过河\\n");
			return 1;
			}
		    
			if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0;
				}
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				break;
			}
		case 'X':
			{		
			
				
			if(chuhan(x[1],c1)==1)//过河 
		    {
		    sized(9,size,x[0]-1,y[0]-1);
		    printf("不能过河\\n");
			return 1;
			}
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				break; 
			}
	}
	size[x[1]-1][y[1]-1]=c1;//下棋 
	size[x[0]-1][y[0]-1]='+';
    }
    else 
	{
	sized(9,size,x[0]-1,y[0]-1);
	printf("路径非法\\n"); 
	return 1; 	
	}

	return 0;
}
int i1(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//士 V 
{
    int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手
	later=sizee();//判断谁后手 
	 
	int jiugong(int x[2], int y[2],char c1);//九宫 
	int len(int size1,char size[size1+1][size1],int x[2], int y[2]);//移动距离
	void sized(int size1,char size[size1+1][size1],int i,int j);//返回棋子的值
		
	if((y[0]!=y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]!=x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//士路径合法 
	{
		
	if((x[0]==x[1])||(y[0]==y[1]))
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("非法s移动");
		return 1;
	}
	
	if(len(9,size,x,y)!=111)//判断士走的距离
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能走大于1的距离\\n");
		return 1;
	}
	if((jiugong(x,y,c1))!=1)//判断九宫
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能出九宫\\n");
		return 1;
	}
	switch(c1)
	{
		case 'i':
			{
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0;
				}
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				break;
			}
		case 'I':
			{		
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				break; 
			}
	}
			size[x[1]-1][y[1]-1]=c1;//下棋 
	        size[x[0]-1][y[0]-1]='+';	
			return 0;	
	}
	else 
	{
	sized(9,size,x[0]-1,y[0]-1);
	printf("路径非法\\n"); 
	return 1; 	
	}
	
	return 0;
}
int s(int size1,char size[size1+1][size1],int x[2], int y[2],char c1)//将 V 
{
	int sizes();//判断棋子的类型 大小写 
	int sizee();//判断棋子的后手类型 
    int later;//后手变量 
	int first;//先手变量
	first=sizes();//判断谁先手
	later=sizee();//判断谁后手 
	
	int jiugong(int x[2], int y[2],char c1);//九宫 
	int len(int size1,char size[size1+1][size1],int x[2], int y[2]);//移动距离
	void sized(int size1,char size[size1+1][size1],int i,int j);//返回棋子的值
		
	if((y[0]==y[1]&&x[0]!=x[1]&&x[1]<=10&&x[1]>=1)||(x[0]==x[1]&&y[0]!=y[1]&&y[1]<=10&&y[1]>=1))//将的路径合法 
	{
	if(len(9,size,x,y)!=1)//判断将走的距离
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能走大于1的距离\\n");
		return 1;
	}
	if((jiugong(x,y,c1))!=1)//判断九宫
	{
		sized(9,size,x[0]-1,y[0]-1);
		printf("不能出九宫\\n");
		return 1;
	}
	switch(c1)
	{
		case 's':
			{
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0;
				}
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'B':break;
			        case 'P':break;
			        case 'C':break;
		        	case 'M':break;
			        case 'X':break;
			        case 'I':break;
			        case 'S':break;
			        default:
					{
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
					printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃了 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");// 
				}
				break;
			}
		case 'S':
			{				
				if(size[x[1]-1][y[1]-1]=='+')//判断走棋还是吃 
				{
					size[x[1]-1][y[1]-1]=c1;//下棋 
	                size[x[0]-1][y[0]-1]='+';
	                return 0; 
			    }
				else if(size[x[1]-1][y[1]-1]!='+')
				{
					switch(size[x[1]-1][y[1]-1])
					{
					case 'b':break;
			        case 'p':break;
			        case 'c':break;
		        	case 'm':break;
			        case 'x':break;
			        case 'i':break;
			        case 's':break;
			        default:
					{
						//size[x[0]-1][y[0]-1]=c1;//恢复棋子 
						printf("\\n不能吃自己的棋子\\n");
						return 1;
					}
					}
				    printf("玩家:%s ",Player[first].name);//玩家1名字 
					sized(9,size,x[0]-1,y[0]-1);//输出棋子 
					printf(" 吃 ");//玩家名字 
					printf("玩家:%s ",Player[later].name);//玩家2名字 
					sized(9,size,x[1]-1,y[1]-1);//输出棋子
					printf("\\n");//  
				}
				break; 
			}
	}
			size[x[1]-1][y[1]-1]=c1;//下棋 
	        size[x[0]-1][y[0]-1]='+';		
	}
	else return 1;  
	
	return 0;
}
void sized(int size1,char size[size1+1][size1],int i,int j)//返回棋子的值 
{
	switch(size[i][j])
		{//黑棋 
			case 'b':printf("(卒)");break;
			case 'p':printf("(砲)");break;
			case 'c':printf("(車)");break;
			case 'm':printf("(馬)");break;
			case 'x':printf("(象)");break;
			case 'i':printf("(士)");break;
			case 's':printf("(将)");break;
		//红棋
			case 'B':printf("(兵)");break;
			case 'P':printf("(炮)");break;
			case 'C':printf("(车)");break;
			case 'M':printf("(傌)");break;
			case 'X':printf("(相)");break;
			case 'I':printf("(仕)");break;
			case 'S':printf("(帥)");break;
			default: printf("%c",size[i][j]);
		}
}
int cp(int size1,char size[size1+1][size1],int x[2], int y[2])//车炮移动判定 
{
	int i,j;//从i到j,累+
	int coin;//棋子+1 
	coin=0;
	
    if(x[0]==x[1])
    {
    	i=y[0]-1;//初始坐标 
	    j=y[1]-1;//变化坐标
		
		int i1=x[0]-1;
	    if(i>j)
		{
			i-=1;
			for(;i>j;i--)
			{
				if(size[i1][i]!='+')
				coin++;
			}
		}
		else if(i<j)
		{
			i+=1;
			for(;i<j;i++)
			{
				if(size[i1][i]!='+')
				coin++;
			}
		}
	}
	else if(y[0]==y[1])
	{
		i=x[0]-1;//初始坐标 
	    j=x[1]-1;//变化坐标 
	    
	    int i1=y[0]-1;
	    if(i>j)
		{
			i-=1;
			for(;i>j;i--)
			{
				if(size[i][i1]!='+')
				coin++;
			}
		}
		else if(i<j)
		{
			i+=1;
			for(;i<j;i++)
			{
				if(size[i][i1]!='+')
				coin++;
			}
		}
	}
	return coin;	
}
int len(int size1,char size[size1+1][size1],int x[2], int y[2])//兵象马仕移动距离
{
	int i,j;//从i到j,累+
	int len;//棋子+1 
	len=0;
	
	if(x[0]==x[1])
    {
    	i=y[0]-1;//初始坐标 
	    j=y[1]-1;//变化坐标
		
		int i1=x[0]-1;
	    if(i>j)
		{
			for(;i>j;i--)
			{
				len++;
			}
		}
		else if(i<j)
		{
			for(;i<j;i++)
			{
				len++;
			}
		}
	}
	else if(y[0]==y[1])
	{
		i=x[0]-1;//初始坐标 
	    j=x[1]-1;//变化坐标 
	    
	    int i1=y[0]-1;
	    if(i>j)
		{
			for(;i>j;i--)
			{
				len++;
			}
		}
		else if(i<j)
		{
			for(;i<j;i++)
			{
				len++;
			}
		}
	}
	else if((x[0]!=x[1])&&(y[0]!=y[1]))//士、象、马走斜线 
	{
	   int len1=abs(x[1]-x[0]);
	   int len2=abs(y[1]-y[0]);
	   
	   if(len1==len2)
	   {
	   	if(len1==1)
	   	return 111;//士特别标识符 
	   	else if(len1==2)
	   	return 222;//象特别标识符
	   }
	   else if(len1+len2==3)//马特别标识符
	   return 333;
	   else return 0;
	}
	return len; 
}
int chuhan(int x,char c1)//楚河汉界
{
  switch(c1)
  {
  	case 'x': //象过河 
  	case 'b':{//卒过河 
  		if(x<5)
  		return 1;
	  }
	case 'X'://相过河
  	case 'B':{//兵过河
  		if(x<6)
  		return 1;
	  }
  }
  return 0;
}
int jiugong(int x[2], int y[2],char c1)//九宫 
{
  switch(c1)
  {
  	case 's':{//将出界 
  		if((y[1]>=4&&y[1]<=6)&&(x[1]>=1&&x[1]<=3))
  		return 1;
  		break; 
	  }
  	case 'S':{//将出界 
  		if((y[1]>=4&&y[1]<=6)&&(x[1]>=8&&x[1]<=10))
  		return 1;
  		break;
	  }
	case 'i':{//士出界 
  		if((y[1]>=4&&y[1]<=6)&&(x[1]>=1&&x[1]<=3))
  		return 1;
  		break; 
	  }
    case 'I':{//士出界 
  		if((y[1]>=4&&y[1]<=6)&&(x[1]>=8&&x[1]<=10))
  		return 1;
  		break;
      }
   }
  return 0;
}






以上是关于C语言象棋小程序1.0版(def C++版)的主要内容,如果未能解决你的问题,请参考以下文章

C语言手打贪吃蛇1.0版(含界面可开关音乐三种模式尽情玩耍)

《数据结构(C语言版)》之“串的模式匹配算法”

8步安装多多客小程序全插件化1.0开源版

8步安装多多客小程序全插件化1.0开源版

终极版C语言-尹成-专题视频课程

终极版C语言-尹成-专题视频课程