Проверка введенного числа через 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
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д