#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)
{