Написать игру "Быки и коровы" - 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;
}
Объяснение кода листинга программы
- В начале программы включаются необходимые заголовочные файлы и отключается стандартная библиотека ввода/вывода.
- Затем следует главная функция программы, которая содержит основной игровой цикл.
- В начале цикла создается вектор из 4 случайных чисел от 1 до 9, представляющих коды чисел на игровом поле.
- Далее, с помощью вложенных циклов, проверяется, есть ли одинаковые числа в коде. Если такие числа есть, игра начинается заново.
- Затем пользователю предлагается ввести число от 1000 до 9999.
- Если введенное число не соответствует формату четырехзначного числа, выбрасывается исключение и пользователю выводится сообщение об ошибке.
- Введенное число разбивается на отдельные цифры и сохраняется в векторе.
- Затем происходит проверка наличия одинаковых цифр в коде. Если такие цифры есть, выбрасывается исключение и пользователю выводится сообщение о том, что введены одинаковые числа.
- После этого происходит проверка наличия четырех одинаковых цифр в коде. Если такие цифры есть, выводится сообщение о победе и игра завершается.
- В противном случае выводится количество коров и быков, обнаруженных в коде.
- После этого пользователю предлагается продолжить игру, введя 'y' или 'n'.
- Если пользователь вводит 'y', игра продолжается с начала.
- Если пользователь вводит 'n', игра завершается.
- Если пользователь вводит неверный символ, выводится сообщение об ошибке и пользователю предлагается ввести правильный символ.
- В конце программы выводится общее время работы программы.
- Игра
Быки и коровы- это классическая игра, в которой пользователю предлагается угадать четырехзначный код, вводя цифры по одной за раз. Цель игры - найти код, содержащий определенное количество коров и быков.