从零实现一个扫雷游戏

 今天来简单的实现一下一个扫雷游戏。

这里就需要大家有基础的c语言知识了。

头文件:

#pragma once
#include <stdio.h>#include <stdlib.h>#include <time.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void 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 FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

首先开一个头文件,用于包含标准库的头文件和所要使用的函数的声明。

用define来定义行row,列col的数量。

此外,再定义一个clos和rows用于表示行与列的最大边界。


接着来编写主函数所需要的函数。

 函数:

在该文件中,我们来编写函数,以供main函数使用。

#include "game.h"

函数中包含上面所提到的头文件。

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) {int i, j;for (i = 0; i < rows; i++) {for (j = 0; j < cols; j++) {board[i][j] = set;}}
}

InitBoard函数首先用于初始化数组board,将board作为扫雷中的棋盘,以供玩家选择扫雷的地点。

void DisplayBoard(char board[ROWS][COLS], int row, int col) {int i, j;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");}
}

DisplayBoard函数用于展示当前扫雷棋盘。

首先打印列数以便玩家标识。

接着使用俩次循环来输出扫雷的棋盘,并且在每行前输出行数。

void SetMine(char board[ROWS][COLS], int row, int col) {int count = EASY_COUNT;while (count) {int x = rand() % row + 1;int y = rand() % col + 1;if (board[x][y] == '0') {board[x][y] = '1';count--;}}
}

接着便需要在扫雷棋盘中布置地雷了,由于在头文件中define了EASY_COUNT,便将EASY_COUNT作为地雷的数量,用count来接收EASY_COUNT。

接着使用循环来布置地雷,使用rand函数来随机一个数并且该数对行数row和列数col取模,以取得下一个地雷的布点。

若当前随机的地点已经被布置了地雷,则重新选择一个布点:反之,将board数组中的该点设置为1。

