Проверка введенного числа через Console.ReadKey и исключение - C#

Узнай цену своей работы

Формулировка задачи:

Прохожу уроки по C# на канале youtube, там достаточно быстро проходят темы связанные с циклами и операторами if, без особых примеров их использования, в принципе все понятно, но в комментариях люди спрашивают как их использовать, и я решил сделать небольшой пример, на основании того что понял.. Задача консольной игры, выводить варианты из 3х выборов, в данном случае ящиков, в которых находится, в одном 50 очков во втором 100 очков и третий "яд" или 1 в коде. Классом Random должно перебираться значение переменной которая в свою очередь определяет в каком ящике что лежит.. Ниже код, большой кривой и да, его наверно можно как-то сделать компактней и логичней, но моих знаний для этого не достаточно, потому как есть, приношу извинения за косяки.. ПРОБЛЕМА: Программа исполняется нормально, доходит до введения числа "console.readkey" при введение любого числа, Visual Studio жутко виснит, выдает окно проблемы, просит выслать отчёты, а в самом коде указать на проблемную точку не может. Скрин ошибки:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication2
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. Random cointRand = new Random();
  13. int box = 0, box1 = 0, box2 = 0;
  14. int triger;
  15. int start;
  16. int coint = 0;
  17. int life = 0;
  18. int score = 0;
  19. int lvl = 0;
  20. string a, b, c, d;
  21. a = "Игра действительно не для слабых, удачи!";
  22. b = "Вам не хватило везения, и вы выбрали яд, прощайте.";
  23. c = "Повезло, ящик содержал очки!";
  24. d = "Уровень № " + lvl;
  25. // Вступительная речь
  26. Console.WriteLine("Давай поиграем!");
  27. Console.WriteLine("Ты должен выбрать один из 3х ящиков, в одном из них яд!");
  28. Console.WriteLine("В двух других очки, набери как можно больше очков.");
  29. Console.WriteLine("Ты готов?! yes = 1 \\ no = 2 ");
  30. // Проверка согласия игрока на игру
  31. start = Convert.ToInt32(Console.ReadLine());
  32. if (start == 1)
  33. Console.WriteLine("Храбрец, угадывай.");
  34. else if (start == 2)
  35. {
  36. life = 2;
  37. Console.WriteLine(a);
  38. }
  39.  
  40. // Перебор вариантов зависящий от числа выданного Рандомизатором содержания ящиков.
  41. if (coint == 0){
  42. box = 1;
  43. box1 = 50;
  44. box2 = 100;
  45. }
  46. else if (coint == 1)
  47. {
  48. box = 50;
  49. box1 = 1;
  50. box2 = 100;
  51. }
  52. else if (coint == 2)
  53. {
  54. box = 100;
  55. box1 = 50;
  56. box2 = 1;
  57. }
  58. // Цикл предоставления выбора ящиков, с обновлением рандомного числа, и перезаписью содержания переменной score
  59. do {
  60. coint = cointRand.Next(0, 2); // Рандомизируем содержание боксов
  61. if (life != 2) // проверяем не отказался ли игрок от игры, если нет начинаем игру
  62. {
  63. Console.WriteLine(d + lvl++); // Вывод на экран переменной d и номер уровня
  64. Console.WriteLine("Набраные очки = " + score); // Вывод на экран текста + переменной score
  65. Console.WriteLine("Ящик 1, Ящик 2, Ящик 3");
  66. [COLOR="Red"] triger = Convert.ToInt32(Console.ReadKey()); [/COLOR] // Запрашиваем число от 1 до 3 с последующей записью числа в переменную triger
  67. }
  68.  
  69. // Варианты выбора разных чисел, при разных значениях переменной coint и последствия такого выбора.
  70. // Вариант №1
  71. if (triger == 1 && coint == 0)
  72. {
  73. life = 2;
  74. Console.WriteLine(b);
  75. }
  76. else if (triger == 2 && coint == 0){
  77. Console.WriteLine(c);
  78. score = score + box1;
  79. } else if(triger == 3 && coint == 0){
  80. Console.WriteLine(c);
  81. score = score + box2;
  82. }
  83. // Вариант №2
  84. else if (triger == 2 && coint == 1)
  85. {
  86. life = 2;
  87. Console.WriteLine(b);
  88. }
  89. else if (triger == 1 && coint == 1)
  90. {
  91. Console.WriteLine(c);
  92. score = score + box;
  93. }
  94. else if (triger == 3 && coint == 1)
  95. {
  96. Console.WriteLine(c);
  97. score = score + box2;
  98. }
  99. // Вариант №3
  100. else if (triger == 1 && coint == 2)
  101. {
  102. Console.WriteLine(c);
  103. score = score + box;
  104. }
  105. else if (triger == 2 && coint == 2)
  106. {
  107. Console.WriteLine(c);
  108. score = score + box1;
  109. }
  110. else if (triger == 3 && coint == 2)
  111. {
  112. Console.WriteLine(c);
  113. score = score + box2;
  114. }
  115.  
  116. } while (life == 1); // Проверка жизни игрока, и повтор цикла
  117.  
  118. Console.ReadKey();
  119. }
  120. }
  121. }
Ещё один вид ошибки:
И ещё один скрин

Решение задачи: «Проверка введенного числа через Console.ReadKey и исключение»

textual
Листинг программы
  1. // Цикл предоставления выбора ящиков, с обновлением рандомного числа, и перезаписью содержания переменной score
  2.             do
  3.             {
  4.  
  5.                 coint = cointRand.Next(0, 2);   // Рандомизируем содержание боксов
  6.                 if (life != 2)                  // проверяем не отказался ли игрок от игры, если нет начинаем игру
  7.                 {
  8.                     Console.WriteLine(d + lvl++);          // Вывод на экран переменной d и номер уровня
  9.                     Console.WriteLine("Набраные очки = " + score);   // Вывод на экран текста + переменной score
  10.                     Console.WriteLine("Ящик 1, Ящик 2, Ящик 3");
  11.  
  12.                     ConsoleKeyInfo key;
  13.                     key = Console.ReadKey();
  14.                     triger = Convert.ToInt32(key.KeyChar);     // Запрашиваем число от 1 до 3 с последующей записью числа в переменную triger
  15.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы