C语言编写“扫雷”游戏

整体架构流程

“扫雷”游戏的编程,扫雷游戏有多种规格大小,我们本次运用C语言编写的是9*9规格的扫雷游戏。我们把程序分为三个文件test.c源文件、game.h头文件、game.c游戏主要函数代码。整个游戏我们需要建立showboard显示棋盘和mineboard布雷信息棋盘。显示棋盘就是字面上的、将棋盘信息反馈给用户,例如选择的坐标周围的雷的个数;布雷信息棋盘,就是用于布置雷以及排查雷时候的鉴别坐标是否为雷的作用。用两个二维数组表示两个棋盘,两个棋盘的设置具体看下文。具体分文件看下图:

编写test.c文件

在test.c文件中建立主函数,主函数里建立一个整型变量input,input用于往后用户选择进入和退出游戏;接着建立一个随机数,随机数的建立是运用rand函数,用srand来设置种子,以time时间函数为种子,根据时间戳改变随机数。

接着进入一个do-while循环语句。

1.进入语句首先输出菜单,菜单以一个menu函数建立,menu函数无返回值,只要是用来打印菜单信息,供玩家选择,menu菜单如下图,可根据个人选择设置菜单。

2.打印出“请输入:>”,在进入scanf函数,玩家输入input值。

3.进入switch选择语句,判断条件是变量input,这个语句是玩家选择进入/退出游戏的通道。

如果用户输入“1”,程序进入case1打印“祝您游戏愉快!”,进入game函数,进入游戏;如果用户输入“0”,程序进入case2打印“退出游戏!下次见!\n”,退出游戏;用户输入其他数字,程序进入default打印“输入错误!请重新输入:>”,语句循环,用户重新输入。

        接下来我们对game函数进行建立,game函数内的定义的函数将会再game.c文件内进行定义,这里仅仅是对游戏需要的函数进行申明。

1.建立两个二维字符数组,数组个数ROWS和COLS在文件game.h会进行定义,讲数组个数设为变量是为了方便以后编写其他规格的扫雷游戏。

2.初始化mine和show棋盘,将mine棋盘初始化为"0",将show棋盘初始化为“*”,当然这边只是对初始化棋盘函数的申明,主要初始化函数定义在game.c文件内。

3.布置雷,这边主要是对mine棋盘布置雷的棋盘的函数的申明。

4.展示棋盘信息,对mien和show棋盘内的信息进行展示。

5.排查雷,也是游戏的核心,这边是对函数的申明。

编写game.h头文件

到此test.c文件内的信息已经编写好了,接下来我们一起编写game.h头文件,来对游戏需要的库及变量进行定义。

在game.h头文件中对变量和函数进行定义和申明。

解释一下ROWS和COLS为什么比ROW和COL多两格,因为在排查雷的时候是对选中的为的位置3*3的范围内进行排查雷的个数,在9*9边界会有格出界,为了防止出界,在每行和每列加两行,因此ROWS和COLS比ROW和COL多两格。

编写game.c文件

编写完了game.h文件,接下来我们来编写最重要的game.c文件,这个文件是整个游戏的核心代码,是非常重要的。前面可以说是在为这个文件做铺垫,game.h文件是将前面的函数进行具体化,对函数进行定义。

1.编写InitBoard函数:定义i,j变量,利用for循环语句,对mine和show棋盘进行初始化。

2.编写DisplayBoard函数:该函数是展现mine和show两个棋盘的函数,也是定义i,j变量,利用for循环语句对两个二维数组也就是棋盘进行打印,注意的是打印字符需要“%c”,在每行后面需要换行“\n”。

将展示棋盘的函数进行优化,让观感更好,而且容易锁定坐标,打印出行号和列号,优化后的代码如下图

3.编写 SetMine函数:这是一个布置雷的函数,运用前面的srand函数随机数来布置雷的位置。设置count变量作为雷的个数。输入了int x和int y变量作为棋盘坐标,int x = rand() % row + 1;中+1是因为我们在显示棋盘的时候在前面加了一格,我们需要9*9对齐,所以+1。接着运用if语句,如果随机数的坐标内不是“0”,则在随机数选择的坐标设下雷,也就是将“0“变成“1”作为雷,当设置一枚雷之后,count--未设置的雷的次数减1。直到count为0时,不再进入while循环语句,函数结束。

4.编写GetMineCount函数:如果所选坐标不是雷,不是“1”的话,利用GetMineCount函数,该函数是统计所选坐标3*3范围内存在的雷的个数,字符'0'和'1'相差1,所以统计3*3范围内(除去所选坐标)的和减去8个字符'0',就是周围雷的个数。

 5.编写FindMine函数:FindMine函数是扫雷游戏的核心,是用户选择坐标位置,排查坐标是非为雷的核心,函数利用if判断语句,判断是否为雷,若为雷则游戏结束,若不为雷则统计坐标3*3范围内雷的个数。

 对函数代码进行优化,加入了测试次数,如果测试的正确次数达到了要求则游戏胜利。

技术细节

  • do-while,while,for循环语句的使用
  • if,while分支判断语句的使用
  • 函数的嵌套、定义、申明
  • 数组的运用,二维数组的拓展
  • 数组的输入输出
  • 头文件的申明
  • 变量的定义

小结

“扫雷”游戏是综合性的一个编程,本次编程运用c语言,考验程序员的思维逻辑、基础语法、语法的运用、函数的调用申明和定义,咱未涉及指针,是一个初学者的很好的练习编程题。代码还可以继续优化和更改,因为现在知识有限,暂时做到这边。这些代码可能有出现错误的,可以在评论区反馈一下,会及时做更改!!谢谢。可以联系QQ:3229517681,电话:18059608822.

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值