🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿
🍟欢迎来到静渊隐者的csdn博文,本文是c++游戏制作指南的一部🍟
🍕更多文章请点击下方链接🍕
🍨 c++游戏制作指南🍨
🍜专栏介绍:在这一专栏中,我将循循善诱,带领你,在冷峻的控制台上,种满缤纷,一同走入c++控制台游戏的殿堂。
🥨适宜人群:学习C++语言三个月及以上的爱好者,熟记基础语法(选择、循环两大结构),掌握基础算法(高精度、排序、模拟、贪心、搜索、动规等),知晓基础数据结构(数组、字符串、链表、栈、队列、树、图)。
🌭学习目的:能够自主编写出有趣的c++控制台游戏,并掌握自学的方法。
🥞喜欢的朋友可以关注一下,下次更新不迷路
目录
🥙前言
游戏中存档的重要性不言而喻。
首先,存档可以帮助玩家在游戏过程中遇到问题或失误时恢复进度,避免重复操作,提高游戏体验。其次,存档可以记录玩家的游戏历程,帮助玩家回顾游戏过程,更好地理解游戏世界。
此外,有些游戏存在多个存档点,如果每次重新开始游戏,会浪费大量时间和精力。因此,存档对于玩家来说非常重要,可以让玩家随时随地继续游戏。
在游戏中,存档的方式各不相同,有些游戏需要玩家手动存档,而有些游戏则会自动存档。但是,无论哪种方式,存档的位置和方式都应该让玩家明确,避免出现存档无效或存档丢失的情况。
总之,存档是游戏中必不可少的一部分,对于玩家来说非常重要。存档可以恢复游戏进度,记录游戏历程,提高游戏体验,减少时间和精力的浪费。
因此,在玩游戏时,玩家都希望有个存档。
🥪一、存档存什么?
这一内容看似是废话,实则非常重要。
举几个例子:
①角色扮演游戏(RPG):
a. 角色数据:游戏需要存储每个角色的详细信息,包括但不限于等级、技能、装备、任务进度、角色属性等。这些数据会随着游戏的进行不断更新和调整。
b. 地图与剧情:游戏需要存储游戏中的地图设计、环境细节、剧情线、对话等元素。这些内容通常与角色数据相关联,以提供丰富的游戏体验。
c. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
编辑
②动作游戏(ACT):
a. 操作记录:游戏需要存储玩家的操作记录,包括键盘、鼠标或游戏手柄的输入。这些记录有助于确认玩家的动作和决策。
b. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
c. 多人联机数据:如果游戏支持多人联机,则需要存储玩家之间的连接和通信数据,包括网络延迟、连接状态等。这将确保游戏的流畅进行。
编辑
③策略游戏(SLG):
a. 策略信息:游戏需要存储玩家的决策数据,包括但不限于资源分配、建筑升级、战术选择等。这些数据将有助于在玩家下次游戏时恢复之前的策略。
b. 游戏地图:游戏需要存储游戏中的地图设计、环境细节、任务线、剧情等元素。这些内容将为玩家提供丰富的策略选择和游戏体验。
c. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
编辑
④射击游戏(FPS):
a. 操作记录:游戏需要存储玩家的操作记录,包括键盘、鼠标或游戏手柄的输入。这些记录有助于确认玩家的射击和决策。
b. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
c. 多人联机数据:如果游戏支持多人联机,则需要存储玩家之间的连接和通信数据,包括网络延迟、连接状态等。这将确保游戏的流畅进行。
编辑
⑤模拟游戏(SIM):
a. 模拟数据:游戏需要存储大量的模拟数据,包括但不限于环境状态、资源数量、人口规模、建筑状态等。这些数据将反映游戏的实时状态,并提供丰富的模拟体验。
b. 游戏地图:游戏需要存储游戏中的地图设计、环境细节、任务线、剧情等元素。这些内容将为玩家提供丰富的模拟环境和体验。
c. 游戏进度:游戏需要存储玩家的游戏进度,包括已完成的任务、获得的奖励、解锁的关卡等。这将有助于在玩家下次游戏时恢复之前的进度。
编辑
总之,存档的内容要是关乎游戏发展的重要信息。
🌮二、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();//存在文件,表示之前有玩过,读档 } }
这是重中之重啊。