【趣味小游戏】--扫雷游戏

目录

一.test.c部分

 二.game.h部分

 三.game.c部分


前言:前面学习了数组和函数等c语言相关知识,这篇文章我们将通过这些知识分为三个文件来完成扫雷游戏;

1.test.c //文件中写游戏的测试逻辑

2.game.c //文件中写游戏中函数的实现等

3.game.h. //文件中写游戏需要的数据类型和函数声明等


一.test.c部分

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void menu()
{printf("***********************\n");printf("***** 1. play *****\n");printf("***** 2. exit *****\n");printf("***********************\n");
}void game()
{char mine[ROWS][COLS] = { 0 };//用来存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//用来存放排查出的雷的个数信息//棋盘初始化//mine全部初始化为0,表示还没布置好雷;//show全部初始化为*,表示还没被排查;initboard(mine, ROWS, COLS, '0');initboard(show, ROWS, COLS, '*');//打印棋盘9*9printboard(show, ROW, COL);//布置雷setmine(mine, ROW, COL);//排查雷findmine(mine, show, ROW, COL);}int main()
{int num = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &num);switch (num){case 1:game();break;case 2:printf("你已退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}} while (num != 2);return 0;
}

 二.game.h部分

#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 10//函数的声明//棋盘初始化
void initboard(char board[ROWS][COLS], int rows, int cols, int set);//打印棋盘
void printboard(char mine[ROWS][COLS], int row, int col);//布置雷
void setmine(char mine[ROWS][COLS], int row, int col);//获取周围雷的个数
int getmine(char mine[ROWS][COLS], int x, int y);//排查雷
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

 三.game.c部分

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"void initboard(char board[ROWS][COLS], int rows, int cols, int set)
{int i = 0;for (i = 0;i < rows;i++){int j = 0;for (j = 0;j < cols;j++){board[i][j] = set;}}
}void printboard(char mine[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 ", mine[i][j]);}printf("\n");}
}void setmine(char mine[ROWS][COLS], int row, int col)
{//随机布置10个雷int count = EASY_COUNT;while (count){int x = rand() % row + 1;//生成随机的坐标int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}int getmine(char mine[ROWS][COLS],int x,int y)
{return(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');
}void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int w =0;while (w< 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");printboard(mine, ROW, COL);break;}else if(show[x][y]=='*'){//统计坐标周围雷的个数int c = getmine(mine, x, y);show[x][y] = c + '0';//数字+‘0’变为数字字符printboard(show, ROW, COL);w++;}else{printf("该坐标已被查找,请重新输入\n");}}else{printf("非法输入,请重新输入\n");}if (w == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");printboard(mine, ROW, COL);}}}

结语;本篇文章就到此结束了,扫雷游戏的实现三个文件都必不可少,当然这只是最基础版本的,更多进阶功能还需要后续的学习。大家可以通过注释来理解一下所写的代码,感谢大家的支持。

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

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

相关文章

【微服务】SpringBoot制作Docker镜像接入SkyWalking详解

目录 一、前言 二、SkyWalking介绍 2.1 SkyWalking是什么 2.2 SkyWalking核心功能 2.3 SkyWalking整体架构 2.4 SkyWalking主要工作流程 三、前置准备 3.1 搭建SkyWalking服务 3.1.1 下载安装包 3.1.2 上传服务器目录 2.1.3 数据库持久化配置说明 3.1.4 启动skywalk…

从零开始构建微博爬虫与数据分析系统

从零开始构建微博爬虫与数据分析系统 引言 社交媒体平台蕴含着海量的信息和数据&#xff0c;通过对这些数据的收集和分析&#xff0c;我们可以挖掘出有价值的见解。本文将详细介绍如何构建一个完整的微博爬虫和数据分析系统&#xff0c;从数据爬取、清洗、到多维度分析与可视…

深入探索RAG:用LlamaIndex为大语言模型扩展知识,实现智能检索增强生成

大型语言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT和Llama&#xff0c;在回答问题方面表现出色&#xff0c;但它们的知识仅限于训练时所获取的信息。它们无法访问私有数据&#xff0c;也无法在训练截止日期之后学习新知识。那么&#xff0c;核心问题就是……我们如…

【延迟双删】简单解析

使用场景&#xff1a;【高并发】情况下的做【更新操作】 什么是延迟双删 首次删除&#xff1a;当需要更新某个数据项时&#xff0c;首先删除缓存中的该项。 更新数据库&#xff1a;接着&#xff0c;更新数据库中的该项。 短暂延迟&#xff1a;然后等待一段很短的时间&#xff…

解决Windows安全中心显示空白页面

1、电脑重装系统后&#xff0c;发现原本一些软件打不开了&#xff0c;电脑莫名认为有病毒&#xff0c;自动删除插件。附图。 2、第一反应是电脑防火墙的原因&#xff0c;默认威胁防护识别到了病毒软件&#xff0c;自动删除。在开始屏幕搜Windows安全中心&#xff0c;打开之后发…

【回眸】error: failed to compile `xxxxxx`重装rust环境

在ubuntu上安装软件报错 error: failed to compile cxx2flow v0.6.2 Caused by: package cargo-platform v0.1.9 cannot be built because it requires rustc 1.78 or newer, while the currently active rustc version is 1.75.0 Try re-running cargo install with --lo…

算法—冒泡排序—js(教学示例、小数据)

冒泡排序原理 冒泡排序是一种简单的排序算法&#xff0c;通过重复遍历数组&#xff0c;比较相邻元素并交换位置&#xff0c;使较大的元素逐渐“浮”到数组末尾。 特点 时间复杂度&#xff1a;平均 O(n)&#xff0c;最优&#xff08;已有序时&#xff09;O(n) 空间复杂度&#…

linux sysfs的使用

在Linux内核驱动开发中&#xff0c;device_create_file 和 device_remove_file 用于动态创建/删除设备的 sysfs 属性文件&#xff0c;常用于暴露设备信息或控制参数。以下是完整示例及详细说明&#xff1a; 1. 头文件引入 #include <linux/module.h> #include <linux/…

利用 Deepseek 和 Mermaid 画流程图

提示词 你是一个产品经理&#xff0c;请绘制一个报名比赛的流程图&#xff0c;要求生成符合Mermaid语法的代码&#xff0c;具体要求如下&#xff1a; 1.注册账号 2.填写报名信息 3.参加比赛 4.查看比赛结果 生成的结果 flowchart TDA([开始]) --> B[注册账号]B --> C{账…

【图像标注技巧】目标检测图像标注技巧

介绍一些图像标注技巧。之前引用过别人的文章 yolo目标检测 技巧 trick 提升模型性能&#xff0c;deep research检测调研报告也可以进行参考。 拉框类的标注&#xff0c;如果你不确定哪种方法好&#xff0c;你可以把所标注区域的都剪切出来&#xff0c;然后站在屏幕一米之外眯…

数字信号处理技术架构与功能演进

数字信号处理&#xff08;DSP&#xff09;是通过数字运算实现信号分析、变换、滤波及调制解调的技术领域&#xff0c;其发展过程与技术应用如下&#xff1a; 一、定义与核心功能 技术定义&#xff1a;通过算法将模拟信号转换为数字形式进行处理&#xff0c;具有高精度、可编程…

浏览器上下文通信

文章目录 浏览器上下文通信同源通信同源通信流程同一浏览器上下文通信不同浏览器上下文通信 跨域通信前端和前端跨域前端和后端跨域 浏览器上下文通信 浏览器上下文通信分为两种&#xff1a;同源和跨源。同样的同源通信也分为同一浏览器上下文和不同的浏览器上下文。 同源通信…

Linux 离线部署 Docker 18.06.3 终极指南(附一键安装卸载脚本)

Linux 离线部署 Docker 18.06.3 终极指南&#xff08;附一键安装/卸载脚本&#xff09; 摘要&#xff1a;本文针对无外网环境的 Linux 服务器&#xff0c;提供基于二进制包的 Docker 18.06.3 离线安装全流程指南。包含自动化脚本设计、服务配置优化及安全卸载方案&#xff0c;…

【前端】跟着maxkb学习logicflow流程图画法

文章目录 背景1. 选定学习对象-maxkb应用逻辑编排2. 确定实现框架3. 关键逻辑&#xff1a;查看app-node.js4. 学习开始节点绘制流程数据形式 5. 给节点增加表单输入框遇到过的问题 背景 看看前端如何绘制流程图&#xff0c;界面好看点。 "logicflow/core": "1.…

Android 12系统静态壁纸深度定制指南

1. 需求背景与实现原理 在Android 12系统ROM定制开发中&#xff0c;扩展静态壁纸功能需要深入理解WallpaperManagerService的架构体系。系统壁纸管理通过双端协作实现&#xff1a; WallpaperManagerService&#xff08;frameworks层&#xff09;&#xff1a;负责壁纸状态管理、…

相得益彰 — 基于 GraphRAG 事理图谱驱动的实时金融行情新闻资讯洞察

*本文为亚马逊云科技博客文章&#xff0c;仅用于技术分享&#xff0c;不构成投资建议或金融决策支持。文中涉及的公司名称仅用于技术示例&#xff0c;不代表亚马逊云科技观点或与这些公司的商业合作关系。 背景介绍 在当今这个信息爆炸的时代&#xff0c;金融市场每天都在产生…

OpenCV---图像预处理(四)

OpenCV—图像预处理&#xff08;四&#xff09; 文章目录 OpenCV---图像预处理&#xff08;四&#xff09;九&#xff0c;图像掩膜9.1 制作掩膜9.2 与运算9.3 颜色替换9.3.19.3.2 颜色替换 十&#xff0c;ROI切割十 一&#xff0c;图像添加水印11.1模板输入11.2 与运算11.3 图像…

【MySQL】:数据库事务管理

一&#xff1a;学习路径 &#xff08;1&#xff09;下载安装mysql &#xff08;2&#xff09;学习语言&#xff1a;SQL(操作数据库&#xff09; &#xff08;3&#xff09;mysql集群&#xff08;提升数据库存储效率&#xff09; &#xff08;4&#xff09;SQL使用&#xff0c;M…

内存函数和动态内存管理

目录 一、memcpy库函数介绍 1. memcpy的使用 2. memcpy的模拟 二、memmove库函数介绍 1. memmove的使用 2. memmove的模拟 三、memset库函数介绍 四、memcmp库函数介绍 五、动态内存中malloc和free 1. malloc 2. free 六、动态内存中calloc和realloc 1. calloc 2. realloc 七、…

yarn的基本介绍

1.Hadoop的三大结构及各自的作用&#xff1a; Hadoop是一个开源的分布式计算框架&#xff0c;它主要包括三大核心组件&#xff1a;HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。以…