C语言如何实现一个简单的扫雷游戏
发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章给大家分享的是有关C语言如何实现一个简单的扫雷游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、扫雷的基本思路1、用C语言实现简单的扫雷,我们需要创建两个数组,
千家信息网最后更新 2024年11月18日C语言如何实现一个简单的扫雷游戏
这篇文章给大家分享的是有关C语言如何实现一个简单的扫雷游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、扫雷的基本思路
1、用C语言实现简单的扫雷,我们需要创建两个数组,一个数组存放雷的信息,另外一个数组存放排雷后结果的信息。
2、在创建数组时候,需要注意的是数组需要大一圈,什么意思?举个例子,比如说我们实现的是9 ×9的扫雷,那么我们的数组就得创建10×10。为什么呢?
原因如下:
因为我们在实现排雷功能的时候,需要位置某个位置的八个方向遍历一次,如果9×9的数组的话,在边上遍历的时候就会出现数组越界,因此我们需要在设计的时候大一圈,避免数组越界。
【图解】
二、扫雷的基本实现思路
1.创建三个文件
test.c
game.c
game.h
2、实现界面
3、创建棋盘
4、初始化棋盘--函数实现
5、布置雷--函数实现 雷的位置是随机生成的,所以这里用到随机生成的函数srand,还有time函数--时间戳(这个之前文章讲个一次,大家如果不知道的话可以翻我之前文章或者上网查查)
6、排查雷--函数实现
三、代码实现
1、test.c源文件中
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//界面实现void menu(){ printf("***************************************\n"); printf("********** 1.play ***********\n"); printf("********** 0.exit ***********\n"); printf("***************************************\n");}void game(){ char mine[ROWS][COLS] = { 0 };//存放雷的信息,开始全放0 char show[ROWS][COLS] = { 0 };//存放排查出雷的信息,开始全放* //初始化棋盘 InitBoard(mine, ROWS, COLS, '0'); InitBoard(show, ROWS, COLS, '*'); //打印棋盘 //DisplayBoard(mine, ROW, COL); //布置雷的个数 SetMine(mine, ROW, COL); DisplayBoard(show, ROW, COL); //排查雷的个数,也就是扫雷 FineMine(mine, show, ROW, COL); //排查雷的时候,需要设计两个棋盘 //在第一个棋盘找到雷的信息,再放去第二个棋盘记录下来 //不管我们怎样操作,我们操作的棋盘始终是ROW,COL}int main(){ int input = 0; srand((unsigned int)time(NULL)); do { printf("请输入选择:"); scanf("%d", &input); switch (input) { case 1: menu(); printf("扫雷游戏\n"); game(); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,请重新输入!"); break; } } while (input); return 0;}
2、game.h头文件中
#define _CRT_SECURE_NO_WARNINGS 1#include#include #include //数组的大小#define ROW 9#define COL 9//数组的大小#define ROWS ROW+2#define COLS COL+2//布置雷的个数#define EASY_COUNT 10//初始化棋盘void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷的个数void SetMine(char board[ROWS][COLS],int row,int col);//扫雷void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
3、game.c源文件中
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//初始化棋盘void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){ int i = 0; for (i = 0; i < rows; i++) { int j = 0; for (j = 0; j < cols; j++) { board[i][j]=set; } }}//打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col){ int i = 0; printf("------------------------------------------\n"); for (i = 0; i <=row ; i++) { printf("%d ", i); } printf("\n"); for (i = 1; i <=row; i++) { int j = 0; printf("%d ", i); for (j = 1; j <=col; j++) { printf("%c ", board[i][j]); } printf("\n"); } printf("------------------------------------------\n");}//布置雷void SetMine(char board[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { //生成随机下标(1-9) int x = 0; int y = 0; x = rand() % row + 1; y = rand() % col + 1; //在下棋的时候,先判断位置是否有雷 if (board[x][y] != '1') { board[x][y] = '1'; count--;//只有布置成功才--,不能循环外面,因为如果放循环外卖,可能只循环一次 } }}//获取排查位置八个方向的雷的个数int GetMineCount(char mine[ROWS][COLS], int x, int y){ return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');//算出的结果就是里面的数字相加}//排查雷void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){ int x = 0; int y = 0; int win = 0; while (win= 1 && x < row&&y >= 1 && y <= col) { if (mine[x][y] == '1') { printf("很遗憾,你被炸死了\n"); DisplayBoard(mine, ROW, COL); break; } else { int count = GetMineCount(mine,x,y); show[x][y] = count+'0';//将数字变成字符 DisplayBoard(show, ROW, COL); win++; } } else { printf("坐标非法,请重新输入"); } } if (win == row*col - EASY_COUNT) { printf("恭喜你,排雷成功!"); DisplayBoard(mine, ROW, COL); }}
感谢各位的阅读!关于"C语言如何实现一个简单的扫雷游戏"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
棋盘
数组
扫雷
时候
个数
位置
信息
函数
输入
语言
文章
循环
生成
成功
两个
内容
大小
思路
数字
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
制定网络安全审查目标
查询数据库多少个实例
软件开发人员叫什么
网络安全与执法西南政法
网络安全人员背景调查报告
软件开发实习刚转正工资6
安卓手机服务器数据解析失败
专科工业软件开发就业方向
关于网络技术的大专学校
如何附加sql数据库
戴尔服务器报修电话
消防支队信息化网络安全建设
jsp页面修改数据库
直播平台软件开发方案
服务器采购建设方案
服务器托管资质
青岛服务器托管
科技新冠互联网
子长市网络安全和信息化工作中心
请谈谈你对软件开发的认识
帮记软件开发
广西十大网络安全公司
网络安全的网购
数据库中数据管理的名词解释
网络安全调查实践笔记
两会期间网络安全总结报告
海银财富软件开发加班
网络技术在校三年目标
河北办公系统软件开发公司
软件开发最好的一本学院