扫雷小游戏

目录

一.扫雷小游戏 

二.游戏主体一览

​编辑

 三.模块化设计扫雷游戏

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.hqwc.cn/news/83569.html

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

相关文章

Verilog 实现状态机自动售卖机

Verilog 实现状态机自动售卖机 教学视频&#xff1a;https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 功能需求 使用1元、2元、5元面值的纸币进行支付&#xff0c;获取6元的物品&#xff0c;不设…

基于Jenkins自动打包并部署Tomcat环境

基于上一章创建部署 Linux下Jenkins安装 &#xff08;最新&#xff09;_学习新鲜事物的博客-CSDN博客 传统网站部署的流程 在运维过程中&#xff0c;网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码--&g…

python+django+mysql旅游景点推荐系统-前后端分离(源码+文档)

系统主要采用Python开发技术和MySQL数据库开发技术以及基于OpenCV的图像识别。系统主要包括系统首页、个人中心、用户管理、景点信息管理、景点类型管理、景点门票管理、在线反馈、系统管理等功能&#xff0c;从而实现智能化的旅游景点推荐方式&#xff0c;提高旅游景点推荐的效…

GEE/PIE遥感大数据处理与典型案例

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

Redis笔记——(狂神说)待续

Nosql概述 为什么要用NoSql&#xff1f; 1、单机mysql的年代&#xff1a;90年代&#xff0c;网站访问量小&#xff0c;很多使用静态网页html写的&#xff0c;服务器没压力。 当时瓶颈是&#xff1a;1)数据量太大一个机器放不下。2)数据的索引(BTree)&#xff0c;一个机器内存也…

html动态爱心代码【四】(附源码)

目录 前言 特效 完整代码 总结 前言 情人节马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直接使用。…

nrm管理源仓库及发布私人npm包

使用nrm管理源及切换源仓库 1.安装nrm源管理器 npm install nrm -g2.查看目前现有的源仓库 通过 nrm ls 查看现有的源 nrm ls 输出&#xff1a;这是目前现有的源 3.切换不同的源 可以通过 nrm use xxx&#xff08;源仓库名&#xff09;来切换不同的源地址 nrm use taobao…

探索pytest:Python自动化测试的新境界

在当今的软件开发领域&#xff0c;测试已经不仅仅是一个简单的步骤&#xff0c;而是确保软件质量的核心环节。Python&#xff0c;作为全球最受欢迎的编程语言之一&#xff0c;拥有丰富的测试框架和工具。而在这其中&#xff0c;pytest无疑是最受欢迎和最具影响力的一个。本文将…

VR法治警示教育:情景式课堂增强教育效果

VR法治警示教育平台是一款基于虚拟现实技术的在线教育平台&#xff0c;旨在通过模拟真实场景和互动体验&#xff0c;向公众普及法律知识&#xff0c;提高公民的法律意识和素养。该平台采用先进的虚拟现实技术&#xff0c;将用户带入一个逼真的仿真环境&#xff0c;让用户身临其…

c++都补了c语言哪些坑?

目录 1.命名空间 1.1 定义 1.2 使用 2.缺省参数 2.1 概念 2.2 分类 3.函数重载 4.引用 4.1 概念 4.2 特性 4.3 常引用 4.4 引用和指针的区别 5.内联函数 1.命名空间 在 C/C 中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将…

Android Studio调试出现错误时,无法定位错误信息解决办法

做项目时运行项目会出现问题&#xff0c;但是找不到具体位置&#xff0c;如下图所示&#xff1a;感觉是不是很懵逼~&#xff0c;Log也没有显示是哪里的问题 解决方案&#xff0c;在右侧导航栏中选择Gradle——app——build&#xff0c;然后点击运行 运行结果如下&#xff0c;很…

vue若依导出word文件,简单的实现

首先前端导包,注意exportDocx的导包位置要修改成你自己的 import {exportDocx} from /utils/docUtil/docutil.js; import {addDays} from date-fns; import {listGongyi} from "/api/system/detail";然后新建一个测试按钮 <el-col :span"1.5"><…