Вы находитесь на странице: 1из 20

Учреждение образования Федерации профсоюзов Беларуси

«Международный университет «МИТСО»

Рег. № __________ Кафедра информационных


Дата ________ 2021 г. технологий

КУРСОВАЯ РАБОТА

на тему: игра “Быки и коровы”


по дисциплине Объектно-ориентированное программирование
Основные замечания: Студент: _________________
______________________________ (подпись) Павловский Степан
______________________________ Сергеевич
______________________________
______________________________ Курс 2, группа 2021
______________________________
______________________________ Факультет «Международных
______________________________ экономических отношений и
______________________________ менеджмента»
______________________________
Специальность:
______________________________
«Информационные системы и
______________________________
технологии»
______________________________
Научный руководитель:
______________________________
______________________________
Старший преподаватель кафедры
______________________________
информационных технологий
______________________________
Жалов Александр Петрович
___________________
Отметка о допуске курсовой
работы к защите:
______________________________
_______Дата: __________ 2021 г.
Подпись научного руководителя:
___________

2021
СОДЕРЖАНИЕ

ВВЕДЕНИЕ.............................................................................................................................................2
ГЛАВА 1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ...................................................................................3
1.1 Актуальность компьютерных игр..............................................................................................4
1.2 Сведения из теории...................................................................................................................5
1.3 Постановка задачи.....................................................................................................................6
ГЛАВА 2. ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРИЛОЖЕНИЯ.........................................................................7
2.1 Алгоритм решения.....................................................................................................................8
2.2 Макет приложения..................................................................................................................11
2.3 Описание программы..............................................................................................................11
2.4. Результаты работы программы.............................................................................................13
ГЛАВА 3. Руководство пользователя................................................................................................14
ЗАКЛЮЧЕНИЕ.....................................................................................................................................15
СПИСОК ИСПЛЬЗУЕМОЙ ЛИТЕРАТУРЫ.............................................................................................16
ПРИЛОЖЕНИЕ.....................................................................................................................................17

2
ВВЕДЕНИЕ
Человечество живет в век информации, в век компьютерной революции.
Компьютер, являясь самым современным инструментом для обработки
информации, может служить и мощным техническим средством обучения
и играть роль незаменимого помощника в воспитании и общем
психическом развитии людей.
При оценке деятельности главных участников игровой индустрии,
методов, используемых в их работе, перспектив и тенденций развития,
бывает, делаются выводы о том, что современные игры искусством не
являются. С этим во многом хочется согласиться. Тем более что немало
начинающих разработчиков, среди которых много отечественных, в
первую очередь интересуются прибылью, которую можно было бы
извлечь из очередного продукта.
Целью данной курсовой работы является создание проекта для игры
“Быки и коровы”. Суть игры в следующем. Каждый из противников
задумывает четырехзначное число, все цифры которого различны (первая
цифра числа отлична от нуля). Необходимо разгадать задуманное число.
Выигрывает тот, кто отгадает первый.
Задачи курсовой работы:
1. Изучить предметную область
2. Разработать алгоритм решения задачи
3. Написать код
4. Написание руководства пользователя.

3
ГЛАВА 1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
1.1 Актуальность компьютерных игр
Попытки создать простенькие игры на цифровых устройствах
предпринимались ещё до начала Второй Мировой войны (а в 1947 уже
была запрограммирована первая электронная игра, монитором для
которой служил экран военного радара - это был симулятор вражеских
ракет) - однако считается, что первой компьютерной игрой стала “ОХО”
("Крестики нолики"), в одиночку сделанная А.С. Дугласом в далёком 1952
году.
После свет увидела "Tennis for two", придуманная и реализованная
Уильямом Хигинботэмом в 1958 году в Нью-Йорке. Посетители его
лаборатории могли поиграть в теннис на цифровом корте, управляя
своими "ракетками" с помощью джойстиков.
Первая игра с выводом изображения на экран домашнего телевизора была
разра-ботана в 1966 году. Ральф Баер создал первую "телевизионную"
игру Chase, ставшей первой игрой, поиграть в которую можно было,
выведя картинку на экран телевизора у себя дома. Также в 1967 вышло
несколько интерактивных игр, для которых был необходим лучевой
пистолет.
В 1969 году не по годам упорный программист Кен Томпсон создал игру
для ОС MULTICS. Она была названа Space Travel. В ST игрок мог
путешествовать на космическом корабле меж планет небольшой
солнечной системы и посадить корабль на одну из них, что и являлось
целью игры.
Но после закрытия проекта MULTICS Кену пришлось искать новый
компьютер для своей игры, коим стала ЭВМ компании General Electric. Но
работать за ней было очень дорого, поэтому стойкий Томпсон портировал
свою многострадальную игру на старенький PDP-7. Для портирования
игры на этот компьютер и была создана ОС UNIX. Кроме того, 1970 год
стал годом рождения компьютерной мыши (автора - Дуглас Энегльбарт).
Впрочем, в играх её стали использовать гораздо позже.
Первые шутеры, стрелялки, квесты и сетевые игры на компьютерах
появляется в 21971 по 1980 год. Вышли два завоевавших множество
фанатов шутера от первого лица на ЭВМ - Maze War и SpaSim, ещё -
первая текстовая игра-квест Adventure во вселенной D&D(Dungeons &
Dragons), первая игра-квест Colossal Cave Adventure. Были созданы первые

4
прототипы сетевых игр, появились картинки из текстовых символов
(ASCII-art).
Также в середине 1970-ых начали появляться первые домашние PC.
Доморащённых программистов стало становиться всё больше и больше,
появились первые книги и журналы по программированию.
В обществе все больше распространяется мнение о том, что
компьютерные игры опасны для психики человека: развивают в нем
агрессивность, сужают круг его интересов, обедняют эмоциональную
сферу. Многие люди очень настороженно относятся к этому.
Изначально данные о том, что игры влияют на функции мозга, были
получены на основании тестирования шутеров. То, что часто критикуемые
«стрелялки» могут принести пользу, заметил студент Шон Грин,
изучавший психологию в Рочестерском университете. Он дал пройти тест
на визуальное внимание своим друзьям, которые показали поразительные
результаты. Сперва Грин и его научный руководитель Дафна Бавельер
списали это на какую-то ошибку, так как, когда Бавельер сама прошла
тестирование, ее результат был обычным. Разница между участниками
эксперимента заключалась в том, что все друзья Грина посвящали более
10 часов в неделю игре в шутеры.
Затем Грин и Бавельер провели другой эксперимент, разделив группу
«игровых новичков» на две команды. Первая проводила за шутером по
одному часу в день в течение 10 дней, вторая столько же времени
проходила пространственную головоломку «Тетрис».
Тесты показали, что участники первой группы лучше фокусировали
внимание на интересующих объектах на визуально загруженном фоне, а
также могли одновременно отслеживать до пяти движущихся предметов.
Во время других исследований стало известно, что «Тетрис», в свою
очередь, улучшает способности к пространственному мышлению и
визуальному представлению двухмерных объектов.
1.2 Сведения из теории
Объе́ктно-ориенти́рованное программи́рование (ООП) — методология
программирования, основанная на представлении программы в виде
совокупности объектов, каждый из которых является экземпляром
определённого класса, а классы образуют иерархию наследования.
Класс — в объектно-ориентированном программировании, представляет
собой шаблон для создания объектов, обеспечивающий начальные
значения состояний: инициализация полей-переменных и реализация

5
поведения функций или методов. Другие абстрактные типы данных —
метаклассы, интерфейсы, структуры, перечисления, — характеризуются
какими-то своими, другими особенностями. Класс является ключевым
понятием в ООП. Существуют и бесклассовые объектно-ориентированные
языки, например, Self, Lua. Суть отличия классов от других абстрактных
типов данных состоит в том, что при задании типа данных класс
определяет одновременно как интерфейс, так и реализацию для всех своих
экземпляров (т.е. объектов), вызов метода-конструктора обязателен.
Объе́кт в программировании — некоторая сущность в цифровом
пространстве, обладающая определённым состоянием и поведением,
имеющая определённые свойства (атрибуты) и операции над ними
(методы). Как правило, при рассмотрении объектов выделяется то, что
объекты принадлежат одному или нескольким классам, которые
определяют поведение (являются моделью) объекта. Термины «экземпляр
класса» и «объект» взаимозаменяемы.
По́ле кла́сса или атрибу́т (переменная-член, data member, class field,
instance variable) в объектно-ориентированном программировании —
переменная, описание которой создает программист при создании класса.
Все данные объекта хранятся в его полях. Доступ к полям осуществляется
по их имени. Обычно тип данных каждого поля задаётся в описании
класса.
Ме́тод в объектно-ориентированном программировании — это функция
или процедура, принадлежащая какому-то классу или объекту.
Как и процедура в процедурном программировании, метод состоит из
некоторого количества операторов для выполнения какого-то действия и
имеет набор входных аргументов.
1.3 Постановка задачи
Была поставлена задача разработать приложение для игры “Быки и
коровы”. Суть игры в следующем. Каждый из противников задумывает
четырехзначное число, все цифры которого различны (первая цифра числа
отлична от нуля). Необходимо разгадать задуманное число. Выигрывает
тот, кто отгадает первый.
Из выше сказанного следует то входными данными будут являться числа
которые будут вводиться с клавиатуры пользователем. А выходными
данными будут количество быков и коров т.е. количество угаданных цифр
и их расположение в загаданном числе.

6
Для разработки данного приложения был ипользован язык
программирования C++. Язык имеет богатую стандартную библиотеку,
которая включает в себя распространенные контейнеры и алгоритмы,
ввод-вывод, регулярные выражения, поддержку многопоточности и
другие возможности. C++ сочетает свойства как высокоуровневых, так и
низкоуровневых языков. В сравнении с его предшественником — языком
C — наибольшее внимание уделено поддержке объектно-
ориентированного и обобщенного программирования.
Кроме использования встроенных типов, таких как int, double и т.д., мы
можем определять свои собственные типы или классы.

7
ГЛАВА 2. ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРИЛОЖЕНИЯ

8
2.1 Алгоритм решения

9
10
1. Создать класс в котором мы будем реализовывать наш проект.
2. Создать функцию выполняющую генерирование и запись цифр.
3. Ввод числа пользователем с клавиатуры.
4. Сравнения с числом которое сгенерировал компьютер.
5. Вывести на экран количество угаданных цифр и их расположение в
данном числе.
6. После того как пользователь угадал число игра заканчивается.
2.2 Макет приложения
Для решения данной задачи нам потребуется создать класс в котором мы
будем реализовывать наш проект. Затем мы создадим функцию
выполняющую создание и запись чисел которые нам понадобятся в ходе
решения данной задачи. Для создания числа нам понадобиться
реализовать генератор случайных цифр и записать их в массив. Затем
вывести на экран сгенерированное число. После вывода на экран числа
нужно реализовать ввод числа пользователем с клавиатуры и сравнение
его с число сгенерированным компьютером. При сравнение чисел
сгенерированным компьютером и пользовательским мы должны
учитывать расположение цифры в двух числах. Игра считается
законченной когда пользователь угадал число сгенерированное
компьютером.

11
2.3 Описание программы
Для разработки данной программы был использован один класс который
называется Bik для реализации данного программного приложения.

Рис. 2. Пример использования класса.


А также использовались следующие библиотеки:
iostream — заголовочный файл с классами, функциями и переменными
для организации ввода-вывода в языке программирования C++.
Сonio.h — заголовочный файл, используемый для создания текстового
интерфейса пользователя.
stdio.h — заголовочный файл стандартной библиотеки языка Си,
содержащий определения макросов, константы и объявления функций и
типов, используемых для различных операций стандартного ввода и
вывода.
ctype.h — заголовочный файл стандартной библиотеки языка
программирования С, содержащий объявления функций для
классификации и преобразования отдельных символов.
stdlib.h — заголовочный файл стандартной библиотеки языка Си, который
содержит в себе функции, занимающиеся выделением памяти, контролем
процесса выполнения программы, преобразованием типов и другие.

12
time.h — заголовочный файл стандартной библиотеки языка
программирования C, содержащий типы и функции для работы с датой и
временем.
Для генерирования и записи чисел используется функция is_valid

Рис.3. Генерирование цифры.

Рис. 4. Проверка и запись цифры.

Рис.5. Вывод сгенерированного числа на экран.

Рис. 6. Ввод пользовательского числа.

13
Рис. 7. Вывод на экран кол-во “быков” и “коров” в угаданном числе и при
угадывании числа вывод информации о том что игрок победил.
При разработке данного приложения было использовано пространство
имён std для вывода количества попыток на разгадывание числа к
пользователю на консоль

Рис. 8. Вывод кол-во попыток на разгадывание пользователем числа.


2.4. Результаты работы программы
Входные данные - цифры генерируемые компьютером и число вводимое
пользователем с клавиатуры.

Выходные данные - кол-во “быков” и “коров” , сообщение о победе и


количество попыток на разгадывание числа.

14
ГЛАВА 3. Руководство пользователя
Данная программа создана для игры в игру “Быки и коровы”. Суть игры в
следующем. Каждый из противников задумывает четырехзначное число,
все цифры которого различны (первая цифра числа отлична от нуля).
Необходимо разгадать задуманное число. Выигрывает тот, кто отгадает
первый.
Противники по очереди называют друг другу числа и сообщают о
количестве “быков” и “коров” в названном числе (“бык” — цифра есть в
записи задуманного числа и стоит в той же позиции, что и в задуманном
числе; “корова” — цифра есть в записи задуманного числа, но не стоит в
той же позиции, что и в задуманном числе).
После запуска программы пользователю будет предложено ввести число
как на рисунке 9.

Рис. 9. Пример вводимого пользователем числа.


А также на экран выведется кол-во “быков” и “коров”.
Игра будет считается завершённой когда кол-во “быков” и “коров” будет
равно 4. В таком случае на экран будет выведено кол-во “быков” и “коров”
и кол-во попыток на разгадывание числа рис. 10.

Рис. 10. Пример победы.


А так же можно досрочно закончить игру нажав кнопку q(Q) на
клавиатуре в английском регистре пример рис. 11(Она не отобразиться в
консоли, но нажатие клавиши считает).

Рис. 11. Пример досрочного завершения программы.

15
ЗАКЛЮЧЕНИЕ
При выполнении курсового проекта были углублены знания по многим
темам, которые были пройдены за семестр обучения в С++.
Поставленные задачи проекта были реализованы: изучена предметная
область, спроектированного ПО, реализовано ПО на языке С++, проверена
работоспособность ПО.
Итогом разработки стала игра в жанре угадай число, головоломка которую
можно использовать в развлекательных целях и обучении.
В дальнейшем планируется улучшение и расширение среды применения
разработанной программы.

16
СПИСОК ИСПЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
https://xn--j1ahfl.xn--
p1ai/library_kids/proekt_sozdanie_kompyuternoj_igri_135845.html
https://trends.rbc.ru/trends/education/5e3d5c5a9a794751357b8d73
https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA
%D1%82%D0%BD%D0%BE-%D0%BE
%D1%80%D0%B8%D0%B5%D0%BD
%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD
%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE
%D0%B3%D1%80%D0%B0%D0%BC%D0%BC
%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD
%D0%B8%D0%B5
https://ru.wikipedia.org/wiki/%D0%9A%D0%BB
%D0%B0%D1%81%D1%81_(%D0%BF%D1%80%D0%BE
%D0%B3%D1%80%D0%B0%D0%BC%D0%BC
%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD
%D0%B8%D0%B5)
https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA
%D1%82_(%D0%BF%D1%80%D0%BE
%D0%B3%D1%80%D0%B0%D0%BC%D0%BC
%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD
%D0%B8%D0%B5)
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B5_
%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0
https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE
%D0%B4_(%D0%BF%D1%80%D0%BE
%D0%B3%D1%80%D0%B0%D0%BC%D0%BC
%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD
%D0%B8%D0%B5)
https://club.shelek.ru/viewart.php?id=178

17
ПРИЛОЖЕНИЕ
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>

class Bik
{
public:
char my[4];
int b;
int k;
bool is_valid(char a[4], int size, char c)
{
int no = size;
for (int i = 0; i < size; i++)
if (a[i] != c)
no--;
if (!no)
a[size] = c;
return !no;
}
public: void getBik()
{
int digits = 0;

18
char numbers[11] = "0123456789";
srand((unsigned)time(NULL));
while (digits < 4)
if (is_valid(my, digits, numbers[rand() % 9 + 1]))
digits++;
printf("Zagadannoe chislo %c%c%c%c\n", my[0], my[1], my[2], my[3]);
char enter[4], c(' '); int w = 1;
b = k = digits = 0;
printf("Vvedite chislo\n");
while (c != 'q' && c != 'Q')
if (isdigit(c = _getch()))
if (is_valid(enter, digits, c))
{
printf("%c", c);
for (int i = 0; i < 4; i++)
if (my[i] == c)
if (i == digits)
{
b++;
}
else
{
k++;
}
digits++;
if (digits == 4)
{

19
printf("\t\tKol-vo bikov - %d\n \t\tKol-vo korov - %d\n\n", b, k);
if (b != 4) { w++; }
if (b == 4) {
printf("Pozdravlyaem! Vi ygadali!\n");
std::cout << "kol-vo popitit - " << w;
break;
}
b = k = digits = 0;
}
}
_getch();
}
};
Bik pr;
int main()
{
setlocale(LC_ALL, "Russian");
pr.getBik();
return 0;
}

20

Вам также может понравиться