深度剖析扫雷游戏的各个知识点(1)

哈喽,小伙伴,大家好,今天我来水一篇文章。害,也不算真的水吧,这次带大家深度剖析初次写扫雷游戏程序时还未接触到的知识点。废话不多说,直接进入正题


 不知小伙伴们是否还记得当时我说过扫雷游戏我们是以多个文件的方式进行制作,为了能让大家更好的回忆起来,玩出了尘封许久的三张图

那么为什么要通过多个文件的方式写这个扫雷游戏呢?

多文件方式写程序可以让我们的思路更加清晰,至于说游戏做到一半突然不知道做到了哪一步。

那么如何通过多文件的方式写游戏或者说小程序呢?

首先是我们的主文件

主文件(1号文件)里面通常包含一个简单游戏的菜单以及一些主要的运行程序

创建方式:我们一开始学c语言创建时的方式

函数的头文件

为了方便称呼,我们将函数的主体文件称为2号文件,其头文件称之为2号.h文件

2号.h的文件中通常存放函数句子,无任何执行语句(也可以说2号.h文件是函数的转接器)

如图

那么为什么说2号.h文件如同转接器呢,仅通过这张图,我们并不能很明显的看出,因此我们来看一下扫雷游戏的图

从扫雷游戏的图中,我们可以看出

void Initboard(char arr[ROWS][COLS], int rows, int cols, char put);
void display(char arr[ROWS][COLS], int row, int col);
void SetMine(char arr[ROWS][COLS], int row, int col);
FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row,int col);

以及这些代码

#define ROW 9
#define COL 9
#pragma
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10//雷的个数

#include<stdlib.h>
#include<time.h>
#include<stdio.h>

都是我们在2号文件中所要执行的,如果说没有在这个头文件里头编译,那么效果其实和我们一开始学的c程序没有头文件——#include<stdio.h>是一样的。

那么如何将自己写的这个头文件包含在自己写的2号文件内呢?

如何创建一个全新的头文件

鼠标右击源文件,点击添加,点击新建项 

在下面这一栏输入你所创建的函数名和后缀名,点击添加即可。

添加完成后,即可在里面写语句。

温馨提示,在头文件内写的句子除#define开头的句子及小部分句子外都要添加“;”

那么如何创建自己所要函数名的源文件呢

操作也是和创建头文件的方式一样,只是在写后缀名的时候要写成 .c(当然这也是取决于你所用的语言,如使用c++写的程序,后缀名就是 .cpp) 

那么创建号函数的源文件后,我们应该在这个文件写什么以及如何包含自己创的头文件呢?

如图

头文件的包含:我们自己写的头文件需要用 " " 包含

那么这和<>包含有什么区别呢,别急这个一会给你讲清楚

那么我们来讲讲在函数文件里写什么,通过上面这张图,大家应该很清楚了,这个文件里头就是写执行的语句,如add函数,我需要它帮我算出两个数的和,并且返回两个数的和,因此只需要写return x+y;即可。

那么头文件使用 " "和<>到底有什么区别呢,以及什么时候用 " "什么时候用<>呢?

区别:自己所创建的头文件只能" ",无法使用<>,那么使用了<>包含了自己创建的头文件,发生的错误是咋样的呢?

大家请看

编译器会显示无法打开源文件,这是为什么呢?因为这个头文件是我们自己创的,不是编译器自带的。而stdio.h是编译器自带的。

那么 " "和<>包含头文件有什么区别呢?

区别:" "包含头文件时,编译器会在自己存放所有头文件的“库”里面查找一遍,这也就是为什么上图会出无法打开头文件"add.h"的原因,而像stdio.h这类编译器自带的头文件,若使用 " ",编译器则会在自己的“库”里头查找一翻,确定有这个头文件后再继续执行下面的语句,会浪费一些时间,因此我们通常会使用<>包含编译器自带的头文件,这样可以让编译器识别出这是自带的头文件,省去了查找头文件的时间,提高了程序运行的效率。

