使用c语言开发的象棋程序,一个用C语言编写的下象棋的程序(2人模式)

#include

#include

void display(int table[][10]);

int checkRule(int x1,int y1,int x2,int y2,int table[][10]);

int checkche(int x1,int y1,int x2,int y2,int table[][10]);

int checkma(int x1,int y1,int x2,int y2,int table[][10]);

int checkxiang(int x1,int y1,int x2,int y2,int table[][10]);

int checkshi(int x1,int y1,int x2,int y2,int table[][10]);

int checkshuai(int x1,int y1,int x2,int y2,int table[][10]);

int checkpao(int x1,int y1,int x2,int y2,int table[][10]);

int checkbing(int x1,int y1,int x2,int y2,int table[][10]);

void main()

{

int table[11][10];

int i,j;

int x1,y1,x2,y2;

int order=0;

// creat the blank layout

for (i=1;i<=10;i++)

for

(j=1;j<=9;j++)

table[i][j]=0;

for (j=1;j<=5;j++)

table[1][j]=j;

for (j=6,i=1;j<=9;j++)

table[1][j]=5-i++;

table[3][2]=6;

table[3][8]=6;

for (j=1;j<=9;j++)

if (j%2==1)

table[4][j]=7;

for (j=1;j<=5;j++)

table[10][j]=-1*j;

for (j=6,i=-1;j<=9;j++)

table[10][j]=-5-i--;

table[8][2]=-6;

table[8][8]=-6;

for (j=1;j<=9;j++)

if (j%2==1)

table[7][j]=-7;

// creat finished

display(table);

while(1)

{

int result,win1=1,win2=1;

while(1)

{

printf("\n请输入您要移动的棋子位置(例如输入

3 4 代表第三行第四列) :");

scanf("%d%d",&x1,&y1);

if

(x1>10 || x1<1 || y1>9

|| y1<1 || table[x1][y1]==0)

printf("您输入的位置没有棋子,请检查后重新输入。\n");

else

{

if

(order%2==0 &&

table[x1][y1]>0)

{

printf("该乙方走棋了,请乙方走棋。\n");

}

else

if (order%2==1 &&

table[x1][y1]<0)

{

printf("该甲方走棋了,请甲方走棋。\n");

}

else

{

order++;

printf("%d",order);

break;

}

}

}

while(1)

{

printf("请输入您要将棋子移动到哪(例如输入

3 4 代表第三行第四列) :");

scanf("%d%d",&x2,&y2);

result=checkRule(x1,y1,x2,y2,table);

if

(result==1)

{

table[x2][y2]=table[x1][y1];

table[x1][y1]=0;

display(table);

break;

}

else

if

(result==99)

printf("您怎么把棋子移动到棋盘外边去了?请仔细想好重新输入!\n");

else

continue;

}

for

(i=1;i<=10;i++)

{

for

(j=1;j<=9;j++)

{

if

(table[i][j]==5) win1=0;

if

(table[i][j]==-5) win2=0;

}

}

if (win1==1)

{

printf("恭喜乙方,乙方取得胜利!\n");

break;

}

if (win2==1)

{

printf("恭喜甲方,甲方取得胜利!\n");

break;

}

}

}

void display(int table[][10])

