Exemple #1
0
        private static (bool, int) CheckIfCanWin(bool bot, GameSettings settings)
        {
            InvertIfPlayer(bot, settings);

            for (var j = 1; j <= settings.BoardWidth; j++)
            {
                if (settings.YCoordinate[j - 1] > -1)
                {
                    if (EndGame.GameOver(j, settings))
                    {
                        InvertIfPlayer(bot, settings);
                        return(true, j);
                    }
                }
            }
            InvertIfPlayer(bot, settings);
            return(false, 0);
        }
        internal static void PlayTheGame(GameSettings settings, bool loaded = false)
        {
            if (settings == null)
            {
                return;
            }
            var game = new Game(settings);

            if (!loaded)
            {
                for (var i = 0; i < settings.BoardWidth; i++)
                {
                    settings.YCoordinate[i] = settings.BoardHeight - 1;
                }
            }
            Console.Clear();
            bool done, playerWon;

            do
            {
                Console.Clear();
                GameUI.PrintBoard(game);
                var userXint   = -1;
                var usedLetter = false;
                if (!settings.VersusBot || (settings.VersusBot && settings.IsPlayerOne))
                {
                    Saver.SaveGame(settings, true);
                    do
                    {
                        Console.WriteLine("Press X to go back to main menu. Press S to save the game");
                        Console.WriteLine("Enter column number, "
                                          + (settings.IsPlayerOne
                                              ? $"{settings.FirstPlayerName}"
                                              : $"{settings.SecondPlayerName}"));
                        Console.Write(">");
                        var userInput = Console.ReadLine()?.Trim() ?? "null";
                        if (userInput.ToUpper() == "S")
                        {
                            Saver.SaveGame(settings, false);
                            GameUI.PrintBoard(game);
                            usedLetter = true;
                        }
                        else if (userInput.ToUpper() == "X")
                        {
                            return;
                        }

                        if (!int.TryParse(userInput, out userXint) && !usedLetter)
                        {
                            Console.WriteLine($"{userInput} is not a number!");
                            userXint = -1;
                        }
                        else if (userXint > settings.BoardWidth)
                        {
                            userXint = -1;
                        }

                        usedLetter = false;
                    } while (userXint < 1 || settings.YCoordinate[userXint - 1] < 0);
                }
                else if (settings.VersusBot)
                {
                    Console.WriteLine("Bot is thinking...");
                    Thread.Sleep(1000);
                    userXint = Bot.MakeMove(settings);
                }
                playerWon = EndGame.GameOver(userXint, settings);

                if (game.Move(settings.YCoordinate[userXint - 1], userXint - 1, settings) == "Ok")
                {
                    MakeAMove(settings, userXint, game);
                }
                // if no space or player has won
                done = (settings.NumTurns == settings.BoardHeight * settings.BoardWidth) || playerWon;
            } while (!done);

            GameUI.PrintBoard(game);
            Console.Write("Game Over! ");
            if (playerWon)
            {
                Console.Write("Player ");
                Console.WriteLine((settings.IsPlayerOne ? settings.SecondPlayerName : settings.FirstPlayerName) + " has won!");
            }
            else
            {
                Console.WriteLine("Board is full!");
            }
            Console.WriteLine("Press any key to go back to main menu");
            Console.ReadKey();
            Console.Clear();
        }