简易扫雷游戏的实现-----C语言

   59f7a7034f8f4a3ebed09dd22a584593.png

bbefed598c4f43fa82b00bd7161d16d9.png 

     ♛ 扫雷的基本原理说明
     使⽤控制台实现经典的扫雷游戏
     游戏可以通过菜单实现继续玩或者退出游戏
     扫雷的棋盘是9*9的格⼦
     默认随机布置10个雷
     可以排查雷
     如果位置不是雷,就显⽰周围有⼏个雷
     如果位置是雷,就炸死游戏结束
     把除10个雷之外的所有雷都找出来,排雷成    功,游戏结束
1  首先设置游戏开始界面,如图所示:

da31fd9ce66141b88409bc277df15a5f.jpg

2 设置一个选择界面
让用户选择,如果用户输入1,则开始游戏,输入0则退出游戏,输入其他,则显示输入错误,请重新选择
可以用do...while循环语句和switch选择语句实现
我们可以用一个menu( )函数,将开始界面装起来
如图所示:

44e70b14e92541fda86700116978a0ac.png


3  进入游戏后
3.1  如果选择1,则进入游戏,可以用一个game( )来实现,由于game函数里面内容太多,所以在game里面使用自定义函数来分装,由此我们可以新建一个add.h头文件和add.c文件来声明和定义这些函数

为了方便更改变量数值,则可以在add.h中进行宏定义,使用时引头文件#include "add.h"

4b17a8323fd041ab94e7845b191adc1b.png

 
3.2  如图所示,扫雷游戏里面一般在ROW行COL列棋盘里查找雷和布置雷,可以用数组来实现,由于用1表示雷,0表示非雷,在计算周围有几个雷的时候,如果有一个雷,显示为1,会与雷(1)产生冲突,所以我们就用两个数组来实现查找和布置雷由于查找边界位置雷,会出现越界情况,所以需要多加两行两列。

3.3  对棋盘就行初始化
声明,定义一个函数Initboard(  )进行初始化,雷未布置前,mine数组最开始全是‘0’
向用户展示的页面全被遮挡,所以show数组最开始全为‘*’

88ac8f1bcd2642189dd502bf7216cb0f.png

 

3.4  打印棋盘
我们可以将两个棋盘都打印出来看看是否正确,在这里可以自定义一个printboard(  )函数,最后向用户展示的为遮挡界面。

0d0991f94fb145eeb4ca84e203bdb906.png

3.5布置雷
自定义一个函数SetMine(  ),把雷随机放入,需要引用库函数rand(  )将雷随机放入ROW行COL列的棋盘里。要产生1---ROW的随机数,所以rand(  )%row+1;要产生1---COL的随机数,所以
rand(  )%col+1,如果arr[row][col]里为0,就可以布置雷,布置EASY_COUNT个为止

4eb90f4f21f14969b5dd1699c011f64e.png

✔✔✔✔✔✔✔
3.5.1 rand函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。之所以每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1,如果要⽣成不同的随机数,就要让种⼦是变化的。引用头文件 include <stdlib.h>
3.5.2  srand
C语⾔中⼜提供了⼀个函数叫 srand,⽤来初始化随机数的⽣成器.
程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就⽭盾了
3.5.3    time
在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。在C语⾔中有⼀个函数叫 time ,就可以获得这个时间。引用头文件# include <time.h>
✔✔✔✔✔✔✔
3.6   排查雷
使用自定义函数FindMine(  )在棋盘里面排查雷,输入的坐标在规定范围内,超过就是非法坐标,当排查的次数小于等于ROW*COL - EASY_COUNT,排雷成功,否则就被炸死了,并显示雷的排布。
如果选择的该位置没有雷,则需要输出周围雷的总数。

85ff1316708b4490b157d594a94f8842.png

 最终代码为:

548835c199564e6cb7f3deccea7d5e96.png

6551a1da17e049d7aa52ec5e266e5061.png 

4c37b43b3f4c48fb80dc8b11277c9397.png 

a251861b957d4d1fb90f13f618961ddb.png

8480a78518444563b0878f95b3fca990.png 

 

 

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值