象棋源程序.docx

上传人:b****8 文档编号:9115724 上传时间:2023-05-17 格式:DOCX 页数:16 大小:16.73KB
下载 相关 举报
象棋源程序.docx_第1页
第1页 / 共16页
象棋源程序.docx_第2页
第2页 / 共16页
象棋源程序.docx_第3页
第3页 / 共16页
象棋源程序.docx_第4页
第4页 / 共16页
象棋源程序.docx_第5页
第5页 / 共16页
象棋源程序.docx_第6页
第6页 / 共16页
象棋源程序.docx_第7页
第7页 / 共16页
象棋源程序.docx_第8页
第8页 / 共16页
象棋源程序.docx_第9页
第9页 / 共16页
象棋源程序.docx_第10页
第10页 / 共16页
象棋源程序.docx_第11页
第11页 / 共16页
象棋源程序.docx_第12页
第12页 / 共16页
象棋源程序.docx_第13页
第13页 / 共16页
象棋源程序.docx_第14页
第14页 / 共16页
象棋源程序.docx_第15页
第15页 / 共16页
象棋源程序.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

象棋源程序.docx

《象棋源程序.docx》由会员分享,可在线阅读,更多相关《象棋源程序.docx(16页珍藏版)》请在冰点文库上搜索。

象棋源程序.docx

象棋源程序

#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]>

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2