+ -
当前位置:首页 → 问答吧 → 这才是我编的那个五子棋的代码。。。

这才是我编的那个五子棋的代码。。。

时间:2011-07-14

来源:互联网

  1. #include <iostream>
  2. using namespace std;
  3. const char symbol[11][4]={"┌","┬","┐","├","┼","┤","└","┴","┘","○","●"};       //制表符及两枚棋子
  4. int x=0,y=0,a[15][15]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
  5.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  6.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  7.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  8.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  9.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  10.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  11.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  12.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  13.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  14.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  15.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  16.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  17.                                     3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
  18.                                     6,7,7,7,7,7,7,7,7,7,7,7,7,7,8};               //棋子的横纵坐标,以及15X15个可放棋子的位置
  19. int UsedBy[15][15]={0};      //用来标记棋位被占用的情况,0表示未使用,1、2分别表示被玩家1、玩家2占用

  20. void DrawChessboard()      //用来绘制棋盘
  21. {
  22.         cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl;     //在第一行显示,用以标示棋位的列坐标
  23.         for(int i=0;i<=14;i++)     //使用循环语句
  24.         {
  25.                 if (i!=0)
  26.                         cout<<endl;
  27.                 cout<<i%10;         //输出棋位的行坐标
  28.                 for (int j=0;j<=14;j++)
  29.                         cout<<symbol[a[i][j]];    //输出八种不同位置的制表符
  30.         }
  31.         cout<<endl;
  32. }

  33. void Player1 ()    //玩家1下棋子
  34. {
  35.         cout<<"请1号玩家输入要下的棋子的坐标(先行后列,用空格隔开):";
  36.         while (cin>>x>>y)
  37.         {
  38.                
  39.                 if (UsedBy[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)
  40.                 {
  41.                         UsedBy[x][y]=1;    //将指定坐标的棋位标记为玩家1的棋子占用
  42.                         a[x][y]=9;         //为放置玩家1的棋子做准备
  43.                         system ("cls");      //清屏
  44.                         DrawChessboard();    //重新绘制棋盘
  45.                         break;
  46.                 }
  47.                 else
  48.                         cout<<"输入错误,1号玩家请重新输入:";
  49.         }
  50. }
  51. void Player2 ()    //玩家2下棋子,下列过程类似函数Player1
  52. {
  53.         cout<<"请2号玩家输入要下的棋子的坐标(先行后列,用空格隔开):";
  54.         while (cin>>x>>y)
  55.         {
  56.                
  57.                 if (UsedBy[x][y]==0 && x>=0 && x<=14 && y>=0 && y<=14)
  58.                 {
  59.                         UsedBy[x][y]=2;
  60.                         a[x][y]=10;
  61.                         system ("cls");
  62.                         DrawChessboard();
  63.                         break;
  64.                 }
  65.                 else
  66.                         cout<<"输入错误,2号玩家请重新输入:";
  67.         }
  68. }
  69. int judge (int x,int y,int player)         //用来判断胜负
  70. {
  71.         int lianzi=1;     //用来标记同一种棋子连着的最多个数
  72.         for (int m=-1;m<=0;m++)
  73.                 for (int n=-1;n<=1;n++)
  74.                 {
  75.                         if (m!=0 || n!=0)
  76.                         {
  77.                                 for (int i=1;i<=4;i++)
  78.                                 {
  79.                                         if (x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && UsedBy[x+i*m][y+i*n]==player)
  80.                                                 lianzi++;
  81.                                     else
  82.                                             break;
  83.                                 }                    
  84.                                 for(i=-1;i>=-4;i--)
  85.                                 {
  86.                                     if (x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && UsedBy[x+i*m][y+i*n]==player)
  87.                                              lianzi++;
  88.                                     else
  89.                                              break;
  90.                                 }
  91.                                 if(lianzi>=5)
  92.                                    return 1;       //返回值为0表示当前判断的玩家已经胜出
  93.                                 else
  94.                                    lianzi=1;
  95.                         }
  96.           }
  97.         return 0;     //返回值为0表示当前判断的玩家没有胜出
  98. }
  99. void main ()
  100. {
  101.         system ("title 五子棋二人对战平台");       //程序运行窗口的标题
  102.         system ("color 60");           //用来设置程序运行窗口的背景色与前景色
  103.         system ("mode con cols=40 lines=25");           //用来设置程序运行窗口的宽高
  104.         DrawChessboard();
  105.         while (1)
  106.         {
  107.                 Player1 ();    //玩家1输入棋子的坐标
  108.                 if (judge(x,y,1)==1)    //判断玩家1是否获胜
  109.                 {
  110.                         cout<<"1号玩家获胜!"<<endl;
  111.                         break;
  112.                 }
  113.                 Player2 ();    //玩家2输入棋子的坐标
  114.                 if (judge(x,y,2)==1)    //判断玩家2是否获胜
  115.                 {
  116.                         cout<<"2号玩家获胜!"<<endl;
  117.                         break;
  118.                 }
  119.         }
  120. }
复制代码

作者: 杜海洋   发布时间: 2011-07-14

发现一个好玩的现象:Discuz!代码中的斜体字代码与数组中的下标运算符经常冲突。。。
就是这个玩艺儿:
  1. [i]
复制代码

作者: 杜海洋   发布时间: 2011-07-14

所以最终我把程序全放到code标签里了。。。不然出来的帖子内容是斜体的。。

作者: 杜海洋   发布时间: 2011-07-14

热门下载

更多