做了一周,用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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/351133.html
標籤:其他
上一篇:C語言小游戲之掃雷完整版
