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++版)的主要内容,如果未能解决你的问题,请参考以下文章