扫雷游戏(C语言)

       本篇文章要讲的是我在使用C语言实现扫雷游戏的思路,反思和收获。本人也是第一次完成扫雷游戏的编程,还有着许多的可以改进的空间希望大家可以指出一同改进。

思路:

1.打印菜单:

无论任何游戏都要有一个开始界面,并要具备着开始游戏和退出游戏的功能,这是必不可少的步骤,也是玩家对游戏的第一印象,所以至关重要;因此打印菜单虽然容易却要兼顾几点:1.有着进入游戏的选项 2.游戏的名字 3.退出游戏的选项。现在开始进行编程第一步:创建主函数,由于变量较多采用调用函数,利用printf打印游戏的界面,在通过字符的简单修饰后,开始打印选项:1.play game       2.exit       两个选项要想执行,就要用到循环和if或者switch语句。循环的作用是为了防止输入错误的选项如3或者4,而导致无法再次点击开始游戏。判断语句的作用就是根据选择在执行下一步,如果选一则开始游戏,选2则退出循环结束游戏,选1和2以外的数则再次循环直到选1或者2时在执行下一步。如下图,menu代表菜单,panduan()这个函数起到了选择选项并执行的作用;

2.创建棋盘。

当菜单的打印和选择功能的完善后,就来到了棋盘的创建部分;同样在panduan函数中选择了1后,由于程序太多仍采用调用函数的方法,设置game()函数来包含整个游戏的每一步编程部分;而第一步就是创建棋盘,要想创建棋盘就要创建数组,由于棋盘是一般为9*9或者10*10更大的形式,所以用二维数组创建;为方便后续调整难度即棋盘的大小,我首先创建一个头文件:game.h以声明自己创建的变量,再创建一个源文件用来完成游戏中每一步的函数的编程;因此在自己创建的头文件中加入#include<stdio.h>这样在源文件声明自己的头文件就行,不需再声明其他头文件;现在开始在头文件中创建变量  ROW   ROWS   COL    COLS 意思为ROW,ROWS代表行数,COL,COLS代表列数。至于为什么要有两个行数和两个列数,是因为要计算周围雷的个数时,比如9*9的规格,如果要计算第九行第九列时只有三个数格子,剩下的空白会给你随机值得到的答案就会不稳定;所以再创建一个变量代表实际规格,而雷的布置和棋盘的打印依然按照原来的规格进行操作;这样就可以避免选地址选到边缘就会出错给随机值的情况。在做好准备工作后,就可以开始数组的创建;由于一个棋盘无法完成所有的步骤,所以创建两个棋盘,一个用来放置雷和计算周围雷的个数,另一个负责打印出棋盘并打印出周围雷的个数。为了美观,创建两个字符型的二维数组,分别用'0'和'*'代表棋盘的初始变量。如图中的mine数组和show数组,ROW代表数字9,ROWS代表ROW+2,COLS和COL也是如此。而Onepiece代表创建数组的函数,由于数组的类型一样,因此用同一个函数可以节省不少时间,数组的规格都为ROWS*COLS;接下来先在头文件中声明Onepiece函数,再在创建的另一个源文件test.c中进行函数的执行;对数组的每一个数进行赋值为'0'和'*',完成数组的初始化。也完成了棋盘的创建。

3.打印棋盘:

棋盘创建完成后就该进行打印;由于创建了两个棋盘,但只能打印一个棋盘所以打印show棋盘,因为show棋盘的初始化为字符'*'除了美观外,对雷的计算和布置起不到有用的作用。mine棋盘作为布置雷和计算雷的个数的棋盘最重要的原因是因为初始化为'0'字符,在计算周围雷的个数时,只需让布置的雷代表字符’1‘,而无雷的地方为’0‘,计算时只需要将字符改为数字,数字之和就为雷的个数,节省了大量时间。关于如何将字符改为数字,需要在字符后减去’0‘字符就可以变为数字如:’1‘-’0‘=1。开始打印show棋盘,行和列都从1开始打印因为show数组规格为11*11而棋盘需要在9*9的规格之内才能保证在棋盘边缘的计算不会出错,打印到第10行和第10列(利用循环嵌套完成)。如图print()为打印的函数。

4.布雷。

布雷的位置一定要做到随机,因此不能手动输入或提前放置。这里用到了srand函数,还有头文件#include<stdlib.h>和#include<time.h>,形式为srand((unsigned int)time(NULL));声明过后,用法为令随机值x等于rand()%ROW+1,这样得出来的值的范围就会在1到ROW也就9之间;然后进行循环,为防止布置雷的地址发生重复,所以在循环的过程中用if语句判断是否重复,若重复则再多循环一次。如图:

图中COUNT为在game.h头文件中声明过的变量,指放炸弹的数量。

5.排雷:

最后一步也是最关键的一步,大概思路是在mine棋盘上输入随机的坐标(1到9之间)然后判断坐标是否是雷,若是雷则游戏结束,若不是雷则计算周围雷的个数并将其打印在show棋盘的相应位置上,接着输入下一坐标,直到除了雷之外的所有格子被输入完后游戏结束并成功通关。这里的计算思路:由于都是字符所以在计算是每个字符都要减去’0‘成为数字,又因为雷代表的字符是’1‘,所以只需要让他们的数字相加即可,不需要做出任何的变量。如图:头文件:以上就是我在制作扫雷游戏的大致思路,在制作过程中遇到了不少的麻烦和报错,在我不断的改动下完成了这个只具备基础功能的扫雷游戏,后续的开发空间还有很多,我也会慢慢改进这个游戏。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值