那么总结一下吧

本篇文章的内容重点在于如何创建函数文件、函数头文件、函数文件里写什么语句以及使用 " "和<>包含头文件的区别。


那么今天的内容就先到这了。喜欢我的文章就麻烦各位的小手给我点点关注,支持我一下,谢谢啦!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)

AIGC实战——ProGAN 0. 前言1. ProGAN2. 渐进式训练3. 其他技术3.1 小批标准差3.2 均等学习率3.3 逐像素归一化 4. 图像生成小结系列链接 0. 前言 我们已经学习了使用生成对抗网络 (Generative Adversarial Network, GAN) 解决各种图像生成任务。GAN 的模型架构和训练过程具有…

2023 年网络安全热点技术发展态势

文章目录 前言一、人工智能信息技术迎来井喷式发展期二、零信任网络安全架构即将投入实际部署三、美国全面推动军政业务向云环境迁移四、专用太空软硬件与独立卫星网络并行发展五、量子信息技术与网络安全领域加速融合前言 在 2023 年取得进展的信息技术不在少数。从网络安全的…

从300亿分子中筛出6款,结构新且易合成,斯坦福抗生素设计AI模型登Nature子刊

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 全球每年有近 500 万人死于抗生素耐药性&#xff0c;因此迫切需要新的方法来对抗耐药菌株。 …

HTML5.Canvas简介

1. Canvas.getContext getContext(“2d”)是Canvas元素的方法&#xff0c;用于获取一个用于绘制2D图形的绘图上下文对象。在给定的代码中&#xff0c;首先通过getElementById方法获取id为"myCanvas"的Canvas元素&#xff0c;然后使用getContext(“2d”)方法获取该Ca…

音视频开发之旅(83)- 腾讯音乐开源高质量唇形同步模型--MuseTalk

目录 1.效果展示 2.原理学习 3.流程分析 4.资料 一、效果展示 -- &#xff08;推理素材来源于网络&#xff0c;如有侵权&#xff0c;联系立删&#xff01;&#xff09; 唱歌效果&#xff08;歌曲有suno生成&#xff09; 用于推理的视频素材来源于网络&#xff0c;如有侵权&…

Java中常见的排序算法

常见算法可以分为两大类&#xff1a;   非线性时间比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此称为非线性时间比较类排序。   线性时间非比较类排序&#xff1a;不通过比较来决定元素间的相对次序…

Windows应急响应

1.排查隐藏账号 查看注册表 找到攻击者用户目录文件 排查用户异常 eventvwr.msc 分析用户登录日志 排查可疑端口 排查可疑进程 检查启动项、计划任务和服务 查看系统补丁信息 安装火绒&#xff0c;在安全工具里有火绒剑 计划任务 使用D盾对主机进行检测&#xff0c;发现隐藏账户…

python自定义库的打包和安装

要将自定义库安装到python的三方包地址site-packages中&#xff0c;除了可以直接的复制之外&#xff0c;更为合理科学的方法是通过build和install的方式进行。因为直接复制仅仅作为一种临时的简单的方法&#xff0c;而且只能针对源码进行&#xff0c;也不好进行科学管理&#x…

AJAX —— 学习(三)(完结)

目录 一、jQuery 中的 AJAX &#xff08;一&#xff09;get 方法 1.语法介绍 2.结果实现 &#xff08;二&#xff09;post 方法 1.语法介绍 2.结果实现 &#xff08;三&#xff09;通用型的 AJAX 方法 1.语法介绍 2.结果实现 二、AJAX 工具库 axios &#xff08…

简历复印--原型模式

1.1 夸张的简历 简历的打印。"对编程来说&#xff0c;简单的复制粘贴极有可能造成重复代码的灾难。我所说的意思你根本还没听懂。那就以刚才的例子&#xff0c;我出个需求你写写看&#xff0c;要求有一个简历类&#xff0c;必须要有姓名&#xff0c;可以设置性别和年龄&am…

