介绍
利用C语言实现一个可展开的扫雷小游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
C语言是什么
C语言是一门面向过程的,抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译,处理低级存储器。
#一,游戏的思路
先理清游戏大概需要实现的功能,菜单功能的实现,棋盘初始化,打印棋盘,布置雷等。运用两个数组,一个放入布置雷的信息,另一个放入排查雷的信息。选一个坐标扫雷,坐标有雷则游戏结束,没有就计算选中坐标的周围8个格子中雷的总数放入选中的坐标中,若选中的坐标周围8个格子中都没有雷则自动展开。考虑到棋盘边框的情况,实际数组要比打印出的棋盘多两行两列。
<强>行,坳为打印行、列、行、关口为实际的数组行列
EASY_COUNT为雷的个数,可根据需要调整行列和雷的个数强>
# define ROW 9 # define COL 9 # define ROWS 行+ 2 # define COLS 坳+ 2 # define EASY_COUNT 10 # include# include # include # include void InitBoard (char 董事会(行)关口,,int 行,,int 关口,,char 集); void DisplayBoard (char 董事会(行)关口,,int 行,int 坳); void SetMine (char 董事会(行)关口,,int 行,int 坳); void FindMine (char 我(行)关口,,char 显示(行)关口,,int 行,int 坳); void ExcludeMine (char 我(行)关口,,char 显示(行)关口,,int x,, int y);
二、游戏测试
游戏实现的大致思路体现和菜单的实现,代码如下:
# define _CRT_SECURE_NO_WARNINGS 1 # include" game.h" void 菜单() { ,printf (“# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \ n"); ,printf(“# # # # # #, 1只play 0. exit # # # # # # \ n"); ,printf (“# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \ n"); }//布置雷,安康;字符组存储,安康;雷用1表示,非雷用0表示,安康,最外层一圈放0//排查雷,安康,为避免歧义,再用一个字符组存储排查出来的雷的信息,安康;未排除的用#表示//最外层加一圈字符,只在中间设置雷,并打印展示棋盘中间位置,因此实际存放数组要比打印的棋盘多两行两列 void 游戏() { ,//雷的信息存储//1。布置好的雷的信息 ,char 我(行)[关口],=,{,0};//2。排查出的雷的信息 ,char 显示(行)[关口],=,{,0}; ,//初始化 ,InitBoard(行,我还以为,关口,& # 39;0 & # 39;); ,InitBoard(关口,,,行,,& # 39;# & # 39;); ,//打印棋盘 ,//DisplayBoard(我的,,行,上校);//测试使用 ,DisplayBoard(显示,,行,上校); ,//布置雷 ,SetMine(我的,,行,上校); ,//DisplayBoard(我的,,行,上校);//测试使用 ,//扫雷 ,FindMine(我的,,,,,,上校); } void 测试() { ,int input =, 0; ,将srand ((unsigned int)时间(NULL)); ,做 ,{ ,菜单(); ,printf(“请选择:在“); ,scanf (“% d",,,输入); ,开关(输入) ,{ ,case 1: ,游戏(); ,printf(“将返回主菜单\ n"); ,睡眠(5,*,1000); ,打破; ,case 0: ,printf(“退出游戏\ n"); ,打破; ,默认值: ,printf(“选择错误,请重新选择\ n"); ,打破; ,} ,}while (输入); } int main () { ,测试(); ,return 0; }
三、游戏流程
存放函数的源文件需要引用头文件
# define _CRT_SECURE_NO_WARNINGS 1 # include “game.h"
<强> 1。初始化棋盘强>
void InitBoard (char 董事会(行)关口,,int 行,,int 关口,,char 集) { ,int 小姐:=,0; ,int j =, 0; ,for (小姐:=,0;,小姐:& lt;,行;,我+ +) ,{ ,for (j =, 0;, j & lt;,关口;,j + +) ,{ ,董事会[我][j],=,设置; ,} ,} }
<强> 2。棋盘打印强>
void DisplayBoard (char 董事会(行)关口,,int 行,int 坳) { ,int 小姐:=,0; ,int j =, 0; ,//打印列号 ,for (小姐:=,0;,小姐:& lt;=,坳;,我+ +) ,{ ,printf (“% d “,我); ,} ,printf (“\ n"); ,for (小姐:=,1,,小姐:& lt;=,行;,我+ +) ,{ ,printf (“% d “,我);=,for (j 1;, j & lt;=,坳;,j + +) ,{ ,printf (“% c “,董事会[我][j]); ,} ,printf (“\ n"); ,} }利用C语言实现一个可展开的扫雷小游戏