C语言实现扫雷【经典】上

简介: C语言实现扫雷【经典】上

前言

  本篇文章要实现的是扫雷游戏,其代码实现与上一篇的三子棋游戏类同,都是在棋盘的基础上,与电脑进行对抗,不同的是,扫雷游戏一开始电脑就已经随机布置好了所有“雷”。


1. 扫雷游戏玩法


经典玩法:


扫雷就是要把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败。


游戏主区域由很多个方格组成。选择一个方格,方格即被打开并显示出方格中的数字,


而方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子会自动打开。


e541e3b22d8001149947870a6a784896_39b50aca1b32422f83888328fb43619b.png


本机玩法:


游戏开始,玩家在棋盘格上输入正确的行列坐标选择位置,若选择到的是非地雷,就会显示出周围8个格子存在雷的数量,直到把所有非雷的格子都选出来,游戏胜利;若“踩雷”了,则游戏失败。


看似简单的扫雷游戏,想要胜利,走的每一步都需要推算


2. 设计思路


游戏都需要一个开关去控制它,所以一个菜单界面是必不可少的,通过菜单去选择play还是exit。


而对于游戏的实现:


1.首先需要创建一个n*n的棋盘格,可以用二维数组实现,自定义它的大小


2.在玩家选择位置前,就要布置好雷的数量,随机埋下雷的位置,并用一个二维数组来存放布置好的雷


3.玩家通过提示,输入正确的坐标选择位置,如果选择的是非雷坐标,就显示出周围雷的数量,用一个二维数组来存放排查出的雷的信息(数量)


坐标选择后的状态有两种:


  • 选择的坐标是非雷的,显示周围雷的数量,一直到排查完所有的雷,即所有的坐标都选择完了且没有踩雷,游戏胜利
  • 选择的坐标是有雷的,游戏失败


2.1 准备工作

🍥 建立 test.c 源文件 – 测试游戏代码

🍥 建立 game.c 源文件 – 游戏的实现

🍥 建立 game.h 头文件 – 游戏函数声明


2.2 主函数设计

为了控制游戏的进行,我们设置一个菜单选项,选1时玩游戏,选择0,则退出游戏。


🍤 代码实现:


//test.c
int main()
{
  //菜单
  printf("----1. play----\n");
  printf("----0. exit----\n");
  //进行选择
  int input;
  printf("请选择:");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
    game();//游戏函数
    break;
  case 0:
    printf("退出游戏\n");
    break;
  default:
    printf("选择错误,请重新选择\n");
    break;
  }
  return 0;
}

当玩家想要一直玩游戏,该怎么办呢? 加入循环

同时,为了使主函数简洁明了,我们将菜单放在主函数外面,使用menu函数来实现

//test.c
void menu()
{
  printf("----1. play----\n");
  printf("----0. exit----\n");
}
int main()
{
  int input;
  srand((unsigned int)time(NULL));//设置随机种子
  do
  {
    menu();
    printf("请选择:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误,请重新选择\n");
      break;
    }
    system("cls");
    Sleep(100);
  } while (input);
  return 0;
}

🍤 菜单显示:

4534aa43fe6e35bb1dcfb280748620c5_46aeaeeb63854622a0f8f35d67363caf.png


2.3 设计棋盘

想打印一个9x9的棋盘格实现游戏,我们就需要先创建两个二维数组(11x11),一个存放布置好的雷,一个存放排查出的雷的信息。


为什么是11x11?

考虑到棋盘边缘的位置,周围并不能的格子不能都满足8个,所以为了防止在统计坐标周围的雷的个数的时候越界,所以让数组设计为11x11,这里的11x11并不会全部打印出来


ceb6d1d9519f2d88fdcf0a4c8ca766f5_9326ec73fa9b4c3f93660a35e5ab92ee.png


char mine[ROWS][COLS];//存放布置好的雷
char show[ROWS][COLS];//存放排查出的雷的信息

仔细观察就会发现,这里的数组大小为什么是ROWSxCOLS***,而不是11x11*呢?


在下面设计棋盘时,我们的大小与这里是相同的,而为了后期可以方便的调整大小,我们就在game.h文件中就定义这两个全局变量的大小


🍤 代码实现:


#define ROW 9//显示的棋盘大小
#define COL 9
#define ROWS ROW+2//棋盘真正大小
#define COLS COL+2

2.3.1 初始化棋盘

//game.c
void InitBoard(char board[ROWS][COLS],int rows, int cols,char set)
{
  int i = 0;
  for (i = 0; i < rows; i++)
  {
    int j = 0;
    for (j = 0; j < cols; j++)
    {
      board[i][j] = set;
    }
  }
}

🍤 调用:


//test.c
void game()
{
  char mine[ROWS][COLS];//存放布置好的雷
  char show[ROWS][COLS];//存放排查出的雷的信息
  //初始化棋盘
  //1.mine数组最开始全‘0’、
  //2.show数组最开始全‘*’
  InitBoard(mine,ROWS,COLS,'0');
  InitBoard(show,ROWS,COLS,'*');
}

2.3.2 打印棋盘

用DisplayBoard函数实现棋盘打印,为了玩家有更好的游戏体验,我们在棋盘格的最顶端和最左边提示坐标信息,方便玩家快速的锁定行列数。


//game.c
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
  int i = 0;
  printf("------扫雷^-^------\n");//文字提示
  for (i = 0; i <= col; i++)
  {
    printf("%d ", i);//顶端打印列数
  }
  printf("\n");//换行打印棋盘
  for (i = 1; i <= row; i++)
  {
    printf("%d ", i);//最左边打印行数
    int j = 0;
    for (j = 1; j <= col; j++)
    {
      printf("%c ", board[i][j]);
    }
    printf("\n");
  }
}

打印棋盘时,只用打印出9x9大小的棋盘格


//打印棋盘
DisplayBoard(show, ROW, COL);//打印棋盘函数调用


🍤运行结果:

d31f841fcb111e4f40f615c2b1d63d5c_ac51b4ee65bc479b8ba456aab510026f.png


相关文章
|
2月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
117 0
|
4月前
|
机器学习/深度学习 C语言
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
【8月更文挑战第5天】本篇文章用C语言采用多文件编写实现了一个基础的扫雷游戏(附源码),并讲解了关于函数递归的基础概念及其相对应的习题练习(附源码)
46 1
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
|
3月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
55 1
C 语言——实现扫雷小游戏
|
2月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
2月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
39 0
|
2月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
43 0
|
2月前
|
存储 编译器 C语言
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
39 0
|
4月前
|
C语言
扫雷(C语言)
扫雷(C语言)
47 4
|
5月前
|
存储 编译器 C语言
|
6月前
|
C语言
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
42 1