C语言实现扫雷游戏详细流程

2022-05-06 17:08:41
目录
前言
头文件部分
主函数部分(源文件)
函数定义(原文件)
1.菜单打印
2.初始化棋盘
3.打印棋盘
4.生成地雷
5.数雷并赋值给trueboard
6.排查雷区
7.展开
8.判断输赢

前言

嘿!是不是写扫雷小游戏的时候发现一个个输入太慢了?是不是想要展开却发现陷入了死递归?让小黄教教你怎么巧妙地解决这个问题吧!

其实总结起来就是一句话“可以让计算机多判断,但是不能让他多算”。只要每次判断一个格子周围雷数的时候赋值到另一个棋盘,后续递归的时候就不判断这个地方的棋盘就解决啦!

PS:采用了多文件的编写方式哦~​

头文件部分

“简单“”对游戏做了一个“小小的”提升,添加了可自行选择棋盘的大小,以及游戏时可以选择如何排查,存疑,确定操作,这样才能算真正的扫雷嘛。

#pragma>

主函数部分(源文件)

其实写完之后才发现hang,lie,mines没必要提前宏替换哈哈哈哈哈,因为为了实现棋盘大小的设定,所以传参略略有些多。

这一部分其实就是游戏的大体框架,也就是游戏的过程,函数的定义部分我放在了另一个源文件内

#defiyfdnIfjne>

函数定义(原文件)

1.菜单打印

就是几个不同的选择界面啦~

#define>u() { printf("#################################n"); printf("###########0.结束游戏############n"); printf("###########1.开始游戏############n"); printf("#################################n"); } void menu2() { printf("#################################n"); printf("######## 请选择游戏难度 #########n"); printf("########## 1.简单模式 ###########n"); printf("########## 2.普通模式 ###########n"); printf("########## 3.困难模式 ###########n"); printf("########## 4.自定义模式 #########n"); printf("#################################n"); } void menu3() { printf("#################################n"); printf("###### 请选择您要进行的操作 #####n"); printf("########## 1.排查雷区 ###########n"); printf("########## 2.雷区确定 ###########n"); printf("########## 3.雷区存疑 ###########n"); printf("#################################n"); }

2.初始化棋盘

void>

3.打印棋盘

void>

4.生成地雷

void>

5.数雷并赋值给trueboard

这里是一个优化过程,先计算好每一个格子周围的雷应该是多少,赋值给trueboar,玩家排查的时候只需要从trueboard中找对应点位就好了。避免了每次排查时需要计算周围的雷数所造成时间上的浪费。

void>

6.排查雷区

如果扫到雷,就把雷的位置给到showboard上面,让玩家死的明明白白哈哈哈哈啊

int>

7.展开

只要排查点对应0时才需要判断是否展开,是则必定九宫格内没有雷,展开九宫格,然后对九宫格进行一个判断,如果存在0并且,在showboard上九宫格内存在没有排查的,就进入递归,这样的话,最多递归次数就是棋盘的长,到达边界后就会返回上一层paic2,不会出现指数增长式的递归导致栈溢出

void>

8.判断输赢

如果showboard上面存在没有被排查的地方,也就是对应字符小于0或大于9且不为‘@’,并且trueboard对应点位不是雷;或者已经排查,但是排查错误,也就是对应字符‘@’,但trueboard对应字符不是雷,就说明没有排查完,均会返回0,表示需要继续

int>到此这篇关于C语言实现扫雷游戏详细流程的文章就介绍到这了,更多相关C语言扫雷内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!