扫雷游戏——函数和数组的综合运用

1.扫雷游戏分析和设计

扫雷游戏的功能说明:

1) 使用控制台实现经典的扫雷游戏
2) 游戏可以通过菜单实现继续玩或者退出游戏
3) 扫雷的棋盘是9*9的格子
4) 默认随机布置10个雷
5) 可以排查雷:
        如果位置不是雷,就显⽰周围有⼏个雷
        如果位置是雷,就炸死游戏结束
        把除10个雷之外的所有雷都找出来,排雷成功,游戏结束

2.游戏的分析和设计

1) 数据结构的分析

扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。因为我们需要在9*9的棋盘上布置雷的信息和排查雷,我们首先想到的就是创建⼀个9*9的数组来存放信息。
012345678
0000000000
1000000010
2000001000
3010000010
4100000000
5000000001
6001000000
7000100000
8010000010
如果这个位置布置雷,就存放1,没有布置雷就存放0
假设我们排查(2,5)这个坐标时,访问周围的⼀圈8个黄色位置,统计周围雷的个数是1
假设我们排查(8,6)这个坐标时,访问周围的⼀圈8个黄色位置,统计周围雷的个数时,最下面的三
个坐标就会越界,为了防止越界,我们在设计的时候,给数组扩大一圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就行,这样就解决了越界的问题。所以我们将存放数据的数组创建成11*11是比较合适。

2) 文件结构的设计

test.c //文 件中写游戏的测试逻辑
game.c //文 件中写游戏中函数的实现等
game.h //文 件中写游戏需 要的数据类型和函数声明等

3.扫雷游戏的代码实现

1.编辑基本框架与试运行

在试运行之后,调节了一些语法错误和换行的问题,程序能初步正常运行。

2.初始化棋盘

这里我们采用⼀种⽅案,我们给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不干扰了,把雷布置到mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期排查参考。同时为了保持神秘,show数组开始时初始化为字符 '*',为了保持两个数组的类型⼀致,可以使⽤同⼀套函数处理,mine数组最开始也初始化为字符'0',布置雷改成'1'
在test.c中写大体逻辑,在game.c中实现函数

3.打印棋盘

由于只需将show棋盘呈现给玩家,故只需调用一个函数
考虑到最好要加一个纵横基准点,巧妙地采用了如下代码:
最终呈现的效果如下:

4.布置雷

布置雷的具体位置的时候需要用到随机数的生成,故要在主函数内加上srand函数

在game.c中通过count计数来完成雷的布置, 注意一定要避免重复!(后期才发现的问题)否则雷会少

5.排雷

此时,呈现给玩家的界面是布满 * 的未知雷区,且雷区已经布置完毕。玩家要输入坐标进行排雷,若该位置是雷,游戏结束,若该位置不是雷,要显示这个坐标周围有几个雷,当玩家输入完所有非雷区的坐标时,获得胜利。

上面是test.c中的文件,用于引用排雷函数,下面是game.c中的文件,为排雷函数的详细说明

4.总代码全览

1.test.c

2.game.c

3.game.h

5.问题总结

实际上,在起初设计改代码的时候,遇到了很多问题,后来才逐步解决
1.如何使得玩家看不到真实的雷区却能同步输入的信息?
答:创建两个雷区,一个放0,1,另一个放*,利用数组和函数将输入的信息同步到雷区。
2.排查边缘的雷越界怎么办?
答:将9*9扩展为11*11,多出来的放0。
3.含有常量的参数传参不熟练
4.‘0’ 和 ‘1’均为字符,以ASCII码形式储存,不能直接当成数字

  • 37
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 好的,关于MATLAB的问题,我可以回答。要创建一个空数组,可以使用以下语法:A = []。要创建一个行向量,可以使用以下语法:A = [1 2 3]。要创建一个列向量,可以使用以下语法:A = [1; 2; 3]。希望这可以帮到你。 ### 回答2: MATLAB是一种强大的数值计算和编程软件,可以轻松地创建空数组,行向量和列向量。 首先,创建空数组非常简单。只需使用双方括号([])即可创建一个没有元素的空数组。例如,使用以下命令创建一个空数组: ``` arr = [] ``` 接下来,使用MATLAB创建行向量。行向量是一个具有横向排列的一维数组。可以通过将元素用逗号或空格分隔,并将整个向量放在方括号中来创建行向量。例如,使用以下命令创建一个包含三个元素的行向量: ``` row_vec = [1, 2, 3] ``` 也可以按照以下方式创建行向量: ``` row_vec = [1 2 3] ``` 最后,使用MATLAB创建列向量。列向量是一个具有纵向排列的一维数组。为了创建列向量,需要将元素用分号分隔,并将整个向量放在方括号中。例如,使用以下命令创建一个包含三个元素的列向量: ``` column_vec = [1; 2; 3] ``` MATLAB还提供了一些便捷的函数和操作符,用于创建包含特定范围的向量和数组,例如linspace、range、colon等。使用这些函数和操作符可以更加灵活地创建所需的向量和数组。 总之,通过使用MATLAB的方括号语法和一些便捷的函数和操作符,可以轻松创建空数组、行向量和列向量。 ### 回答3: MATLAB是一种强大的数学软件工具,用于数值计算、数据分析和可视化。在MATLAB中,我们可以使用一些简单的命令来创建空数组、行向量和列向量。 首先,我们可以使用以下命令创建一个空数组: empty_array = []; 这个命令创建了一个没有任何元素的空数组。我们可以在后续的操作中用来存储数据。 接下来,我们可以使用以下命令创建一个行向量: row_vector = [ ]; 这个命令创建了一个没有任何元素的行向量。我们可以在方括号内添加逗号分隔的元素来填充行向量。 最后,我们可以使用以下命令创建一个列向量: column_vector = [ ]; 这个命令创建了一个没有任何元素的列向量。同样,我们可以在方括号内添加逗号分隔的元素来填充列向量。 总结起来,我们可以使用empty_array = []命令创建一个空数组,row_vector = []命令创建一个行向量,column_vector = []命令创建一个列向量。这些命令使我们能够在MATLAB中灵活地创建不同类型的数组和向量,并进行进一步的数学计算和数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值