Разработка игрового приложения "Лабиринт"

Описание процесса проектирования и разработки игрового приложения "Лабиринт", которое представляет собой игру, написанную на языке Java с использованием стандартных библиотек Java и интегрированной среды разработки Eclipse. Графический интерфейс.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.11.2018
Размер файла 4,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Введение

Данная работа освещает процесс проектирования и разработки приложения «Лабиринт. Приложение представляет собой игру, написанную на языке Java с использованием стандартных библиотек Java и интегрированной среды разработки Eclipse.

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

Целью курсовой работы является проектирование и разработка игрового приложения «Лабиринт» с помощью средств стандартных библиотек Java. игровой приложение графический интерфейс

Достижение поставленной цели сопряжено с выполнением ряда задач:

* Изучение интегрированной среды разработки Eclipse;

* Проектирование графического интерфейса приложения;

* Проектирование архитектуры приложения;

* Разработка приложения.

1. Описание предметной области

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

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

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

Условно все игры можно разделить на три группы:

Игры информации. Игрок в них исследуют окружающий мир, общается и получает информацию. В таких играх может быть: как линейный сюжет без какой-либо вариативности, так и открытый мир, полная свобода действий и отсутствие строгого сценария. Хорошим примером такого рода игр служат ролевые игры или так называемые «RPG».

Игры действия. Игрок перемещается по игровому пространству и используют различные предметы. Основой таких игр является управление телом персонажа или техническим средством. В качестве примера игр этой группы можно назвать видеоигры жанра «Action», благодаря которым улучшается скорость реакции. Игры данного типа разделяются на «аркадные» (с простым управлением) и «симуляторные» (со сложным управлением и приближением к реальности).

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

Всего можно выделить 15 основных видеоигровых жанров и представить их как шестигранник, каждая грань которого разделена на три части. Три незадействованных части шестигранника называются «антиигровыми элементами».

Антиигровые элементы:

Обыденность. Этот элемент располагается на стыке «игр контроля» и «игр действия» и является полной противоположностью «игр информации». Характерными особенностями подобных игр являются полное отсутствие сюжета и имитация реальных процессов.

Скучность. Элемент находится на стыке стратегий и ролевых игр и представляет собой противоположность играм жанра «Action». Играм данного элемента присуща общая схематичность, а также отсутствие зрелищности и реалистичности. Игрок подчиняется придуманному разработчиками сценарию и выполняет чужие цели.

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

Стоит также немного рассказать о ролевых играх. Компьютерные ролевые игры (CRPG) - это игры, основанные на правилах и особенностях классических настольных ролевых игр. В большинстве CRPG у персонажей есть свои числовые параметры: жизни или хит-поинты (hit-points), атака, защита, уровень и т.д. Некоторые элементы CRPG встречаются во многих современных видеоиграх различных жанров, будь то стратегии реального времени, платформеры или шутеры от первого или третьего лица.

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

Устаревшие CRPG и MUD-игры со временем эволюционировали в онлайновые MMORPG. Этому способствовало развитие компьютерной техники, которое привело к появлению графических игр.

Появление полноценных видеоигр в 1980-ых гг. окончательно убедило людей в том, что игры являются наглядным примером эволюции компьютерных технологий. С массовым распространением Интернета в конце 1990-ых гг. у видеоигр появились новые цели и задачи. Глобальная сеть выступает в роли средства коммуникации между пользователями, что позволяет им взаимодействовать между собой и выбирать понравившийся контент. Онлайновые игры становятся своеобразными измерениями, где абсолютно разные люди могут пообщаться друг с другом, посоревноваться или просто совместно провести время. Также современные видеоигры становятся одним из самых популярных способов электронной коммерции на просторах Интернета.

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

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

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

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

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

Понятие компьютерной игры чаще всего вызывает ассоциации с оружием и монстрами. Следующей мыслью в этой цепочке чаще всего бывает «Есть и другие игры». Однако стереотип уже создан: выражения «играть в компьютер» или «компьютерная игра» чаще всего определяют лишь небольшую часть этих самых игр. Игры такого типа принято называть шуте-рами (от англ. Shooter). Несмотря на огромное множество визуальных образов, используемых в различных шутерах, абсолютное их большинство концептуально чески ничем ни отличается друг от друга. Десять лет назад технологические средства не давали возможности реалистично изобразить блики, волны на воде, сложное освещение и дым. В наши дни все это является стандартным набором инструментов при разработке компьютерной игры. Технологический прогресс двигается стремительно, однако игроки вынуждены вновь ставить себя в шаблонную ситуацию: главный герой - волк-одиночка, который в сложной и незнакомой ему местности стреляет по врагам.

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

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

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

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

Люди проявляют интерес к чужой смерти. Повышенное внимание к насильственной смерти живого существа, к борьбе за выживание, использовалось в качестве рычага управления общественной культурой еще в древнем Риме. Так, в 82 году был воздвигнут Римский Колизей - именно повышенное внимание общества к теме смерти стало стимулом к постройке этого дорогого и сложного каменного сооружения.

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

Раньше большинство западных психологов и философов считали, что нормальный человек представляет смерть и рождение как уникальные события в своей жизни. Популярность таких компьютерных игр, как «shooter» говорит о том, что современный человек легко и комфортно принимает концепцию множества смертей и рождений одной личности.

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

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

Попытки создать Многопользовательские Интерактивные Виртуальные Среды предпринимались и раньше, но широкого распространения не получили. Возможно, это объясняется тем, что пропускная способность информационных сетей не позволила создать эффект присутствия на приемлемом для игрока уровне и правила игры были недостаточно разработаны.

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

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

2. Постановка задачи

Целью курсовой работы является проектирование и разработка игрового приложения «Лабиринт». Концепция приложения подразумевает простой графический интерфейс и низкие требования к вычислительной мощности ЭВМ.

Основными требованиями к игре являются:

* Наличие в игре нескольких уровней сложности;

* Возможность выбирать уровень перед началом игры;

* Возможность добавлять в игру новые уровни.

3. Используемые средства разработки

3.1 Java

Одним из наиболее значимых прорывов в области программирования стали появления языка разметки гипертекста - HTML, и, позднее, языка программирования Java. Эти события ознаменовали начало новой эпохи развития всемирной сети интернет и появления серверных технологий.

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

Прежде всего язык Java нашел широкое применение и обрел популярность на заре развития мировой сети интернет благодаря технологии апплетов, которые представляли собой простые в реализации кроссплатформенные приложения, которые можно легко встраивать в HTML страницы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.2 Eclipse

Eclipse - интегрированная среда разработки с открытым исходным кодом. Является одним из наиболее популярных инструментов разработки приложений на языке Java.

На рынке Eclipse появилась в качестве коммерческого проекта, однако в 2001 году исходный код программы был опубликован. Позднее компания-разработчик Eclipse, ObjectTechnologyInternational, была приобретена компанией IBM. На сегодняшний день количество скачиваний Eclipse превышает 50 миллионов по всему миру. За поддержку и разработку Eclipse отвечает сообщество Eclipse и организация Eclipsefoundation.

Инструменты Eclipse включают в себя: текстовый редактор кода приложений, инструменты для интеграции проекта с системой сборки Ant, инструменты отладки. Существует также огромное количество различных плагинов и дополнений, распространяемых свободно.

3.3 Adobe photoshop

Photoshop - популярная компьютерная программа, предназначенная для редактирования графических файлов. Разработкой и распространением программы занимается корпорация Adobe, и её отделение AdobeSystems. Основная функциональность Photoshop связана с редактированием растровой графики, также имеется ряд инструментов для работы с векторными изображениями. Программа Photoshop является наиболее популярным инструментом среди профессиональных графических редакторов.

Photoshop тесно связан с другими программами для обработки медиафайлов, анимации и другого творчества. Совместно с такими программами, как Adobe ImageReady, Adobe Illustrator, Adobe Premiere, Adobe After Effects и Adobe Encore, он может использоваться для создания профессиональных DVD, обеспечивает средства нелинейного монтажа и создания таких спецэффектов, как фоны, спрайты и т. д. для телевидения, кинематографа и всемирной паутины. Photoshop также прижился в кругах разработчиков компьютерных игр.

4. Структура приложения

Проектируемое приложение состоит из 6 классов Java. Запуск приложения осуществляется вызовом метода main класса Maze.

Класс Maze предназначен для запуска приложения, а также загрузки карты при передаче строкового представления её имени в конструктор класса. Загрузка карты производится в методе loadMap. При возникновении ошибки в процессе загрузки метод выбрасывает объект Exception с сообщением о невозможности загрузить файл карты.

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

