当前位置: 首页 > news >正文

c++游戏制作指南(四):c++实现数据的存储和读取(输入流fstream)

🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿
       🍟欢迎来到静渊隐者的csdn博文,本文是c++游戏制作指南的一部🍟

🍕更多文章请点击下方链接🍕

🍨 c++游戏制作指南🍨


🍜专栏介绍:在这一专栏中,我将循循善诱,带领你,在冷峻的控制台上,种满缤纷,一同走入c++控制台游戏的殿堂。

🥨适宜人群:学习C++语言三个月及以上的爱好者,熟记基础语法(选择、循环两大结构),掌握基础算法(高精度、排序、模拟、贪心、搜索、动规等),知晓基础数据结构(数组、字符串、链表、栈、队列、树、图)。

🌭学习目的:能够自主编写出有趣的c++控制台游戏,并掌握自学的方法。
🥞喜欢的朋友可以关注一下,下次更新不迷路

目录

🥙前言

🥪一、存档存什么?

①角色扮演游戏(RPG):

②动作游戏(ACT):

③策略游戏(SLG):

④射击游戏(FPS):

⑤模拟游戏(SIM):

🌮二、fstream

①打开文件 

②关闭文件 

③读写文件

读写 

状态标志符的验证

🍔三、最终代码

🍣四、参考资料


🥙前言

游戏中存档的重要性不言而喻。

首先,存档可以帮助玩家在游戏过程中遇到问题或失误时恢复进度,避免重复操作,提高游戏体验。其次,存档可以记录玩家的游戏历程,帮助玩家回顾游戏过程,更好地理解游戏世界。

此外,有些游戏存在多个存档点,如果每次重新开始游戏,会浪费大量时间和精力。因此,存档对于玩家来说非常重要,可以让玩家随时随地继续游戏。

在游戏中,存档的方式各不相同,有些游戏需要玩家手动存档,而有些游戏则会自动存档。但是,无论哪种方式,存档的位置和方式都应该让玩家明确,避免出现存档无效或存档丢失的情况。

总之,存档是游戏中必不可少的一部分,对于玩家来说非常重要。存档可以恢复游戏进度,记录游戏历程,提高游戏体验,减少时间和精力的浪费。

因此,在玩游戏时,玩家都希望有个存档。

🥪一、存档存什么?

这一内容看似是废话,实则非常重要。

举几个例子:

①角色扮演游戏(RPG):

a. 角色数据:游戏需要存储每个角色的详细信息,包括但不限于等级、技能、装备、任务进度、角色属性等。这些数据会随着游戏的进行不断更新和调整。
b. 地图与剧情:游戏需要存储游戏中的地图设计、环境细节、剧情线、对话等元素。这些内容通常与角色数据相关联,以提供丰富的游戏体验。
c. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。

8a45ef0081d843e5a0a5ffeaafa99d4f.jpeg

②动作游戏(ACT):

a. 操作记录:游戏需要存储玩家的操作记录,包括键盘、鼠标或游戏手柄的输入。这些记录有助于确认玩家的动作和决策。
b. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
c. 多人联机数据:如果游戏支持多人联机,则需要存储玩家之间的连接和通信数据,包括网络延迟、连接状态等。这将确保游戏的流畅进行。

85b961f14a3642bea43d4ae621439d67.jpeg

③策略游戏(SLG):

a. 策略信息:游戏需要存储玩家的决策数据,包括但不限于资源分配、建筑升级、战术选择等。这些数据将有助于在玩家下次游戏时恢复之前的策略。
b. 游戏地图:游戏需要存储游戏中的地图设计、环境细节、任务线、剧情等元素。这些内容将为玩家提供丰富的策略选择和游戏体验。
c. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。

f8cba3c23fbc43d7b0de30a11bd928ec.webp

④射击游戏(FPS):

a. 操作记录:游戏需要存储玩家的操作记录,包括键盘、鼠标或游戏手柄的输入。这些记录有助于确认玩家的射击和决策。
b. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
c. 多人联机数据:如果游戏支持多人联机,则需要存储玩家之间的连接和通信数据,包括网络延迟、连接状态等。这将确保游戏的流畅进行。

57adc0c4cc7e4a9d96ae2b498a88a273.webp

⑤模拟游戏(SIM):

a. 模拟数据:游戏需要存储大量的模拟数据,包括但不限于环境状态、资源数量、人口规模、建筑状态等。这些数据将反映游戏的实时状态,并提供丰富的模拟体验。
b. 游戏地图:游戏需要存储游戏中的地图设计、环境细节、任务线、剧情等元素。这些内容将为玩家提供丰富的模拟环境和体验。
c. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。

db464d2f838b4adbb28db5bbf80598e4.webp

总之,存档的内容要是关乎游戏发展的重要信息


🌮二、fstream


使用到的头文件有:
 

fstream  // 文件流
ifstream  // 输入文件流
ofstream  // 输出文件流


①打开文件 

  在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: 

void open(const char* filename,int mode,int access); 

参数: 
filename:  要打开的文件名 
mode:    要打开文件的方式 
access:   打开文件的属性 

检查是否成功打开成功:

//对ifstream、ofstream对象可用,fstream对象不可用。 
if (f) 
{//打开成功
}
if (f.good()) {...}// !运算符已经重载
if (!f) 
{//打开失败
}       
if (f.fail()) {...}

所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定

②关闭文件 

打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作。

如:file1.close(),就是把file1相连的文件关闭。 

③读写文件

读写 

  这本有一些讲究,但碍于这里并不是专门讲解此函数,因此就只需照常输入输出(指cin/cout,scanf/print等基础输入输出)即可(你应该知道存了那些东西,也清楚应读出什么东西,并把那些东西放到哪里吧)

状态标志符的验证

bad()
如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。

fail()
除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。

eof()
如果读文件到达文件末尾,返回true。用于判断是否读完

good()
这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。

要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。

🍔三、最终代码

好了,现在看一看最终的代码。

#include<iostream> 
#include<fstream>
using namespace std;
#define FILENAME "文件的名字.txt"
void dudang()//读档 
{cout<<"正在读取存档……";freopen("jisuan.txt","r",stdin);//这里各种输入(像平常那样读入,cin,scanf()等) fclose(stdin);//关闭文件,然后就可以在控制台上继续输出了 (就和平常一样了) system("cls");
}
void cundang()//存档
{cout<<"正在为你存档……"<<endl;freopen("jisuan.txt","w",stdout);//这里各种输出(像平常那样读入,cout,printf()等) fclose(stdout);//关闭文件,功效同上 system(); 
} 
int main()
{fstream _file;_file.open(FILENAME, ios::in);//打开文件 if(!_file)//打开失败,通常默认为没有存档 {}else{dudang();//存在文件,表示之前有玩过,读档 }
}

这是重中之重啊。

 

🍣四、参考资料

Fstream简介

fstream详解

相关文章:

c++游戏制作指南(四):c++实现数据的存储和读取(输入流fstream)

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到静渊隐者的csdn博文&#xff0c;本文是c游戏制作指南的一部&#x1f35f; &#x1f355;更多文章请点击下方链接&#x1f355; &#x1f368; c游戏制作指南&#x1f3…...

如何使用CSS实现一个响应式视频播放器?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现响应式视频播放器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣…...

Typora上传文件到Gitee

工作内容,不对外开放 一、Typora上传笔记到CSDN 一、安装node.js 官网链接:Node.js (nodejs.org) 下载后得到一个.msi文件,双击即可。 win + R 打开CMD,基于node -v 和npm -v,验证是否安装成功: 二、配置Gitee 1、新建仓库 2、开源此仓库 2.1、初始化readme文件...

系统架构设计师---2017年下午试题1分析与解答(试题三)

2017年下午试题1分析与解答 试题三 阅读以下关于机器人操作系统架构的描述,回答问题1至问题3 【说明】 随着人工智能技术的发展,工业机器人已成为当前工业界的热点研究对象。某宇航设备公司为了扩大业务范围,决策层研究决定准备开展工业机器人研制新业务。公司将论证工作…...

从零搭建vue + element-plus 项目

目录 从零搭建vue element-plus 项目 环境安装 安装项目 安装命令如下&#xff1a; 选择配置如下&#xff1a; 安装插件与启动服务 安装element框架 使用element框架 测试element是否安装成功 环境判断 安装插件 使用插件 配置变量 暴漏变量 测试…...

原码、补码、反码

一、前置概念 计算机底层存储数据时使用的是二进制数字&#xff0c;但是计算机在存储一个数字时并不是直接存储该数字对应的二进制数字&#xff0c;而是存储该数字对应二进制数字的补码。所以接下来我们需要来了解一下原码、反码和补码。 那么再了解原码、反码、补码之前&…...

煤矿调度IP语音对讲广播模块一键求助对讲矿用调度通信系统SIP语音对讲求助终端

硬件接口描述 SV-2101VP/ SV-2103VP系列网络音频模块&#xff0c;所有外部连接采用端子&#xff0c;电源采用2.0mm的端子&#xff0c;网络采用标准RJ45连接器&#xff0c;其他都是1.25mm的连接器。 端口类型定义 P ———— 电源 AI ———— 模拟输入&#xff08;在这里是音…...

