Esempio n. 1
0
        public async Task Run(IGameManager gameManager)
        {
            //
            // Select Game
            // Initialize players
            // Run Game - Loop
            //   Get Turn Input
            //   Validate Input
            //   Apply Input
            //   Check Game Status
            //   If Finished
            //     Exit Loop
            // Declare Winner
            //

            Console.WriteLine(AppConstant.ApplicationName);

            var gameDefinition = await SelectGame(gameManager);

            var playerCount = await SelectPlayerCount(gameDefinition);

            var gameSessionId = await gameManager.StartGame(gameDefinition.Id, playerCount);

            DataTable gameBoard;

            Console.WriteLine($"Starting {gameDefinition.Name}");
            bool isGamePlayable;

            do
            {
                gameBoard = await gameManager.GetBoard(gameSessionId);

                ShowGameBoard(gameBoard);

                var currentPlayer = await gameManager.GetCurrentPlayer(gameSessionId);

                if (currentPlayer.IsMachine)
                {
                    await gameManager.AutoPlayTurn(gameSessionId);
                }
                else
                {
                    var prompt = await gameManager.GetTurnPrompt(gameSessionId);

                    Console.WriteLine($"{prompt} {currentPlayer.Name} ({currentPlayer.GamePiece}).");
                    var userInput        = GetStringInput();
                    var validationResult = await gameManager.ConfirmUsableAddress(gameSessionId, userInput);

                    if (validationResult == ValidationResult.Success)
                    {
                        await gameManager.ApplyTurn(gameSessionId, currentPlayer.Id, userInput);
                    }
                    else
                    {
                        Console.WriteLine($"{validationResult.ErrorMessage}.  Please try again.");
                    }
                }
                isGamePlayable = await gameManager.IsGamePlayable(gameSessionId);
            } while (isGamePlayable);

            gameBoard = await gameManager.GetBoard(gameSessionId);

            ShowGameBoard(gameBoard);

            var player = await gameManager.FindWinner(gameSessionId);

            ShowWinner(player.Name, player.GamePiece);

            ShowExit();
        }