Advertisement
THOMAS_SHELBY_18

boolAndCow

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