堆 和 优先级队列(超详细讲解,就怕你学不会)

优先级队列 一、堆的概念特性二、堆的创建1、向下调整算法2、向下调整建堆3、向下调整建堆的时间复杂度 三、堆的插入1、向上调整算法实现插入2、插入创建堆的时间复杂度 三、堆的删除四、Java集合中的优先级队列1、PriorityQueue 接口概述及模拟实现2、如何创建大根堆&#xf…...

AIGC绘画:基于Stable Diffusion进行AI绘图

文章目录 AIGC深度学习模型绘画系统stable diffusion简介stable diffusion应用现状在线网站云端部署本地部署Stable Diffusion AIGC深度学习模型绘画系统 stable diffusion简介 Stable Diffusion是2022年发布的深度学习文本到图像生成模型&#xff0c;它主要用于根据文本的描述…...

python实现对Android系统手机亮度的调节

要实现对手机亮度的调节&#xff0c;需要使用Android系统的API。以下是一个简单的Python代码示例&#xff0c;演示如何使用ADB工具和Python脚本来控制Android设备的亮度&#xff1a; from adb.client import Client as AdbClient import os# 连接设备 client AdbClient(host&…...

《论文阅读14》FAST-LIO

一、论文 研究领域&#xff1a;激光雷达惯性测距框架论文&#xff1a;FAST-LIO: A Fast, Robust LiDAR-inertial Odometry Package by Tightly-Coupled Iterated Kalman Filter IEEE Robotics and Automation Letters, 2021 香港大学火星实验室 论文链接论文github 二、论文概…...

Kotlin CompletableDeferred 入门

在 Kotlin 中&#xff0c;CompletableDeferred 是一个用于异步编程的类&#xff0c;它提供了一种实现异步操作和等待操作结果的方式。 CompletableDeferred 是 Deferred 接口的具体实现之一&#xff0c;可以用于表示一个可能会在将来完成的操作。它提供了以下主要功能&#xf…...

stm32g070的PD0/PD2 PA8和PB15

目前在用STM32G070做项目&#xff0c;其中PD2TIMER3去模拟PWM&#xff0c;PD0用作按键检测&#xff0c;测试发现PD0低电平检测没有问题&#xff0c;高电平检测不到&#xff0c;电路图如下图所示&#xff1a; 用万用表测试电平&#xff0c;高电平1.0V左右&#xff0c;首先怀疑硬…...

【数据结构】 链表简介与单链表的实现

文章目录 ArrayList的缺陷链表链表的概念及结构链表的分类单向或者双向带头或者不带头循环或者非循环 单链表的实现创建单链表遍历链表得到单链表的长度查找是否包含关键字头插法尾插法任意位置插入删除第一次出现关键字为key的节点删除所有值为key的节点回收链表 总结 ArrayLi…...

【Leetcode】98. 验证二叉搜索树

一、题目 1、题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1: 输入:root = …...

ViewFs And Federation On HDFS

序言 ViewFs 是在Federation的基础上提出的,用于通过一个HDFS路径来访问多个NameSpace,同时与ViewFs搭配的技术是client-side mount table(这个就是具体的规则配置信息可以放置在core.xml中,也可以放置在mountTable.xml中). 总的来说ViewFs的其实就是一个中间层,用于去连接不…...

每日一学——无线基础知识

无线局域网&#xff08;Wireless Local Area Network&#xff0c;简称 WLAN&#xff09;是一种使用无线通信技术连接多个无线终端设备的局域网。它通常基于无线电波传输数据&#xff0c;并使用无线接入点&#xff08;Access Point&#xff0c;简称 AP&#xff09;来连接无线设备…...

【腾讯云 Cloud Studio 实战训练营】在线 IDE 编写 canvas 转换黑白风格头像

关于 Cloud Studio Cloud Studio 是基于浏览器的集成式开发环境(IDE)&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 Cloud Studio 作为在线IDE&#xff0c;包含代码高亮、自动补全、Gi…...

【Hystrix技术指南】(7)故障切换的运作流程原理分析(含源码)

背景介绍 目前对于一些非核心操作&#xff0c;如增减库存后保存操作日志发送异步消息时&#xff08;具体业务流程&#xff09;&#xff0c;一旦出现MQ服务异常时&#xff0c;会导致接口响应超时&#xff0c;因此可以考虑对非核心操作引入服务降级、服务隔离。 Hystrix说明 官方…...

