简单的三子棋代码设计-创新互联

三子棋是一种玩法简单的棋类游戏,对战双方在3x3的棋盘上轮流下棋,先将自己的三颗棋子连成一线的玩家获胜,当棋盘下满还没有玩家获胜,则为平局。

成都创新互联公司服务项目包括灵寿网站建设、灵寿网站制作、灵寿网页制作以及灵寿网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,灵寿网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到灵寿省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

了解三子棋的基本玩法后,我们就可以开始设计代码了。

首先我们需要一个棋盘,一个简单的三行三列二维数组就可以完成棋盘,之后只要将数组内容全部初始化为'  ',就完成了棋盘的设计。

有了棋盘,就可以开始下棋了。下棋就是玩家输入坐标,程序就在输入的坐标上打印一个棋子。例如,玩家输入‘1 1’,就将我们的二维数组第一行第一列的内容改为‘ * ’。但是,数组的第一行第一列坐标是‘0 0‘,所以我们还需要对玩家输入的值进行一个‘-1’的操作。

既然要输入坐标,当然就要判断坐标的合法性,如果玩家输入的坐标超出了我们的棋盘,就要提示玩家输入错误,重新输入,如果该位置已经被下过了,也要有对应的提示。每下完一步都要展示棋盘目前的情况,只要再定义一个函数来打印棋盘就可以了。

void show(char qipan[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 int k = 0;
 printf("   ");
 for (k = 1; k<= row; k++)
 {
     printf("%d  ", k);
 }
 printf("\n");
 for (i = 0; i< row; i++)
 {
     printf("%d  ", i + 1);
     for (j = 0; j< col; j++)
     {
         printf("% c ", qipan[i][j]);
         if (j< col - 1)
         {
             printf("|");
         }
     }
     if (i< row - 1)
     {
         printf("\n   __ __ __ \n");
     }
 }
 printf("\n \n");
}

具体的代码可以这样操作: 

void player_move(char qipan[ROW][COL], int row, int col) //row和r表示行,col和c表示列
{
 int R = 0;
 int C = 0;
 scanf("%d%d", &R, &C);
 int r = R - 1;
 int c = C - 1;
 if (R >= 1 && R<= row  && C >= 1 && C<= col)
 {
     if (qipan[r][c] == ' ')
     {
         qipan[r][c] = '*';
         show(qipan, ROW, COL);
     }
     else
     {
         printf("该位置已被下,请重新下棋\n");
     }
 }
 else
 {
     printf("输入错误,请重新下棋\n");
 }
}

玩家下完就是电脑下棋,两个玩家下棋和电脑智能下棋的情况暂时先不考虑。

电脑随机下棋就是要随机生成一个坐标,坐标的值自然也要合法,通过rand()% 3,就可以得到0~2的数字,再判定下这个位置是否被下过就完成了电脑下棋的步骤。

void computer_move(char qipan[ROW][COL], int row, int col)
{
 int r = 0;
 int c = 0;
 while (1)
 {
     r = rand() % 3;
     c = rand() % 3;
     if (qipan[r][c] == ' ')
     {
         qipan[r][c] = '#';
         show(qipan, ROW, COL);
         break;
     }
 }
}

双方都下完棋之后,就要判定是否分出胜负,分别检查三行、三列以及两条对角线是否有三个相同的、非‘  ’字符就能判断是否有一方获胜,再判断棋盘填满时有没有玩家获胜,就可以知道是否下到了平局。

          char a = end(qipan, ROW, COL);
              if (a == 'p')
              {
                  printf("平局\n");
                  break;
              }
              if (a == '*')
              {
                  printf("玩家胜\n");
                  break;
              }
          computer_move(qipan, ROW, COL);
              if (a == '#')
              {
                  printf("电脑胜\n");
                  break;
              }

char end(char qipan[ROW][COL], int row, int col)
{
 int r = 0;
 int c = 0;
 int count = 0;

 if (qipan[r][c] == qipan[r + 1][c + 1] && qipan[r][c] == qipan[r + 2][c + 2] && qipan[r][c] != ' ')
 {
     return qipan[r][c];
 }
 if (qipan[r][c + 2] == qipan[r + 1][c + 1] && qipan[r][c + 2] == qipan[r + 2][c] && qipan[r][c + 2] != ' ')
 {
     return qipan[r][c + 2];
 }
 for (r = 0, c = 0; r< row; r++)
 {
     if (qipan[r][c] == qipan[r][c + 1] && qipan[r][c + 1] == qipan[r][c + 2] && qipan[r][c] != ' ')
     {
         return qipan[r][c];
     }
 }
 for (r = 0,c = 0; c< col; c++)
 {
     if (qipan[r][c] == qipan[r + 1][c] && qipan[r + 1][c] == qipan[r + 2][c] && qipan[r][c] != ' ')
     {
         return qipan[r][c];
     }
 }

 for (r = 0; r< row; r++)
 {
     for (c = 0; c< col; c++)
     {
         if (qipan[r][c] == ' ')
             count++;
     }
 }
 if (count == 0)
 {
     return 'p';
 }
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:简单的三子棋代码设计-创新互联
浏览地址:http://hbruida.cn/article/ceigjd.html