c语言 简单扫雷的实现

引言:通过学习完之前的二维数组,我们就可以写一个属于自己的扫雷游戏啦,且听我细细说来。

了解扫雷的大致模式

c语言 简单扫雷的实现_第1张图片

从我们平常玩扫雷时不能发现,这个游戏首先是要我们先放雷,再排查雷。如果雷全被我们排查完了就算成功,如果未被排查完,就被雷炸死了gg了。

游戏主体是他的一步步的步骤(打出雷盘,排雷,查雷)我们就可以将他们单独划分为一个个的子模块,也就是函数。问题是这么多的函数放在一个.c文件里不会老眼昏花吗?这个时候我们可以运用之前学到的多个文件知识,再创建一个game.c(用来说明函数的定义)和一个game..h(用来声明函数),这样效率就会提高很多,同时逻辑也更清晰。

一.设置游戏界面进入游戏

我们玩游戏时都有一个界面来确定是否要进入游戏,也就是菜单我们可以用定义一个menu函数来表示菜单。

c语言 简单扫雷的实现_第2张图片

接下来如图所见1就是进入游戏,0就是退出,万一不小心输入成其他数字了咋办?这是我们可以想到可以用switch中的default,我们可以设立一个循环结合switch case如果default就继续循环,1就进入游戏,0就退出。

c语言 简单扫雷的实现_第3张图片

二.游戏game()具体细节的设置

 

1.一些问题

Q1:我们发现我们需要放雷,同时在排查雷的时候我们也要显示周围雷的信息,这就导致了信息歧义,那该怎么改进呢?

S1:我们可以设立两个二维数组mine和show,一个用来存储放雷的信息,一个用来存储排雷时雷的信息,这样就很好地解决了问题。

c语言 简单扫雷的实现_第4张图片

Q2:我们发现我们在排雷的时候会对周围8个雷进行排查,如果是对最后一行的雷排查呢?很明显会发生越界,这时该如何解决?

S1:我们可以想着给这个雷盘在套上一圈雷盘

c语言 简单扫雷的实现_第5张图片

如图 9x9可以改成11x11

考虑清楚这些问题,我们就可以开始动手了。

二.初始化棋盘和打印棋盘

1.初始化

创造棋盘我们首先需要给这些棋盘填进一些信息,才能把它打印出来。由于两个棋盘的作用不同,我们认为规定mine初始化都为0(为后面放雷做铺垫),show初始化为*。这个时候就运用到之前数组传参和函数传参的知识。

c语言 简单扫雷的实现_第6张图片

上文的ROWS和COLS是我们为方便使用,而在头文件定义的宏。

c语言 简单扫雷的实现_第7张图片

2.打印棋盘

打印棋盘时我们同样也是利用循环和函数传参的知识,但为了美观同时方便玩家游玩,我们可以加上坐标。

c语言 简单扫雷的实现_第8张图片

c语言 简单扫雷的实现_第9张图片

注意的是 i要从0开始不然对不齐

三.放置雷

由于是在9x9的棋盘里放雷,因此我们传的参数应该是ROW和COL。

c语言 简单扫雷的实现_第10张图片

c语言 简单扫雷的实现_第11张图片

我们发现每次开始新一轮时,我们放置的雷都要是随机的,这样玩起来有意思。怎么生成随机数来放雷呢,可以看我之前rand和随机数这篇文章随机数的生成-CSDN博客

由于是随机,我们要注意一个点就是,坐标是否合法?我们可以使用条件语句如果这个坐标没有放雷再放雷,同时我们要能做到放满10个雷后停止。这时我们用一种抽象思维,就是用一个变量的值来表达事件完成结果。

c语言 简单扫雷的实现_第12张图片

四.排查雷

排查逻辑:输入坐标-->检验是否有雷--->有雷就打印被炸死,没雷就显示周围雷的个数。

问题出在如何显示雷的个数呢?这时我们可以定义一个函数get_lei()用来返回雷的个数。具体实现细节是用字符转为数字的知识来实现 比如‘0’-‘0’=0 以此类推。

c语言 简单扫雷的实现_第13张图片

接着让show数组接收这个信息转化为数字

c语言 简单扫雷的实现_第14张图片

最好到雷排完就结束游戏这时也要用到我们之前提到的抽象思维。

c语言 简单扫雷的实现_第15张图片

至此我们的扫雷就基本完成啦,我们可以思考如何显示更多雷的信息,如何扩大排雷宽度等

快动动脑筋动手起来吧!

你可能感兴趣的:(c语言,开发语言)