第十四届蓝桥杯省赛大学C组(C/C++)填充

原题链接&#xff1a;填充 有一个长度为 n 的 01 串&#xff0c;其中有一些位置标记为 ?&#xff0c;这些位置上可以任意填充 0 或者 1&#xff0c;请问如何填充这些位置使得这个 01 串中出现互不重叠的 0 和 1 子串最多&#xff0c;输出子串个数。 输入格式 输入一行包含一…

SQLite 4.9的 OS 接口或“VFS”(十三)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite字节码引擎&#xff08;十二&#xff09; 下一篇:SQLite 4.9的虚拟表机制(十四) 1. 引言 本文介绍了 SQLite OS 可移植性层或“VFS” - 模块位于 SQLite 实现堆栈底部 提供跨操作系统的可移植性。 VFS是Virtual File…

5560.树的直径

蛮不错的一道题目&#xff0c;你要利用树的性质分析出&#xff0c;你只需要维护上一次的树的直径的两个端点就好了 #include<iostream>using namespace std; using ll long long; using pii pair<int,int>; const int N 6e510; const int inf 0x3f3f3f3f; cons…

算法:树形dp(树状dp)

文章目录 一、树形DP的概念1.基本概念2.解题步骤3.树形DP数据结构 二、典型例题1.LeetCode&#xff1a;337. 打家劫舍 III1.1、定义状态转移方程1.2、参考代码 2.ACWing&#xff1a;285. 没有上司的舞会1.1、定义状态转移方程1.2、拓扑排序参考代码1.3、dfs后序遍历参考代码 一…

MySQL复制拓扑4

文章目录 主要内容一.启用GUID并配置循环复制1.其中&#xff0c;UUID用来唯一标识每一个服务器&#xff0c;事务的编号记录了在该服务器上执行的事务的顺序。使用SELECT server_uuid\G命令可以查看服务器的UUID&#xff0c;sever1的UUID值显示如下&#xff1a;代码如下&#xf…

Vue3_2024_7天【回顾上篇watch常见的后两种场景】

随笔&#xff1a;这年头工作不好找咯&#xff0c;大家有学历提升的赶快了&#xff0c;还有外出人多注意身体&#xff0c;没错我在深圳这边阳了&#xff0c;真的绝啊&#xff0c;最尴尬的还给朋友传染了&#xff01;&#xff01;&#xff01; 之前三种的监听情况&#xff0c;监听…

文本识别 OCR 解决方案

Capture2Text 便携式 OCR 工具 Capture2Text 能够使用键盘快捷键快速对屏幕的一部分进行 OCR。 默认情况下&#xff0c;生成的文本将保存到剪贴板。支持中文、英文、法文、德文、日文、韩文、俄文、西班牙文等 90 多种语言。 Capture2Text 是便携式工具&#xff0c;不需要安装…

快速了解FastAPI与Uvicorn是什么?

概念 什么是Uvicorn Python Uvicorn 是一个快速的 ASGI&#xff08;Asynchronous Server Gateway Interface&#xff09;服务器&#xff0c;用于构建异步 Web 服务。它基于 asyncio 库&#xff0c;支持高性能的异步请求处理&#xff0c;适用于各种类型的 Web 应用程序。 Uvi…

SEO超级外链工具源码

源码简介 超级外链工具&#xff0c;是一款在线全自动化发外链的推广工具。使用本工具可免费为网站在线批量增加外链&#xff0c;大大提高外链发布工作效率&#xff0c;是广大草根站长们必备的站长工具。 搭建环境 PHP 5.6 安装教程 上传源码压缩包到网站目录并解压即可 首…

Linux安装最新版Docker完整教程

参考官网地址&#xff1a;Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统&#xff0c;内核版本为3.10 1.3 安装依赖包 …