超简单的三子棋,万字大文(保姆级讲解)上

简介: 超简单的三子棋,万字大文(保姆级讲解)

大家好啊,三子棋算是对于初学者来说比较困难的一个小程序,今天的文章就来讲一下如何独立从头到尾地做出三子棋小程序,如果您感觉学到了东西,不妨给我一个点赞或者关注,在这里祝您新的一年红红火火。

e695558d68dad1e11a96ba416eda45dc_65b4ca7085264512a9cd145f24cee1ea.gif


游戏的整体思路


一个较为复杂的小程序一般有着不同的文件来负责不同的功能。我们这里需要新建三个文件。


1. test.c 负责游戏整体流程的实现


2. game.c 负责游戏内部复杂函数的实现


3. game.h 负责包含所有函数所需的头文件


0bb1729da8cfc0183432e59b86bcc5db_3c1c1346d6cc4d39be19b5e428efe961.png


需要注意的是,game.h的创建是在头文件,而game.c和test.c的创建则是在源文件。


且game.c和test.c在创建时选择.cpp文件,而game.h选择.h文件


菜单的实现


以下是我们实现游戏菜单所需的代码段


我们的菜单应该包含这几种功能


1.游戏的进入以及菜单的打印


2.游戏的退出


3.当输入非法时所跳出的错误提示


void menu()
{
  printf("**********************************\n");
  printf("*********     1 play     *********\n");
  printf("*********     2 exit     *********\n");
  printf("**********************************\n");
}
int main()
{
  int input;
  do
  {
  menu();
  scanf("%d", &input);
  switch (input)
  {
  case 1:
    printf("三子棋\n");
    game();
    break;
  case 0:
    printf("退出游戏\n");
    break;
  default:
    printf("选择错误,请重新选择\n");
    break;
  }
  } while (input);
  return 0;
}


我们单独设置一个menu函数,当进入游戏时就会出现玩或者不玩的选项


我们设置选择1是进入游戏,而选择0是退出游戏


while(input)的意思是,只要input不为0,那么循环就一直进行下去


运行截图如下所示


db4960ef7f2538c0f0f84df312176c95_c13905cd73c84243b5a515a54af9faa4.png


游戏主程序的实现


1.棋盘的初始化


下棋是需要棋盘的,我们首先要进行棋盘的初始化。


想象一下三子棋的形态,是不是很像一个三行三列的二维数组?


那我们就创建一个二维数组来表示棋盘,并借以InitBoard函数将数组清空,也就是清空棋盘,从而方便一会儿下棋。


void game()
{
  char board[ROW][COL] = { 0 };
  InitBoard(board, ROW, COL);
}


    2.棋盘的展现


完成了棋盘方格内部的初始化,下一步就是将棋盘的外壳“井”打印出来。


我们再创建一个DisplayBoard函数,打印棋盘外壳。


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


这个地方难度不高,相信大家一定很容易搞出来,并且方法十分多,我只管抛砖引玉。图案如下。


4cee94de8e04a6d327a0815bc69fab33_7455b4b750c9442cb233ee8b859e046f.png


至于上面出现的ROW和COL两个变量,则是我们为了方便定义的全局变量。


大家在game.h的文件中用define来定义,这里全部取3。


#pragma once
#define COL 3
#define ROW 3


为什么要这样做呢?答案是为了之后的修改。

要是不使用全局变量,如果代表三子棋行和列的变量出现错误,那将出现我们只能一个一个修改的状况,这是非常麻烦的。

所以,方便起见,我们使用便于修改的全局变量。


 3.玩家下棋


为了实现玩家下棋这一功能,我们要做到以下几点。


1.对玩家所输入地址的接收,玩家不像程序员,并不知道输入0~2这样的数字,而是会输入从一开始的1~3,所以我们需要将玩家所输入的地址减一。


2.判断玩家下棋的位置是否已有落子,如果不是空白,就重新输入。


3.将玩家下的棋放入对应位置,表现出来。


void PlayerMove(char board[ROW][COL], int row, int col)
{
  int x, y;
  printf("玩家下棋:\n");
  do
  {
  scanf_s("%d%d", &x, &y);
  if (x < 1 || x > row || y < 1 || y > col)//超出范围
  {
    printf("范围超出,请重新输入\n");
    scanf("%d%d", &x, &y);
  }
  if (x >= 1 && x <= row && y >= 1 && y <= col) {
    if (board[x - 1][y - 1] == ' ')//一定要将玩家所输入-1
    {
    board[x - 1][y - 1] = '*';
    break;
    }
    else
    {
    printf("位置已有棋子,请重新输入\n");
    }
  }
  } while (1);
}


使用do while循环,当所输入数字不在范围内,则重新输入。


当目标位置等于‘  ’,也就是没有落子时,再往里下棋,之后再用break跳出。


对于玩家下的棋,我们用‘*’表示


fec916b5a83b071aa1c99d519256d5fc_9ff0626c1004468785da17f83476e96f.png


4.电脑下棋


要让电脑自动下棋,我们需要引入随机数,随机数的创建依靠下面的代码。


1.srand((unsigned int)time(NULL));


我们通过它调用时间戳产生随机数


2.x = rand() % row;


  y = rand() % col;


通过%row来获取1~3的数字,划定随机数的范围


下棋之前,照例要进行有无落子的判断。


void ComputerMove(char board[ROW][COL], int row, int col)
{
  printf("电脑下棋\n");
  int x, y;
  while (1)
  {
    x = rand() % ROW;
  y = rand() % COL;
  if (board[x][y] == ' ')
  {
    board[x][y] = '#';
    break;
  }
  }
}


如果成功下棋,就用break跳出,否则再次产生随机数。


对于电脑下的棋,我们用符号‘#’来表示。


a1fe801158ee51dfb21faf882171d781_818fcd3d20bd4de0a840d02e1e2a63e3.png

 


相关文章
|
7月前
|
安全 C语言
C语言设计扫雷(保姆级教学)
C语言设计扫雷(保姆级教学)
C语言设计扫雷(保姆级教学)
|
7月前
|
JSON 前端开发 Java
Springmvc保姆级丝滑教程(一文搞懂系列)(1)
Springmvc保姆级丝滑教程(一文搞懂系列)
207 0
|
7月前
|
前端开发 Java 数据库连接
Springmvc保姆级丝滑教程(一文搞懂系列)(2)
Springmvc保姆级丝滑教程(一文搞懂系列)
|
7月前
|
存储
扫雷游戏的实现以及具体分析(保姆级教学)
扫雷游戏的分析和设计、扫雷游戏的文字描述、开始前的准备---多文件的创建、开始实操、扫雷游戏的扩展
|
机器学习/深度学习
【扫雷】初级版保姆级教学
【扫雷】初级版保姆级教学
|
C语言
从零到一快速学会三子棋
从零到一快速学会三子棋
71 1
|
存储 C语言
智能三子棋——保姆级教学。
智能三子棋——保姆级教学。
智能三子棋——保姆级教学。
|
小程序 C语言
超详细三子棋(保姆级教学)
三子棋是一款古老的民间传统游戏,又被称为黑白棋、圈圈叉叉棋、井字棋、一条龙、九宫棋等,想必大家都有玩过吧。没玩过的话也可以试着玩一玩,这样对写三子棋这个小游戏的化是会有一个很好的思路的。那么本篇博客就来介绍如何用C语言来实现三子棋小游戏的具体步骤。(编译器用的是VS2019)
150 0
|
编译器 C语言
【c语言】三子棋(保姆级教程+内含源码)
使用c语言写的超级详细的三子棋,简单容易上手,大家可以边理解,边跟着跟着敲