JSON实战之savegame(Qt Example)
来源:互联网 发布:c语言可以用string类吗 编辑:程序博客网 时间:2024/05/01 17:30
character.h
#include <QJsonObject>class Character{public: enum ClassType { Warrior, Mage, Archer }; Character(); Character(const QString &name, int level, ClassType classType); QString name() const; void setName(const QString &name); int level() const; void setLevel(int level); ClassType classType() const; void setClassType(ClassType classType); void read(const QJsonObject &json); void write(QJsonObject &json) const;private: QString mName; int mLevel; ClassType mClassType;};
character.cpp
#include "character.h"Character::Character() : mLevel(0), mClassType(Warrior) {}Character::Character(const QString &name, int level, Character::ClassType classType) : mName(name), mLevel(level), mClassType(classType){}QString Character::name() const{ return mName;}void Character::setName(const QString &name){ mName = name;}int Character::level() const{ return mLevel;}void Character::setLevel(int level){ mLevel = level;}Character::ClassType Character::classType() const{ return mClassType;}void Character::setClassType(Character::ClassType classType){ mClassType = classType;}void Character::read(const QJsonObject &json){ mName = json["name"].toString(); mLevel = json["level"].toDouble(); mClassType = ClassType(qRound(json["classType"].toDouble()));}void Character::write(QJsonObject &json) const{ json["name"] = mName; json["level"] = mLevel; json["classType"] = mClassType;}
game.h
#include <QJsonObject>#include "character.h"#include "level.h"class Game{public: Game(); enum SaveFormat { Json, Binary }; const Character &player() const; const QList<Level> &levels() const; void newGame(); bool loadGame(SaveFormat saveFormat); bool saveGame(SaveFormat saveFormat) const; void read(const QJsonObject &json); void write(QJsonObject &json) const;private: Character mPlayer; QList<Level> mLevels;};
game.cpp
#include "game.h"#include <QFile>#include <QJsonArray>#include <QJsonDocument>Game::Game(){}const Character &Game::player() const{ return mPlayer;}const QList<Level> &Game::levels() const { return mLevels;}void Game::newGame() { mPlayer = Character(); mPlayer.setName(QStringLiteral("Hero")); mPlayer.setClassType(Character::Archer); mPlayer.setLevel(15); mLevels.clear(); Level village; QList<Character> villageNpcs; villageNpcs.append(Character(QStringLiteral("Barry the Blacksmith"), 10, Character::Warrior)); villageNpcs.append(Character(QStringLiteral("Terry the Trader"), 10, Character::Warrior)); village.setNpcs(villageNpcs); mLevels.append(village); Level dungeon; QList<Character> dungeonNpcs; dungeonNpcs.append(Character(QStringLiteral("Eric the Evil"), 20, Character::Mage)); dungeonNpcs.append(Character(QStringLiteral("Eric's Sidekick #1"), 5, Character::Warrior)); dungeonNpcs.append(Character(QStringLiteral("Eric's Sidekick #2"), 5, Character::Warrior)); dungeon.setNpcs(dungeonNpcs); mLevels.append(dungeon);}bool Game::loadGame(Game::SaveFormat saveFormat){ QFile loadFile(saveFormat == Json ? QStringLiteral("save.json") : QStringLiteral("save.dat")); if (!loadFile.open(QIODevice::ReadOnly)) { qWarning("Couldn't open save file."); return false; } QByteArray saveData = loadFile.readAll(); QJsonDocument loadDoc(saveFormat == Json ? QJsonDocument::fromJson(saveData) : QJsonDocument::fromBinaryData(saveData)); read(loadDoc.object()); return true;}bool Game::saveGame(Game::SaveFormat saveFormat) const{ QFile saveFile(saveFormat == Json ? QStringLiteral("save.json") : QStringLiteral("save.dat")); if (!saveFile.open(QIODevice::WriteOnly)) { qWarning("Couldn't open save file."); return false; } QJsonObject gameObject; write(gameObject); QJsonDocument saveDoc(gameObject); saveFile.write(saveFormat == Json ? saveDoc.toJson() : saveDoc.toBinaryData()); return true;}void Game::read(const QJsonObject &json){ mPlayer.read(json["player"].toObject()); mLevels.clear(); QJsonArray levelArray = json["levels"].toArray(); for (int levelIndex = 0; levelIndex < levelArray.size(); ++levelIndex) { QJsonObject levelObject = levelArray[levelIndex].toObject(); Level level; level.read(levelObject); mLevels.append(level); }}void Game::write(QJsonObject &json) const{ QJsonObject playerObject; mPlayer.write(playerObject); json["player"] = playerObject; QJsonArray levelArray; foreach (const Level level, mLevels) { QJsonObject levelObject; level.write(levelObject); levelArray.append(levelObject); } json["levels"] = levelArray;}
level.h
#include <QJsonObject>#include <QList>#include "character.h"class Level{public: Level(); const QList<Character> &npcs() const; void setNpcs(const QList<Character> &npcs); void read(const QJsonObject &json); void write(QJsonObject &json) const;private: QList<Character> mNpcs;};
level.cpp
#include "level.h"#include <QJsonArray>Level::Level(){}const QList<Character> &Level::npcs() const{ return mNpcs;}void Level::setNpcs(const QList<Character> &npcs){ mNpcs = npcs;}void Level::read(const QJsonObject &json){ mNpcs.clear(); QJsonArray npcArray = json["npcs"].toArray(); for (int npcIndex = 0; npcIndex < npcArray.size(); ++npcIndex) { QJsonObject npcObject = npcArray[npcIndex].toObject(); Character npc; npc.read(npcObject); mNpcs.append(npc); }}void Level::write(QJsonObject &json) const{ QJsonArray npcArray; foreach (const Character npc, mNpcs) { QJsonObject npcObject; npc.write(npcObject); npcArray.append(npcObject); } json["npcs"] = npcArray;}
main.cpp
#include <QCoreApplication>#include <QJsonObject>#include <QJsonDocument>#include <QDebug>#include <QJsonArray>#include "game.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); Game game; game.newGame(); // Game is played; changes are made... if (!game.saveGame(Game::Json)) return 1; if (!game.saveGame(Game::Binary)) return 1; Game fromJsonGame; if (!fromJsonGame.loadGame(Game::Json)) return 1; Game fromBinaryGame; if (!fromBinaryGame.loadGame(Game::Binary)) return 1; return a.exec();}
阅读全文
0 0
- JSON实战之savegame(Qt Example)
- SaveGame
- UE4之SaveGame重要节点
- Qt example之随机joke
- Qt example之随机笑话
- Qt example之 network joke
- Qt example 之 简易字典
- qt-example之animated picture的学习
- Qt 之 Relational Table Model Example 解析
- Qt 之 Query Model Example 解析
- Qt 之 Cached Table Example 解析
- json example
- JSON example
- Qt之json解析
- Qt之认识JSON
- Qt之JSON
- Qt之JSON解析
- qt 之json
- ls -lh
- leetcode169 229
- DES--可逆加密算法-密文可控
- HEIHEI是个笨蛋
- flag
- JSON实战之savegame(Qt Example)
- Java注释规范整理
- java ,jquery 生成 qrcode 二维码带Logo
- PHP程序员的进阶之路
- 增强学习Q-learning 算法的简明教程
- jdk-ConcurrentLinkedQueue(二)
- cordova build android 报异常 not reserve enough space 解决方法
- [js]多个按钮点击添加div,再点击删除
- 破解前端面试系列(3):如何搞定纸上代码环节?