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

相关推荐
不过四级不改名67733 分钟前
用c语言实现简易c语言扫雷游戏
c语言·算法·游戏
我命由我123452 小时前
嵌入式 STM32 开发问题:烧录 STM32CubeMX 创建的 Keil 程序没有反应
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·嵌入式
筏.k2 小时前
C++: 类 Class 的基础用法
android·java·c++
C++ 老炮儿的技术栈2 小时前
手动实现strcpy
c语言·开发语言·c++·算法·visual studio
一条叫做nemo的鱼2 小时前
从汇编的角度揭开C++ this指针的神秘面纱(下)
java·汇编·c++·函数调用·参数传递
0点51 胜2 小时前
visual studio小番茄插件某些快捷键失效
ide·visual studio
ComputerInBook3 小时前
理解 C++ 的 this 指针
开发语言·c++·指针·this·this指针
nenchoumi31193 小时前
UE5 学习系列(八)材质基础认知
学习·游戏·ue5·机器人·材质
MikeWe3 小时前
一文读懂C++移动语义和完美转发
c++
小马敲马4 小时前
[3.4] 集合通信 理论+代码
开发语言·c++·人工智能·算法·性能优化