C语言—扫雷项目

news2024/9/22 15:49:59

一、扫雷游戏分析和设计

(1.1)扫雷游戏功能说明

• 使⽤控制台实现经典的扫雷游戏
• 游戏可以通过菜单实现继续玩或者退出游戏
• 扫雷的棋盘是9*9的格⼦
• 默认随机布置10个雷
• 可以排查雷
◦ 如果位置不是雷,就显⽰周围有⼏个雷
◦ 如果位置是雷,就炸死游戏结束
◦ 把除10个雷之外的所有雷都找出来,排雷成功,游戏结束。

游戏的界面:

(1.2)游戏的分析和设计

(1.2.1)数据结构的分析

扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。因为我们需要在9*9的棋盘上布置雷的信息和排查雷,我们⾸先想到的就是创建⼀个9*9的数组来存放信息。那如果这个位置布置雷,我们就存放1,没有布置雷就存放0。例如:

假设我们排查(2,5)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数是1,假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数时,最下⾯的三
个坐标就会越界,为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。所以我们将存放数据的数组创建成11*11是⽐较合适。

再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和⾮雷的信息(0),假设我们排查了某⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息的。那这个雷的个数信息存放在哪⾥呢?如果存放在布置雷的数组中,这样雷的信息和雷的个数信息就可能产⽣混淆和打印上的困难。这⾥我们肯定有办法解决,⽐如:雷和⾮雷的信息不要使⽤数字,使⽤某些字符就⾏,这样就避免冲突了,但是这样在棋盘上有雷和⾮雷的信息,还有排查出的雷的个数信息,就⽐较混杂,不够⽅便。这⾥我们采⽤另外⼀种⽅案,我们专⻔给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不⼲扰了,把雷布置到mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期排查参考。同时为了保持神秘,show数组开始时初始化为字符'*',为了保持两个数组的类型⼀致,可以使⽤同⼀套函数处理,mine数组最开始也初始化为字符'0',布置雷改成'1'。如下:

对应的数组应该是:

(1.2.2)文件结构设计

我们设计三个⽂件:

test.c (⽂件中写游戏的测试逻辑) 

game.c (⽂件中写游戏中函数的实现等)

game.h (⽂件中写游戏需要的数据类型和函数声明等)

二、扫雷游戏的实现

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

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

相关文章

C# 元组类型详解与示例

文章目录 1. 元组的基本概念1.1 元组的定义1.2、元组的类型 2. 元组的特性2.1 元组的命名元素2.2 元组的类型推断2.3 元组的结构2.4 元组的比较和哈希 3. 元组的实际应用3.1 方法返回多个值3.2 作为数据容器3.3 元组与数据结构 4. 总结 元组(Tuple)是 C#…

【AI】机器学习基本概念详解1

