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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ....................................................................................................................................4
1 Общая часть.................................................................................................................................5
1.1 Постановка задачи...............................................................................................................5
1.2 Способы решения задачи....................................................................................................6
1.2.1 Динамическое программирование..............................................................................6
1.2.2 Алгоритм волновой трассировки................................................................................7
1.2.3 Поиск в ширину............................................................................................................9
1.3 Выбор алгоритма решения задачи...................................................................................10
1.4 Определение модели проектирования и технологии программирования....................10
1.5 Выбор инструментальных средств...................................................................................11
2 Расчётная часть.........................................................................................................................13
2.1 Математическая модель....................................................................................................13
2.2 Организация входных и выходных данных.....................................................................15
ЗАКЛЮЧЕНИЕ............................................................................................................................16
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ...................................................................17
Приложения:
Приложение А Техническое задание
Приложение Б Спецификация
Приложение В Руководство пользователя
Приложение Г Текст программы
ВВЕДЕНИЕ
В данном курсовом проекте должна быть разработана в среде Delphi
игра «Lines». Приложение должно иметь графический интерфейс, что
предполагает освоение навыков работы с 2D графикой. Ввиду того, что
приложение является игрой, следует обратить больше внимание на уровень
интерактивности и время отклика системы.
Lines – логическая игра, в которой необходимо очищать игровое поле
от шариков. Поле представляет собой квадрат, состоящий из клеток. В начале
игры на него выставляется три шарика разных цветов. Как правило,
используется семь (классически) различных цветов. За ход игрок может
передвинуть один шарик, выделив его и указав его новое местоположение.
При этом для совершения хода необходимо, чтобы между начальной и
конечной клетками существовал путь из свободных клеток. При
выстраивании линии из пяти шариков одного цвета (по горизонтали,
вертикали) она исчезает. После каждого хода выставляются новые три
шарика, но при исчезновении линии этого не происходит.

4
1 Общая часть
1.1 Постановка задачи
Необходимо разработать игру «Lines» также необходимо разработать и
реализовать пользовательское приложение с меню, в котором и будет
развиваться процесс данной игры. Игра должна быть разработана как
приложение ОС Windows.
Предполагаемый размер поля 9х9 клеток. Опытным путём было
получено, что для поля такого размера оптимальное количество цветов равно
6, минимальная длина линии – 5, число появляющихся после хода шаров – 3.
Более низкое значение этих параметров сделает игру слишком лёгкой, а
высокое – тяжёлой.
Под игровым полем следует поместить счётчик очков.
Должен присутствовать метод оповещения о проигрыше и
автоматическое начале новой игры. Методы оповещения о выигрыше не
нужны ввиду бесконечности процесса игры.
В игре было решено отказаться от таблицы рекордов. Так как
разработка программы носит учебный характер, а создание таблицы не
представляло какой-либо ценности в этом плане.
Управление достаточно реализовать одной кнопкой мыши. Левую
кнопку назначить как на выбор перемещаемого шарика, так и на выбор
места, в которое его следует переместить.
Линии из пяти шариков одного цвета (по горизонтали, вертикали) она
исчезает. После каждого хода выставляются новые три шарика, но при
исчезновении линии этого не происходит.

5
1.2 Способы решения задачи
1.2.1 Динамическое программирование
Динамическое программирование в теории управления и теории
вычислительных систем - способ решения сложных задач путём разбиения
их на более простые подзадачи. Он применим к задачам с оптимальной
подструктурой, выглядящим как набор перекрывающихся подзадач,
сложность которых чуть меньше исходной. В этом случае время вычислений,
по сравнению с «наивными» методами, можно значительно сократить.
Ключевая идея в динамическом программировании достаточно проста.
Как правило, чтобы решить поставленную задачу, требуется решить
отдельные части задачи (подзадачи), после чего объединить решения
подзадач в одно общее решение. Часто многие из этих подзадач одинаковы.
Подход динамического программирования состоит в том, чтобы решить
каждую подзадачу только один раз, сократив тем самым количество
вычислений. Это особенно полезно в случаях, когда число повторяющихся
подзадач экспоненциально велико.
Метод динамического программирования сверху — это простое
запоминание результатов решения тех подзадач, которые могут повторно
встретиться в дальнейшем. Динамическое программирование снизу включает
в себя переформулирование сложной задачи в
виде рекурсивной последовательности более простых подзадач.
Динамическое программирование обычно придерживается двух
подходов к решению задач:
- нисходящее динамическое программирование: задача разбивается на
подзадачи меньшего размера, они решаются и затем комбинируются для
решения исходной задачи. Используется запоминание для решений часто
встречающихся подзадач.
- восходящее динамическое программирование: все подзадачи, которые
впоследствии понадобятся для решения исходной задачи просчитываются
заранее и затем используются для построения решения исходной задачи.
6
Этот способ лучше нисходящего программирования в смысле размера
необходимого стека и количества вызова функций, но иногда бывает нелегко
заранее выяснить, решение каких подзадач нам потребуется в дальнейшем.
Обычное динамическое программирование является частным случаем
несериального динамического программирования, когда граф взаимосвязей
переменных — просто путь. НСДП, являясь естественным и общим методом
для учёта структуры задачи оптимизации, рассматривает множество
ограничений и/или целевую функцию как рекурсивно вычислимую функцию.
Это позволяет находить решение поэтапно, на каждом из этапов используя
информацию, полученную на предыдущих этапах, причём эффективность
этого алгоритма прямо зависит от структуры графа взаимосвязей
переменных. Если этот граф достаточно разрежен, то объём вычислений на
каждом этапе может сохраняться в разумных пределах.

7
1.2.2 Алгоритм волновой трассировки
Алгоритм поиска пути алгоритм поиска кратчайшего пути на
планарном графе. Принадлежит к алгоритмам, основанным на методах
поиска в ширину.
В основном используется при компьютерной трассировке печатных
плат, соединительных проводников на поверхности микросхем. Другое
применение волнового алгоритма — поиск кратчайшего расстояния на карте
в компьютерных стратегических играх.
Волновой алгоритм в контексте поиска пути в лабиринте был
предложен Э. Ф. Муром Ли независимо открыл этот же алгоритм при
формализации алгоритмов трассировки печатных плат в 1961 году
Алгоритм работает на дискретном рабочем поле (ДРП),
представляющем собой ограниченную замкнутой линией фигуру, не
обязательно прямоугольную, разбитую на прямоугольные ячейки, в частном
случае — квадратные. Множество всех ячеек ДРП разбивается на
подмножества: «проходимые» (свободные), т. е при поиске пути их можно
проходить, «непроходимые» (препятствия), путь через эту ячейку запрещён,
стартовая ячейка (источник) и финишная (приемник). Назначение стартовой
и финишной ячеек условно, достаточно — указание пары ячеек, между
которыми нужно найти кратчайший путь.
Алгоритм предназначен для поиска кратчайшего пути от стартовой
ячейки к конечной ячейке, если это возможно, либо, при отсутствии пути,
выдать сообщение о непроходимости.
Работа алгоритма включает в себя три
этапа: инициализацию, распространение волны и восстановление пути.
Во время инициализации строится образ множества ячеек
обрабатываемого поля, каждой ячейке приписываются атрибуты
проходимости/непроходимости, запоминаются стартовая и финишная
ячейки.
8
Далее, от стартовой ячейки порождается шаг в соседнюю ячейку, при
этом проверяется, проходима ли она, и не принадлежит ли ранее меченной в
пути ячейке.
Соседние ячейки принято классифицировать двояко: в
смысле окрестности Мура и окрестности фон Неймана, отличающийся тем,
что в окрестности фон Неймана соседними ячейками считаются только 4
ячейки по вертикали и горизонтали, в окрестности Мура — все 8 ячеек,
включая диагональные.
При выполнении условий проходимости и непринадлежности её к
ранее помеченным в пути ячейкам, в атрибут ячейки записывается число,
равное количеству шагов от стартовой ячейки, от стартовой ячейки на
первом шаге это будет 1. Каждая ячейка, меченная числом шагов от
стартовой ячейки, становится стартовой и из неё порождаются очередные
шаги в соседние ячейки. Очевидно, что при таком переборе будет найден
путь от начальной ячейки к конечной, либо очередной шаг из любой
порождённой в пути ячейки будет невозможен.
Восстановление кратчайшего пути происходит в обратном
направлении: при выборе ячейки от финишной ячейки к стартовой на каждом
шаге выбирается ячейка, имеющая атрибут расстояния от стартовой на
единицу меньше текущей ячейки. Очевидно, что таким образом находится
кратчайший путь между парой заданных ячеек. Трасс с минимальной
числовой длиной пути, как при поиске пути в окрестностях Мура, так и фон
Неймана может существовать несколько. Выбор окончательного пути в
приложениях диктуется другими соображениями, находящимися вне этого
алгоритма. Например, при трассировке печатных плат — минимумом
линейной длины проложенного проводника.

9
1.2.3 Поиск в ширину
Поиск в ширину (англ. breadth-first search, BFS) — один из методов
обхода графа. Пусть задан граф G=(V,E) и выделена исходная вершина S.
Алгоритм поиска в ширину систематически обходит все ребра  G для
«открытия» всех вершин, достижимых из S, вычисляя при этом расстояние
(минимальное количество рёбер) от S до каждой достижимой из S вершины.
Алгоритм работает как для ориентированных, так и для неориентированных
графов.
Поиск в ширину имеет такое название потому, что в процессе обхода
мы идём вширь, т.е. перед тем как приступить к поиску вершин на
расстоянии k+1, выполняется обход вершин на расстоянии k.
Поиск в ширину является одним из неинформированных алгоритмов
поиска.
Поиск в ширину работает путём последовательного просмотра
отдельных уровней графа, начиная с узла-источника u.
Рассмотрим все рёбра  (u,v), выходящие из узла u. Если очередной
узел v является целевым узлом, то поиск завершается; в противном случае
узел v добавляется в очередь. После того, как будут проверены все рёбра,
выходящие из узла u, из очереди извлекается следующий узел u, и процесс
повторяется.
Так как в памяти хранятся все развёрнутые узлы, пространственная
сложность алгоритма составляет О(\V\+\E\ ).
Алгоритм поиска с итеративным углублением похож на поиск в
ширину тем, что при каждой итерации перед переходом на следующий
уровень исследуется полный уровень новых узлов, но требует значительно
меньше памяти.
Так как в худшем случае алгоритм посещает все узлы графа, при
хранении графа в виде списков смежности, временная сложность алгоритма
составляет O(\V\+\E\.

10
Если у каждого узла имеется конечное число преемников, алгоритм
является полным: если решение существует, алгоритм поиска в ширину его
находит, независимо от того, является ли граф конечным. Однако если
решения не существует, на бесконечном графе поиск не завершается.
Если длины рёбер графа равны между собой, поиск в ширину является
оптимальным, то есть всегда находит кратчайший путь. В
случае взвешенного графапоиск в ширину находит путь, содержащий
минимальное количество рёбер, но не обязательно кратчайший.
Поиск по критерию стоимости является обобщением поиска в ширину
и оптимален на взвешенном графе с неотрицательными весами рёбер.
Алгоритм посещает узлы графа в порядке возрастания стоимости пути из
начального узла и обычно использует очередь с приоритетами.

11
1.3 Выбор алгоритма решения задачи
Для решения данного проекта, метод алгоритм волновой трассировки
будет наиболее удачным, из-за его простой реализации. Решение задачи этим
методом будет наиболее точным, и погрешность будет минимальной.
Преимущества метода:
– быстрая работа на небольшом наборе данных;
– гибкость и практичность настройки работы алгоритма;
– простая реализация.
Псевдокод:

12
1.4 Определение модели проектирования и технологии
программирования
V – Model является моделью разработки информационных систем
(ИС), направленной на упрощение понимания сложностей, связанных с
разработкой систем. Она используется для определения единой процедуры
разработки программных продуктов, аппаратного обеспечения и человеко –
машинных интерфейсов.
Основной принцип V – образной модели заключается в том, что
детализация проекта возрастает при движении слева направо, одновременно
с течением времени, и ни то, ни другое не может повернуть вспять. Итерации
в проекте производятся по горизонтали, между левой и правой сторонами
буквы.
Применительно к разработке информационных систем V – Model –
вариация каскадной модели, в которой задачи разработки идут сверху вниз
по левой стороне буквы V, а задачи тестирования – вверх по правой стороне
буквы V. Внутри V проводятся горизонтальные линии, показывающие, как
результаты каждой из фаз разработки влияют на развитие системы
тестирования на каждой из фаз тестирования. Модель базируется на том, что
приёмо – сдаточные испытания основываются, прежде всего, на требованиях,
системное тестирование – на требованиях и архитектуре, комплексное
тестирование – на требованиях, архитектуре и интерфейсах, а компонентное
тестирование – на требованиях, архитектуре, интерфейсах и алгоритмах.

13
1.5 Выбор инструментальных средств
В ходе выполнения работы была выбрана система программирования
Embarcadero Delphi версии 10.3.2 (ранее Borland Delphi) предоставляет
наиболее широкие возможности для программирования приложений ОС
Windows.
Delphi – созданная первоначально фирмой Borland и на данный момент
принадлежащая и разрабатываемая Embarcadero Technologies. Embarcadero
Delphi является частью пакета Embarcadero RAD Studio. это продукт Borland
International для быстрого создания приложений. Процесс создания
интерфейса будущей программы напоминает забаву с игровым
компьютерным конструктором. Поэтому RAD – среды еще называют
визуальными средами разработки: какими мы видим рабочие и диалоговые
окна программы при проектировании, такими они и будут, когда программа
заработает. Среда предназначена для быстрой (RAD) разработки
прикладного ПО для операционных систем Windows, Mac OS X, а также iOS
и Android. Благодаря уникальной совокупности простоты языка и генерации
машинного кода позволяет непосредственно, и, при желании, достаточно
низкоуровнево взаимодействовать с операционной системой, а также с
библиотеками, написанными на C/C++. Созданные программы независимы
от стороннего ПО, как Microsoft .NET Framework или Java Virtual Machine.
Выделение и освобождение памяти управляется в основном
пользовательским кодом, что, с одной стороны, ужесточает требования к
качеству кода, а с другой — делает возможным создание сложных
приложений с высокими требованиями к отзывчивости (работа в реальном
времени). В кросс-компиляторах для мобильных платформ предусмотрен
автоматический подсчёт ссылок на объекты, облегчающий задачу
управления их временем жизни. Delphi производит небольшие по размерам
высокоэффективные исполняемые модули (.exe и .dll), поэтому в Delphi
14
должны быть, прежде всего, заинтересованы те, кто разрабатывает продукты
на продажу. С другой стороны, небольшие по размерам и быстро
исполняемые модули означают, что требования к клиентским рабочим
местам существенно снижаются – это имеет немаловажное значение и для
конечных пользователей.
Преимущества Delphi по сравнению с аналогичными программными
продуктами:
– быстрота разработки приложения;
– высокая производительность разработанного приложения;
– низкие требования разработанного приложения к ресурсам
компьютера;
– возможность разработки новых компонентов и инструментов
собственными средствами Delphi (существующие компоненты и
инструменты доступны в исходных кодах); – удачная проработка иерархии
объектов.
Система программирования Delphi рассчитана на программирование
различных приложений и предоставляет большое количество компонентов
для этого. К тому же работодателей интересует, прежде всего, скорость и
качество создания программ, а эти характеристики может обеспечить только
среда визуального проектирования, способная взять на себя значительные
объемы рутинной работы по подготовке приложений, а также согласовать
деятельность группы постановщиков, кодировщиков, тестеров и технических
писателей. Возможности Delphi полностью отвечают подобным требованиям
и подходят для создания данной игры.

15
2 Расчётная часть
2.1 Математическая модель
 Плоскость трассировки (плата, кристалл) разбивается на
прямоугольные площадки (дискреты) заданного размера. Размер дискретной
площадки определяется допустимыми размерами проводников и
расстояниями между ними. Задача проведения трасс сводится к получению
последовательности дискретов, соединяющих элементы xi
xj соответствующих выводам (контактам) элементов схем. Вводится весовая
функция F=F(fl, f2, ..., fr), которая является критерием качества пути,
a fi характеризует путь с точки зрения длины, числа пересечений,
переходных отверстий, изгибов и т. п. Начиная с элемента хi дискретам,
соседним с ранее просмотренными, присваивается определенное значение
весовой функции F=mi. Проводится итерационно и продолжается до тех пор,
пока элементу хj не будет присвоено некоторое значение веса тj. Начиная от
элемента хj производится перемещение к элементу xi по пройденным
дискретам таким образом, чтобы значения весовой функции дискретов
убывали монотонно. В результате получается трасса, соединяющая
элементы хi и хj. Рассмотрим подробнее процесс проведения трассы из
элемента хi в элемент хj На плоскости, где необходимо провести трассу,
моделируется распространение волны из «источника» xt до тех пор, пока
фронт волны не достигнет «приемника» хj или пока на k-м шаге фронт волны
не поглотит ни одного незанятого дискрета. Отметим, что волна
распространяется только по свободным дискретам. Эта часть алгоритма
называется «распространение волны». Если после ее окончания достигнут
элемент хj то выполняется вторая часть алгоритма, называемая «проведение
трассы». При распространении волны алгоритм последовательно, шаг за
шагом строит 1-, 2-, ..., к-й фронт источника xi.
Для повышения быстродействия волновых алгоритмов предлагают:
 одновременное распространение волны от двух соединяемых
точек;
16
 начало трассировки с точки, максимально удаленной от центра;
 сокращение области трассировки за счет использования пары
соединяемых контактов, охватывающих искусственную границу
в виде прямоугольника.

Начало

Генерация максимум 3 шаров в


случайных координатах поля.

Еще есть свободные клетки?


Нет

Да

Ход игрока

В результате получалась линия?


Нет

Да

Сжигаем

Проигрыш

Конец

Рисунок 2.1 – Блок-схема алгоритма волновой трассировки

17
2.2 Организация входных и выходных данных
Входными данными являются:
Входные данные игры, как и любой программы - это информация,
которая вводится в неё пользователем, операционной системой или другими
программами для обработки. В случае с игрой «Lines» это только ввод с
мышки
Выходными данными являются:
1) Суммарное количество очков который набрал пользователь, проходя
данную игру.
2) Количество шаром расположенных на игровом поле.

18
ЗАКЛЮЧЕНИЕ
В ходе работы над курсовым проектом была разработана в среде Delphi
игра «Lines». Приложение имеет графический интерфейс. Игра имеет
довольно низкие системные требования. В качестве перспектив развития
проекта можно указать добавление музыкального сопровождения, таблицы
рекордов, таймера времени, настройки уровня сложности, анимации при
перемещении и удалении.
Можно перечислить следующие недостатки:
 не самое высокое качество графического оформления;
 отсутствует выбор или настройка уровня сложности;
 отсутствует анимация перемещения и исчезновения шариков;
 отсутствует таблица рекордов.
Для нормального функционирования программы техническая система
должна удовлетворять следующим минимальным требованиям:
1)

19
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Книги и учебные пособия
1. Скиена С. С., Алгоритмы. Руководство по разработке, 2-е издание;
БХВ-Петербург, 2015. – 720 с.
2. Программирование игр, Алгоритмы и технологии, Воронина
В.В., 2017 – 67 с.
3. Delphi - Готовые алгоритмы - Стивенс Р. – 2016 – 327 с.
4. Ананий Левитин, Алгоритмы. Введение в разработку и анализ;
Вильямс, 2016. – 576 с.
5. Delphi – Трюки и эффекты – Александр Чиртик, Валерий
Борисок, Юрий Корвель. 2017 – 258 с.
6. Станислав Окулов, Программирование в алгоритмах: Бином.
Лаборатория знаний, 2013. – 384 с.
7. Никлаус Вирт, Алгоритмы и структуры данных; ДМК Пресс,
2013. – 272c.
8. Алексей Архангельский, Delphi 7. Справочное пособие; Бином-
Пресс, 2013. –1024 с.
9. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн К. Глава 15.
Динамическое программирование. Алгоритмы: построение и анализ =
Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.:
Вильямс, 2005. — 1296 с.
10. Михаил Фленов, Библия Delphi. Третье издание; БХВ-Петербург,
2015. – 686 с.

Электронные ресурсы
1. Википедия [Электронный ресурс]. URL:
https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE
%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B8
2. Уроки Delphi начинающим с нуля [Электронный ресурс].URL:
http://www.delphi-manual.ru/lesson3.php(Дата обращения: 18.11.2017).
20
3. Языки программирования. Delphi. Уроки Delphi [Электронный
ресурс].URL: http://delphi-prg.ru/komponent-delphi-stringgrid-tablica-strok(Дата
обращения: 20.11.2017).
4. Основы Delphi. Delphi программирование [Электронный ресурс]
URL:http://www.delphibasics.ru/MessageDlg.php(Дата обращения: 23.11.2017).
5. Программирование игр, Алгоритмы и технологии [Электронный
ресурс] URL:https://nashol.com/20190327108019/programmirovanie-igr-
algoritmi-i-tehnologii-voronina-v-v-2017.html
6. Жадный алгоритм [Электронный ресурс]
URL:https://ru.wikipedia.org/wiki/Жадный_алгоритм (Дата обращения:
25.11.2017).

21