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

本文介绍了如何运用函数数组和模块化设计在一个文件中实现扫雷游戏,包括选择界面、雷区布局、随机埋雷、雷数统计和游戏结束条件。通过9x9棋盘和字符数组,展示了游戏开发的基本步骤。
摘要由CSDN通过智能技术生成

引入

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

构思

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

我们一共创建三个文件

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(完整代码)

 

 

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值