Автор работы: Пользователь скрыл имя, 30 Марта 2015 в 07:42, курсовая работа
В данной курсовой работе мы рассмотрим основные принципы и возможности программной среды C++. Для этого используем основные операторы программирования: ветвления, ввода и вывода, цикличности и ввода библиотек, генерации случайных чисел.
При выполнении курсовой работы использовались теоретические и практические знания полученные на уроках информатики, которые применены при выполнения курсового проекта на примере реализации игровых программ в программной среде C++.
Введение
Введение в объектно-ориентированное программирование.
Интерфейс пользователя и Сценарии использования программы
Функциональные требования
Нефункциональные требования
Исключительные ситуации
Поэтапное описание создание кода игры
Заключение
Литература
ГОСУДАРСТВЕННЫЙ КОМИТЕТ СВЯЗИ, ИНФОРМАТИЗАЦИИ И ТЕЛЕКОММУНИКАЦИОННЫХ ТЕХНОЛОГИЙ
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
По дисциплине
Программирование на языке C++
На тему:
Разработка игры «Крестики-нолики»
Ташкент 2015
СОДЕРЖАНИЕ
В данной курсовой работе мы рассмотрим основные принципы и возможности программной среды C++. Для этого используем основные операторы программирования: ветвления, ввода и вывода, цикличности и ввода библиотек, генерации случайных чисел.
При выполнении курсовой работы использовались теоретические и практические знания полученные на уроках информатики, которые применены при выполнения курсового проекта на примере реализации игровых программ в программной среде C++.
Стремительное развитие компьютерной техники в последние годы, появление мощнейших графических ускорителей и центральных процессоров способствовало не менее бурному развитию индустрии компьютерных игр. Выдающиеся разработки этой отрасли – это сложнейшие программы, как правило, с очень высокими требованиями к аппаратной части компьютера. Однако для возможности отдохнуть в перерыве от выполнения какой-либо работы оператору компьютера не всегда требуется новейшая компьютерная игра, а зачастую использовать её не позволяет маломощное оборудование офисного компьютера. Именно этой цели – отдыху от монотонной работы служит разработанная в рамках данного курсового проекта программа.
Ни для кого не секрет, что игры прочно заняли свою позицию в современной индустрии развлечений. Существуют попытки выделить компьютерные игры как отдельную область искусства, наряду с театром, кино и т.п. Разработка игр может оказаться не только увлекательным, но и прибыльным делом, примеров этому предостаточно в истории.
Первые примитивные компьютерные и видео игры были разработаны в 1950-х и 1960-х годах. Они работали на таких платформах, как осциллографы, университетские мейнфреймы и компьютеры EDSAC. Самой первой компьютерной игрой стал симулятор ракеты, созданный в 1942 году Томасом Голдсмитом Младшим (англ. Thomas T. Goldsmith Jr.) и Истл Рей Менном (англ. Estle Ray Mann)..
Позже, в 1952 году, появилась программа "OXO", имитирующая игру "крестики-нолики", созданная А.С. Дугласом как часть его докторской диссертации в Кембриджском Университете. Игра работала на большом университетском компьютере, известном как EDSAC (Electronic Delay Storage Automatic Calculator). В настоящее время, разработка игры - это многомиллионный процесс, в котором задействована целая команда разработчиков, сложные современные технологии и даже маркетинговые ходы.
Объектно-ориентированное программирование представляет собой чуть более автоматизированный способ программирования. Объектно-ориентированные программы – это не просто процедурные программы, переведенные на новый синтаксис. Они должны строится на новой философии разработки. Для них требуется новая стратегия программирования, которую часто бывает трудно освоить. Основная идея ООП: программа состоит из группы объектов, часто связанных между собой. В С++ объекты описываются при помощи нового типа данных class.
Класс включает в себя набор переменных (данных) и операций (методов или функций-членов), которые действуют на эти переменные. Полученными объектами можно управлять при помощи сообщений. В ООП объекты включают в себя не только данные (данные-члены), но и методы (функции-члены) воздействия на эти данные. Эти две части в сочетании образуют функциональную единицу программы. Другими словами, объекты содержат данные и методы работы с этими данными. Ниже приведены три основных преимущества объектно-ориентированных программ по сравнению с эквивалентными программами, разработанными сверху вниз.
Сопровождение программы. Программы проще читать и понимать, ООП позволяет управлять сложностью программы, оставляя видимыми программисту только существенные детали.
Модификация программы (добавление или исключение возможностей). Вы можете часто делать дополнения или исключения в программе, например, при работе с базой данных, просто добавляя и исключая объекты. Новые объекты могут наследовать все свойства базовых объектов, необходимо только добавить или убрать отличающиеся свойства. Повторное использование. Можно сохранить грамотно разработанный объект в наборе полезных программ и затем вставить его в новую программу с небольшими изменениями или без изменений.
Основные термины и положения ООП.
Функция — это кусок кода, который можно неоднократно вызывать из любого места программы состоящая из 2-х частей: объявление функции (прототип функции) содержит информацию о типе и определения. Формат прототипа функции состоит:
<тип результата> <название функции>
([<тип> [<название параметра1>][,..,<тип> [<название параметра N>]]]
параметр <тип результата> задаёт тип значения, которое возвращает функция с помощью оператора return. Если функция не возвращает
никакого значения, то вместо типа указывается ключевое слово void. Название функции должно быть допустимым идентификатором. После названия функции, внутри круглых скобок указывается тип и название параметра через запятую. Название параметров в прототипе функций можно не задавать вообще. Если функция не принимает параметров, то указываются только круглые скобки () или внутри задаётся ключевое слово void (void). После объявления функции должна стоять точка с запятой (;) Определение функции содержит описание типа и название параметров, и реализацию:
<тип результата> <название функции>
([<тип> [<название параметра1>]
[,..,<тип> [<название параметра N>]]]
{
<тело функции>
return возвращаемое значение;
}
В отличие от прототипа в определении функции после типа обязательно должно быть указанно название параметра, которое является локальной переменной, и она создаётся при вызове функции, а после выхода из функции удаляется. Таким образом, локальная переменная видна только в внутри функции.
После описания параметров, внутри фигурных скобок размещаются инструкции, которые будут выполнятся при каждом вызове функции. Фигурные скобки {} указываются в любом случае, даже если тело функции состоит только из одной инструкции. Точка с запятой (;) после закрывающей фигурной скобки не указывается.
Вернуть значение из функции позволяет оператор return. После исполнения этого оператора выполнение функции останавливается и управление передаётся обратно в точку вызова функции.
Если перед названием функции указанно ключевое слово void, то оператора return может не быть, а если необходимо досрочно прервать выполнение функции, то оператор return указывается без возвращаемого значения.
При вызове функции из программы указывается название функции, после которого в круглых скобках передаются значения. Если функция не принимает параметров, то указываются только круглые скобки. Если функция возвращает значение, то его можно присвоить переменной или проигнорировать.
Количество и тип параметров в определении функции должны совпадать с количеством и типом параметров при вызове. Переданные значения присваиваются переменным, расположенным в той же позиции в определении функции. Объявление фикции должно располагаться перед вызовом и тогда название функции всегда является глобальным идентификатором.
В небольших программах допускается объявление функции не указывать, при условии, что определение функций расположено перед функцией main (). Функция main () так же не требует объявления т.к. она вызывается первой.
При увеличении количества фикций объявление фикций следует размещать в начале программы перед функцией main (), а определения после функции main () и в этом случае порядок следования определений функций не имеет значения.
При увеличении размеров программ объявление функций выносят в заголовочный файл с расширением h (иногда hpp), а определения функций размещаются в одноимённом файле с расширением срр. Все файлы располагаются в одной папке с основным файлом, содержащем функцию main () и в дальнейшем с помощью директивы #include заголовочный файл подключают во всех остальных файлах.
Инкапсуляция данных. Этот термин включает в себя логическое связывание данных с конкретной операцией. Она так же означает, что они являются не -глобальными доступными всей программе, а локальными – доступными только малой ее части. Инкапсуляция также автоматически подразумевает защиту данных. Именно для этого предназначена структура class в С++. В классе управление функциональными деталями объекта осуществляется при помощи спецификаторов private, public, protected.
Иерархия классов. В общем случае можно представить себе иерархию классов как родословную в генеалогическом древе, где класс С++ представляет собой шаблон для создания классов-потомков. Объекты, полученные из описания класса, называют экземплярами этого класса. Можно создать иерархию классов с классом-родителем и несколькими классами-потомками. Основой для этого являются производные классы.
Наследование.
Наследование в ООП позволяет классу получать свойства другого класса объектов. Родительский класс служит шаблоном для производного класса; этот шаблон можно менять различными способами. Наследование является важным положением, поскольку оно позволяет повторно использовать определение класса без значительных изменений в коде.
Полиморфизм. Строится на описанной выше концепции наследования. Программа посылает одно и тоже сообщение как объекту родительского класса, так и всем объектам производных классов. И родительский класс, и классы-потомки ответят на сообщение соответствующим образом. Полиморфизм дает возможность дополнять уже существующие части программы.
Виртуальные функции определяются в родительском классе, а в производных классах происходит до определение этих функций и для них создаются новые реализации. При работе с виртуальными функциями сообщения передаются как указатели, которые указывают на объект вместо прямой передачи объекту. Виртуальные функции используют таблицу для адресной информации. Эта таблица инициализируется во время выполнения при помощи конструктора. Конструктор вызывается каждый раз, когда создается объект его класса. Задача конструктора в данном случае состоит в связывании виртуальной функции с таблицей адресной информации. Во время компиляции адрес виртуальной функции неизвестен; вместо этого ей отводится позиция в таблице адресов.
Циклы. Операторы цикла(for)позволяют выполнить одни и те же инструкции многократно. Цикл(for)выполняется до тех пор, пока <условие> не вернёт false (ложь) и если это не произойдёт цикл будит бесконечным. for(<начальное_значение> присваивает переменной-счётчику начальное значение; <условие> содержит логическое выражение и пока логическое выражение возвращает true (истина) выполняются инструкции внутри цикла; <проращивание> задаёт изменение переменной-счётчика на каждой интеграции на указанное ++ означает увеличить на 1)
while Выполнение выражений в цикле продолжается до тех пор, пока логическое выражение истинно.
ООП полностью принадлежит к миру С++, поскольку в С нет основного ядра– абстрактного типа данных class. Поэтому переписать процедурно-ориентированную программу как объектно-ориентированную гораздо сложнее, чем просто подставить вместо одного ключевого слова другое.
ООП представляет собой технику программирования, которая позволяет рассматривать основные идеи как множество объектов. Используя объекты, можно представить задачи, которые необходимо выполнить, их взаимодействие и любые заданные условия, которые должны быть соблюдены.
Структура данных часто образует основы объектов.
Таким образом в С или С++ тип struct может образовывать элементарный объект. Связь с объектом можно организовать при помощи сообщений. Использование сообщений похоже на вызов функций в процедурно-ориентированной программе. Когда объект получает сообщение, вступают в действие методы, содержащиеся в объекте. Методы (их иногда называют функциями - членами) аналогичны функциям процедурно-ориентированного программирования. Тем не менее метод является частью объекта, а не чем-то отдельным, как было бы в процедурном аналоге.
С++ -язык предметно-ориентированного программирования. Язык С++ поддерживает процедурную и объектно-ориентированную парадигмы программирования.
Объектно-ориентированное программирование – это новый способ подхода к программированию. Такое программирование, взяв лучшие черты структурного программирования, дополняет его новыми идеями, которые переводят в новое качество подход к созданию программ.
Наиболее важное понятие языков объектно-ориентированного программирования –это понятие объекта (object). Объект – это логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции, т. е. объект в Borland C++ объединяет в себе данные и функции, обрабатывающие эти данные. Одним из самых главных понятий языка С++ является понятие класса. В языке С++ для того, чтобы определить объект, надо сначала определить его форму с помощью ключевого слова Ближайшей аналогией класса является структура. Память выделяется объекту только тогда, когда класс используется для его создания. Любой объект языка С++ имеет одинаковые атрибуты и функциональность с другими объектами того же класса. За создание своих классов и поведение объектов этих классов полную ответственность несет сам программист. Работая в некоторой среде, программист получает доступ к обширным библиотекам