zoukankan      html  css  js  c++  java
  • DOTA版设计模式——备忘录

    备忘录模式,最直接的就是记录游戏进度了,如果有个18关的游戏不能记录游戏进度,每次都必须从第一关开始玩,那你是不是要放弃游戏了,我肯定会的,嘿嘿。
    在C#中序列化使我们能够更方便的完成备忘录模式,UML图先给大家一个概念:

    具体代码见完整代码。
    测试代码:
                DotaPatternLibrary.Memento.Game game = new DotaPatternLibrary.Memento.Game();
                game.GameLevel = 1;
                LandpyForm.Form.OutputResult("GameLevel:" + game.GameLevel);
                LandpyForm.Form.OutputResult("Ten minute left");
                game.GameLevel = 5;
                LandpyForm.Form.OutputResult("GameLevel:" + game.GameLevel);
                LandpyForm.Form.OutputResult("SaveGame");
                DotaPatternLibrary.Memento.GameProgress gameProgress = game.GetGameProgress();
                System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                System.IO.FileStream fsObj = new System.IO.FileStream("GameProgress.dat", System.IO.FileMode.Create);
                formatter.Serialize(fsObj, gameProgress);
                fsObj.Close();
                LandpyForm.Form.OutputResult("Save OK");
                Thread.Sleep(3000);
                LandpyForm.Form.OutputResult("3 second left");

                System.IO.FileStream fsObj2 = new System.IO.FileStream("GameProgress.dat", System.IO.FileMode.Open);
                gameProgress = formatter.Deserialize(fsObj2) as DotaPatternLibrary.Memento.GameProgress;
                DotaPatternLibrary.Memento.Game game2 = new DotaPatternLibrary.Memento.Game();
                LandpyForm.Form.OutputResult("GameLevel:" + game2.GameLevel);
                LandpyForm.Form.OutputResult("LoadGame");
                game2.SetProgress(gameProgress);
                LandpyForm.Form.OutputResult("GameLevel:" + game2.GameLevel);
    完整代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;
    using System.IO;

    namespace DotaPatternLibrary.Memento
    {
        [Serializable]
        
    public class Game
        {
            
    private int _gameLevel;

            
    public int GameLevel
            {
                
    get { return _gameLevel; }
                
    set { _gameLevel = value; }
            }

            
    public GameProgress GetGameProgress()
            {
                
    return new GameProgress(this);
            }
            
    public void SetProgress(GameProgress gameProgress)
            {
                
    this._gameLevel = gameProgress.game.GameLevel;
            }
        }

        [Serializable]
        
    public class GameProgress
        {
            
    public Game game;
            
    public GameProgress(Game game)
            {
                
    this.game = game;
            }
        }
    }
  • 相关阅读:
    VestaCP中国用户遭到大量DDOS攻击
    ZooKeeper设置ACL权限控制
    linux rsync 指定用户名和密码的方式同步
    关于Apache HTTPD 2.2.15的部分漏洞修复建议
    AutoMapper官方文档(二)【升级指南】
    openssl升级
    MongoDB如何无缝版本升级
    mysql在线升级更新步骤
    手动升级kubernetes集群
    更新Docker容器
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1531554.html
Copyright © 2011-2022 走看看