Контрольная работа по "Объектно-ориентированным языкам программирования"

Автор работы: Пользователь скрыл имя, 27 Мая 2013 в 15:12, контрольная работа

Описание работы

У офисных работников часто можно встретить игровую программу KAWAI2 от китайских разработчиков Chen Program Study, которая «в народе» получила название «Покемоны». Суть игры заключается в нахождении пар, до которых возможно пройти по свободным клеткам линией, включающей до двух переломов. Это задание было выбрано ввиду того что игра в исходных кодах в сети Интернет не встречается, а оформление программы устраивает далеко не всех, то есть нужна замена графического интерфейса. С другой стороны решение задачи поиска пути между парными элементами, удовлетворяющее условию «не более двух переломов для соединяющей линии», возможно исключительно с помощью логики и современных языков программирования.

Содержание работы

1 Постановка задачи 3

2 Основной алгоритм программы 5

3 Достигнутые результаты 7

4 Возможное развитие программы 8

Список использованной литературы 10

Файлы: 1 файл

оояп 8.doc

— 486.00 Кб (Скачать файл)

Федеральное агентство  по образованию

Государственное образовательное учреждение  
высшего профессионального образования 
«Тихоокеанский государственный университет»

Кафедра «Экономической кибернетики»

 

 

 

КОНТРОЛЬНАЯ РАБОТА

по дисциплине

«Объектно-ориентированные языки программирования»

 

Вариант № 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.

 

 


Информация о работе Контрольная работа по "Объектно-ориентированным языкам программирования"