首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >函数和数组实践 --扫雷游戏

函数和数组实践 --扫雷游戏

作者头像
prettyxian
发布2025-12-30 19:13:38
发布2025-12-30 19:13:38
640
举报
文章被收录于专栏:QTQT

引入

扫雷是一款流传度较广的小游戏,我们大多玩过或听说过,学习了函数数组之后,现在让我们一起动手做一个扫雷游戏把。

构思

在开发工作中要在一个文件中实现各种功能太过冗杂,在各种大型项目中,都会用到模块化实现,(模块化实现是一种软件设计和开发的方法,它将一个大型系统划分为较小的、相互独立的模块。每个模块都具有特定的功能,并且可以独立地开发、测试和维护。模块化实现的目的是提高代码的可重用性、可维护性和可扩展性。)

我们一共创建三个文件

test.c文件用来写出游戏的结构。

game.c用来实现游戏需要的各种功能。

game.h用来包含game.c和test.c中所用到的函数的头文件。

到这里,我们就有了整个游戏的框架

开发

首先,作为一个游戏,要有一个选择界面让玩家选择,是“开始游戏”还是“退出游戏”

我们让玩家输入一个值‘0’表示退出游戏。‘1’表示开始游戏。此处用switch()实现

扫雷游戏据有不同的难度,这里我们以9X9的棋盘中有10个雷为例。仔细观察我们的棋盘,我们发现它可以由数组来实现。如何用数组来实现呢?我们发现呈现给玩家的界面是无法观察出雷的布局的,所以说呈现给玩家的和雷的实际布局是分开实现的。可以用两个字符数组,数组show用来呈现给玩家,数组mine用来埋雷(储存雷的信息)。

在9x9的棋盘中我们如何埋雷呢?可以用0和1来表示,0表示这个位置不是雷,1表示这个位置是雷。show 数组中全部用*初始化。

我们数组的大小该设置成多少呢?

如果设置成9X9那么我们求图中所指位置周围的雷数不方便求,所以我们选择11行11列的数组

同时,为了方便观察,我们将行号和列号打印出来

执行后,这样是不是容易找到每个点的坐标了呢。

如何确保我们每次产生雷的位置是随机的且个数是10呢?

我们可以用rand()函数(在头文件<stdlib.h>中)生成随机数i,j用mine[i][j]来埋雷,同时使用for()循环结构来保证雷的个数是10,但是注意,rand()生成的并不是真正的随机数,而且每次自动设置随机数种子(seed)为1(这样每次产生的随机数都一样,埋雷的位置不会变),srand()可以改变随机数种子,可以利用时间time()(在头文件<time.h>中)的返回值作为种子(时间时刻在变,这样产生的随机数大概率每次都不同)。

在扫雷游戏中,如果我们排查的位置没有雷那么会在这个位置,显示周围8个位置雷的个数,我们通过一个函数来实现,直接返回周围8个位置的雷个数,注意:我们前面创建的是字符数组,返回的值是ASCII码值,字符减去字符‘0’才是我们所求的。

接下来我们就可以开始排雷了,我们让玩家输入坐标,如果这个为位置没有雷则显示出周围雷的个数,游戏继续,如果这个位置是雷则游戏结束。

如果一直没遇到雷,什么时候游戏结束呢,我们可以创建一个变量 (int win = 0),当排查依次后,win++,最后当win == 9X9 - 雷数的时候。玩家排雷结束,游戏结束。

https://gitee.com/yu-guangxian/winter-vacation-class.git(完整代码)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入
    • 构思
      • 开发
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档