今天看啥
热点:

改程序在VC++环境中使用没有问题

#include<stdio.h>
#include<math.h>
#include <windows.h>


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;
 // 调用 win32 API 函数改变输出颜色
 HANDLE consolehwnd;
 consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
 //  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 代表第三行第四列)  :");
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_BLUE);
   scanf("%d%d",&x1,&y1);
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY);
   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++;
     break;
    }
   }
  }
  while(1)
  {
   printf("请输入您要将棋子移动到哪(例如输入 3 4 代表第三行第四列)  :");
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_BLUE);
   scanf("%d%d",&x2,&y2);
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY);
   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;
 // 调用 win32 API 函数改变输出颜色
 HANDLE consolehwnd;
 consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY);
 printf("\n          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++)
  {
   // display the top side
   if (table[i][j]==0) printf("  + ");
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_RED);
   if (table[i][j]==1) printf(" 车 ");
   if (table[i][j]==2) printf(" 马 ");
   if (table[i][j]==3) printf(" 象 ");
   if (table[i][j]==4) printf(" 士 ");
   if (table[i][j]==5) printf(" 将 ");
   if (table[i][j]==6) printf(" 炮 ");
   if (table[i][j]==7) printf(" 卒 ");
   // display the bottom side
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_GREEN);
   if (table[i][j]==-1) printf(" 車 ");
   if (table[i][j]==-2) printf(" 馬 ");
   if (table[i][j]==-3) printf(" 相 ");
   if (table[i][j]==-4) printf(" 仕 ");
   if (table[i][j]==-5) printf(" 帅 ");
   if (table[i][j]==-6) printf(" 砲 ");
   if (table[i][j]==-7) printf(" 兵 ");
   SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY);
   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<y1;i++)
   {
    if (table[x1][i]!=0)
    {
     flag=0;
     break;
    }
   }
  }
  else
  {
   for (i=y1+1;i<y2;i++)
   {
    if (table[x1][i]!=0)
    {
     flag=0;
     break;
    }
   }
  }
 }
 if (y1==y2)
 {
  if (x1>x2)
  {
   for (i=x2+1;i<x1;i++)
   {
    if (table[i][y1]!=0)
    {
     flag=0;
     break;
    }
   }
  }
  else
  {
   for (i=x1+1;i<x2;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)
  {
   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;
  }
 }
 return 1;
}
int checkxiang(int x1,int y1,int x2,int y2,int table[][10])
{
 if ((abs(x2-x1))!=2 || (abs(y2-y1))!=2)
 {
  printf("相(象)只能走田字哦,呵呵,检查后重新输入\n");
  return 0;
 }
 else if ((table[x1][y1]>0 && x2>5)||(table[x1][y1]<0 && x2<5))
 {
  printf("相(象)不能渡过楚河汉界呀,重新输入吧\n");
  return 0;
 }
 else if (table[(x1+x2)/2][(y1+y2)/2]!=0)
 {
  printf("您要移动的路径上有其他棋挡着呢,不能移动,重新输入吧\n");
  return 0;
 }
 else if (table[x2][y2]*table[x1][y1]>0)
 {
  printf("自己不能吃掉自己呀,检查后重新输入吧\n");
  return 0;
 }
 else return 1;
}
int checkshi(int x1,int y1,int x2,int y2,int table[][10])
{
 if ((x2<8 || x2>10 || y2<4 || y2>6)&&(x2<1 || x2>3 || y2<4 || y2>6))
 {
  printf("士或者仕是不能移出九宫区域的,请重新输入。\n");
  return 0;
 }
 else if (!(abs(x2-x1)==1)&&(abs(y2-y1)==1))
 {
  printf("士或者仕只能斜着走呀,请检查后重新输入\n");
  return 0;
 }
 else if (table[x2][y2]*table[x1][y1]>0)
 {
  printf("自己不能吃掉自己呀,检查后重新输入吧\n");
  return 0;
 }
 else if ((abs(x2-x1)>=2)||(abs(y2-y1)>=2))
 {
  printf("士或者仕不能一次走多格呀,请重新输入。\n");
  return 0;
 }
 else return 1;
}

