扫雷游戏的实现(上)

简介: 扫雷游戏的实现

1.前言:扫雷游戏作为一款历史悠久的游戏,是我们很多人第一次接触电脑是玩的第一款游戏,作为一款简单,益智,逻辑性强的游戏,我们如何利用C语言去自己制作一款扫雷游戏呢?

2.大致思路:1.任何游戏,都需要包含几个方面:1.菜单栏目 2.游戏内容的构建 3.游戏进一步优化 ,我们一个一个来。

A.菜单栏:游戏菜单栏的实现,让我们思考一下我们玩游戏时的菜单栏是长什么样的,大致是以下的样子,我们可以看到。主要包含play开始和结束游戏以及更多的功能,但作为初学者,我们构建一个可以开始和结束的菜单栏即可

如图,我们首先构建三个文件,分别包括:test.c源文件(用来进行游戏整体的进程),hanshu.c源文件(用来构建一些游戏逻辑的函数),shengming.h头文件(用来进行函数和各种定义的声明方便两个源文件使用以及联系)

创建好后,我们就在我们的主文件test.c文件进行菜单的构建,注意,test.c文件就是整个游戏实现的主文件,起到指挥的作用,我们大致的思路就是把各种函数加入到主文件当中。

首先常规的构建C语言基本框架,由于我们要实现一个与菜单的交互,所以我这里采用了输入数字的形式,即为,我输入1开始游戏,输入0结束游戏,由分支循环的switch语句的特点,输入常量即可进入相对应的分支语句,完美契合了我们的要求,所以我们采用switch语句,同时,为了满足游戏可以不限次进行,我们也要在switch语句之外去嵌套一个循环语句,考虑到for,while循环的特点,我们的要求是无条件开始游戏,所以我们采用do while循环的方式去进行书写,这样的话第一次直接执行循环语句更加方便,如上图所示(注意,每一条分支结束后都要加break,这是switch的特点,否则会一直进行。同时,为什么要用0来结束游戏呢?这里也是利用了循环遇到0判定为假自动结束的特点,你若想用别的数字,只需要特殊赋值一下即可,同时,我这里是采用了一个枚举体来书写,初学的同学只要用1 0这些数字写即可。

下一步我们来构建一个菜单,菜单需要窗口,我这里用*来构建,首先我们在do while循环外侧调

用我们的菜单函数,由于不需要输入参数即为空括号,返回值为void,然后如上上图所示,构建菜单函数即可,菜单函数书写完毕后我们进一步执行,让我们对应输入一个数字1或0从而选择进入游戏或者退出游戏,利用scanf函数即可完成输入,完成后我们的效果如图

这一步完成后,我们的菜单就宣告构建完成了!下一步就是最关键的游戏部分的构建了!

2.游戏内容的构建:

首先先思考我们的菜单的构建,我们的思路就是输入1就开始游戏,输入0就结束游戏,假如我们进行游戏并胜利或者失败都会循环重新选择开始游戏还是结束游戏,所以,我们在case PALY这个分

支下进行游戏的书写,如上图,然后我们开始书写我们的game函数内容

如上图所示,我们可以清楚的看到,正如我前面所说,我们游戏的具体内容的实现是依靠一个又一个函数的按次序排列来实现的,这么多函数的使用,如果放在主程序test.c里就非常混乱,倘若我们以后想要优化或者修改的话效率很低,所以这个时候我们就要使用另外两个文件,hanshu.c源文件和shengming.h头文件,在hanshu源文件里,我们主要是书写游戏实现的一些函数内容,而在头文件里,我们则需要书写各种声明和定义,这里,我们首先说明一下我们的头文件。

如上图,这是我为扫雷游戏构建的头文件的整体内容,我们可以很清楚的看到,这里面都是定义内容和函数声明,到这里,我想头文件的作用就显而易见了,它相当于一个记录表,对应着各种函数和定义的门牌号,想要使用函数就需要这个记录表,所以,在我们的两个源文件里就要声明这个“记录表”,这样,就像头文件一样,我们的源文件就可以使用头文件里的全部内容,不报错,如图

我在两个源文件都引用了头文件,对于我们自己创建的头文件,在引用的时候不会像C语言提供的库函数声明一样,我们是本地创建的头文件,所以使用双引号" "来引用头文件名称,声明好后,我们不但可以使用头文件里面的#define定义的量,也可以直接调用我们在hanshu文件里的各种函数到我们主程序test.c中,就如同我最开始的图那样。好了,现在让我们正式进入游戏部分的构建吧

再次看这张图,注释部分已经为我们书写了这个游戏我们需要进行哪些方面的构建

1.棋盘的创建

在扫雷游戏中,我们首先需要一个限定范围的棋盘,我们这里就以最简单的9*9棋盘为例子,怎样创建棋盘呢?首先思考,棋盘的本质用我们学到的知识可以理解为什么呢?我认为利用二维数组再好不过,二维数组可以清楚的锁定9*9范围内的任意一个格子,所以,我们首先就是创建二维数组来保证掌控所有坐标。如上图1.注释即可,构建二维数组我们也要同时输入行列的数量,但输入行和列的时候我们又要思考一个问题:假如我点开一个位置可以扫描到周围8个格子,也就是3*3的范围,那么假如我输入边界只能扫描到6个格子怎么办?我当时的思考是,那就加一个if语句就好啊,但是如果加if语句的话,要另外书写一套程序,包括判定程序和显示周围有几个雷,这样太麻烦了,所以我们不妨在9*9的格子外在额外提供一圈,这一圈全设为空位没雷,这样的话,即使是我输入边界的坐标,它也能以3*3的范围扫描,直接节省了很多书写步骤,因此,我们构建一个11*11的二维数组,那输入行为11,列为11就好了?

你先等一等,那如果我要改为100*100呢?或者我要改为行列不相等的呢?你可能会说那就到时候再改不就可以了么?但那样的话操作起来很麻烦,扫雷游戏还好,倘若是更大的项目,你岂不是要一个数值一个数值去改?所以这里我们就要使用头文件来定义变量了,如图,打开头文件

由于我们的数组构建是11*11,但我们后续的布雷和排查用的是9*9,所以不妨利用#define首先定义行列都为9,这样我们以后使用ROW或者COL的地方即代表着数字9,同时,我们再定义ROWS COLS为ROW COL分别加2即为11,在后续的修改中,我们只要对头文件的定义进行修改,即可完成数值的修改,十分利于后续的维护。

如图这样,我们就完成了二维数组,这里你可能疑问为何要构建两个数组呢?由于我们是简易版本的扫雷,倘若都放在一张图里的话,棋盘会很乱,所以我们分开成两张棋盘,在第一张我们负责记录你要输入的位置以及周围有几颗雷,在第二张我们负责查看雷的布置,如下两张图所示:

我们的第二张棋盘是不会显示给你的,我们在游戏时只利用第一张棋盘去进行游戏的内容,只有在我们踩雷或游戏结束时才显示第二张棋盘。

目录
相关文章
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
2104 39
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
9月前
|
前端开发 UED 开发者
React 滚动监听 Scroll Listener
本文介绍React中实现滚动监听的方法,涵盖基本概念、常见问题及解决方案。通过监听`window`对象的`scroll`事件,开发者可以在用户滚动时触发自定义逻辑。文章详细探讨了冗余调用、组件卸载时未清理事件监听器、滚动位置不一致等常见问题,并提供了防抖、节流、保存滚动位置等解决方案。同时,强调了跨浏览器兼容性和性能优化的重要性,帮助开发者在实际项目中更好地实现滚动监听功能。
230 17
|
11月前
|
Kubernetes 负载均衡 Linux
【赵渝强老师】Docker三剑客
本文介绍了Docker容器中的三个重要工具:Docker Compose、Docker Machine 和 Docker Swarm。Docker Compose用于定义和运行多容器应用,通过YAML文件简化容器管理。Docker Machine支持远程主机上的Docker安装和管理,适用于跨平台使用。Docker Swarm则提供集群管理功能,实现负载均衡和故障迁移,适合大规模部署。文中还提供了相关示例和架构图,帮助读者更好地理解和使用这些工具。
193 2
|
Ubuntu Linux Shell
10-11|linux如何修改时区
10-11|linux如何修改时区
|
边缘计算 运维 5G
|
Java 编译器
公司新来一个同事:为什么 HashMap 不能一边遍历一边删除?一下子把我问懵了!(1)
公司新来一个同事:为什么 HashMap 不能一边遍历一边删除?一下子把我问懵了!
202 0
公司新来一个同事:为什么 HashMap 不能一边遍历一边删除?一下子把我问懵了!(1)
|
安全 Java 数据库
在Java中实现高并发的数据访问控制
在Java中实现高并发的数据访问控制
|
Web App开发 JSON 移动开发
mPaaS常见问题之加载不到uc 内核如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
285 0
|
存储 安全 异构计算
阿里云服务器2核4G、4核8G、8核16G配置最新收费标准及活动价格参考
2核4G、4核8G、8核16G配置的云服务器处理器与内存比为1:2,阿里云个人和普通企业用户在购买云服务器时通常比较喜欢选择2核4G、8核16G、4核8G等配置,这些配置既能满足各种图文类中小型网站和应用又能满足企业网站应用、批量计算、中小型数据库系统等场景,2核4G配置适合新手入门或初创企业,4核8G与8核16G兼具成本与性能优势,适合通用场景,本文介绍这些配置的最新购买价格,包含原价收费标准和最新活动价格。
1177 0
阿里云服务器2核4G、4核8G、8核16G配置最新收费标准及活动价格参考
|
机器学习/深度学习 PyTorch API
Torch
Torch是一个用于构建深度学习模型的开源机器学习库,它基于Lua编程语言。然而,由于PyTorch的出现,现在通常所说的"torch"指的是PyTorch。PyTorch是一个基于Torch的Python库,它提供了一个灵活而高效的深度学习框架。
551 1