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

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

更多文章请点击下方链接

 c++游戏制作指南


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

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

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

目录

前言

一、存档存什么?

①角色扮演游戏(RPG):

②动作游戏(ACT):

③策略游戏(SLG):

④射击游戏(FPS):

⑤模拟游戏(SIM):

二、fstream

①打开文件 

②关闭文件 

③读写文件

读写 

状态标志符的验证

三、最终代码

四、参考资料


前言

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

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

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

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

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

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

一、存档存什么?

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

举几个例子:

①角色扮演游戏(RPG):

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

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

②动作游戏(ACT):

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

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

③策略游戏(SLG):

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

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

④射击游戏(FPS):

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

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

⑤模拟游戏(SIM):

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

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

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


二、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 
#include
using namespace std;
#define FILENAME "文件的名字.txt"
void dudang()//读档 
{
	cout<<"正在读取存档……";
	freopen("jisuan.txt","r",stdin);
	//这里各种输入(像平常那样读入,cin,scanf()等) 
	fclose(stdin);//关闭文件,然后就可以在控制台上继续输出了 (就和平常一样了) 
	system("cls");
}
void cundang()//存档
{
	cout<<"正在为你存档……"<

这是重中之重啊。

 

四、参考资料

Fstream简介

fstream详解

你可能感兴趣的:(c++游戏制作指南,c++,游戏,开发语言)