Advertisement
Ewerlost

Bull+Cow

Nov 28th, 2023 (edited)
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <cctype>
  5.  
  6. using namespace std;
  7.  
  8. bool checkStringLength(string&, string&);
  9. bool checkStringLetters(string&, string&);
  10. void outputGameInfo(string, string, int);
  11. void inputFirstWord(string&, string&);
  12. void inputSecondWord(string&, string&, string&);
  13. int findCowCount(string&, string&);
  14. int findBoolCount(string&, string&);
  15. void outputGameInfo(string, string, int);
  16. int inputChoice();
  17. void printCondition();
  18.  
  19. int main()
  20. {
  21.     string firstWord, secondWord, rightInputElements, firstName, secondName;
  22.     system("chcp 1251 > nul");
  23.     int counter, choice, wordLength;
  24.     rightInputElements = "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
  25.  
  26.     printCondition();//вывод условия
  27.     counter = 0;
  28.  
  29.     cout << "Введите имена пользователей" << endl;;
  30.     cout << "Имя первого пользователя: " << endl;
  31.     getline(cin, firstName);
  32.     cout << "Имя второго пользователя: " << endl;
  33.     getline(cin, secondName);
  34.  
  35.     inputFirstWord(firstWord, rightInputElements);
  36.     system("cls");// очищение консоли
  37.    
  38.     wordLength = firstWord.length();
  39.     cout << "Длина загаданного слова: " << wordLength << endl;
  40.  
  41.     do
  42.     {
  43.         counter++;
  44.         inputSecondWord(firstWord, secondWord, rightInputElements);
  45.         outputGameInfo(firstWord, secondWord, counter);
  46.     } while (!(firstWord == secondWord));
  47.     cout << secondName <<" угадал слово! Количество шагов: " << counter << '\n';
  48.     cout << "Хотите загадать слово другому игроку?\n";
  49.     cout << "Введите 1, если хотите, 2 - если нет:\n";
  50.     choice = inputChoice();
  51.  
  52.     if (choice == 1)
  53.     {
  54.         int secondPlayerStepCount = counter;
  55.         system("cls");// очищение консоли
  56.  
  57.         counter = 0;
  58.         inputFirstWord(firstWord, rightInputElements);
  59.         system("cls");// очищение консоли
  60.  
  61.         wordLength = firstWord.size();
  62.         cout << "Длина загаданного слова: " << wordLength << endl;
  63.  
  64.         do
  65.         {
  66.             counter++;
  67.             inputSecondWord(firstWord, secondWord, rightInputElements);
  68.             outputGameInfo(firstWord, secondWord, counter);
  69.         } while (!(firstWord == secondWord));
  70.         cout << firstName <<" угадал слово! Количество шагов: " << counter << " ";
  71.         int firstPlayerStepCount = counter;
  72.  
  73.         if (secondPlayerStepCount < firstPlayerStepCount)
  74.             cout << secondName << " победил!";
  75.         else if (secondPlayerStepCount > firstPlayerStepCount)
  76.             cout << firstName << " победил!";
  77.         else
  78.             cout << "Победила дружба!";
  79.     }
  80. }
  81.  
  82. void printCondition()
  83. {
  84.     cout << "Игра Быки и Коровы\nИгрок 1 загадывает слово, а Игрок 2 пытается его угадать.\nБыки - количество угаданных букв.\nКоровы - количество угаданных букв, стоящих на своём месте\nИгра продолжается, пока игрок не отгадает слово.\n";
  85.     cout << "Слова должны быть русскими.";
  86. }
  87.  
  88. bool checkStringLength(string& firstWord, string& secondWord)
  89. {
  90.     bool isCorrect;
  91.     isCorrect = firstWord.length() == secondWord.length();
  92.     return isCorrect;
  93. }
  94.  
  95. bool checkStringLetters(string& word, string& rightInputElements)
  96. {
  97.     int checkedPosition;
  98.     bool isCorrect;
  99.     isCorrect = true;
  100.     checkedPosition = 0;
  101.     while (isCorrect && (checkedPosition < word.length())) {
  102.         if (rightInputElements.find(word[checkedPosition]) == string::npos) {
  103.             isCorrect = false;
  104.         }
  105.         checkedPosition++;
  106.     }
  107.     if (isCorrect)
  108.         for (int i = 0; i < word.length(); i++) {
  109.             if ((word[i] <= -1) && (word[i] >= -32))
  110.                 word[i] = word[i] - 32;
  111.             if (word[i] == -72)
  112.                 word[i] = -88;
  113.         }
  114.     return isCorrect;
  115. }
  116.  
  117. void inputFirstWord(string& word, string& rightInputElements) {
  118.     bool isNotCorrect;
  119.     cout << "Введите загаданное слово:\n";
  120.     do {
  121.         isNotCorrect = false;
  122.         getline(cin, word);
  123.         if (!checkStringLetters(word, rightInputElements)) {
  124.             cout << "Ошибка! Введите слово, состоящее только из русских букв.\n";
  125.             isNotCorrect = true;
  126.         }
  127.     } while (isNotCorrect);
  128. }
  129.  
  130. void inputSecondWord(string& firstWord, string& secondWord, string& rightInputElements) {
  131.     bool isNotCorrect;
  132.     do {
  133.         isNotCorrect = false;
  134.         cout << "Введите ваше слово:\n";
  135.         getline(cin, secondWord);
  136.         if (!checkStringLetters(secondWord, rightInputElements)) {
  137.             cout << "Ошибка! Введите слово, состоящее только из русских букв.\n";
  138.             isNotCorrect = true;
  139.         }
  140.         else if (!checkStringLength(firstWord, secondWord)) {
  141.             cout << "Ошибка! Длина слов разная!\n";
  142.             isNotCorrect = true;
  143.         }
  144.     } while (isNotCorrect);
  145. }
  146.  
  147. int findCowCount(string& firstWord, string& secondWord) {
  148.     int symbCount, cowCount;
  149.     symbCount = firstWord.length();
  150.     cowCount = 0;
  151.     for (int i = 0; i < symbCount; i++)
  152.     {
  153.         if (firstWord[i] == secondWord[i])
  154.             cowCount++;
  155.     }
  156.     return cowCount;
  157. }
  158.  
  159. int findBoolCount(string& firstWord, string& secondWord) {
  160.     int symbCount, boolCount;
  161.     string bufferLine;
  162.     bufferLine = firstWord;
  163.     symbCount = firstWord.length();
  164.     boolCount = 0;
  165.  
  166.  
  167.     for (int i = 0; i < symbCount; i++)
  168.     {
  169.         for (int j = 0; j < bufferLine.length(); j++)
  170.         {
  171.             if (secondWord[i] == bufferLine[j])
  172.             {
  173.                 boolCount++;
  174.                 bufferLine.erase(j, 1);
  175.             }
  176.         }
  177.     }
  178.     return boolCount;
  179. }
  180.  
  181. void outputGameInfo(string firstWord, string secondWord, int counter)
  182. {
  183.     int cowValue;
  184.     int boolValue;
  185.     cowValue = findCowCount(firstWord, secondWord);
  186.     boolValue = findBoolCount(firstWord, secondWord);
  187.     cout << "Номер шага " << counter << "\nВведенное слово:" << secondWord << "\nКоличество Быков:" << boolValue << "\t Количество Коров:" << cowValue << endl;
  188. }
  189. int inputChoice()
  190. {
  191.  
  192.     bool isIncorrect;
  193.     int num;
  194.  
  195.     do
  196.     {
  197.         isIncorrect = true;
  198.         cin >> num;
  199.         if (cin.fail() || (cin.get() != '\n'))
  200.         {
  201.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  202.             cin.clear();
  203.             while (cin.get() != '\n');
  204.         }
  205.         else
  206.         {
  207.             if (num < 1 || num > 2)
  208.             {
  209.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  210.             }
  211.             else
  212.             {
  213.                 isIncorrect = false;
  214.             }
  215.         }
  216.     } while (isIncorrect);
  217.  
  218.     return num;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement