Разработка программы-игры "Шашки" - Курсовая работа

бесплатно 0
4.5 61
Объектно-ориентированное программирование: понятие и содержание, история зарождения и развития, особенности и принципы реализации. Структура и назначение разрабатываемой программы, используемые технические и программные средства, формирование инструкции.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Концепция объектно-ориентированного программирования подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Объектно-ориентированное программирование позволяет программисту моделировать объекты определенной предметной области путем программирования их содержания и поведения в пределах класса. Формирование КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули - независимые части кода до уровня сборки программы, так объекты сформировались в компоненты - независимые части кода до уровня выполнения программы. В таких условиях объект, отправляя сообщение, может не знать в точности, к какому классу относится адресат, и одни и те же сообщения, отправленные переменным одного типа, содержащим объекты разных классов, вызовут различную реакцию. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным - независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект.В рамках данного курсового проекта было разработано программное обеспечение, реализующее собой игру «Шашки».

Введение
программа игра шашки

Концепция объектно-ориентированного программирования подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определенные структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов - отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определенные интерфейсы.

Цель работы: закрепление теоретических знаний, полученных при изучении курса «Объектно-ориентированное программирование», путем создания приложения, представляющего собой программную реализацию известной логической игры «Шашкии».

Разработка объектно-ориентированных программ состоит из следующих последовательных работ: - определение основных объектов, необходимых для решения данной задачи;

- определение закрытых данных (данных состояния) для выбранных объектов;

- определение второстепенных объектов и их закрытых данных;

- определение иерархической системы классов, представляющих выбранные объекты;

- определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;

- разработка последовательности выражений, которые позволяют решить поставленную задачу;

- разработка методов, обрабатывающих каждое сообщение;

- очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;

- кодирование, отладка, компоновка и тестирование.

Объектно-ориентированное программирование позволяет программисту моделировать объекты определенной предметной области путем программирования их содержания и поведения в пределах класса. Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных.

Инкапсуляция как бы скрывает и подробности внутренней реализации типов, и внешние операции и функции, допустимые для выполнения над объектами этого типа.

1. Объектно-ориентированное программирование

Объектно-ориентированное, или объектное, программирование (в дальнейшем ООП) - парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.

1.1 История возникновения

ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).

Формирование КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули - независимые части кода до уровня сборки программы, так объекты сформировались в компоненты - независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты - независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.

Языковые конструкции, конструктивно не относящиеся непосредственно к объектам, но сопутствующие им для их безопасной (исключительные ситуации, проверки) и эффективной работы, инкапсулируются от них в аспекты (в аспектно-ориентированном программировании). Субъектно-ориентированное программирование расширяет понятие объект посредством обеспечения более унифицированного и независимого взаимодействия объектов. Может являться переходной стадией между ООП и агентным программирование в части самостоятельного их взаимодействия.

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это все не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространенным объектно-ориентированным языком программирования.

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования.

1.2 Определение ООП и его основные концепции программа объектный технический

Появление в ООП отдельного понятия класса закономерно вытекает из желания иметь множество объектов со сходным поведением. Класс в ООП - это в чистом виде абстрактный тип данных, создаваемый программистом. С этой точки зрения объекты являются значениями данного абстрактного типа, а определение класса задает внутреннюю структуру значений и набор операций, которые над этими значениями могут быть выполнены. Желательность иерархии классов (а значит, наследования) вытекает из требований к повторному использованию кода - если несколько классов имеют сходное поведение, нет смысла дублировать их описание, лучше выделить общую часть в общий родительский класс, а в описании самих этих классов оставить только различающиеся элементы.

Необходимость совместного использования объектов разных классов, способных обрабатывать однотипные сообщения, требует поддержки полиморфизма - возможности записывать разные объекты в переменные одного и того же типа. В таких условиях объект, отправляя сообщение, может не знать в точности, к какому классу относится адресат, и одни и те же сообщения, отправленные переменным одного типа, содержащим объекты разных классов, вызовут различную реакцию.

Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как «настоящий» обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным - независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект.

