C语言实现扫雷小游戏

本文介绍了如何用C语言实现扫雷游戏,包括菜单设计、棋盘初始化、雷的布置以及排查过程中的逻辑。作者详细剖析了代码结构和关键函数的作用。
摘要由CSDN通过智能技术生成

朋友们,时隔几天,追秋又与大家见面了,这次追秋给友友们带来的是用C语言实现扫雷小游戏,欢迎各位朋友来给出自己的建议,话不多说直接上硬菜。

首先我们这次实现扫雷的代码放在三个不同的文件,分别来储存不同类型的代码,

 首先,源文件8-10.c是用来储存实现该程序的基本逻辑的代码,源文件game.c则用来储存源文件8-10.c中函数的实现,最后的头文件game.h则是用来声明一些基本常量和函数。下面我给大家一一介绍:

首先在源文件8-10.c还是老样子,先将大致模板给编写出来,在一步步实现具体的函数:

 其中的menu()函数时菜单函数,可以在进入页面给玩家打印一个基本的菜单,供玩家选择,效果如下:

 

 选择1开始游戏,选择0则退出游戏,而当玩家有其他输入选择时,终端会自动报错,提示玩家输入正确的选项:

 下面我们对扫雷部分的核心代码进行实现:

首先我们在玩游戏时当然会有一个棋盘的显示,玩家用该棋盘来进行博弈,那我们第一步就是先初始化棋盘的大小:

 下面我给大家分析一下这部分代码:

首先创建一个mine数组用来当作棋盘布置的根基,其中ROWS,COLS,则是在头文件game.h中定义,

因为我们这次设计的扫雷的棋盘大小为9*9,而在我们后续的使用中会用到11*11的棋盘的大小来便利我们的后续的计算和程序的实现(这个等会追秋会给大家细细讲解)。

而在头文件中定义的参数和声明的函数要想在使用时必须在该文件中包含该头文件,格式和方式如下:

 这样子我们在头文件中声明的函数和参数就可以整场使用了。

下面来给大家讲解棋盘的设计思路和代码分析:

为什么要设计mine和show两个棋盘,还有9*9和11*11的参数定义,因为在设计扫雷游戏的时候,我们mine棋盘里面放置的是字符'0',我们将雷(就是我们要排查的)设计成字符'1'的形式,如下图所示:

当玩家进行扫雷游戏的时候,会显示排查出的地方周围的雷的个数(如下图), 

,而这个数字如果存入我们的mine棋盘中的时候,会将系统的算法难度加大,不易实现空格和雷的区分,因此我们需要另一个棋盘来另外放置雷的个数,也就是show棋盘,这也是玩家可以看到的棋盘画面,如图:

 show棋盘的大小和mine一模一样,因此不会出现数组越界和算法不同的问题,在后续的功能实现的时候可以沿用同一个函数。

而在定义棋盘大小的时候,我们定义了ROWS和COLS来确定棋盘的大小,而ROW和COL则是展示棋盘的一部分的大小,

 

下面来给大家讲解为什么要这样定义:

当玩家在玩游戏时,系统会统计排查出的安全位置的周围的雷的个数,而当玩家对棋盘的边缘(也就是显示在玩家面前的棋盘)进行排查的时候,则会导致系统在计算时出现数组越界的情况,若是程序员自己愿意花时间去设计程序的话当然可以,但那样做不仅效率低且算法过于复杂,因此在定义数组大小的时候就额外定义一圈的数组,而给玩家展示的仅仅是完整棋盘的一部分,

 其中圈内部分是展示给玩家的页面大小,外围部分玩家不可见。

现在棋盘布置好了,下面我们来布置雷:

在程序设计的时候,给雷的数量也是给到一个参数的定义,同样是在头文件gane.h中定义,如下图:

 其中雷的个数是固定的,玩家无法更改。

下面是实现雷的布置的代码部分:

这个代码是主函数中的函数设计顺序,实现布置雷的代码在源文件game.h中实现:

 其中参数rand()需要包含的头文件和srand()引用在头文件和主函数中包含:

这样我们就完成了雷的布置,将棋盘中放置了程序员想要的雷的数量:

 下面我们进行下一步,雷的排查,下面是相关代码:

 其中在计算雷的数量的时候我们另外设计了一个函数:

该函数用来计算排出部分周围的雷的数量,只对被该函数调用,因此用static修饰是之成为静态函数。

在排查雷的过程中,若排查到雷,系统会提示玩家游戏失败,同时弹出初始界面提示玩家是否要进行新的一轮的游戏:

当玩家排查范围超过所给棋盘大小时,系统会提示玩家,让玩家重新排查:

而当玩家排完全部的雷时,系统也会给出相应的提示:

好了,今天的分享就到这里了,期待和大家的再次相见!!!!

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值