Класс Tile представляет собой сущность квадрата - элемента карты лабиринта, и имеет два состояния, которые соответствуют понятиям «стена» и «проход». Полями класса являются его координаты на карте лабиринта. Метод setWall предназначен для установки значения сотсояния квадрата на карте.

Класс Player соответствует понятию «Игрок» в пространстве задачи курсового проекта. Объект класса Player используется в алгоритме работы класса Maze.Полями класса Player являются координаты, соответствующие актуальному положению игрока на карте лабиринта. Движение квадрата по карте осуществляется вызовом методов moveLeft, moveRight, moveUp, moveDown для движения влево, вправо, наверх и вниз соответственно.

Класс MazeMapMaker представляет собой экран создания новой карты лабиринта. Класс содержит методы getMapList для получения списка карт в меню выбора карты, getLevelChoice для получения результата выбора уровня игроком, saveMap и loadMap для сохранения новой карты и загрузки существующей карты соответственно.

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

5. Описание работы контрольного примера

При запуске приложения на экране появляется окно главного меню с кнопками «Играть», «Конструктор», выпадающим меню выбора уровня и кнопкой «Выход» (Рисунок 1).

Рисунок 1 - главное меню приложения

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

Рисунок 2 - выпадающее меню выбора уровня

При нажатии на кнопку «Играть» пользователь перенаправляется на окно с картой лабиринта, в левой части которого расположен вход в него, а в правой - выход. Цель игры - преодолеть расстояние от входа до выхода, управляя квадратом, который в начале игры находится в левой части карты (Рисунок 3).

Рисунок 3 - окно игры

При достижении конца уровня на экране отображается сообщение о конце игры с поздравлением (Рисунок 4).

Рисунок 4 - сообщение о прохождении уровня

В меню редактора уровней карта лабиринта размечена сеткой, а её элементы реагируют на нажатие кнопками мыши, изменяя свое состояние (Рисунок 5).

Рисунок 5 - окно редактора уровней

По окончании редактирования новый уровень становится доступным для прохождения в режиме игры (рисунок 6).

Рисунок 6 - прохождение нового уровня

Заключение

Цель работы заключалась в проектировании и разработке игрового приложения «Лабиринт». Для достижения поставленной цели были выполнены следующие задачи:

* Изучение интегрированной среды разработки Eclipse;

* Проектирование графического интерфейса приложения;

* Проектирование архитектуры приложения;

* Разработка приложения.

Описание работы разработанного приложения в качестве контрольного примера описано в разделе 5. Разработанное приложения представляет собой директорию проекта для среды разработки Eclipse с возможностью открыть и использовать её любыми другими средствами обработки информации. В процессе выполнения работы были получены навыки в сфере применения инструментов Java, освоены навыки работы с IDEEclipse.

Задачи курсовой работы выполнены, цель работы можно считать достигнутой.

Список литературы

1. Рублев В.С. под ред. В. А. Соколова Основы теории алгоритмов: учебное пособие. -М.: "Научный мир" 2008г.

2. Макгрегор, Дж. Тестирование объектно-ориентированного программного обеспечения/ Дж. Макгрегор, С. Дэвид. - К.: ООО “ТИД ДС”, 2002. - 432 с.: ил.

3. Машнин, Т.С. Web-сервисы Java. Профессиональное программирование / Т.С. Машнин. - СПб.: BHV, 2012. - 560 c.

4. Бройдо В. Л. Вычислительные системы, сети и телекоммуникации : учеб. пособие для вузов / В. Л. Бройдо, О. П. Ильина .- 4-е изд.- СПб. : Питер, 2008, 2011

5. Одинцов, И. Профессиональное программирование. Системный подход / И. Одинцов. - СПб.: BHV, 2004. - 624 c.

6. Давыдов, С. IntelliJ IDEA. Профессиональное программирование на Java / С. Давыдов. - СПб.: BHV, 2005. - 800 c.

7. Паронджанов В.Д. Учись писать, читать и понимать алгоритмы. Алгоритмы для правильного мышления. Основы алгоритмизации. "ДМК Пресс" , 2012г.

8. Кубенский А.А. Структуры и алгоритмы обработки данных. Уч.пос. "БХВ-Петербург" 2004г.

9. Липаев, В. В. Методы обеспечения качества крупномасштабных программных средств / В. В. Липаев. - М.: СИНТЕГ, 2003. - 520 с.: ил.

10. Истомин, Е. П. Высокоуровневые методы информатики и программирования / Е. П. Истомин, В. В. Новиков, М. В.Новикова. - СПб.: ООО "Адреевский издательский дом", 2006 г. - 228 с.: ил.

11. Назаров С. В. Операционные среды, системы и оболочки. Основы структурной и функциональной организации / С. В. Назаров .- М. : КУДИЦ-ПРЕСС, 2007

Приложение

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1. ВВЕДЕНИЕ

Техническое задание предназначено для проектирования и разработки компьютерной игры «Лабиринт».

2. ОСНОВАНИЕ ДЛЯ РАЗРАБОТКИ

Основанием для разработки является наличие курсовой работы по дисциплине «Технология программирования» в рабочем учебном плане подготовки бакалавров по направлению 09.03.01 Информатика и вычислительная техника.

3. НАЗНАЧЕНИЕ

Игра «Лабиринт» предназначена для свободного распространения, использования и изучения исходного кода с целью получения навыков в программировании на языке Java.

4. ТРЕБОВАНИЯ К ПРОГРАММЕ ИЛИ ПРОГРАММНОМУ ИЗДЕЛИЮ

4.1.Требования к функциональным характеристикам

4.1.1. Программа должна обеспечивать возможность выполнения следующих функций:

* Открытие диалогового окна при запуске программы;

* Вывод логотипа игры в главном окне программы;

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

* Перенаправление на окно с картой лабиринта при нажатии кнопки «Играть»;

* Перенаправление на окно с редактируемой картой лабиринта при нажатии кнопки «Конструктор»;

* Индикация сообщения о прохождении уровня при достижении игроком конца лабиринта.

4.2. Требования к надежности

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

4.3. Требования к составу и параметрам технических средств

4.3.1. Система должна работать на IBM совместимых персональных компьютерах.

4.3.2. Минимальная конфигурация:

- тип процессораPentium-100;

- объем оперативного запоминающего устройства 256 Мб;

- тип монитораSVGA (15").

4.4. Требования к информационной и программной совместимости

4.4.1 Приложение должно работать под управлением операционной системы Windows 98 и выше;

4.4.2 На компьютере должна быть установлена виртуальная машина Java

public class MainMenu {

JFrame Menu = new JFrame("Лабиринт");

JButton Start = new JButton("Играть");

JButton Exit = new JButton("Выход");

JButton MapMaker = new JButton("Конструкторуровня");

ImageIcon picture = new ImageIcon("res/Images/MazePicture.png");

JLabel imageLabel = new JLabel(picture);

ArrayList<String> mapList = new ArrayList<String>();

JComboBox<String> lvlList;

int menuWidth = 100; //Width of each button/item on display

int menuHeight = 30;//Height of each button/item on display

int menuY = 460; //Button/item location on display

int WIDTH = 490;

int HEIGHT = 530;

public MainMenu() {

getMapList();

lvlList = new JComboBox<String>(mapList.toArray(new String[mapList.size()]));

Menu.setResizable(false);

Menu.setSize(WIDTH, HEIGHT);

Menu.setLayout(null);

Menu.setLocationRelativeTo(null);

Menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Start.setSize(menuWidth,menuHeight);

Start.setLocation(10, menuY);

Menu.add(Start);

Start.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent arg0) {

new Maze(lvlList.getSelectedItem().toString());

Menu.setVisible(false);

}

});

MapMaker.setSize(menuWidth,menuHeight);

MapMaker.setLocation(120, menuY);

Menu.add(MapMaker);

MapMaker.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e) {

new MazeMapMaker();

Menu.setVisible(false);

}

});

lvlList.setSize(menuWidth+35, menuHeight);

lvlList.setLocation(230, menuY);

Menu.add(lvlList);

//Exit Button Variables

Exit.setSize(menuWidth,menuHeight);

Exit.setLocation(375,menuY);

Menu.add(Exit);

Exit.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

imageLabel.setBounds((WIDTH-412)/2, 25, 412, 412);

imageLabel.setVisible(true);

Menu.add(imageLabel);

Menu.setVisible(true);

}

static boolean levelsExistAlready = false;

public void getMapList(){

for(int i = 0; i < 99; i++){

File map = new File("./Level "+i+".map");

if(map.exists()){

System.out.println("Level "+i+" exists");

mapList.add("Level "+i+".map");

levelsExistAlready = true;

}

}

}

}

public class MapMakerTile extends JPanel{

int x, y;

public MapMakerTile(int x, int y){

this.x = x;

this.y = y;

addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e) {

if(e.getButton() == MouseEvent.BUTTON1){

setBackground(Color.WHITE);

MazeMapMaker.map[x][y] = 1;

}

if(e.getButton() == MouseEvent.BUTTON3){

setBackground(Color.GRAY);

MazeMapMaker.map[x][y] = 0;

}

}

});

}

}

public class Maze extends JFrame{

public static int rows = 20;

public static int columns = 20;

public static int panelSize = 25;

public static int map[][] = new int[columns][rows];

public static int endLevelLoc;

Player p;

public Maze(String str){

loadMap(str);

this.setResizable(false);

this.setSize((columns*panelSize)+50, (rows*panelSize)+70);

this.setTitle("Лабиринт");

this.setLayout(null);

this.addKeyListener(new KeyListener(){

@Override

public void keyPressed(KeyEvent e) {

int key = e.getKeyCode();

revalidate();

repaint();

//Player movement

if(key == KeyEvent.VK_W){

p.moveUp();

}

if(key == KeyEvent.VK_A){

p.moveLeft();

}

if(key == KeyEvent.VK_S){

p.moveDown();

}

if(key == KeyEvent.VK_D){

p.moveRight();

}

if(p.x == columns-1 && p.y == endLevelLoc){

JOptionPane.showMessageDialog(null, "Поздравляю, вы прошли уровень!", "Конец игры", JOptionPane.INFORMATION_MESSAGE);

dispose();

new MainMenu();

}

}

@Override

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

}

});

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

this.setLocationRelativeTo(null);

p = new Player();

p.setVisible(true);

this.add(p);

for(int y = 0; y < columns; y++){

for(int x = 0; x < rows; x++){

Tile tile = new Tile(x, y);

le.setSize(panelSize, panelSize);

tile.setLocation((x*panelSize)+23, (y*panelSize)+25);

if(map[x][y] == 0){

tile.setBackground(Color.GRAY);

}else{

tile.setBackground(Color.WHITE);

tile.setWall(false);

if(x == 0){

p.setLocation((x*panelSize)+23, (y*panelSize)+25);

p.y = y;

}

if(x == columns-1){

endLevelLoc = y;

}

}

tile.setVisible(true);

this.add(tile);

}

}

this.setVisible(true);

}

public static void main(String args[]){

new MainMenu();

}

public void loadMap(String str){

try{

BufferedReader br = new BufferedReader(new FileReader(str));

StringBuilder sb = new StringBuilder();

String line = br.readLine();

while (line != null) {

sb.append(line);

sb.append(System.lineSeparator());

line = br.readLine();

}

String mapStr = sb.toString();

int counter = 0;

for(int y = 0; y < columns; y++){

for(int x = 0; x < rows; x++){

String mapChar = mapStr.substring(counter, counter+1);

if(!mapChar.equals("\r\n") && !mapChar.equals("\n")&& !mapChar.equals("\r")){//If it's a number

//System.out.print(mapChar);

map[x][y] = Integer.parseInt(mapChar);

}else{//If it is a line break

x--;

System.out.print(mapChar);

}

counter++;

}

}

}catch(Exception e){

System.out.println("Невозможно загрузить существующую карту(если она существует), создав новую карту.");

}

}

}

public class MazeMapMaker extends JFrame{

static int rows = 20;

static int columns = 20;

int panelSize = 25;

static int map[][] = new int[columns][rows];

ArrayList<String> mapList = new ArrayList<String>();

int level = 0;

boolean levelsExistAlready = false;

public MazeMapMaker(){

getMapList();

getLevelChoice();

if(level != -1){

loadMap();

this.setResizable(false);

this.setSize((columns*panelSize)+50, (rows*panelSize)+70);

this.setTitle("Конструктор лабиринта");

this.setLayout(null);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {

saveMap();

new MainMenu();

}

});

this.setLocationRelativeTo(null);

for(int y = 0; y < columns; y++){

for(int x = 0; x < rows; x++){

MapMakerTile tile = new MapMakerTile(x, y);

tile.setSize(panelSize-1, panelSize-1);

tile.setLocation((x*panelSize)+23, (y*panelSize)+25);

if(map[x][y] == 0){

tile.setBackground(Color.GRAY);

}else{

tile.setBackground(Color.WHITE);

}

tile.setVisible(true);

this.add(tile);

}

}

this.setVisible(true);

}else{

new MainMenu();

}

}

public void getMapList(){

for(int i = 0; i < 99; i++){

File map = new File("./Level "+i+".map");

if(map.exists()){

System.out.println("Level "+i+" exists");

mapList.add("Level "+i+".map");

levelsExistAlready = true;

}

}

}

public void getLevelChoice(){

if(levelsExistAlready){

String maps[] = new String[99];

mapList.toArray(maps);

maps[mapList.size()] = "Новый уровень";

String choice = (String)JOptionPane.showInputDialog(null, "На каком уровне вы хотели бы играть?", "Выбор Уровня Лабиринта", JOptionPane.QUESTION_MESSAGE, null, maps, maps[0]);

System.out.println(choice);

if(choice != null && !choice.equals("Новый уровень")){

level = Integer.parseInt((choice.replace("Level ", "").replace(".map", "")));

}else if(choice == null){

level = -1;

}else{

level = mapList.size();

}

}

}

public void saveMap(){

try{

PrintWriter writer = new PrintWriter("Level "+level+".map", "UTF-8");

for(int y = 0; y < columns; y++){

for(int x = 0; x < rows; x++){

writer.print(map[x][y]);

}

writer.print("\r\n");

}

writer.close();

}catch(Exception e){

e.printStackTrace();

}

}

public void loadMap(){

try{

BufferedReader br = new BufferedReader(new FileReader("Level "+level+".map"));

StringBuilder sb = new StringBuilder();

String line = br.readLine();

while (line != null) {

sb.append(line);

sb.append(System.lineSeparator());

line = br.readLine();

}

String mapStr = sb.toString();

int counter = 0;

for(int y = 0; y < columns; y++){

for(int x = 0; x < rows; x++){

String mapChar = mapStr.substring(counter, counter+1);

if(!mapChar.equals("\r\n") && !mapChar.equals("\n")&& !mapChar.equals("\r")){//If it's a number

map[x][y] = Integer.parseInt(mapChar);

}else{//If it is a line break

x--;

}

counter++;

}

}

}catch(Exception e){

System.out.println("Невозможно загрузить существующую карту(если она существует), создав новую карту.");

for(int y = 0; y < columns; y++){

for(int x = 0; x < rows; x++){

map[x][y] = 0;

}

}

}

}

}

public class Player extends JPanel{

int x, y;

public Player() {

this.setBackground(Color.getHSBColor(0.3f, 0.3f, 1));

this.setSize(Maze.panelSize, Maze.panelSize);

}

public void moveLeft() {

if(x > 0 && Maze.map[x-1][y] == 1){

this.setLocation(this.getX()-25, this.getY());

x--;

}

}

public void moveRight() {

if(x < Maze.columns-1 && Maze.map[x+1][y] == 1){

this.setLocation(this.getX()+25, this.getY());

x++;

}

}

public void moveUp() {

if(y > 0 && Maze.map[x][y-1] == 1){

this.setLocation(this.getX(), this.getY()-25);

y--;

}

}

public void moveDown() {

if(y < Maze.rows-1 && Maze.map[x][y+1] == 1){

this.setLocation(this.getX(), this.getY()+25);

y++;

}

}

}

public class Tile extends JPanel{

int x, y;

boolean isWall = true;

public Tile(int x, int y){

this.x = x;

this.y = y;

}

public void setWall(boolean isWall){

this.isWall = isWall;

}

}

Размещено на Allbest.ru

...

Подобные документы

  • Рассмотрение игр, схожих по жанру и модели распространения с разрабатываемым приложением. Выбор среды разработки и сторонних библиотек. Проектирование интерфейса и подготовка графических материалов приложения. Особенности введения в игру микротрансакций.

    дипломная работа [3,1 M], добавлен 18.11.2017

  • Описание и установка интегрированной среды разработки Eclipse. Описание языка Java. Описание классов и методов, пакетов, использованных в программе, сервера и клиента. Разработка руководства пользователя для клиента и сервера. Пример работы чата.

    курсовая работа [443,5 K], добавлен 18.05.2015

  • Java Runtime Environment - минимальная реализация виртуальной машины, необходимая для исполнения приложений, без компилятора и других средств разработки. Компиляция исходного кода через командную строку. Основные моменты создания игрового 2d-приложения.

    курсовая работа [2,1 M], добавлен 26.04.2014

  • Разработка тестирующего приложения, которое будет наглядно показывать, как должна выглядеть тестирующая программа для вычисления уровня интеллекта. Программная среда разработки, характеристика основных возможностей приложения. Стандартные диалоговые окна.

    курсовая работа [716,9 K], добавлен 02.12.2013

  • Основные принципы написания оконных приложений с графическим интерфейсом на языке Java в среде Eclipse. Управление компоновками компонентов: показ диалоговых окон, вывод графической информации. Структура приложения и размещение элементов интерфейса.

    лабораторная работа [1,1 M], добавлен 01.05.2014

  • Назначение и возможности разработанного приложения для контроля активности сетевых и периферийных устройств предприятия. Язык программирования Java. Распределенные многоуровневые приложения. Структура базы данных, интерфейс разработанного приложения.

    курсовая работа [1,0 M], добавлен 16.12.2012

  • Архитектура Java и Java RMI, их основные свойства, базовая система и элементы. Безопасность и виртуальная Java-машина. Интерфейс Java API. Пример использования приложения RMI. Работа с программой "Calculator". Универсальность, портативность платформ.

    курсовая работа [208,6 K], добавлен 03.12.2013

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Принципы написания консольных приложений на языке Java в среде Eclipse. Составление программы завтрака на основе списка продуктов, передаваемых в качестве параметров в командной строке. Создание пакета для классов, интерфейса, базового класса иерархии.

    лабораторная работа [1,2 M], добавлен 01.05.2014

  • Преимущества операционной системы Android. Проектирование интерфейса приложений. Визуальные редакторы и средства кроссплатформенной разработки. Оптимизация игрового процесса, выбор фреймворка и библиотек. Классификация и характеристика игр по жанрам.

    дипломная работа [2,6 M], добавлен 10.07.2017

  • Изучение существующих подходов к использованию компьютерных игр в образовательном процессе. Разработка и реализация проекта игрового обучающего приложения на мобильной платформе. Выбор платформы и средств реализации игрового обучающего приложения.

    дипломная работа [3,4 M], добавлен 12.08.2017

  • Разработка технологии и средств реализации Java-приложения, сокращающих трудоемкость создания и гибкость модификации интерфейса пользователя. Использование XML-документов для описания внешнего представления, элементов управления и событий экранных форм.

    дипломная работа [2,8 M], добавлен 19.08.2011

  • Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.

    курсовая работа [12,4 K], добавлен 18.06.2008

  • Описание языков программирования Java и JavaFX. Среда разработки NetBeans и класс численных методов. Архитектура и принцип работы апплета с понятным пользовательским интерфейсом. Разработка алгоритма программы на примере модели межвидовой конкуренции.

    курсовая работа [1023,2 K], добавлен 19.09.2012

  • Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.

    дипломная работа [1,0 M], добавлен 11.07.2014

  • Размещение элементов графического интерфейса, обработка событий в нем. Написание программы "Домино", результатом работы которой будет графический интерфейс, реализующий одноименную настольную игру. Объектная декомпозиция классов. Текст программы.

    курсовая работа [404,3 K], добавлен 13.10.2014

  • Кратка историческая справка развития языка Java. Анализ предметной области. Java platform, enterprise and standart edition. Апплеты, сервлеты, gui-приложения. Розработка программного кода, консольное приложение. Результаты работы апплета, сервлета.

    курсовая работа [549,2 K], добавлен 23.12.2015

  • Расширяемый язык разметки XML. Описание типа документа DTD. Значение XML и платформы Java. Обзор стандартных анализаторов DOM и SAX. Технология Java Servlet, Java Server Pages (JSP), JavaBeans. Общая функциональность программного продукта. Модель данных.

    курсовая работа [422,0 K], добавлен 21.02.2009

  • Анализ возможных подходов к созданию web-приложения с использованием программирования Java и CGI. Разработка структуры базы данных и реализация полученной модели в рамках СУБД. Обеспечение диалога CGI-программы с пользователем, используя браузер.

    курсовая работа [310,9 K], добавлен 07.08.2011

  • Разработка логической схемы базы данных автомобилестроительного предприятия. Инфологическое моделирование системы. Создание графического интерфейса пользователя для базы данных средствами языка программирования Java. Тестирование программных средств.

    курсовая работа [2,3 M], добавлен 16.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.