Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Memento Pattern");
            Gamer   gamer   = new Gamer(100);
            Memento memento = gamer.CreateMemento();//保存最初状态

            for (int i = 0; i < 100; i++)
            {
                WriteLine($"==== {i+1}");
                WriteLine($"当前状态:{gamer}");

                gamer.Bet();

                WriteLine($"所持金钱为:{gamer.GetMoney()}");

                //决定如何处理
                if (gamer.GetMoney() > memento.GetMoney())
                {
                    WriteLine($"(所持金钱增加了许多,因此保存游戏当前的状态)");
                    memento = gamer.CreateMemento();
                }
                else if (gamer.GetMoney() < memento.GetMoney() / 2)
                {
                    WriteLine($"(所持金钱减少了许多,因此将游戏恢复至以前的状态)");
                    gamer.RestoreMemento(memento);
                }

                Thread.Sleep(100);
                WriteLine();
            }

            ReadKey();
        }
Exemplo n.º 2
0
        public static void Main(string[] args)
        {
            var gamer   = new Gamer(100);        // 最初の所持金は100
            var memento = gamer.CreateMemento(); // 最初の状態を保存しておく

            100.Times(i => {
                Console.WriteLine("==== {0}", i);   // 回数表示
                Console.WriteLine("現状:{0}", gamer); // 現在の主人公の状態表示

                gamer.Bet();                        // ゲームを進める

                Console.WriteLine("所持金は {0}円になりました。", gamer.Money);

                // Mementoの取り扱いの決定
                if (gamer.Money > memento.Money)
                {
                    Console.WriteLine("    (だいぶ増えたので、現在の状態を保存しておこう)");
                    memento = gamer.CreateMemento();
                }
                else if (gamer.Money < memento.Money / 2)
                {
                    Console.WriteLine("    (だいぶ減ったので、以前の状態に復帰しよう)");
                    gamer.RestoreMemento(memento);
                }

                // 時間待ち
                Thread.Sleep(1000);
                Console.WriteLine("");
            });
        }
Exemplo n.º 3
0
    public static void Main(string[] args)
    {
        Gamer   gamer   = new Gamer(100);
        Memento memento = gamer.CreateMemento();

        for (int i = 0; i < 100; i++)
        {
            System.Console.WriteLine("==== " + i);
            System.Console.WriteLine("Current Status:" + gamer);

            gamer.Bet();
            System.Console.WriteLine("Money has reached " + gamer.GetMoney());

            if (gamer.GetMoney() > memento.GetMoney())
            {
                System.Console.WriteLine("Money increased a lot, so save it");
                memento = gamer.CreateMemento();
            }
            else if (gamer.GetMoney() < memento.GetMoney() / 2)
            {
                System.Console.WriteLine("Money reduced a lot, so load it");
                gamer.RestoreMemento(memento);
            }

            Thread.Sleep(1000);
        }
    }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            Gamer gamer = new Gamer(100);

            Memento memento;

            if (File.Exists("memento.dat"))
            {
                memento = Memento.Deserialize();
            }
            else
            {
                memento = gamer.CreateMemento();
            }

            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine($"==== {i}");
                Console.WriteLine($"現状:{gamer}");

                gamer.Bet();

                Console.WriteLine($"所持金は{gamer.Money}円になりました。");

                if (gamer.Money > memento.Money)
                {
                    Console.WriteLine("      (だいぶ増えたので、現在の状態を保存しておこう)");
                    memento = gamer.CreateMemento();
                }
                else if (gamer.Money < memento.Money / 2)
                {
                    Console.WriteLine("      (だいぶ減ったので、以前の状態に復帰しよう)");
                    gamer.RestoreMemento(memento);
                }

                try
                {
                    Thread.Sleep(10);
                }
                catch (System.Exception)
                {
                    throw;
                }
                Console.WriteLine("");
            }
            memento.Serialize();
        }