Exemplo n.º 1
0
        /// <summary>
        /// 与えられたフィールド文字列でゲームを開始します
        /// </summary>
        /// <param name="fieldString"></param>
        public void Start(string fieldString)
        {
            var mapSerializer = new MapSerializer(_fieldCharTable);
            var player        = new Player(mapSerializer.Deserialize(fieldString));
            var countMove     = 0;

            Console.WriteLine("倉庫番");
            Console.WriteLine("Please Enter Key... Game Start");
            Console.ReadLine();

            var operationManualText = GenerateOperationManualText();

            while (!IsClaer(player.Map))
            {
                Console.WriteLine(mapSerializer.Serialize(player.Map));
                Console.WriteLine($"移動回数: {countMove}");
                Console.WriteLine(operationManualText);

                var input = Console.ReadLine();

                if (input.Length == 0 || input.Contains('!'))
                {
                    continue;
                }

                if (!_commandTypeTable.ContainsKey(input[0]))
                {
                    continue;
                }

                var commandType = _commandTypeTable[input[0]];

                switch (commandType)
                {
                case CommandTypes.Undo:
                    if (!player.CanUndo)
                    {
                        break;
                    }

                    player.Undo();
                    countMove--;
                    break;

                case CommandTypes.Redo:
                    if (!player.CanRedo)
                    {
                        break;
                    }

                    player.Redo();
                    countMove++;
                    break;

                case CommandTypes.Reset:
                    while (player.CanUndo)
                    {
                        player.Undo();
                    }

                    countMove = 0;
                    break;

                case CommandTypes.MoveUp:
                case CommandTypes.MoveDown:
                case CommandTypes.MoveLeft:
                case CommandTypes.MoveRight:
                    if (player.TryMove(commandType))
                    {
                        countMove++;
                    }

                    break;
                }
            }

            Console.WriteLine(mapSerializer.Serialize(player.Map));
            Console.WriteLine($"移動回数: {countMove}");
            Console.WriteLine("ゲームクリア!おめでとう!!");
        }