扫雷小游戏

目录

一.扫雷小游戏 

二.游戏主体一览

​编辑

 三.模块化设计扫雷游戏

3.1打印欢迎菜单

 3.2创建两个二维数组

 3.3棋盘稍加修改

3.4布置雷

3.5排查雷

四.游戏总体代码

4.1game.h头文件

4.2game.c函数实现源文件

4.3游戏main函数主体

五.游戏效果图


一.扫雷小游戏 

 这是一个经典的扫雷小游戏界面,可以看出扫雷游戏实际上跟代码中的二维数组很相似,因此扫雷小游戏便是对二维数组的使用。

二.游戏主体一览


int main()
{int input = 0;do{//创造游戏菜单界面menu();printf("请选择:\n");scanf("%d", &input);switch (input){case 1://游戏函数主体部分game();break;case 0:printf("游戏已退出\n");default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;
}

 三.模块化设计扫雷游戏

3.1打印欢迎菜单

//游戏菜单函数
void menu()
{printf("                        \n");printf("         扫雷小游戏     \n");printf("***       1.play     ***\n");printf("***       0.exit     ***\n");printf("*********        *******\n");printf("*********        *******\n");
}

 3.2创建两个二维数组

为什么要创建两个二维数组呢?

  • 创建第一个mine数组用来存放布置好的雷的信息
  • 创建第二个show数组用来存放排查出的雷的信息
  • 为了代码实现过程的简化要求两个数组大小一致
//创建两个二维数组,初始化char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };initboard(mine, ROWS, COLS,'0');initboard(show, ROWS, COLS,'*');

mine数组中存放的是雷的信息:1表示雷,0表示没有雷

show数组存放玩家每次排查该位置后周围雷的个数

在此之后便于我们随机化雷的位置和显示周围雷的个数。

我们打印出初始化后棋盘来看看效果:

//根据初始化内容  初始化数组函数
void initboard(char mine[ROW][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++){mine[i][j] = set;}}}
//打印棋盘
void display(char mine[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;for (i = 1; i <= row; i++){for (j = 1; j <= col; j++){printf("%c ",mine[i][j]);}printf("\n");}}

 3.3棋盘稍加修改

//游戏菜单函数
void menu()
{printf("                        \n");printf("         扫雷小游戏     \n");printf("***       1.play     ***\n");printf("***       0.exit     ***\n");printf("*********        *******\n");printf("*********        *******\n");
}
//根据初始化内容  初始化数组函数
void initboard(char mine[ROW][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++){mine[i][j] = set;}}}
//打印棋盘
void display(char mine[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-----扫雷-----\n");for (i = 0; i <= col; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}}

在实现代码过程中两个棋盘都打印出来是为类方便我们观察,后续真正游玩便只需打印出show数组棋盘给玩家看即可。

3.4布置雷

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col)
{int count = mine_count;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };//我们放置雷的棋盘initboard(mine, ROWS, COLS,'0');//玩家能看到的扫雷棋盘initboard(show, ROWS, COLS,'*');//布置雷set_mine(mine, ROW, COL);//让我们看一下布置雷是否成功display(mine, ROW, COL);//排查雷}

 上和左的数字是棋盘的坐标,在内部9*9的表中1代表雷

3.5排查雷

//排查雷
int get_surround_mine_count(char mine[ROWS][COLS], int x, int y)
{int c = mine[x - 1][y - 1] +mine[x - 1][y] +mine[x - 1][y + 1] +mine[x][y - 1] +mine[x][y + 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] - 8 * '0';return c;}void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < row * col - mine_count){printf("请输入你要排查的坐标:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y] == '1'){printf("你被炸死了\n");printf("雷区分布如下:\n");display(mine, ROW, COL);break;}else{int surround_mine_count = get_surround_mine_count(mine, x, y);show[x][y] = surround_mine_count + '0';display(show, ROW, COL);win++;}}else{printf("坐标非法,重新输入");}}if (win == row * col - mine_count){printf("成功排雷结束");display(show, ROW, COL);}
}

 当我们输入一个坐标后显示一下棋盘


四.游戏总体代码

4.1game.h头文件

#pragma once
#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define mine_count 10void initboard(mine, rows, cols, set);void display(mine, row, col);void set_mine(mine, row, col);void find_mine(mine, show, row, col);int get_surround_mine_count(mine, x, y);

4.2game.c函数实现源文件

#include "game.h"//游戏菜单函数
void menu()
{printf("                        \n");printf("         扫雷小游戏     \n");printf("***       1.play     ***\n");printf("***       0.exit     ***\n");printf("*********        *******\n");printf("*********        *******\n");
}
//根据初始化内容  初始化数组函数
void initboard(char mine[ROW][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++){mine[i][j] = set;}}}
//打印棋盘
void display(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-----扫雷-----\n");for (i = 0; i <= col; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}}//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col)
{int count = mine_count;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}//排查雷//记录排查坐标周围雷的个数
int get_surround_mine_count(char mine[ROWS][COLS], int x, int y)
{int c = mine[x - 1][y - 1] +mine[x - 1][y] +mine[x - 1][y + 1] +mine[x][y - 1] +mine[x][y + 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] - 8 * '0';return c;}void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < row * col - mine_count){printf("请输入你要排查的坐标:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y] == '1'){printf("你被炸死了\n");printf("雷区分布如下:\n");display(mine, ROW, COL);break;}else{int surround_mine_count = get_surround_mine_count(mine, x, y);show[x][y] = surround_mine_count + '0';display(show, ROW, COL);win++;}}else{printf("坐标非法,重新输入");}}if (win == row * col - mine_count){printf("成功排雷结束");display(show, ROW, COL);}
}

4.3游戏main函数主体

#include "game.h"
//游戏主体函数
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };//我们放置雷的棋盘initboard(mine, ROWS, COLS, '0');//玩家能看到的扫雷棋盘initboard(show, ROWS, COLS, '*');//打印出放置雷的棋盘//display(mine,ROW,COL);//打印出扫雷棋盘display(show,ROW,COL);//布置雷set_mine(mine, ROW, COL);//查看布置的雷//display(mine, ROW, COL);//排查雷find_mine(mine, show, ROW, COL);}
int main()
{srand((unsigned int)time(NULL));int input = 0;do{//创造游戏菜单界面menu();printf("请选择:\n");scanf("%d", &input);switch (input){case 1://游戏函数主体部分game();break;case 0:printf("游戏已退出\n");default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;
}

五.游戏效果图

 游玩过程中直到被炸死或者排完所有雷结束游戏。


实现扫雷游戏,感谢大家的支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/106177.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建设全球研发中心城市,长沙政协将会发挥怎样的作用?

政协力量&#xff0c;会如何推动一座城市的发展&#xff1f;在全国各大城市都力“拼经济、搞创新”的时代大背景下&#xff0c;人民政协的力量会如何助推长沙建设全球研发中心城市呢&#xff1f; 这是笔者此前一直很好奇的两个问题。8月24日&#xff0c;一场由长沙市政协举办的…

FFmpeg解码32k大分辨率出现如下错误:Picture size 32768x32768 is invalid

最近找到一张32k的jpeg图片&#xff0c;尝试用ffmpeg来进行解码&#xff0c;命令如下&#xff1a; ffmpeg -i enflame_32768-32768-420.jpg 32.yuv结果出现Picture size 32768x32768 is invalid的错误&#xff1a; 找到报错的代码文件imgutils.c&#xff0c;以及函数&#x…

字符串经典问题

1. 验证回文串 验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 t…

项目部署之后页面没有刷新怎么办?

最近项目部署成功之后&#xff0c;突然产品找我&#xff0c;上线之后&#xff0c;页面没有生效&#xff0c;这是怎么回事&#xff1f;我这是第一次部署这个项目,也不太清楚历史问题,接下来就慢慢寻找答案吧, 如果心急的可以直接看后面的总结&#xff0c;下面我们好好聊聊缓存的…

【RuoYi移动端】uniApp导入和引用uView2.0插件

一、打开uiew官网 安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI&#xff0c;是 uni-app 生态最优秀的 UI 框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水https://uviewui.com/components/install.html 也可直…

基于Java+SpringBoot+Vue前后端分离在线考试与学习交流网页平台设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

SpringSession

Spring Session 是 Spring 的项目之一。Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案&#xff0c;默认采用外置的 Redis 来存储 Session 数据&#xff0c;以此来解决 Session 共享的 问题。(springsession储存session数据的方式有很多&#xff0c;我们常…

excel中两列数据生成折线图

WPS中excel的两列数据&#xff0c;第一列为x轴&#xff0c;第二列为y轴&#xff0c;生成折线图&#xff0c;并生成拟合函数。 1.选中两列数据&#xff0c;右击选择插入图表&#xff0c;选择XY&#xff08;散点图&#xff09;&#xff0c;生成散点折线图 2.选中图中散点&#x…

SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

Web服务器基础 http协议

文章目录 1.Web基础1.1MIME1.2 URI 和 URL1.2.1定义1.2.2两者的区别 2.静态资源和动态资源2.1 静态资源2.2 动态资源 3.HTTP协议3.1HTTP协议简介3.2HTTP协议的版本及区别3.2.1http协议版本3.2.2http1.0和1.1的区别 3.3HTTP请求报文3.4HTTP请求访问的过程1、建立连接&#xff1a…

服务器CPU飚高排查

排查思路 当正在运行的Java服务导致服务器的CPU突然飙高时&#xff0c;我们该如何排查定位到哪个接口的哪行代码导致CPU飙高的问题呢&#xff1f;我主要提供两个方案&#xff1a; jstackarthas 准备工作 代码准备 现在需要准备一段可以让服务器CPU飙高的代码以及把代码部署…

Go framework-Kratos

目录 一、Go framework 1、Kratos 介绍 1.1、Kratos 框架开发依赖安装 2、初始化 Kratos 项目 3、使用 Protobuf 、生成 Go 代码 3.1、增加proto文件模板 3.2、修改proto文件模板 3.3、根据修改完的模板文件生成客户端代码 3.4、根据修改完的模板文件生成服务端代码 …

Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

我们在做Windows平台Unity播放RTMP或RTSP的时候&#xff0c;遇到这样的问题&#xff0c;比如展会、安防监控等场景下&#xff0c;需要同时播放多路RTMP或RTSP流&#xff0c;这样对设备性能&#xff0c;提出来更高的要求。 虽然我们软解码&#xff0c;已经做的资源占有非常低了…

在外SSH远程连接macOS服务器

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

MySQL—MySQL的NULL值是怎么存放的

一、引言 1、MySQL数据存放在哪个文件&#xff1f; 创建一个数据库会产生三种格式的文件&#xff0c;分别是.opt格式、.frm格式、.ibd格式。 opt格式&#xff1a;用来存储当前数据库的默认字符集和字符校验规则。 frm格式&#xff1a;该文件是用来保存每个表的元数据信息的&…

ChatGPT⼊门到精通(1):ChatGPT 是什么

⼀、直观感受 1、公司 OpenAI&#xff08;美国&#xff09; 2、官⽅⽹站 3、登录ChatGPT ![在这里插入图片描述](https://img-blog.csdnimg.cn/26901096553a4ba0a5c88c49b2601e6a.png 填⼊帐号、密码&#xff0c;点击登录。登录成功&#xff0c;如下 3、和ChatGPT对话 开始…

Llama-2大模型本地部署研究与应用测试

最近在研究自然语言处理过程中&#xff0c;正好接触到到大模型&#xff0c;特别是在年初chatgpt引来的一大波AIGC热潮以来&#xff0c;一直都想着如何利用大模型帮助企业的各项业务工作&#xff0c;比如智能检索、方案设计、智能推荐、智能客服、代码设计等等&#xff0c;总得感…

四信5G智慧交通方案

5G是第五代移动通信技术的简称&#xff0c;是具有高速率低时延和大连接特点的新一代宽带移动通信技术&#xff0c;是实现智慧交通中的“车、路、人、环境”等交通要素互联互通的网络基础设施。相比以往的移动通信网络&#xff0c;5G网络以一种灵活部署的架构提供10Gbps以上的带…

Python中的API构建指南:在Flask中进行API开发

原文&#xff1a;Python中的API构建指南&#xff1a;在Flask中进行API开发 - 知乎 如何实现从一个软件与另一个软件的通信交互&#xff1f;就像我们的APP&#xff0c;如何实现微信支付、苹果支付&#xff1f; 其实&#xff0c;我们只需要一个API。 API&#xff08;应用程序编…

4G模组EC20 网卡udhcpc获取IP但是没有设置IP

使能网卡&#xff1a; ifconfig usb0 up dhcp获取ip&#xff0c;虽然没有报error&#xff0c;但是很显然没有设置进配置 获取ip命令&#xff1a;udhcpc -i usb0 非正常现象&#xff1a; 正常现象&#xff1a; 解决方法&#xff1a; &#xff08;1&#xff09;rootfs 创建文件夹…