Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <string>
- #include <cctype>
- using namespace std;
- bool checkStringLength(string&, string&);
- bool checkStringLetters(string&, string&);
- void outputGameInfo(string, string, int);
- void inputFirstWord(string&, string&);
- void inputSecondWord(string&, string&, string&);
- int findCowCount(string&, string&);
- int findBoolCount(string&, string&);
- void outputGameInfo(string, string, int);
- int inputChoice();
- void printCondition();
- int main()
- {
- string firstWord, secondWord, rightInputElements, firstName, secondName;
- system("chcp 1251 > nul");
- int counter, choice, wordLength;
- rightInputElements = "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
- printCondition();//вывод условия
- counter = 0;
- cout << "Введите имена пользователей" << endl;;
- cout << "Имя первого пользователя: " << endl;
- getline(cin, firstName);
- cout << "Имя второго пользователя: " << endl;
- getline(cin, secondName);
- inputFirstWord(firstWord, rightInputElements);
- system("cls");// очищение консоли
- wordLength = firstWord.length();
- cout << "Длина загаданного слова: " << wordLength << endl;
- do
- {
- counter++;
- inputSecondWord(firstWord, secondWord, rightInputElements);
- outputGameInfo(firstWord, secondWord, counter);
- } while (!(firstWord == secondWord));
- cout << secondName <<" угадал слово! Количество шагов: " << counter << '\n';
- cout << "Хотите загадать слово другому игроку?\n";
- cout << "Введите 1, если хотите, 2 - если нет:\n";
- choice = inputChoice();
- if (choice == 1)
- {
- int secondPlayerStepCount = counter;
- system("cls");// очищение консоли
- counter = 0;
- inputFirstWord(firstWord, rightInputElements);
- system("cls");// очищение консоли
- wordLength = firstWord.size();
- cout << "Длина загаданного слова: " << wordLength << endl;
- do
- {
- counter++;
- inputSecondWord(firstWord, secondWord, rightInputElements);
- outputGameInfo(firstWord, secondWord, counter);
- } while (!(firstWord == secondWord));
- cout << firstName <<" угадал слово! Количество шагов: " << counter << " ";
- int firstPlayerStepCount = counter;
- if (secondPlayerStepCount < firstPlayerStepCount)
- cout << secondName << " победил!";
- else if (secondPlayerStepCount > firstPlayerStepCount)
- cout << firstName << " победил!";
- else
- cout << "Победила дружба!";
- }
- }
- void printCondition()
- {
- cout << "Игра Быки и Коровы\nИгрок 1 загадывает слово, а Игрок 2 пытается его угадать.\nБыки - количество угаданных букв.\nКоровы - количество угаданных букв, стоящих на своём месте\nИгра продолжается, пока игрок не отгадает слово.\n";
- cout << "Слова должны быть русскими.";
- }
- bool checkStringLength(string& firstWord, string& secondWord)
- {
- bool isCorrect;
- isCorrect = firstWord.length() == secondWord.length();
- return isCorrect;
- }
- bool checkStringLetters(string& word, string& rightInputElements)
- {
- int checkedPosition;
- bool isCorrect;
- isCorrect = true;
- checkedPosition = 0;
- while (isCorrect && (checkedPosition < word.length())) {
- if (rightInputElements.find(word[checkedPosition]) == string::npos) {
- isCorrect = false;
- }
- checkedPosition++;
- }
- if (isCorrect)
- for (int i = 0; i < word.length(); i++) {
- if ((word[i] <= -1) && (word[i] >= -32))
- word[i] = word[i] - 32;
- if (word[i] == -72)
- word[i] = -88;
- }
- return isCorrect;
- }
- void inputFirstWord(string& word, string& rightInputElements) {
- bool isNotCorrect;
- cout << "Введите загаданное слово:\n";
- do {
- isNotCorrect = false;
- getline(cin, word);
- if (!checkStringLetters(word, rightInputElements)) {
- cout << "Ошибка! Введите слово, состоящее только из русских букв.\n";
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- }
- void inputSecondWord(string& firstWord, string& secondWord, string& rightInputElements) {
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите ваше слово:\n";
- getline(cin, secondWord);
- if (!checkStringLetters(secondWord, rightInputElements)) {
- cout << "Ошибка! Введите слово, состоящее только из русских букв.\n";
- isNotCorrect = true;
- }
- else if (!checkStringLength(firstWord, secondWord)) {
- cout << "Ошибка! Длина слов разная!\n";
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- }
- int findCowCount(string& firstWord, string& secondWord) {
- int symbCount, cowCount;
- symbCount = firstWord.length();
- cowCount = 0;
- for (int i = 0; i < symbCount; i++)
- {
- if (firstWord[i] == secondWord[i])
- cowCount++;
- }
- return cowCount;
- }
- int findBoolCount(string& firstWord, string& secondWord) {
- int symbCount, boolCount;
- string bufferLine;
- bufferLine = firstWord;
- symbCount = firstWord.length();
- boolCount = 0;
- for (int i = 0; i < symbCount; i++)
- {
- for (int j = 0; j < bufferLine.length(); j++)
- {
- if (secondWord[i] == bufferLine[j])
- {
- boolCount++;
- bufferLine.erase(j, 1);
- }
- }
- }
- return boolCount;
- }
- void outputGameInfo(string firstWord, string secondWord, int counter)
- {
- int cowValue;
- int boolValue;
- cowValue = findCowCount(firstWord, secondWord);
- boolValue = findBoolCount(firstWord, secondWord);
- cout << "Номер шага " << counter << "\nВведенное слово:" << secondWord << "\nКоличество Быков:" << boolValue << "\t Количество Коров:" << cowValue << endl;
- }
- int inputChoice()
- {
- bool isIncorrect;
- int num;
- do
- {
- isIncorrect = true;
- cin >> num;
- if (cin.fail() || (cin.get() != '\n'))
- {
- cout << "Некорректный ввод! Введите значение еще раз:" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- else
- {
- if (num < 1 || num > 2)
- {
- cout << "Недопустимое значение! Введите значение еще раз:" << endl;
- }
- else
- {
- isIncorrect = false;
- }
- }
- } while (isIncorrect);
- return num;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement