Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<sstream>
- #include<cctype>
- #include<random>
- template <typename T>
- T Proverka(T& x) // проверка коректного ввода cin
- {
- if (std::cin.fail())
- {
- std::cin.clear();
- std::cin.ignore(32767, '\n');
- std::cout << "Вы ввели недопустимое значение.Повторите ввод." << std::endl;
- std::cin >> x;
- return Proverka(x);
- }
- else
- {
- std::cin.ignore(32767, '\n');
- return x;
- }
- }
- int Random() // вихрь марсенна
- {
- std::random_device rd; // случайное число
- std::mt19937 random(rd()); // с вихрем марслена
- std::uniform_int_distribution<> distrib(100, 999); // в определенном диапазоне что бы можно было передать вихрь
- return distrib(random);// возврат диапазона с параметром вихря
- }
- void Check_Cin(std::string &str)
- {
- int bed_value = 1;
- if (str.length()!=3) // проверка длины ввода
- throw bed_value;
- for (int i = 0; i < str.length(); i++) // проверка является ли ввод цифрами
- {
- if (std::isdigit(str[i]))
- {
- continue;
- }
- throw bed_value;
- }
- }
- bool Game_Logick(std::string& playerV, std::string& compV )
- {
- int win=0;
- int right_value=0;
- int right_position=0;
- for (int i = 0; i < 3; i++) // проверка сколько угаданно цифр
- {
- if(playerV[0] != playerV[1]&&playerV[0]!=playerV[2])
- if(playerV[0]== compV[i])
- right_value++;
- if (playerV[1] != playerV[2])
- if (playerV[1] == compV[i])
- right_value++;
- if (playerV[2] == compV[i])
- right_value++;
- }
- if (compV[0] == playerV[0]) //----
- {
- right_position++;
- }
- if (compV[1] == playerV[1])//----- проверка совпадений
- {
- right_position++;
- }
- if (compV[2] == playerV[2])//----
- {
- right_position++;
- }
- std::cout << "Угадано: " << right_value << '.' << " На своих местах: " << right_position << std::endl;
- if (compV == playerV)
- {
- return true;
- }
- return false;
- }
- void PrintRules()
- {
- std::cout << "Компьютер загадал трехзначное число. Вы должны его отгадать." << std::endl <<
- "После очередного числа вам будет сообщено,сколько цифр" << std::endl <<
- "угадано и сколько из них находятся на своих местах.\n\n" << std::endl;
- }
- int main()
- {
- setlocale(0, "");
- srand(Random());
- bool key,game=true;
- std::string comp_value;// число компа
- std::stringstream buffer;// буфер для преобразования инта в стринг
- std::string player_value;//число игрока
- buffer << (100 + rand() % (999 - 100));
- buffer >> comp_value;
- PrintRules();
- while (game)
- {
- do// проверка ввода на коректность
- {
- key = false;
- std::cout << "Ваш вариант: ";
- std::cin >> player_value;
- try
- {
- Check_Cin(player_value);
- }
- catch (int)
- {
- key = true;
- std::cout << "Ваш ввод не коректен будьте добры ввести три цифры в формате ###." << std::endl;
- system("pause");
- }
- } while (key);
- if (Game_Logick(player_value, comp_value)) // рестарт игры или конец
- {
- char restart;
- std::cout << "Поздравляю!!! Вы выиграли. Хотите продолжить или нет? (Y/N)" << std::endl;
- std::cin >> restart;
- Proverka(restart);
- switch (restart)
- {
- case 'Y':
- case 'y':
- {
- system("cls<NUL");
- PrintRules();
- break;
- }
- case 'N':
- case 'n':
- {
- system("cls<NUL");
- game = false;
- break;
- }
- default :
- std::cout << "Вы ввели неверный символ, и скорее всего для проверки как я обработаю это.\n А все просто - играй еще!" << std::endl;
- system("pause");
- system("cls<NUL");
- PrintRules();
- }
- }
- }
- std::cout << "Спасибо за игру!Удачи." << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement