扫雷小游戏最详细讲解【C语言】

※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入小游戏…

※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入小游戏开发学习模式。若有错误,请多多指教。小主使用的是VS2019编译器。

👍 点赞 收藏 📝留言 都是我创作的最大的动力!

目录

※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入小游戏开发学习模式。若有错误,请多多指教。小主使用的是VS2019编译器。

扫雷

简介:

游戏前的准备

第一步:编写主函数:

1)system("COLOR 0A");

2)gotoxy(54, 25);

switch

4)Sleep(1500);

第二步:游戏函数game();

1)雷盘 :

第三步:初始化雷盘、init_board()

第四步: 打印雷盘

第五步:随机布雷

第六步:玩家排雷

情况一:开始排雷

第一次踩雷,移雷函数

游戏失败设置

没雷,返回周围雷数和扩展周围坐标

游戏成功

情况二:标记

情况三:取消标记


扫雷

简介:

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

那今天让我们用已有的c语言知识来自己写一个扫雷小游戏

那么首先来了解一下扫雷游戏的原理;

设计效果:

游戏前的准备

1)游戏显示盘,用来提供给玩家。

2)随机产生规定数量的雷。

3)玩家输入一个坐标后的判断(即是否有雷)

4)第一次不能让玩家点到雷

5)若有雷,游戏结束界面,

6)若没雷,返回周围8格

7)若返回值为0,展开周围位置。

知道以上几点,让我们一起来写属于自己的扫雷游戏吧!

第一步:编写主函数:

1)system("COLOR 0A");

system头文件<stdlib.h>

其中COLOR后面的0是背景色代号,A是前景色代号

C语言代码颜色
0 黑色
1 蓝色
2 绿色
3 湖蓝色
4 红色
5 紫色
6 黄色
7 白色
8 灰色
9 淡蓝色
A 淡绿色
B 淡浅绿色
C 淡红色
D 淡紫色
E 淡黄色
F 亮白色

选择页面

运行起来的效果

3)gotoxy(54, 25);

作用:光标定位第25行第54列

1、在 Turbo C 或 Borland C 中可以使用 gotoxy 函数,包含在头文件 conio.h中。

2、而在 Visual C++ 或 GCC 中使用 gotoxy 函数,就需要把上面自定义的 gotoxy 函数写在自己的程序中。

下面这个 C 程序将在屏幕中第5行10列(横向为X,纵向为Y轴)中央输出“你好 陌生人”

4)switch

用input接收玩家的选择结果

如果 input为1 进入game游戏

如果input为2 退出游戏,注意while(input != 2)

如果input为其他值 输入错误,重新输入。

5)Sleep(1500);

程序停留1.5s,即提示信息1.5s后消失

不然直接接入循环看不见提示信息

主函数编写完毕,接下来让我们编写game();函数

第二步:游戏函数game();

我们先一起先做一个9*9的10个雷的简单版本。

1)雷盘 :

先定义两个一样大小二维字符数组一个用来存放随机产生的雷,另一个用来展示给玩家;

说明一下:我要想定义9*9的雷盘,就先定义11*11的二维数组,因为返回周围雷的个数时比较好写代码。

ROW和COL是宏定义,用来代表9;方便后期修改。

第三步:初始化雷盘、init_board()

注意:形参设置的量,加一个char c,可以自己在函数调用时设置初始化的内容

如:game()函数里的初始化一个是 ‘ 0 ’ 另一个是‘ * ’;

第四步: 打印雷盘

让我们先看一下成品图

1) 先用循环打印标记列的第一行的1 2 3 ……

2)然后打印一行分割行由 |- – -组成,别忘记前后都有 ' | '

3)第一个先打印显示行的i值。再循环打印‘ | %c | ’

4)这里注意打印出来的9*9是原数组的第2行到第10行的内容,不要打印错,即上下左右都要空出一行。

这里之所以一个元素一个元素的打印,不是一整行地打印就是为了要如果想打印规模大的棋盘只需要传入相对应规格的行列数值就行。

第五步:随机布雷

这一步比较简单,就是给随机产生的x,y坐标赋值为字符‘1’;

但要注意随机数的产生条件,和范围。

第六步:玩家排雷

这一步最为复杂,前面所准备的问题都要在这一步解决

例如:返回周围8格的雷数,判断是否踩雷,怎么何时扩展其他格的坐标,如何标记,怎么避免首步踩雷。

打印效果

再打印出雷盘让玩家做参考,

让玩家输入选择,用scanf(“%c”,ch);接收根据ch的值,分四种情况,分别是排雷, 标记, 取消标记, 输入错误,用if语句来实现。由于左侧是雷盘,需要gotoxy函数来指定光标的位置。做好后的情况如下

那我们接下来开始写排雷的代码

情况一:开始排雷

先让玩家输入坐标,分别用x,y接收横纵坐标值,用if语句来判断玩家输入的坐标是否在显示雷盘内,做不在提醒错误,请重新输入,若在这进行下一步判断即判断该坐标是否有雷,若有雷再分别讨论是否为第一步,若为第一步,则将该坐标的雷移到另一个位置,若不是第一步则结束游戏,若该坐标没有雷,则判断周围8格是否有雷,若有雷则返回周围雷数,若没雷则再向其他8格依次判断。最后判断游戏是否胜利。

​​​​​​​​​​​​​​第一次踩雷,移雷函数

游戏失败设置

fail()函数

运行效果:

游戏结束代码

展示效果:

没雷,返回周围雷数和扩展周围坐标

显示周围雷数,由ACSII码可知,周围8格的ACSII码和减去8个字符‘0’的ACSII码和就是周围的雷数。

扩展周围雷区:

一、要确定坐标是不是在规定位置内。不然很容易扩展过多

二、要注意我们要返回show【x】【y】的坐标是字符数字而不是整数,因为我们定义的是字符数组,且打印函数用的是%c,

三、判断递归的条件:count==‘0’,不是数字0。

实现效果:

游戏成功

Iswin()函数

效果:

情况二:标记

标记函数相对来说较简单:

首先判断标记雷数是否达到最大值,如果是提醒玩家无法标记,

其次让玩家输入要标记的坐标。要标记的坐标,并判断是否在显示的范围内,没有提醒玩家输入错误,

然后判断该坐标只有为‘ * ’即没有被翻开才能标记为' # '否则不能标记

情况三:取消标记

情况入表记所示:

完整代码扫雷https://gitee.com/never-give-in/routine/tree/master/%E6%B8%B8%E6%88%8F/MineSweeper

试玩: 扫雷试玩https://gitee.com/never-give-in/routine/blob/master/%E6%B8%B8%E6%88%8F/MineSweeper/Release/MineSweeper.exe

到这里又要和大家说再见的时候了,若有什么问题或者有什么修改建议可在博客下面评论或者私信小主,若小主看见定第一时间回复。

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/3902.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部