Beispiel #1
0
        public void ItRestoresDataCorrectly()
        {
            var game = Game.Instance;

            game.Score = new RealScore
            {
                Number = 100,
                Date   = DateTime.Today
            };

            GameCaretaker caretaker = new GameCaretaker();

            Assert.NotNull(game.Score);

            Assert.Equal(game.Score.Number, 100);

            caretaker.Memento = game.CreateMemento();

            game.Score.Number = 200;

            Assert.Equal(game.Score.Number, 200);

            game.SetMemento(caretaker.Memento);

            Assert.Equal(game.Score.Number, 100);
        }
        public void DoWork()
        {
            // 創造一個遊戲角色
            GamePlayer player = new GamePlayer("jojo", 100, 80, 0);

            player.ShowState();

            // 存檔
            GameCaretaker caretaker = new GameCaretaker();

            caretaker.setMemento("s1", player.saveToMemento());

            // 打小怪1
            player.play(-10, -10, 10);
            player.ShowState();
            caretaker.setMemento("s2", player.saveToMemento());
            //故意重複檔名
            caretaker.setMemento("s2", player.saveToMemento());

            // 打小怪2
            player.play(-10, -10, 10);
            player.ShowState();
            caretaker.setMemento("s3", player.saveToMemento());

            // 打小怪3
            player.play(-10, -10, 10);
            player.ShowState();
            caretaker.setMemento("s4", player.saveToMemento());
            caretaker.removeMemento("s1");
            caretaker.setMemento("s4", player.saveToMemento());

            // 打boss
            player.play(-70, -30, -30);
            player.ShowState();

            // 重新讀取存檔
            player.restoreFromMemento(caretaker.getMemento("s1"));
            player.restoreFromMemento(caretaker.getMemento("s3"));
            player.ShowState();
            player.restoreFromMemento(caretaker.getMemento("s4"));
            player.ShowState();

            caretaker.ShowMementos();
        }
Beispiel #3
0
        /// <summary>
        /// 测试游戏备忘录模式
        /// </summary>
        static void TestGameMementoState()
        {
            // 大战boss前
            GameOriginator role = new GameOriginator();

            role.GetInitState();
            role.StateDisplay();

            // 保存进度
            GameCaretaker stateAdmin = new GameCaretaker();

            stateAdmin.Memento = role.SaveState();

            // 损耗严重
            role.Fight();
            role.StateDisplay();

            //恢复备份
            role.RecoveryState(stateAdmin.Memento);
            role.StateDisplay();
        }