int checkshuai(int x1,int y1,int x2,int y2,int table[][10])
{
 if ((x2<8 || x2>10 || y2<4 || y2>6)&&(x2<1 || x2>3 || y2<4 || y2>6))
 {
  printf("将或者帅是不能移出九宫区域的,请重新输入。\n");
  return 0;
 }
 else if ((abs(x2-x1)==1)&&(abs(y2-y1)==1))
 {
  printf("将或者帅是不能走斜线的哦,呵呵,请检查后重新输入\n");
  return 0;
 }
 else if (table[x2][y2]*table[x1][y1]>0)
 {
  printf("自己不能吃掉自己呀,检查后重新输入吧\n");
  return 0;
 }
 else if ((abs(x2-x1)>=2)||(abs(y2-y1)>=2))
 {
  printf("将或者帅不能一次走多格呀,请重新输入。\n");
  return 0;
 }
 else return 1;
}

int checkpao(int x1,int y1,int x2,int y2,int table[][10])
{
 int i,flag=0;
 if (table[x1][y1]*table[x2][y2]>=0)
 {
  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;i<y1;i++)
    {
     if (table[x1][i]!=0)
     {
      flag=1;
      break;
     }
    }
   }
   else
   {
    for (i=y1+1;i<y2;i++)
    {
     if (table[x1][i]!=0)
     {
      flag=1;
      break;
     }
    }
   }
  }
  if (y1==y2)
  {
   if (x1>x2)
   {
    for (i=x2;i<x1;i++)
    {
     if (table[i][y1]!=0)
     {
      flag=1;
      break;
     }
    }
   }
   else
   {
    for (i=x1+1;i<x2;i++)
    {
     if (table[i][y1]!=0)
     {
      flag=1;
      break;
     }
    }
   }
  }
  if (flag==1)
  {
   printf("炮不吃子移动的时候中间不能有其他的棋子呀,请重新输入\n");
   return 0;
  }
 }
 else
 {
  flag=0;
  if (x1!=x2 && y1!=y2)
  {
   printf("炮不能斜着走呀,重新输入吧\n");
   return 0;
  }
  else
  {
   if (x1==x2)
   {
    if (y1>y2)
    {
     for (i=y2+1;i<y1;i++)
     {
      if (table[x1][i]!=0)
      {
       flag++;          //flag2 : 支架的个数
      }
     }
    }
    else
    {
     for (i=y1+1;i<y2;i++)
     {
      if (table[x1][i]!=0)
      {
       flag++;
      }
     }
    }
   }
   if (y1==y2)
   {
    if (x1>x2)
    {
     for (i=x2+1;i<x1;i++)
     {
      if (table[i][y1]!=0)
      {
       flag++;
      }
     }
    }
    else
    {
     for (i=x1+1;i<x2;i++)
     {
      if (table[i][y1]!=0)
      {
       flag++;
      }
     }
    }
   }

  }
  if (flag==1) return 1;
  else if (flag==0)
  {
   printf("没有支架炮没法吃掉对方的棋子,请检查后重新输入\n");
   return 0;
  }
  else
  {
   printf("您不能用多个棋子做炮的支架吧,请重新输入。\n");
   return 0;
  }
 }
 return 1;
}

int checkbing(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;
  }
  if(x1<6)//没过河
  {
   if((y1==y2)&&(x2-x1==1))
   {
    return 1;
   }
   else
   {
    printf("兵过河前只能向前走,请重新输入\n");
    return 0;
   }
  }
  else//过河
  {
   if(((y1==y2)&&(x2-x1==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1)))
   {
    return 1;
   }
   else
   {
    printf("兵过河后只能向前走或者平移,不能后退,请重新输入\n");
    return 0;
   }
  }
 }
 else//兵是否在红方(在下方)
 {
  if(table[x2][y2]<0)
  {
   printf("不能自己吃自己!!!\n");
   return 0;
  }
  if(x1>5)//没过河
  {
   if((y1==y2)&&(x1-x2==1))
   {
    return 1;
   }
   else
   {
    printf("兵过河前只能向前走,请重新输入\n");
    return 0;
   }
  }
  else//过河
  {
   if(((y1==y2)&&(x1-x2==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1)))
   {
    return 1;
   }
   else
   {
    printf("兵过河后只能向前走或者平移,不能后退,请重新输入\n");
    return 0;
   }
  }
 }
}

 

www.bkjia.comtruehttp://www.bkjia.com/jinghua/jinghua_64889.htmlTechArticle改程序在VC++环境中使用没有问题 #includestdio.h #includemath.h #include windows.h void display(int table[][10]); int checkRule(int x1,int y1,int x2,int y2,int table[][1...

相关文章

    暂无相关文章
相关搜索:
相关频道:

帮客评论

视觉看点