现在的位置: 首页 > 综合 > 正文

DOTA版设计模式——备忘录

2012年03月09日 ⁄ 综合 ⁄ 共 2403字 ⁄ 字号 评论关闭
备忘录模式,最直接的就是记录游戏进度了,如果有个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;
        }
    }
}

抱歉!评论已关闭.