Однако общность механизма обмена сообщениями имеет и другую сторону - «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому в большинстве ныне существующих объектно-ориентированных языков программирования используется концепция «отправка сообщения как вызов метода» - объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C , Object Pascal. В настоящий момент именно он является наиболее распространенным в объектно-ориентированных языках.

Концепция виртуальных методов, поддерживаемая этими и другими современными языками, появилась как средство обеспечить выполнение нужных методов при использовании полиморфных переменных, то есть, по сути, как попытка расширить возможности вызова методов для реализации части функциональности, обеспечиваемой механизмом обработки сообщений.

1.3 Особенности реализации

Как уже говорилось выше, в современных объектно-ориентированных языках программирования каждый объект является значением, относящимся к определенному классу. Класс представляет собой объявленный программистом составной тип данных, имеющий в составе: Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Иногда поля данных объекта называют свойствами объекта, изза чего возможна путаница. Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.

Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование - порождение класса от двух или более классов-родителей. Множественное наследование создает целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объеме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс - это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешевую альтернативу множественному наследованию.

Взаимодействие объектов в абсолютном большинстве случаев обеспечивается вызовом ими методов друг друга.

Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторы public, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступные только из классов-потомков и скрытые, доступные только внутри класса. Конкретная номенклатура модификаторов и их точный смысл различаются в разных языках.

Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют еще аксессорами (от англ. access - доступ), а по отдельности - геттерами (англ. get - чтение) и сеттерами.

Псевдополя, доступные для чтения и / или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как «умные» поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути - не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной. Например, в С#объявление свойства непосредственно содержит код методов доступа, который вызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступных для непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычные методы с некоторыми дополнительными требованиями к сигнатуре.

Полиморфизм реализуется путем введения в язык правил, согласно которым переменной типа «класс» может быть присвоен объект любого класса-потомка ее класса.

1.4 Основные понятия

Абстрагирование - это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция - это набор всех таких характеристик.

Инкапсуляция - это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

Наследование - это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс - потомком, наследником или производным классом.

Полиморфизм - это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Класс является описываемой на языке терминологии (пространства имен) исходного кода моделью еще не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект - это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Объект

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Прототип - это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

2. Логическая игра «Шашки»

2.1 Назначение программы

Данная программа предназначена для пользователей, которые любят логические игры. Игра предназначена для игры двух человек.

2.2 Используемые технические и программные средства

Программа была создана в среде программирования Borland Delphi 7.0.

Язык программирования: Pascal

Минимальные системные требования: - не менее 500 кб свободного места на жестком диске;

- не менее 4 Мб свободной оперативной памяти;

- операционная система - Windows XP/2000/Vista;

- клавиатура;

- мышь.

Порядок запуска программы на выполнение: Для запуска программы достаточно запустить (сделать на нем двойной щелчок левой клавишей мыши) файл DCHECKERS.exe.

Программа в систему не устанавливается, после использования может быть просто удалена с жесткого диска компьютера пользователя.

2.3 Описание логической структуры

Исходный код состоит из четырех unit (Main, Draughts, About, VCHESSBOARD) и двух форм (FMCHECKERS, FMABOUT). unit VCHESSBOARD - данный раздел содержит метод прорисовки поля (прорисовка клеток и шашек). unit About - данный раздел содержит информацию о программе и правила игры;

unit Draughts - данный раздел описывает все действия, совершаемые с шашками (Возможные ходы, запись ходов, рубка, запоминание срубленных шашек) unit Main - данный раздел описывает алгоритм игры. Если шашка выбрана, то проверяем правильность ходов, если рубки нет и клетка пустая, то ход сделан и переключаем игрока, если есть возможность рубки, то рубить обязательною. Отрисовка возможных ходов с учетом обязательной рубки. Проверяем, возможна ли рубка в данную клетку, рубка верна, далее рубим, определяем срубленную шашку и перескакиваем. Далее мы определяем, возможно, ли продолжение рубки, устанавливаем режим рубки, заканчиваем рубку и переключаем игрока. Проверяем победу по срубам и по блокировкам. Заканчиваем игру, и всплывает окно: победа команды белых или черных. Так же показывается, чей ход и время игры.

2.4 Результаты тестирования

Исходный вид программы, после запуска приложения появится окно (рис. 1):

Рисунок 1 - Основная форма содержащая игровое поле

После того как возникнет основная форма содержащая игровое поле, выбираем в меню игра и начать игру (рис. 2).

Рисунок 2 - Раздел меню, начать игру.

Нажав на начав игру, на игровом поле появятся шашки. Белые и черные. Ход начинают белые. С запуском начинается отсчет времени игры (рис. 3)

Рисунок 3 - Появление шашек. Время игры.

Когда мы выбираем шашку, появляются возможные ходы (рис. 4) или возможность рубки (рис. 5).

Простые шашки могут перемещаться только вперед по диагонали на одну клетку, если она не занята. Если клетка занята шашкой соперника и за этой клеткой свободное поле, тогда должен быть произведен бой - шашка ходящего «перескакивает» через шашку соперника и последняя снимается с доски. За один бой простая шашка может побить несколько шашек соперника.

Рисунок 4 - Возможные ходы

Рисунок 5 - Возможность рубки

При достижении простой последней горизонтали шашка становится дамкой (рис. 6).

Рисунок 6 - Дамка

Дамки могут ходить (рис. 7) или совершать бой по диагонали в любом направлении (рис. 8)

Рисунок 7 - Возможные ходы дамки

Рисунок 8 - Возможность рубки дамкой

После того как какой либо из игроков выигрывает всплывает окно: Игра закончена (рис. 9) и какая команда победила (рис. 10)

Рисунок 9 - Окно: Игра закончена

Рисунок 10 - Окно, какая команда победила

Нажав кнопку «О программе», пользователь увидит правила игры (рис. 11).

Рисунок 11 - О программе

Чтобы выйти из приложения в меню нужно выбрать файл и нажать на выход (рис. 7).

Рисунок 7 - Выход из программы

2.6 Инструкция

При запуске приложения выберите пункт меню игра и начать игру. После чего перед Вами предстанет игровое поле с шашками. Кликнув правой кнопкой мыши по шашке, Вы увидите возможные ходы, кликните на ту клетку, куда нужно передвинуть шашку. Вы передвинете шашку на данную клетку, при этом ход перейдет к противнику. Ваша задача уничтожить или заблокировать движение всех шашек противника.

Вывод
В рамках данного курсового проекта было разработано программное обеспечение, реализующее собой игру «Шашки». В ходе написания проекта была освоена и закреплена работа с классами и объектами.

С помощью разработанной программы пользователи могут овладеть искусством игры в «Шашки», а так же развить свое логическое мышление.

Пользовательское приложение разработано в среде программирования Borland Delphi 7.0.

Список литературы
1) Галисеев Г.В. Программирование в среде Delphi 2005. Самоучитель. Издательство «Диалектика», 2006.

2) Бобровский С.И. Технологии Delphi. Разработка приложений для бизнеса. Учебный курс. Издательство «Питер», 2006.

3) Котов В.М. Чрезвычайно грамотное и подробное описание задач динамического программирования, 2000

4) Фаронов В.В. Delphi. Программирование на языке высокого уровня. Учебник для вузов. Издательство «Питер», 2006.

5) Цветкова А.В. Информатика и информационные технологии. Издательство «Эксмо», 2008.

6) Специалисты NIIT. Использование C#. Специальное издание.: Перевод с англ. - М.: Издательский дом «Вильямс», 2002. - 528 с.

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?