int get_mine_count(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 FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {int x, y, win = 0;while (win < row*col - EASY_COUNT){printf("请输入坐标:");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {if (mine[x][y] == '1') {printf("很遗憾,你被炸死了\n");DisplayBoard(mine, row, col);break;}else {int count = get_mine_count(mine, x, y);//unfold(show, mine,row, col, count);		//展开show[x][y] = count + '0';win++;DisplayBoard(show, x, y);}}else {printf("输入值非法\n");}}if (win == row * col - EASY_COUNT) {printf("\n恭喜你,排雷成功!\n");DisplayBoard(mine, row, col);}
}

FindMine函数则是循环让玩家输入坐标排查地雷。

当所以安全的点位都被找出时,即得到了地雷的准确位置,所以输出排雷成功的信息。

当安全点位还有未被找到时,则继续游戏,让玩家继续输入坐标点来排查安全点位。若玩家输入的坐标点不合法时,则提示玩家输入的坐标点非法并且让玩家重新输入坐标点。当玩家输入的坐标点是合法的,则判断该坐标点是否有地雷,若有地雷,则提示玩家猜到了地雷,游戏结束。若没有地雷,则在该坐标点标明周围八格的地雷数量。


主函数:

void menu() {printf("--------------扫雷-----------\n");printf("-------1. Play 0. Exit-------\n");printf("-----------------------------\n");
}

最简单的菜单,用于提醒玩家是否玩游戏。

void game() {//雷的信息存储//1. 布置好的雷的信息char mine[ROWS][COLS] = { 0 };//2. 排查出的雷的信息char show[ROWS][COLS] = { 0 };InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//打印棋盘DisplayBoard(show, ROW, COL);printf("\n");//布置雷SetMine(mine, ROW, COL);//扫雷FindMine(mine, show, ROW, COL);
}

若玩家在菜单中选择玩游戏,则初始化地雷棋盘并且随机布置地雷。

void test() {int num;do {menu();srand((unsigned int)time(NULL));printf("请选择:");scanf("%d", &num);switch (num){case 1:game();break;case 0:printf("游戏结束\n");break;default:printf("输入非法\n");break;}} while (num);
}

调用菜单的函数,并且让玩家选择是否玩游戏并且判断玩家的选择是否合法。

最后是主函数:(也是最简单的

int main() {test();return 0;
}

主函数调用test函数即可。


如果我的文章对你有所帮助,不妨给我个关注何点赞吧

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

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

相关文章

Linux基本指令(1)

目录 ls指令&#xff1a; pwd命令&#xff1a; cd指令&#xff1a; touch指令&#xff1a; mkdir指令&#xff1a; rmdir指令&&rm指令&#xff1a; man指令&#xff1a; cp指令&#xff1a; ls指令&#xff1a; 语法&#xff1a;ls [选项][目录或者文件] 作用…

突破传统WAF的瓶颈·WAAP平台将是未来发展的必然趋势

近年来&#xff0c;基础组件相继爆出严重的高危漏洞&#xff0c;层出不穷的“核弹级”0-day漏洞事件不断破圈&#xff0c;Web应用已成攻击者首要目标&#xff0c;让整个泛IT行业都难堪其扰&#xff0c;疲于应对。根据Gartner调查显示&#xff0c;信息安全攻击有75%都是发生在We…

如何在生产环境中部署您的Python项目:一步步指南

引言 简介&#xff1a;为什么要了解部署&#xff1f; 在软件开发的生命周期中&#xff0c;部署是一个至关重要的环节。它涉及将开发完成的应用程序从开发环境移植到生产环境&#xff0c;使其可以为用户提供服务。部署不仅是软件开发过程的延伸&#xff0c;更是确保应用程序高…

【C++庖丁解牛】C++11---统一的列表初始化 | auto | decltype | nullptr | STL中一些变化

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. C11简介2. 统一的列表…

【Docker】Linux开放2735端口实现远程访问Docker

【Docker】Linux开放2735端口实现远程访问Docker 大家好 我是寸铁&#x1f44a; 总结了一篇【Docker】Linux开放2735端口实现远程访问Docker ✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天需要远程操作Linux服务器的docker&#xff0c;这时就需要开放出docker的端口给我…

建筑企业都在用的工程项目管理系统!企智汇工程项目管理系统

在当今竞争激烈的建筑市场中&#xff0c;工程项目管理的重要性不言而喻。为了提高工程项目质量、降低成本、加快进度&#xff0c;越来越多的建筑企业开始运用工程项目管理系统。建筑企业都在用的工程项目管理系统是企智汇工程项目管理系统。 企智汇工程项目管理系统具备全面的…

axios的封装理解和基本使用

axios的配置 ruoyi的前端对axios进行了封装&#xff0c;让我们发get请求或者是post请求更加方便了。 ruoyi对axios的封装在下面文件中&#xff1a;打开文件&#xff0c;可以看到它有三个显眼的方法&#xff0c;分别是request拦截器、response拦截器和通用下载方法。ruoYi接口地…

L2-2 病毒溯源 坑点

病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株&#xff0c;而这些变异的病毒又可能被诱发突变产生第二代变异&#xff0c;如此继续不断变化。 现给定一些病毒之间的变异关系&#xff0c;要求你找出其中最长的一条变异链。 在此假设给出的变异都是由突变引起的&a…

Linux_CentOS7/8系统 - 关闭图形界面新增用户机制手册

Linux_CentOS7/8系统 - 关闭图形界面新增用户机制手册 在系统完成图形界面安装后重新启动后第一次登入&#xff0c;在图形界面会有新增用户页面&#xff0c;那如果取消关闭可以按以下操作&#xff1a; CTRLALTF2 root账号登录 yum remove gnome-initial-setup -y init 3 init …

【优质书籍推荐】《Effective Java》是人工智能的基石

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

Mybatis-plus动态数据源

由于服务没有做微服务部署&#xff0c;需要在后台管理系统访问其他服务的库&#xff0c;所以需要用到动态数据源切换 引入依赖 mybatis-plus动态数据源依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot…

PLSQL的下载与安装

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

Blender3.6下载地址

点击下载 Blender3.6下载地址 提取码 lywj

Java面试:MySQL面试题汇总

1.说一下 MySQL 执行一条查询语句的内部执行过程&#xff1f; 答&#xff1a;MySQL 执行一条查询的流程如下&#xff1a; 客户端先通过连接器连接到 MySQL 服务器&#xff1b;连接器权限验证通过之后&#xff0c;先查询是否有查询缓存&#xff0c;如果有缓存&#xff08;之前…

音频调试(2)

前言&#xff1a; 大家好&#xff0c;今天继续分享记录一下最近的音频调试心得&#xff01;同时这个过程中&#xff0c;也有朋友过来交流音频的问题&#xff0c;通过交流&#xff0c;也是学习到了新东西&#xff01; 视频和音频复合推流&#xff1a; 在上一篇文章里面有提到fdk…

1688商品评论接口技术全解析:掌握电商评论管理的关键,助力销量飙升!

1688商品评论接口技术解析 随着电商行业的飞速发展&#xff0c;商品评论成为了消费者购物决策的重要依据。作为商家&#xff0c;如何有效地获取、管理并展示商品评论&#xff0c;对于提升用户体验、增加销售至关重要。1688作为国内领先的B2B电商平台&#xff0c;其商品评论接口…

claude3国内注册

claude3国内注册 Claude 3 作为大型语言模型的强大之处在于其先进的算法设计和大规模训练数据的应用&#xff0c;能够执行复杂和多样化的任务。以下是 Claude 3 主要的强项&#xff1a; 接近人类的理解能力&#xff1a;Claude 3 能够更加深入地理解文本的含义&#xff0c;包括…

ubuntu安装轨迹精度评估工具evo

一、安装evo pip install evo --upgrade --no-binary evo --user 1.1 安装scipy时间超时 解决方法&#xff1a;pip 指定源 pip install scipy -i https://mirrors.aliyun.com/pypi/simple 2.2 matplotlib 版本冲突 seaborn 0.13.0 has requirement matplotlib!3.6.1,>3.3…

如何清除Magento Cache

本周有一个客户&#xff0c;购买Hostease的虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何清除Magento的Cache。我们为用户提供教程&#xff0c;用户很快完成了设置。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有帮助。 缓存是存储以供以后使用的…

科技云报道:“老三样”不管用了,网络安全要靠啥?

科技云报道原创。 从安全的视角看&#xff0c;网络空间充斥着病毒、黑客、漏洞。在过去&#xff0c;企业习惯用“老三样”——防火墙、IDS、杀毒软件来搞定安全。 如果将网络空间比喻成一个大厦&#xff0c;那么防火墙相当于门锁&#xff0c;用于隔离内外网或不同安全域&…