备忘录模式(Memento Pattern):游戏存档系统实战案例分析

肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

开发一款角色扮演游戏(RPG)时,需要一个系统来保存玩家的游戏进度,包括角色的位置、状态、装备和任务进度等,以便玩家可以加载之前的存档继续游戏。

2. 为什么要使用备忘录设计模式

备忘录模式允许游戏状态的保存和恢复,使得玩家可以自由地进行游戏存档和读档操作,而不会影响当前的游戏逻辑。

3. 标准备忘录设计模式图

4. 业务备忘录设计模式图

5. 业务代码参考

java 复制代码
// 游戏角色状态
class PlayerStatus {
    // 角色状态属性
}

// 游戏项目(如武器、装备等)
class Item {
    // 项目属性
}

// 游戏状态
class GameState {
    private Vector playerPosition;
    private PlayerStatus playerStatus;
    private List<Item> equipment;
    private Map<String, Boolean> questProgress;

    // 构造函数、getter 和 setter

    public String getState() {
        // 转换游戏状态为字符串形式,用于存储
        return "状态信息";
    }
}

// 游戏类
class Game {
    private GameState currentState;

    public GameState saveGame() {
        // 保存当前游戏状态
        return new GameState(currentState); // 复制当前状态
    }

    public void loadGame(GameState gameState) {
        // 从存档中恢复游戏状态
        this.currentState = gameState;
    }
}

// 存档管理器
class SaveManager {
    private Stack<GameState> saves = new Stack<>();

    public void saveState(GameState gameState) {
        saves.push(gameState);
    }

    public GameState loadLastState() {
        return saves.isEmpty() ? null : saves.pop();
    }
}

// 客户端使用
class GameApp {
    public static void main(String[] args) {
        Game game = new Game();
        SaveManager saveManager = new SaveManager();

        // 玩家进行一系列操作后,决定保存游戏
        GameState savedState = game.saveGame();
        saveManager.saveState(savedState);

        // 玩家退出游戏或读取存档
        GameState loadedState = saveManager.loadLastState();
        if (loadedState != null) {
            game.loadGame(loadedState);
            // 游戏继续从存档状态进行
        }
    }
}

6. 使用备忘录设计模式的好处

  • 状态管理:允许游戏在不同时间点保存和恢复状态。
  • 灵活性:玩家可以随时保存和加载游戏,提高了游戏体验。

7. 其他使用备忘录设计模式场景参考

  • 图形设计软件:保存设计的不同版本。
  • 文档编辑:实现文档的版本控制。

总结

  • Git:虽然不是直接使用备忘录模式,但Git的版本控制思想与备忘录模式相似。

结论

备忘录模式为游戏存档系统提供了一种有效的方法来保存和恢复游戏状态,增强了游戏的可玩性和用户体验。

历史热点文章

相关推荐
葡萄城技术团队4 小时前
1000 人协同压测的环境瓶颈排查:CPU 争用与 Wi\-Fi
前端
学长毕设5 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
excel5 小时前
Marked 与 Markdown 有什么区别?该怎么选?
前端
滴滴答答哒5 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
小贺儿开发6 小时前
《流光绘忆》Unity 沉浸式光影互动
科技·unity·ai·程序员·工具·互动·光影
Da Da 泓6 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
zxcvb1537 小时前
远程查看本地文档:一条轻量 Web 文件服务的工程化链路
前端·远程查看文档
niucloud-admin7 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
北岛贰7 小时前
啵啵音乐迎来全新升级!
前端
captain3768 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis