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;
            }
        }
    }
  • 相关阅读:
    233. Number of Digit One
    232. Implement Queue using Stacks
    231. Power of Two
    230. Kth Smallest Element in a BST
    229. Majority Element II
    228. Summary Ranges
    227. Basic Calculator II
    ArcGIS 网络分析[3] 发布NAServer到ArcGIS for Server(以Server 10.4为例)
    iView的使用【小白向】
    Vuejs环境安装与工程建立【小白Windows向】
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1531554.html
Copyright © 2011-2022 走看看