Advertisement
Rock_Hero

Игра угадай число

Dec 15th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.29 KB | None | 0 0
  1. #include<iostream>
  2. #include<sstream>
  3. #include<cctype>
  4. #include<random>
  5.  
  6. template <typename T>
  7. T Proverka(T& x)  // проверка коректного ввода cin
  8. {
  9.  
  10.     if (std::cin.fail())
  11.     {
  12.         std::cin.clear();
  13.         std::cin.ignore(32767, '\n');
  14.         std::cout << "Вы ввели недопустимое значение.Повторите ввод." << std::endl;
  15.  
  16.         std::cin >> x;
  17.         return Proverka(x);
  18.     }
  19.     else
  20.     {
  21.         std::cin.ignore(32767, '\n');
  22.         return x;
  23.     }
  24.  
  25. }
  26.  
  27. int Random() // вихрь марсенна
  28. {
  29.     std::random_device rd; // случайное число
  30.     std::mt19937 random(rd()); // с вихрем марслена
  31.     std::uniform_int_distribution<> distrib(100, 999); // в определенном диапазоне что бы можно было передать вихрь
  32.  
  33.     return distrib(random);// возврат диапазона с параметром вихря
  34. }
  35.  
  36. void Check_Cin(std::string &str)
  37. {
  38.     int bed_value = 1;
  39.  
  40.     if (str.length()!=3) // проверка длины ввода
  41.         throw bed_value;
  42.  
  43.     for (int i = 0; i < str.length(); i++) // проверка является ли ввод цифрами
  44.     {
  45.         if (std::isdigit(str[i]))
  46.         {
  47.             continue;
  48.         }
  49.        
  50.         throw bed_value;
  51.     }
  52. }
  53.  
  54. bool Game_Logick(std::string& playerV, std::string& compV )
  55. {
  56.     int win=0;
  57.     int right_value=0;
  58.     int right_position=0;
  59.  
  60.  
  61.     for (int i = 0; i < 3; i++) // проверка сколько угаданно цифр
  62.     {
  63.        
  64.         if(playerV[0] != playerV[1]&&playerV[0]!=playerV[2])
  65.             if(playerV[0]== compV[i])
  66.                 right_value++;
  67.  
  68.         if (playerV[1] != playerV[2])
  69.             if (playerV[1] == compV[i])
  70.                 right_value++;
  71.  
  72.         if (playerV[2] == compV[i])
  73.             right_value++;
  74.  
  75.     }
  76.         if (compV[0] == playerV[0]) //----
  77.         {
  78.             right_position++;
  79.         }
  80.  
  81.         if (compV[1] == playerV[1])//-----  проверка совпадений
  82.         {
  83.             right_position++;
  84.         }
  85.  
  86.         if (compV[2] == playerV[2])//----
  87.         {
  88.             right_position++;
  89.         }
  90.    
  91.     std::cout << "Угадано: " << right_value << '.' << " На своих местах: " << right_position << std::endl;
  92.  
  93.     if (compV == playerV)
  94.     {
  95.         return true;
  96.     }
  97.  
  98.     return false;
  99. }
  100.  
  101. void PrintRules()
  102. {
  103.     std::cout << "Компьютер загадал трехзначное число. Вы должны его отгадать." << std::endl <<
  104.         "После очередного числа вам будет сообщено,сколько цифр" << std::endl <<
  105.         "угадано и сколько из них находятся на своих местах.\n\n" << std::endl;
  106. }
  107.  
  108.  
  109. int main()
  110. {
  111.     setlocale(0, "");
  112.     srand(Random());
  113.  
  114.     bool key,game=true;
  115.     std::string comp_value;// число компа
  116.     std::stringstream buffer;// буфер для преобразования инта в стринг
  117.     std::string player_value;//число игрока
  118.  
  119.     buffer << (100 + rand() % (999 - 100));
  120.     buffer >> comp_value;
  121.  
  122.     PrintRules();
  123.  
  124.     while (game)
  125.     {
  126.        
  127.  
  128.         do// проверка ввода на коректность
  129.         {
  130.             key = false;
  131.  
  132.             std::cout << "Ваш вариант: ";
  133.             std::cin >> player_value;
  134.  
  135.             try
  136.             {
  137.                 Check_Cin(player_value);
  138.             }
  139.             catch (int)
  140.             {
  141.                 key = true;
  142.                 std::cout << "Ваш ввод не коректен будьте добры ввести три цифры в формате ###." << std::endl;
  143.                 system("pause");
  144.             }
  145.  
  146.         } while (key);
  147.  
  148.         if (Game_Logick(player_value, comp_value))  // рестарт игры или конец
  149.         {
  150.             char restart;
  151.             std::cout << "Поздравляю!!! Вы выиграли. Хотите продолжить или нет? (Y/N)" << std::endl;
  152.             std::cin >> restart;
  153.             Proverka(restart);
  154.             switch (restart)
  155.             {
  156.             case 'Y':
  157.             case 'y':
  158.             {
  159.                 system("cls<NUL");
  160.                 PrintRules();
  161.                 break;
  162.             }
  163.             case 'N':
  164.             case 'n':
  165.             {
  166.                 system("cls<NUL");
  167.                 game = false;
  168.                 break;
  169.             }
  170.             default :
  171.                 std::cout << "Вы ввели неверный символ, и скорее всего для проверки как я обработаю это.\n А все просто - играй еще!" << std::endl;
  172.                 system("pause");
  173.                 system("cls<NUL");
  174.                 PrintRules();
  175.             }
  176.  
  177.         }
  178.  
  179.  
  180.  
  181.     }
  182.  
  183.  
  184.     std::cout << "Спасибо за игру!Удачи." << std::endl;
  185.  
  186.  
  187.     return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement