Проверка введенного числа через Console.ReadKey и исключение - C#
Формулировка задачи:
Прохожу уроки по C# на канале youtube, там достаточно быстро проходят темы связанные с циклами и операторами if, без особых примеров их использования, в принципе все понятно, но в комментариях люди спрашивают как их использовать, и я решил сделать небольшой пример, на основании того что понял..
Задача консольной игры, выводить варианты из 3х выборов, в данном случае ящиков, в которых находится, в одном 50 очков во втором 100 очков и третий "яд" или 1 в коде.
Классом Random должно перебираться значение переменной которая в свою очередь определяет в каком ящике что лежит..
Ниже код, большой кривой и да, его наверно можно как-то сделать компактней и логичней, но моих знаний для этого не достаточно, потому как есть, приношу извинения за косяки..
ПРОБЛЕМА: Программа исполняется нормально, доходит до введения числа "console.readkey" при введение любого числа, Visual Studio жутко виснит, выдает окно проблемы, просит выслать отчёты, а в самом коде указать на проблемную точку не может. Скрин ошибки:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Random cointRand = new Random();
int box = 0, box1 = 0, box2 = 0;
int triger;
int start;
int coint = 0;
int life = 0;
int score = 0;
int lvl = 0;
string a, b, c, d;
a = "Игра действительно не для слабых, удачи!";
b = "Вам не хватило везения, и вы выбрали яд, прощайте.";
c = "Повезло, ящик содержал очки!";
d = "Уровень № " + lvl;
// Вступительная речь
Console.WriteLine("Давай поиграем!");
Console.WriteLine("Ты должен выбрать один из 3х ящиков, в одном из них яд!");
Console.WriteLine("В двух других очки, набери как можно больше очков.");
Console.WriteLine("Ты готов?! yes = 1 \\ no = 2 ");
// Проверка согласия игрока на игру
start = Convert.ToInt32(Console.ReadLine());
if (start == 1)
Console.WriteLine("Храбрец, угадывай.");
else if (start == 2)
{
life = 2;
Console.WriteLine(a);
}
// Перебор вариантов зависящий от числа выданного Рандомизатором содержания ящиков.
if (coint == 0){
box = 1;
box1 = 50;
box2 = 100;
}
else if (coint == 1)
{
box = 50;
box1 = 1;
box2 = 100;
}
else if (coint == 2)
{
box = 100;
box1 = 50;
box2 = 1;
}
// Цикл предоставления выбора ящиков, с обновлением рандомного числа, и перезаписью содержания переменной score
do {
coint = cointRand.Next(0, 2); // Рандомизируем содержание боксов
if (life != 2) // проверяем не отказался ли игрок от игры, если нет начинаем игру
{
Console.WriteLine(d + lvl++); // Вывод на экран переменной d и номер уровня
Console.WriteLine("Набраные очки = " + score); // Вывод на экран текста + переменной score
Console.WriteLine("Ящик 1, Ящик 2, Ящик 3");
[COLOR="Red"] triger = Convert.ToInt32(Console.ReadKey()); [/COLOR] // Запрашиваем число от 1 до 3 с последующей записью числа в переменную triger
}
// Варианты выбора разных чисел, при разных значениях переменной coint и последствия такого выбора.
// Вариант №1
if (triger == 1 && coint == 0)
{
life = 2;
Console.WriteLine(b);
}
else if (triger == 2 && coint == 0){
Console.WriteLine(c);
score = score + box1;
} else if(triger == 3 && coint == 0){
Console.WriteLine(c);
score = score + box2;
}
// Вариант №2
else if (triger == 2 && coint == 1)
{
life = 2;
Console.WriteLine(b);
}
else if (triger == 1 && coint == 1)
{
Console.WriteLine(c);
score = score + box;
}
else if (triger == 3 && coint == 1)
{
Console.WriteLine(c);
score = score + box2;
}
// Вариант №3
else if (triger == 1 && coint == 2)
{
Console.WriteLine(c);
score = score + box;
}
else if (triger == 2 && coint == 2)
{
Console.WriteLine(c);
score = score + box1;
}
else if (triger == 3 && coint == 2)
{
Console.WriteLine(c);
score = score + box2;
}
} while (life == 1); // Проверка жизни игрока, и повтор цикла
Console.ReadKey();
}
}
}
Ещё один вид ошибки:
И ещё один скрин
Решение задачи: «Проверка введенного числа через Console.ReadKey и исключение»
textual
Листинг программы
// Цикл предоставления выбора ящиков, с обновлением рандомного числа, и перезаписью содержания переменной score
do
{
coint = cointRand.Next(0, 2); // Рандомизируем содержание боксов
if (life != 2) // проверяем не отказался ли игрок от игры, если нет начинаем игру
{
Console.WriteLine(d + lvl++); // Вывод на экран переменной d и номер уровня
Console.WriteLine("Набраные очки = " + score); // Вывод на экран текста + переменной score
Console.WriteLine("Ящик 1, Ящик 2, Ящик 3");
ConsoleKeyInfo key;
key = Console.ReadKey();
triger = Convert.ToInt32(key.KeyChar); // Запрашиваем число от 1 до 3 с последующей записью числа в переменную triger
}