Упрощение алгоритма выбора хода игрока и вывод победителя

Требуется изменить код так чтобы проверка проходила не через два while, а через 1. Нужно использовать bool при выводе победителя посредством user1 = true, user2 = false. Как можно реализовать смену игроков с помощью bool?

int userTry;
        // bool buser1 = true;
        // bool buser2 = false;
        // Ход первого игрока
        while (gameNumber > 0)
        {
            // Игрок, ход которого указан вводит число userTry, которое может принимать значения 1, 2, 3 или 4
            Console.Write($"{user1}: ");
            userTry = Convert.ToInt32(Console.ReadLine());
            if (userTry < 1 || userTry > 4)
            {
                Console.WriteLine("Введите корректное число!");
            }
            else
            {
                gameNumber -= userTry;
                Console.BackgroundColor = ConsoleColor.Red;
                Console.WriteLine($"Итог: {gameNumber}");
                Console.ResetColor();
                bool buser1 = true;

                // Ход второго игрока
                while (gameNumber > 0)
                {
                    Console.Write($"{user2}: ");
                    userTry = Convert.ToInt32(Console.ReadLine());
                    if (userTry < 1 || userTry > 4)
                    {
                        Console.WriteLine("Введите корректное число!");
                    }
                    else
                    {
                        gameNumber -= userTry;
                        Console.BackgroundColor = ConsoleColor.Red;
                        Console.WriteLine($"Итог: {gameNumber}");
                        Console.ResetColor();
                        bool buser2 = false;
                        break;
                    }
                }

            }
        }

Ответы (2 шт):

Автор решения: rdorn

Типовой цикл для любой пошаговой игры для двух и более игроков (псевдокод):

GameStart //установка начальных параметров игры
while(!IsGameEnded) //проверяем условие завершения игры, если у вас невозможна ничья,
                    //то можно просто проверить наличие победителя
{
    ActonPlayer1 //выполняем ход первого игрока
    if(IsPlayer1Win) //если ход первого игрока привел его к победе
    {
        Winner = Player1 //фиксируем победителя
        break; //принудительно выходим из цикла
    }
    ActionPlayer2 //выполняем ход второго игрока 
    if(IsPlayer2Win) //если ход второго игрока привел его к победе
    {
        Winner = Player2 //фиксируем победителя
        break; //принудительный выход из цикла тут необязателен, но это зависит от условия
               //завершения игры, которое проверяется в цикле
    }
}
GameEnd //завершаем игру и выводим победителя

В общем виде выглядит примерно так, вам осталось только выделить в вашем коде перечисленные шаги и оформить игровой цикл похожим образом.

→ Ссылка
Автор решения: Aziz Umarov

Я так понимаю 2 игрока попеременно уменьшают gameNumber при этом каждый вводит до корректного числа в своём цикле. Победит тот кто первым опустится до 0 или меньше.

    int userTry;
    bool isFirst = true;
    while (gameNumber > 0)
    {
        // Игрок, ход которого указан вводит число userTry, которое может принимать значения 1, 2, 3 или 4

        Console.Write($"{ isFirst? user1 : user2}:");
        userTry = Convert.ToInt32(Console.ReadLine());
        if (userTry < 1 || userTry > 4)
        {
            Console.WriteLine("Введите корректное число!");
        }
        else
        {
            gameNumber -= userTry;
            Console.BackgroundColor = ConsoleColor.Red;
            Console.WriteLine($"Итог: {gameNumber}");
            Console.ResetColor();
            isFirst = !isFirst;
        }
    }

осталось посмотреть на isFirst и вывести ответ

→ Ссылка