(十二)C++自制植物大战僵尸游戏多用户存档实现(一)

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs


游戏存档

游戏存档允许玩家保存游戏进度,以便在之后的时间继续游戏。通过存档,玩家可以暂停游戏并在需要时重新开始,而不必从头开始或重新完成已经完成的任务。游戏通常提供多个存档槽位,使玩家可以保存不同的游戏进度。这样,玩家可以同时进行多个游戏或在同一游戏中尝试不同的决策和路径。

  • 数据序列化和反序列化:将游戏中的相关数据序列化为特定格式,以便存储和读取。常用的序列化格式包括 JSONJavaScript Object Notation )和 XMLeXtensible Markup Language)等。
  • 存档加密和验证:为了保护存档的完整性和安全性,可以使用加密算法对存档文件进行加密,以防止未经授权的访问和篡改。同时,还可以实现存档的验证机制,确保存档文件的合法性和有效性。
  • 存档管理:为玩家提供管理存档的功能,如创建新存档、选择存档槽位、删除存档等。这可以通过用户界面(UI)元素和交互来实现,例如菜单、按钮、列表等。

Cocos2d-x 中提供了UserDefault 类用于存储游戏数据信息,使用XML 格式进行数据存储,但是它不支持多个存档,所以需要自定义实现游戏存档。在本游戏中,使用了RapidJson 库来实现存档管理,存档文件使用json 格式,并对在json文件的进行加密保存,防止信息被篡改,保证文件合法和有效。

本游戏存档分为关卡存档,和用户信息存档以及客户端设置存档三类。客户端的个性化设置存档使用Cocos2d-x自带存档类UserDefault实现。关卡存档,和用户信息存档使用自定义类UserData实现。

关卡存档主要保存的是在游戏闯关途中的数据信息,可以实现玩家在闯关中随时保存本关游戏数据,后续进入该关卡可以继续游戏。此类存档数据信息较多,例如在场景中的植物、僵尸、子弹、动画特效等众多信息全部需要序列化进行保存。

用户信息存档存储的一般是游戏中的金币数量,植物解锁是否解锁,关卡解锁进度等内容。数据量较小。


文件位置

实现功能的代码文件在Class\Based文件夹中。该类代码较多,数量达到了上千行。


存档文件位置

存档文件位置使用Cocos2d-x中默认的存档位置,具体位置如下图所示。

.sav后缀的文件是关卡存档,.dat后缀的文件是用户信息存档。因为游戏支持多用户存档,所以在存档文件的后面使用数字区分不同用户存档。

游戏最多支持八个用户的存档,在游戏中支持多个存档的快速切换,无需加载等待。上一篇教程中的客户端更新下载的文件也将存储在这个文件夹之中。


后续

UserData类代码实现较为复杂,代码行数上千行,将在后续讲解。

相关推荐
卷无止境1 天前
C++ 的Eigen 库全解析
c++
卷无止境1 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴1 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
博客18003 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴3 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
nujnewnehc3 天前
不会 py, 用 ai 写了个游戏辅助的感受
人工智能·游戏
众少成多积小致巨4 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
jump_jump4 天前
为了重玩金庸群侠传,我研究了一下 Ruffle 怎么复活 Flash
游戏·rust·github
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
Aloys_Code6 天前
逆向一个被遗忘的DVD游戏格式:从DES加密到Rust模拟器
游戏·模拟器·retroarch·复古游戏·native32·sunplus·赤刃·钢铁风暴