Упрощение алгоритма выбора хода игрока и вывод победителя
Требуется изменить код так чтобы проверка проходила не через два 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 и вывести ответ