友情链接:numpy使用、SciPy、Matplotlib 定期更新,建议关注、点赞、收藏。 目录 监督学习 or 非监督学习clustering & non-clustering分类 or 回归线性回归逻辑回归 目标函数or 损失函数规范化归一化标准化正则化(惩罚penalty&#xff09…

如何制作优秀的年终总结PPT?

制作优秀的年终总结PPT,是每位职场人士在年底时的一项重要任务。 一个优秀的年终总结PPT不仅能够清晰地展示你过去一年的工作成果,还能让领导对你的工作能力和态度留下深刻印象。 下面,我将从几个方面详细讲解如何制作这样的PPT&#xff0c…

杰理AC7916与MK米客方德SD NAND:高效适配,卓越存储

杰理科技的AC7916是一款高性能、多功能的系统级芯片(SoC),广泛应用于智能终端产品,如AI智能音箱、蓝牙音箱、蓝牙耳机等。这款芯片以其卓越的性能和丰富的接口选项,满足了多样化的市场需求。 AC7916接口及性能特点 AC…

如何避免常见的R语言学习陷阱?

学习R语言不仅能够增强数据分析能力,还能开拓解决复杂问题的新方法。然而,在学习R语言的过程中,许多初学者会遇到各种陷阱,这些陷阱不仅会延缓学习进度,还可能导致学习动机的丧失。 陷阱一:忽视基础知识 基…

Java面向对象与封装

目录 封装 封装引入 private修饰符 this关键字 构造函数 JavaBean 标准JavaBean JavaBean中的成员与数据库的关系 static关键字 static基本使用 static关键字访问特点 可变参数 对象数组与传值/址调用 对象数组 传值调用与传址调用 命令行参数 封装 封装引入 …

Unity 中创建动画的教程

Unity 动画创建教程 在游戏开发中,生动的动画能够极大地提升玩家的体验。在这篇教程中,我们将一起探索如何在 Unity 中创建动画。 一、准备工作 首先,确保您已经安装了最新版本的 Unity 引擎。创建一个新的 Unity 项目或者打开您现有的项目…

昂科烧录器支持PAI-IC澎湃微电子的32位微控制器PT32L031K6T6

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中PAI-IC澎湃微电子的32位微控制器PT32L031K6T6已经被昂科的通用烧录平台AP8000所支持。 PT32L031K6T6是基于Cortex-M0内核的一款32位高性能微控制器,支持工作电压 1…

C# VisionPro 海康相机SDK源代码

运行界面如下所时: 实时图像效果如下: Winform窗体代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo…

为什么选择搭建自己的大模型?

在数字化和智能化的浪潮中,人工智能(AI)正迅速成为企业和机构的核心驱动力。无论是在数据分析、自然语言处理,还是自动化决策,AI的应用范围广泛且深远。而在众多AI解决方案中,本地搭建专属的大模型正逐渐成…

前端vue项目——打包部署(nginx中部署静态资源)

1、当前的开发方式 前端人员开发前端,后端人员开发后端的java工程,最终要将开发完毕的前端工程和后端工程分开部署在对应的服务器上(前端流行的nginx) 2、打包 (1)原理 (2) &#xf…

git 两个分支对比以及合并

git 两个分支对比以及合并 git 两个分支对比以及合并显示两个分支提示之间的差异使用图形化工具,如pycharm 打补丁的一般流程diff命令:生成补丁包文件patch命令:打补丁命令 Git Merge 与 Rebase[重要]使用 merge 命令来进行分支合并rebase 命…

使用 GPT-4 Vision 的 CLIP 嵌入来改进多模态 RAG

多模态 RAG 将附加模态集成到传统的基于文本的 RAG 中,通过提供额外的背景信息和基础文本数据来增强 LLM 的问答能力,从而提高理解力。 我们直接嵌入图像进行相似性搜索,绕过文本字幕的有损过程,以提高检索准确性。 使用基于 CL…

Ted靶机

端口扫描 靶机ip地址为 192.168.153.156 目录扫描 访问80端口 测试弱口令 根据响应包分析,存在弱口令 admin,admin 但是需要hash加密 加密后得到 8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918 登录成功 有搜素框,测…

网站数据导出为excel 源码大全java php c# js python 与网络安全兼顾-阿雪技术观

一、阿雪技术观谈网站安全 1.保护用户隐私和数据 用户在访问网站时会提供各种个人信息,如姓名、地址、联系方式、信息等。如果网站存在安全漏洞,这些敏感信息可能会被黑客窃取,导致用户遭受身份盗窃、欺诈等 2.维护企业声誉和信任 一个安全可…

【Windows】Q-Dir(资源管理器)软件介绍

软件介绍 Q-Dir是一款免费的文件管理器软件,它可以让您更方便地浏览和管理计算机上的文件和文件夹。与Windows自带的资源管理器相比,Q-Dir具有更多的功能和选项。 安装教程 软件下载完成,解压软件。 点击Q-Dir.exe即可打开软件。 功能…

WPF WindowChrome、WindowStyle 自定义窗体样式

渐变参数 WindowChrome 这个图就是WindowChrome的模型。其中Caption区域,表示标题栏,就是它,允许窗体被鼠标拖动。GlassFrameThickness就是Aero窗体的透明边框(Aero主体只在部分操作系统中支持)。ResizeBorderThicknes…

从快到慢学习Git指令

Git是现在最流行的版本控制工具之一。无论是在开源社区还是企业软件开发中,Git都扮演着至关重要的角色。本文将根据不同的需求,分别提供快速上手和深入学习Git的指南。 如果你只想下载代码 如果你只是想下载GitHub或其他代码仓库的代码,那你只需要了解以下两个命令: git clo…

SpringBoot 整合 Elasticsearch 实现商品搜索

一、Spring Data Elasticsearch Spring Data Elasticsearch 简介 Spring Data Elasticsearch是Spring提供的一种以Spring Data风格来操作数据存储的方式,它可以避免编写大量的样板代码。 常用注解 常用注解说明如下: 注解名称 作用 参数说明 Docu…

Python面试宝典第34题:旋转图像

题目 给定一个n n的二维矩阵matrix表示一个图像,请你将图像顺时针旋转90度。 注意:你必须在原地旋转图像。这意味着,你需要直接修改输入的二维矩阵,而不能使用另一个矩阵来旋转图像。 示例 1: 输入:matri…