{

int i,j;

printf(" 甲方:车 马 象 士 将 炮

卒 乙方:車 馬 相 仕

帅 砲 兵\n\n");

printf(" 1 2 3 4 5 6 7 8 9\n\n");

for (i=1;i<=10;i++)

{

printf("] ",i);

for

(j=1;j<=9;j++)

{

// display

the top side

if

(table[i][j]==0) printf(" + ");

else if

(table[i][j]==1) printf(" 车 ");

else if

(table[i][j]==2) printf(" 马 ");

else if

(table[i][j]==3) printf(" 象 ");

else if

(table[i][j]==4) printf(" 士 ");

else if

(table[i][j]==5) printf(" 将 ");

else if

(table[i][j]==6) printf(" 炮 ");

else if

(table[i][j]==7) printf(" 卒 ");

// display

the bottom side

else if

(table[i][j]==-1) printf(" 車 ");

else if

(table[i][j]==-2) printf(" 馬 ");

else if

(table[i][j]==-3) printf(" 相 ");

else if

(table[i][j]==-4) printf(" 仕 ");

else if

(table[i][j]==-5) printf(" 帅 ");

else if

(table[i][j]==-6) printf(" 砲 ");

else if

(table[i][j]==-7) printf(" 兵 ");

else

printf("程序崩溃啦~");

if

(j<9) printf("--");

}

printf("\n");

if (i<10

&& i!=5)

printf(" | | | | | | | | |\n");

if (i==5) printf("\n");

}

}

int checkRule(int x1,int y1,int x2,int y2,int table[][10])

{

if (x2<1 || x2>10

|| y2<1 || y2>9) return 99;

else

if (table[x1][y1]==1 ||

table[x1][y1]==-1)

{

if

(checkche(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

if (table[x1][y1]==2 ||

table[x1][y1]==-2)

{

if

(checkma(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

if (table[x1][y1]==3 ||

table[x1][y1]==-3)

{

if

(checkxiang(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

if (table[x1][y1]==4 ||

table[x1][y1]==-4)

{

if

(checkshi(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

if (table[x1][y1]==5 ||

table[x1][y1]==-5)

{

if

(checkshuai(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

if (table[x1][y1]==6 ||

table[x1][y1]==-6)

{

if

(checkpao(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

if (table[x1][y1]==7 ||

table[x1][y1]==-7)

{

if

(checkbing(x1,y1,x2,y2,table)==1) return 1;

else return

0;

}

else

{

printf("莫非程序崩溃了。。。

:(\n");

return 0;

}

}

int checkche(int x1,int y1,int x2,int y2,int table[][10])

{

int i,flag=1;

if (x1!=x2 &&

y1!=y2)

{

printf("车不能斜着走呀,重新输入吧\n");

return 0;

}

if

(table[x2][y2]*table[x1][y1]>0)

{

printf("自己不能吃掉自己呀,检查后重新输入吧\n");

return 0;

}

if (x1==x2)

{

if (y1>y2)

{

for

(i=y2+1;i

{

if

(table[x1][i]!=0)

{

flag=0;

break;

}

}

}

else

{

for

(i=y1+1;i

{

if

(table[x1][i]!=0)

{

flag=0;

break;

}

}

}

}

if (y1==y2)

{

if (x1>x2)

{

for

(i=x2+1;i

{

if

(table[i][y1]!=0)

{

flag=0;

break;

}

}

}

else

{

for

(i=x1+1;i

{

if

(table[i][y1]!=0)

{

flag=0;

break;

}

}

}

}

if (flag==0)

{

printf("车移动的时候中间不能有其他的棋子呀,请重新输入\n");

return 0;

}

return 1;

}

int checkma(int x1,int y1,int x2,int y2,int table[][10])

{

if(table[x1][y1]<0)

{

if(table[x2][y2]<0)

{

printf("不能自己吃自己!!!\n");

return

0;

}

}

else if(table[x1][y1]>0)

{

if(table[x2][y2]>0)

{

printf("不能自己吃自己!!!\n");

return

0;

}

}

if(((x1-2==x2)&&(y1-1==y2))||((x1-2==x2)&&(y1+1==y2)))//上方位

{

if(table[x1-1][y1]==0)

{

return

1;

}

else

{

printf("别腿了!!!\n");

return

0;

}

}

if(((x1-1==x2)&&(y1+2==y2))||((x1+1==x2)&&(y1+2==y2)))//右方位

{

if(table[x1][y1+1]==0)

{

return

1;

}

else

{

printf("别腿了!!!\n");

return

0;

}

}

if(((x1+2==x2)&&(y1+1==y2))||((x1+2==x2)&&(y1-1==y2)))//左方位

{

if(table[x1+1][y1]==0)

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值