(十二)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类代码实现较为复杂,代码行数上千行,将在后续讲解。

相关推荐
C+++Python4 小时前
C++ 进阶学习完整指南
java·c++·学习
sparEE4 小时前
c++值类别、右值引用和移动语义
开发语言·c++
jrrz08285 小时前
Apollo MPC Controller
c++·自动驾驶·apollo·mpc·横向控制·lateral control
小王C语言7 小时前
【线程概念与控制】:线程封装
jvm·c++·算法
学习,学习,在学习7 小时前
Qt工控仪器程序框架设计详解(工控多仪器控制版本)
开发语言·c++·qt
信竞星球_少儿编程题库7 小时前
2026年全国信息素养大赛算法应用主题赛 丝路新城 C++ 模拟卷(三)
开发语言·c++
Zhang~Ling7 小时前
深入解析C++list:从0到1实现一个完整的链表类
c++·链表·list
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之字符串 --【字符串综合】:[NOIP 2015 提高组] 子串
c++·字符串·csp·高频考点·子串·信奥赛
June`9 小时前
redis项目之命令解析器
数据库·c++·redis
rGzywSmDg9 小时前
如何在Dev-C++中设置TDM-GCC为默认编译器
开发语言·c++