Автор работы: Пользователь скрыл имя, 27 Мая 2013 в 15:12, контрольная работа
У офисных работников часто можно встретить игровую программу KAWAI2 от китайских разработчиков Chen Program Study, которая «в народе» получила название «Покемоны». Суть игры заключается в нахождении пар, до которых возможно пройти по свободным клеткам линией, включающей до двух переломов. Это задание было выбрано ввиду того что игра в исходных кодах в сети Интернет не встречается, а оформление программы устраивает далеко не всех, то есть нужна замена графического интерфейса. С другой стороны решение задачи поиска пути между парными элементами, удовлетворяющее условию «не более двух переломов для соединяющей линии», возможно исключительно с помощью логики и современных языков программирования.
1 Постановка задачи 3
2 Основной алгоритм программы 5
3 Достигнутые результаты 7
4 Возможное развитие программы 8
Список использованной литературы 10
Федеральное агентство по образованию
Государственное
образовательное учреждение
высшего профессионального образования
«Тихоокеанский государственный университет»
Кафедра «Экономической кибернетики»
КОНТРОЛЬНАЯ РАБОТА
по дисциплине
«Объектно-ориентированные языки программирования»
Вариант № 8
Выполнил студент
1 курса группы ПИЭУ
Шифр:
Проверила: ____________________
______________________________
Хабаровск, 2011 г.
Содержание
1 Постановка задачи 3
2 Основной алгоритм программы 5
3 Достигнутые результаты 7
4 Возможное развитие программы 8
Список использованной литературы 10
1 Постановка задачи
У офисных работников часто можно встретить игровую программу KAWAI2 от китайских разработчиков Chen Program Study, которая «в народе» получила название «Покемоны». Суть игры заключается в нахождении пар, до которых возможно пройти по свободным клеткам линией, включающей до двух переломов. Это задание было выбрано ввиду того что игра в исходных кодах в сети Интернет не встречается, а оформление программы устраивает далеко не всех, то есть нужна замена графического интерфейса. С другой стороны решение задачи поиска пути между парными элементами, удовлетворяющее условию «не более двух переломов для соединяющей линии», возможно исключительно с помощью логики и современных языков программирования.
Для реализации учебной программы была выбрана среда программирования C++ Builder компании Embarcadero (ранее CodeGear, Borland) по двум причинам:
– C++ Builder включает в себя мощь, удобство и качество знакомой мне среды Delphi. Среда использует собственную модель классов, названную Visual Control Library и дающую более удобные инструменты для программиста, чем Visual C++ от корпорации Майкрософт со своей библиотекой MFC, которая не исключает использование «низкоуровневых» функций WinAPI. C++ Builder позволяет писать программы любой сложности гораздо быстрее;
– C++ Builder использует мощнейший язык Си++, который, на мой взгляд, имеет лишь один недостаток – отсутствие очень удобного конструктора множеств, как это сделано в Паскале: создание множеств, используя оператор диапазона «..» («две точки»), проверка вхождения элемента во множество при помощи оператора in, создание новых переменных типа «множество» из любых перечисляемых элементов оператором set. В остальном, могу смело утверждать, Си++ богаче и гибче Паскаля, что порождает и трудности при использовании этого языка даже у профессионалов.
Зададим критерии, ограничивающие функции программы и условия задачи:
– на игровом поле размером 18×11 в строках со 2 по 17 и столбцах со 2 по 10 (16×9 = 144) в случайном порядке располагаются 36 графических элементов, для каждого из которых существует по две пары (4×36 = 144);
– возможны соединения между двумя элементами линией, включающей максимально два перелома, все возможные соединения схематично показаны на рис. 1, где 0 – это простая прямая линия, 1 – угол, 2 – линия с двумя переломами, визуально похожая либо на букву «П», либо на букву «Z»:
Рисунок 1 – Схематическое представление всех возможных соединений.
– необходимо описать функцию, которая будет проверять, есть ли игровом поле пары, которые могут быть убраны (она же используется для подсказки пользователю, когда он не может найти пару);
– необходимо написать функцию, которая будет перемешивать графические элементы с учётом уже убранных пар и количества пустых ячеек;
– необходимо добавить функцию, сдвигающую элементы в различном направлении на различных уровнях в соответствии с табл. 1:
Таблица 1 –
Определение автоматического
Уровень |
Особенности (сдвиг) |
1 |
Нет сдвига |
2 |
Сдвиг к верхней границе |
3 |
Сдвиг к правой границе |
4 |
Сдвиг к нижней границе |
5 |
Сдвиг к левой границе |
6 |
Сдвиг от центра по вертикали (к верхней и нижней границам) |
7 |
Сдвиг от центра по горизонтали (к левой и правой границам) |
8 |
Сдвиг к центру по вертикали |
9 |
Сдвиг к центру по горизонтали |
10 |
Окончание игры, нет уровня |
2 Основной алгоритм программы
Для нахождения пути между парными элементами был разработан следующий алгоритм:
– выбирается либо поиск строк (рис. 2), либо поиск столбцов (рис. 3), либо оба (по очереди и по одному разу);
– из обеих позиций «1» и «2» проходим вверх и вниз (или влево и вправо для второго случая) для сокращения количества возможных соединительных линий (на обоих рисунках такие пути обозначены цифрой 100);
Рисунок 2 – Поиск строк, соединяющих столбцы 5 и 13.
Рисунок 3 – Поиск столбцов, соединяющих строки 2 и 8.
– из оставшегося числа «дорог» исключаются те, что имеют разрывы (такие обозначены «единицей»);
– из полученного множества «путей» сначала проверяется соединение прямой линией (когда одна из координат у парных элементов совпадает), затем углом (когда не совпадает ни одна из координат выбранных элементов) и только потом соединение «с двумя переломами», которое огибает препятствия, как на рис. 4.
Рисунок 4 – Программа на этапе отладки с выбранной парой.
На этом рисунке видно (последняя строка в текстовой области справа), что программа «определила» три доступные «дороги» для выбранной пары графических элементов (по «нулям»): первую, третью и пятую. Также можно проследить как этот поиск осуществлялся:
– от левого элемента просмотр «преград» был осуществлён вверх, но их не было найдено;
– от левого элемента поиск идёт вниз, и через пару ячеек была найдена «преграда», которую программа «отметила» цифрой 100;
– все ниже найденной «преграды» строки также помечаются цифрой 100;
– далее просматриваем от правого элемента вверх – ничего;
– просматриваем от правого элемента вниз, и через одну ячейку найдена преграда – ставим «единицу», потому что ещё не ясно, какая это преграда;
– затем проверяем оставшиеся строки на закрытость – определили, что таковыми являются вторая и четвёртая строки;
– последним действием сжимаем интервал до ближайших «нулей» – интервал доступных «дорог» сжимается исключением шестой строки из него;
– в итоге выбираем ближайшую доступную строку (третья, так как она первая в переборе) и рисуем соединительную линию.
В области справа также видно, что программа выполняет поиск по строкам, так как мы имеем всего 11 элементов. А в первой строке в текстовом поле справа их 18 – это уже идёт поиск столбца для перехода от одного элемента к другому.
3 Достигнутые результаты
Сравнивая написанную мною программу с оригиналом от Chen Program Study (рис. 5), можно смело заявить, что поставленные цели достигнуты. Так, например, в сюжете устранены некоторые трудности, одной из которых являлось ограничение на количество перемешиваний графических элементов на игровом поле.
Рисунок 5 – Игра KAWAI2, послужившая образом для подражания.
Дело в том, что такое действие больше зависело от случая, нежели от играющего, что несколько неверно с точки зрения аудитории, для которой эта программа написана. Офисному работнику «важно» отвлечься от забот, выбирая с помощью мышки найденные парные элементы. А получается, что он просто переключается с одной заботы на другую, и ещё больше впадает в депрессию, проигрывая в итоге. В моей же программе эта «неточность» устранена.
Также дополнительную сложность представляет отсутствие подсказки. Бывают ситуации, когда пользователю трудно найти подходящую пару, при том что играет он «на время», и опять, в результате, вместо отдыха играющий зарабатывает дополнительное напряжение. В учебной программе добавлены целых две подсказки: одна показывает доступную пару, вторая – выделяет все элементы одного рисунка (2 или 4 элемента).
В учебной программе я решил переназначить смысл учёта времени: в оригинале – время на уровень было ограничено, и по его истечению засчитывался проигрыш; я просто его считаю, как это сделано в игре «Сапёр» из стандартной поставки ОС Windows. Кто захочет ставить рекорды по времени, будет делать это самостоятельно. Игра не рассчитывалась на азарт, хотя кому-то это и необходимо.
Реализованы все
основные возможности оригинальной
программы: автоматическая проверка состояния
игрового поля на наличие «правильных»
пар, автоматическое перемешивание
графических элементов при
4 Возможное развитие программы
Как известно, предела совершенству нет. И, несмотря на кажущуюся завершённость, эта программа не является исключением из данного правила.
Во-первых, возможно дальнейшее развития сюжета, которое можно «подглядеть» у того же разработчика Chen Program Study, который в новых версиях «Покемонов» ввёл мозаичное расположение элементов на игровом поле. Также можно «усовершенствовать» и сдвиговые функции, добавив пару новых: от центра и к нему, что, несомненно, является непростой задачей.
Во-вторых, усовершенствование интерфейса можно проводить до бесконечности. На первом этапе можно увеличить качество изображений элементов, перейдя, например, к формату PNG, в котором доступны многослойность и Alpha-канал. Затем переключиться на графические библиотеки игровой индустрии OpenGL и Direct X, как это было сделано, например, в игре «Сапёр», включённой в стандартную поставку Windows Seven. На первом этапе реализовать рисование, используя сначала Direct2D, а затем уже и при помощи Direct3D для объёмного отображения игрового поля и поворота в пространстве. То есть в этом пункте вариантов так много, что их не сосчитать.
В-третьих, ускорение работы игровой программы за счёт поиска и замены медленных участков кода более быстрыми, ведь нужно отдавать отчёт, что таковые (медленные) имеются, причём в самых неожиданных местах. Работает программа, на первый взгляд, довольно «шустро», но и это не предел возможностей. Хорош лишь тот «Мастер», кто признаёт, что знает не всё и учится день ото дня.
Также для развития может не помешать переход к другой среде программирования, как то Visual C++, ведь её компилятор славится быстрым «выпускаемым» ассемблерным кодом, более оптимизированным. Можно найти и другие пути развития для данной программы, так как это зависит больше от желания и от фантазии.
Список использованной литературы
1. Архангельский А. Я. Программирование в C++ Builder. 7-е изд. – М.: ООО «Бином-Пресс», 2010.
2. Вальпа О. Д. Borland C++ Builder. Экспресс-курс. – СПб.: БХВ-Петербург, 2006.
3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд. / Пер. с англ. – М.; СПб.: "Издательство БИНОМ" –"Невский диалект", 1998.
4. Дейтел Х. М., Дейтел П. Дж. Как программировать на C++: Пятое издание. Пер. с англ. – М.: ООО «Бином-Пресс», 2008.
5. Саттер Герб, Александреску Андрей. Стандарты программирования на C++. Пер. с англ. – М.: Издательский дом «Вильямс», 2005.
Информация о работе Контрольная работа по "Объектно-ориентированным языкам программирования"