Springboot 整合MQ实现延时队列入门

延时队列 添加依赖配置文件队列TTL代码架构图交换机、队列、绑定配置文件代码生产者代码消费者代码延时队列优化添加普通队列配置代码生产者发送消息是进行设置消息的ttl 通过MQ 插件实现延时队列代码架构图配置交换机生产者代码消费者代码测试发送 添加依赖 <!-- rabbitMQ …...

解密开源启动器启动故障:从报错窗口到系统内核的深度排查

解密开源启动器启动故障&#xff1a;从报错窗口到系统内核的深度排查 【免费下载链接】PCL 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 开源启动器故障排除是开发者和用户在使用过程中经常遇到的问题。当你点击启动按钮&#xff0c;却被系统弹出的"操作被拒…...

LabVIEW以声卡为数据采集设备开发数据采集处理系统。 具备声卡参数设置,实现文件自动存储、...

LabVIEW以声卡为数据采集设备开发数据采集处理系统。 具备声卡参数设置&#xff0c;实现文件自动存储、以及文件手动存储两种功能&#xff0c;进行采集数据的分析&#xff0c;包括频域分析&#xff0c;滤波处理等功能&#xff1b; 程序实验报告在工业测量和实验室场景中&#x…...

2026知识付费平台选择指南:学习者与创作者如何各取所需

2026年&#xff0c;知识付费行业已进入成熟期。据艾媒咨询&#xff08;iiMedia Research&#xff09;预测&#xff0c;2026 年中国知识付费市场规模将突破3000 亿元&#xff0c;较 2025 年的 2808.8 亿元持续增长。然而&#xff0c;平台分化加剧——有的平台陷入内容同质化困境…...

DanKoe 视频笔记:如何在7天内重置你的生活:概述与核心概念

在本节课中&#xff0c;我们将学习如何通过一个为期七天的系统性过程&#xff0c;重置你的生活状态&#xff0c;摆脱迷茫和低效&#xff0c;重新找回专注、清晰和前进的动力。我们将从理解大脑运作的比喻开始&#xff0c;逐步介绍具体的行动步骤。 你的大脑是一台运行生命游戏…...

索引——数据库中又一个面试常考的内容(1)

当我们系统的学习了数据行的CRUD操作以后&#xff0c;尤其是查询&#xff0c;是四者之中最复杂的&#xff0c;于是&#xff0c;我们就想高效地查询、更新表中的数据&#xff0c;索引就应运而生了。为什么要使用索引&#xff1f;一句话&#xff0c;就是提升查询效率。MYSQL数据库…...

别再只用LSTM了!试试用XGBoost给它‘打补丁’,Python时序预测精度提升实战

突破LSTM瓶颈&#xff1a;用XGBoost残差修正提升时序预测精度的工程实践 当你在电商平台的销量预测中&#xff0c;LSTM已经能捕捉到季节性波动和长期趋势&#xff0c;但每逢促销活动时预测总会出现明显偏差&#xff1b;当你在服务器负载监控中&#xff0c;LSTM模型对日常流量模…...

GTX1060老显卡也能跑PyTorch!保姆级Win10+CUDA11.3+cudnn8.2环境配置避坑实录

GTX1060老显卡深度学习环境搭建全指南&#xff1a;从驱动优化到PyTorch实战 手里还握着五年前入手的GTX1060显卡&#xff1f;别急着让它退役。这套经典的Pascal架构显卡依然能在深度学习入门阶段大显身手。本文将带你完整走通Win10系统下的CUDA 11.3 cuDNN 8.2 PyTorch 1.11…...

2023年VSCode插件开发全指南:从零发布你的第一个扩展(TypeScript版)

2023年TypeScript生态下的VSCode插件开发实战 在当今开发者工具生态中&#xff0c;Visual Studio Code以其轻量化和高度可扩展性占据了绝对领先地位。根据2023年Stack Overflow开发者调查报告&#xff0c;VSCode以74.48%的使用率成为最受欢迎的代码编辑器。而插件系统正是其生态…...

【无线通信】基于统计信道的低复杂度旋转和位置优化为6D可移动天线无线通信附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

OpenClaw成本优化方案:自建Qwen3-VL:30B替代高价多模态API

OpenClaw成本优化方案&#xff1a;自建Qwen3-VL:30B替代高价多模态API 1. 为什么需要关注OpenClaw的成本问题 第一次用OpenClaw完成多模态任务时&#xff0c;我被账单吓了一跳。当时需要处理200张产品图片的分类和描述生成&#xff0c;调用某商业多模态API后&#xff0c;费用…...