象棋源程序.docx
- 文档编号:9115724
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:16
- 大小:16.73KB
象棋源程序.docx
《象棋源程序.docx》由会员分享,可在线阅读,更多相关《象棋源程序.docx(16页珍藏版)》请在冰点文库上搜索。
象棋源程序
#include
#include
voiddisplay(inttable[][10]);
intcheckRule(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckche(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckma(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckxiang(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckshi(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckshuai(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckpao(intx1,inty1,intx2,inty2,inttable[][10]);
intcheckbing(intx1,inty1,intx2,inty2,inttable[][10]);
voidmain()
{
inttable[11][10];
inti,j;
intx1,y1,x2,y2;
intorder=0;
// creattheblanklayout
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;
//creatfinished
display(table);
while
(1)
{
intresult,win1=1,win2=1;
while
(1)
{
printf("\n请输入您要移动的棋子位置(例如输入34代表第三行第四列) :
");
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");
}
elseif(order%2==1&&table[x1][y1]<0)
{
printf("该甲方走棋了,请甲方走棋。
\n");
}
else
{
order++;
printf("%d",order);
break;
}
}
}
while
(1)
{
printf("请输入您要将棋子移动到哪(例如输入34代表第三行第四列) :
");
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");
elsecontinue;
}
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;
}
}
}
voiddisplay(inttable[][10])
{
inti,j;
printf(" 甲方:
车马象士将炮卒 乙方:
車馬相仕帅砲兵\n\n");
printf(" 1 2 3 4 5 6 7 8 9\n\n");
for(i=1;i<=10;i++)
{
printf("%5d ",i);
for(j=1;j<=9;j++)
{
//displaythetopside
if(table[i][j]==0)printf(" +");
elseif(table[i][j]==1)printf("车");
elseif(table[i][j]==2)printf("马");
elseif(table[i][j]==3)printf("象");
elseif(table[i][j]==4)printf("士");
elseif(table[i][j]==5)printf("将");
elseif(table[i][j]==6)printf("炮");
elseif(table[i][j]==7)printf("卒");
//displaythebottomside
elseif(table[i][j]==-1)printf("車");
elseif(table[i][j]==-2)printf("馬");
elseif(table[i][j]==-3)printf("相");
elseif(table[i][j]==-4)printf("仕");
elseif(table[i][j]==-5)printf("帅");
elseif(table[i][j]==-6)printf("砲");
elseif(table[i][j]==-7)printf("兵");
elseprintf("程序崩溃啦~");
if(j<9)printf("--");
}
printf("\n");
if(i<10&&i!
=5)printf(" | | | | | | | | |\n");
if(i==5)printf("\n");
}
}
intcheckRule(intx1,inty1,intx2,inty2,inttable[][10])
{
if(x2<1||x2>10||y2<1||y2>9)return99;
else
if(table[x1][y1]==1||table[x1][y1]==-1)
{
if(checkche(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
if(table[x1][y1]==2||table[x1][y1]==-2)
{
if(checkma(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
if(table[x1][y1]==3||table[x1][y1]==-3)
{
if(checkxiang(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
if(table[x1][y1]==4||table[x1][y1]==-4)
{
if(checkshi(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
if(table[x1][y1]==5||table[x1][y1]==-5)
{
if(checkshuai(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
if(table[x1][y1]==6||table[x1][y1]==-6)
{
if(checkpao(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
if(table[x1][y1]==7||table[x1][y1]==-7)
{
if(checkbing(x1,y1,x2,y2,table)==1)return1;
elsereturn0;
}
else
{
printf("莫非程序崩溃了。
。
。
:
(\n");
return0;
}
}
intcheckche(intx1,inty1,intx2,inty2,inttable[][10])
{
inti,flag=1;
if(x1!
=x2&&y1!
=y2)
{
printf("车不能斜着走呀,重新输入吧\n");
return0;
}
if(table[x2][y2]*table[x1][y1]>0)
{
printf("自己不能吃掉自己呀,检查后重新输入吧\n");
return0;
}
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"); return0; } return1; } intcheckma(intx1,inty1,intx2,inty2,inttable[][10]) { if(table[x1][y1]<0) { if(table[x2][y2]<0) { printf("不能自己吃自己! ! ! \n"); return0; } } elseif(table[x1][y1]>0) { if(table[x2][y2]>0) { printf("不能自己吃自己! ! ! \n"); return0; } } if(((x1-2==x2)&&(y1-1==y2))||((x1-2==x2)&&(y1+1==y2)))//上方位 { if(table[x1-1][y1]==0) { return1; } else { printf("别腿了! ! ! \n"); return0; } } if(((x1-1==x2)&&(y1+2==y2))||((x1+1==x2)&&(y1+2==y2)))//右方位 { if(table[x1][y1+1]==0) { return1; } else { printf("别腿了! ! ! \n"); return0; } } if(((x1+2==x2)&&(y1+1==y2))||((x1+2==x2)&&(y1-1==y2)))//左方位 { if(table[x1+1][y1]==0) { return1; } else { printf("别腿了! ! ! \n"); return0; } } if(((x1-1==x2)&&(y1-2==y2))||((x1+1==x2)&&(y1-2==y2)))//下方位 { if(table[x1][y1-1]==0) { return1; } else { printf("别腿了! ! ! \n"); return0; } } return1; } intcheckxiang(intx1,inty1,intx2,inty2,inttable[][10]) { if((abs(x2-x1))! =2||(abs(y2-y1))! =2) { printf("相(象)只能走田字哦,呵呵,检查后重新输入\n"); return0; } elseif((table[x1][y1]>0&&x2>5)||(table[x1][y1]<0&&x2<5)) { printf("相(象)不能渡过楚河汉界呀,重新输入吧\n"); return0; } elseif(table[(x1+x2)/2][(y1+y2)/2]! =0) { printf("您要移动的路径上有其他棋挡着呢,不能移动,重新输入吧\n"); return0; } elseif(table[x2][y2]*table[x1][y1]>0) { printf("自己不能吃掉自己呀,检查后重新输入吧\n"); return0; } elsereturn1; } intcheckshi(intx1,inty1,intx2,inty2,inttable[][10]) { if((x2<8||x2>10||y2<4||y2>6)&&(x2<1||x2>3||y2<4||y2>6)) { printf("士或者仕是不能移出九宫区域的,请重新输入。 \n"); return0; } elseif(! (abs(x2-x1)==1)&&(abs(y2-y1)==1)) { printf("士或者仕只能斜着走呀,请检查后重新输入\n"); return0; } elseif(table[x2][y2]*table[x1][y1]>0) { printf("自己不能吃掉自己呀,检查后重新输入吧\n"); return0; } elseif((abs(x2-x1)>=2)||(abs(y2-y1)>=2)) { printf("士或者仕不能一次走多格呀,请重新输入。 \n"); return0; } elsereturn1; } intcheckshuai(intx1,inty1,intx2,inty2,inttable[][10]) { if((x2<8||x2>10||y2<4||y2>6)&&(x2<1||x2>3||y2<4||y2>6)) { printf("将或者帅是不能移出九宫区域的,请重新输入。 \n"); return0; } elseif((abs(x2-x1)==1)&&(abs(y2-y1)==1)) { printf("将或者帅是不能走斜线的哦,呵呵,请检查后重新输入\n"); return0; } elseif(table[x2][y2]*table[x1][y1]>0) { printf("自己不能吃掉自己呀,检查后重新输入吧\n"); return0; } elseif((abs(x2-x1)>=2)||(abs(y2-y1)>=2)) { printf("将或者帅不能一次走多格呀,请重新输入。 \n"); return0; } elsereturn1; } intcheckpao(intx1,inty1,intx2,inty2,inttable[][10]) { inti,flag=0; if(table[x1][y1]*table[x2][y2]>=0) { if(x1! =x2&&y1! =y2) { printf("炮不能斜着走呀,重新输入吧\n"); return0; } if(table[x2][y2]*table[x1][y1]>0) { printf("自己不能吃掉自己呀,检查后重新输入吧\n"); return0; } if(x1==x2) { if(y1>y2) { for(i=y2;i { if(table[x1][i]! =0) { flag=1; break; } } } else { for(i=y1+1;i { if(table[x1][i]! =0) { flag=1; break; } } } } if(y1==y2) { if(x1>x2) { for(i=x2;i { if(table[i][y1]! =0) { flag=1; break; } } } else { for(i=x1+1;i { if(table[i][y1]! =0) { flag=1; break; } } } } if(flag==1) { printf("炮不吃子移动的时候中间不能有其他的棋子呀,请重新输入\n"); return0; } } else { flag=0; if(x1! =x2&&y1! =y2) { printf("炮不能斜着走呀,重新输入吧\n"); return0; } else { if(x1==x2) { if(y1>y2) { for(i=y2+1;i { if(table[x1][i]! =0) { flag++; //flag2: 支架的个数 } } } else { for(i=y1+1;i { if(table[x1][i]! =0) { flag++; } } } } if(y1==y2) { if(x1>x2) { for(i=x2+1;i { if(table[i][y1]! =0) { flag++; } } } else { for(i=x1+1;i { if(table[i][y1]! =0) { flag++; } } } } } if(flag==1)return1; elseif(flag==0) { printf("没有支架炮没法吃掉对方的棋子,请检查后重新输入\n"); return0; } else { printf("您不能用多个棋子做炮的支架吧,请重新输入。 \n"); return0; } } return1; } intcheckbing(intx1,inty1,intx2,inty2,inttable[][10]) { if(table[x1][y1]>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 象棋 源程序