Реализация консольного приложения - игры
В общем и целом, есть задача: Написать игру, в которой участвуют n-игроков. Программа загадывает число от 1 до Y (любое целое число) - gameNumber. Игроки ходят по очереди, при этом в консоли происходит отображения хода игрока. Игрок вводит число, скажем, userTry, которое может принимать значения от 1 до 4. При вводе userTry оно вычитается из gameNumber. Новое число gameNumber при этом выводится на экран. Побеждает тот игрок, который первее всех доберется до 0.
Первым делом я представил участвующих игроков как одномерный массив типа string. Далее создал массив numbers, в которое записывается загадываемое число gameNumber. Создал отдельную матрицу для учета ввода userTry каждого игрока. Получается так, что [i+1] элементы не учитывают ход игрока №1. Т.е. как было изначально записано в массив число gameNuber так и осталось.
Представляю ниже код неудачного решения. Подскажите, пожалуйста, идею как можно решить данную задачку.
namespace ConsoleApp14
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("В игре участвуеют пять игроков. Можно выставить пределы исходного числа");
string[] players = new string[5];
for (int i = 0; i < players.GetLength(0); i++)
{
Console.Write($"Введите имя игрока №{i + 1} - ");
players[i] = Console.ReadLine();
}
Console.WriteLine("Таблица игроков:");
for (int i = 0; i < players.Length; i++)
{
Console.WriteLine($"Игрок №{i + 1} - " + players[i]);
}
Console.Write("Введите верхнюю границу разыгрываемого числа - ");
int n = int.Parse(Console.ReadLine());
for (; ; )
{
Console.WriteLine("Генерация случайного числа....");
Random rand = new Random();
int gameNumber2 = rand.Next(10, n);
while (gameNumber2 >= 0)
{
int[] numbers = new int[5]; //Представление исходных чисел как массива
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = gameNumber2;
Console.WriteLine(numbers[i]);
}
int[] usersTry = new int[5]; //Представление ходов игроков как массива
for (int i = 0; i < usersTry.Length; i++)
{
Console.WriteLine($"Ход игрока №{i + 1} - " + players[i]);
usersTry[i] = int.Parse(Console.ReadLine());
numbers[i] = gameNumber2 - usersTry[i];
}
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
}
}
}
}
}
Ответы (1 шт):
Вот пример вашей игры с комментариями:
static void Main(string[] args)
{
Console.WriteLine("В игре участвуеют пять игроков. Можно выставить пределы исходного числа");
string[] players = new string[5];
for (int i = 0; i < players.GetLength(0); i++)
{
Console.Write($"Введите имя игрока №{i + 1} - ");
players[i] = Console.ReadLine();
}
Console.WriteLine("Таблица игроков:");
for (int i = 0; i < players.Length; i++)
{
Console.WriteLine($"Игрок №{i + 1} - " + players[i]);
}
Console.Write("Введите верхнюю границу разыгрываемого числа - ");
int n = int.Parse(Console.ReadLine());
Random rand = new Random();
//Индекс победителя
int winner = -1;
for (; ;)
{
Console.WriteLine("Генерация случайного числа....");
int gameNumber2 = rand.Next(10, n);
//Загадываем число и выводим его :) чтобы 1 игрок победил сразу
Console.WriteLine(gameNumber2);
while (gameNumber2 > 0)
{
//Ходы игроков по очереди
for (int i = 0; i < players.Length; i++)
{
Console.Write($"Ход игрока №{i + 1} - {players[i]} : ");
//Игрок вводит число и мы сразу вычитаем
gameNumber2 -= int.Parse(Console.ReadLine());
//Если победитель еще не определен и число <= 0
//то определеяем i-того игрока как победителя
//и даем другим сделать свои ходы
if (gameNumber2 <= 0 && winner == -1)
winner = i;
}
//Если победитель найден выводим его и обнуляем победителя
if (winner != -1)
{
Console.WriteLine($"Победил игрок №{winner + 1} - " + players[winner]);
winner = -1;
break;
}
}
}
}
В начале ничего не менял, убрал массивы ненужные ну и дальше по коду видно :)