2 варианта выбора на консоли
Я делаю игру на Visual Studio на C# (в консоли). Речь идет о диалогах, и вы можете ответить на них двумя вариантами: одна клавиша (для ответа на первый вопрос) - 1, а другая - 2. Проблема в том, что когда вы нажимаете одну клавишу, вы не можете нажать другую, нет больше, я имею в виду, если вы нажмете 1, вы не можете нажать 2, и наоборот.
static void Main(string[] args)
{
Console.WriteLine("Press 1 or 2 please...");
//I know there are some errors in this code, i'm new at c#
ConsoleKeyInfo number1;
do
{
number1 = Console.ReadKey();
Console.WriteLine("Number 1 was pressed");
//This is the 1st answer
}
while (number1.Key != ConsoleKey.D1);
ConsoleKeyInfo number2;
//The problem is that when I already pressed D1 (1), I shouldn't be
//able to press D2 (2). And if I press D2 (2), I shoundn´t be able
//to press D1 (1).
do
{
number2 = Console.ReadKey();
Console.WriteLine("Number 2 was pressed");
//This is the 2nd answer
}
while (number2.Key != ConsoleKey.D2);
Console.ReadLine();
}
1 ответ
Решение
Проблема в вашем коде в том, что ваша логика не подходит для игры, которую вы хотите разработать.
В следующем коде я использую только один цикл Do / while для получения ключей, а затем решаю использовать переключатель, если ключ является одним из ключей, которые я хочу получить, если нет, я продолжаю цикл и снова спрашиваю другой ключ.
class Program
{
static void Main(string[] args)
{
bool knownKeyPressed = false;
do
{
Console.WriteLine("Press 1 or 2 please...");
ConsoleKeyInfo keyReaded = Console.ReadKey();
switch (keyReaded.Key)
{
case ConsoleKey.D1: //Number 1 Key
Console.WriteLine("Number 1 was pressed");
Console.WriteLine("Question number 1");
knownKeyPressed = true;
break;
case ConsoleKey.D2: //Number 2 Key
Console.WriteLine("Number 2 was pressed");
Console.WriteLine("Question number 2");
knownKeyPressed = true;
break;
default: //Not known key pressed
Console.WriteLine("Wrong key, please try again.");
knownKeyPressed = false;
break;
}
} while(!knownKeyPressed);
Console.WriteLine("Bye, bye");
Console.ReadLine();
}
}