Написать игру "Быки и коровы" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите с этой задачей. Естественно все должно быть на чистом Си Написать игру «Быки и коровы». Программа "загадывает" четырёхзначное число и играющий должен угадать его. После ввода пользователем числа программа сообщает, сколько цифр числа угадано (быки) и сколько цифр угадано и стоит на нужном месте (коровы). После отгадывания числа на экран необходимо вывести количество сделанных пользователем попыток. В программе необходимо использовать рекурсию.

Решение задачи: «Написать игру "Быки и коровы"»

textual
Листинг программы
#include <iostream>
#include <vector>
#include "Header_Function.h"
//#include "Header.h"
using namespace std;
 
 
int main() {
    //locales_1251();
    clock_t start = clock();
    constexpr int index_top = 4;
    while (1) {
        vector<int> v, digits(4);
        srand(time(NULL));
        v.push_back(rand() % 9 + 1);
        for (unsigned index = 1; index < index_top; index++) {//загальний цикл
            unsigned short random = rand() % 9 + 1;
            for (short index_bottom = 0; index_bottom < v.size(); index_bottom++) {
                if (random == v.at(index_bottom)) {
                    random = rand() % 9 + 1;
                    index_bottom = 0;
                    continue;
                }
            }
            v.push_back(random);
        }
        /*for (int temp : v)
        cout << temp;*/
        cout << '\n';
        int n;
        while (true) {
            try {
                cin >> n;
                if (n / 1000 < 1 || n / 1000 > 9) throw 2;
                digits[0] = n / 1000;
                digits[1] = n / 100 % 10;
                digits[2] = n / 10 % 10;
                digits[3] = n % 10;
                for (short index_up = 0; index_up < index_top; index_up++)
                    for (short index_bottom = index_up + 1; index_bottom < index_top; index_bottom++)
                        if (digits.at(index_up) == digits.at(index_bottom)) throw 1;
                //Перевірка биків і корів
                unsigned short cow = 0, ox = 0;
                //бики
                for (short index_up = 0; index_up < index_top; index_up++) {
                    if (v.at(index_up) == digits.at(index_up)) {
                        ox++;
                        continue;
                    }
                    //корови
                    for (short index_bottom = 0; index_bottom < index_top; index_bottom++)
                        if (v.at(index_up) == digits.at(index_bottom))
                            cow++;
                }
                if (ox == 4) {
                    cout << "Win!\n";
                    break;
                }
                cout << "Ox: " << ox << "\nCow: " << cow << '\n';
            }
            catch (int c) {
                if (c == 1)
                    cout << "the same numbers\n";
                else if (c == 2)
                    cout << "error: no four-digit number\n";
            }
        }
        cout << "Game continue?\ty or n";
        char symb;
    start:
        cin >> symb;
        if (symb == 'y')
            continue;
        else if (symb == 'n')
            break;
        else {
            cout << "Wrong symbol, please enter corect symbol\n";
            goto start;
        }
    }
    clock_end(start);
    system("pause");
    return 0;
}

Объяснение кода листинга программы

  1. В начале программы включаются необходимые заголовочные файлы и отключается стандартная библиотека ввода/вывода.
  2. Затем следует главная функция программы, которая содержит основной игровой цикл.
  3. В начале цикла создается вектор из 4 случайных чисел от 1 до 9, представляющих коды чисел на игровом поле.
  4. Далее, с помощью вложенных циклов, проверяется, есть ли одинаковые числа в коде. Если такие числа есть, игра начинается заново.
  5. Затем пользователю предлагается ввести число от 1000 до 9999.
  6. Если введенное число не соответствует формату четырехзначного числа, выбрасывается исключение и пользователю выводится сообщение об ошибке.
  7. Введенное число разбивается на отдельные цифры и сохраняется в векторе.
  8. Затем происходит проверка наличия одинаковых цифр в коде. Если такие цифры есть, выбрасывается исключение и пользователю выводится сообщение о том, что введены одинаковые числа.
  9. После этого происходит проверка наличия четырех одинаковых цифр в коде. Если такие цифры есть, выводится сообщение о победе и игра завершается.
  10. В противном случае выводится количество коров и быков, обнаруженных в коде.
  11. После этого пользователю предлагается продолжить игру, введя 'y' или 'n'.
  12. Если пользователь вводит 'y', игра продолжается с начала.
  13. Если пользователь вводит 'n', игра завершается.
  14. Если пользователь вводит неверный символ, выводится сообщение об ошибке и пользователю предлагается ввести правильный символ.
  15. В конце программы выводится общее время работы программы.
  16. Игра Быки и коровы - это классическая игра, в которой пользователю предлагается угадать четырехзначный код, вводя цифры по одной за раз. Цель игры - найти код, содержащий определенное количество коров и быков.

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы