Разработка компьютерной игры на языке Java
Создание экшн-игры в космосе в жанре двухмерных игр, изучение особенностей отображения графики средствами JavaFX в языке Java. Система взаимодействий объектов в виртуальном двумерном пространстве. Создание иерархической структуры игровых классов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.08.2018 |
Размер файла | 5,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Федеральное агентство связи
Федеральное государственное бюджетное образовательное учреждение высшего образования «Поволжский государственный университет телекоммуникаций и информатики»
Факультет Информационных систем и технологий
Направление (специальность) Информационные системы и технологии
Кафедра Информационных систем и технологий
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
(БАКАЛАВРСКАЯ РАБОТА)
Разработка компьютерной игры на языке Java
Разработал М.В. Воронин
Введение
Разработка игр является актуальной проблемой в современном обществе, так как хороших игр выходит недостаточно много для удовлетворения потребностей покупателей. Значимость данной разработки заключается в инновационном взгляде на двухмерные игры в космосе. Мотив разработки заключается в попытке провести революцию в жанре космических экшн-игр. Целью разработки является создание экшн-игры в космосе, для революции в жанре двухмерных игр. Задачей является изучение особенностей отображения графики средствами JavaFX в языке Java.
Эта дипломная работа посвящена разработке двумерной игры на языке программирования JAVA. Данная игра будет разработана без использования сторонних библиотек, а также без использования игровых движков.
Основная цель разработать уникальную систему взаимодействий объектов в виртуальном двумерном пространстве. На данный момент двумерные игры можно создавать с помощью бесплатных игровых движков, но функционал таких движков ограничен.
Для достижения цели будут изучены предметные литература и область на основе некоторых графических приложений на языке JAVA. Далее будет построена иерархическая модель объектов, а после реализована в виде алгоритма на языке JAVA.
Данная игра создается с целью обучения, возможно использование проекта в собственных коммерческих целях на крупных игровых площадках: Steam, GOG, Uplay.
Процесс разработки заключается в создании иерархической структуры игровых классов, создание графического контента средствами графических редакторов, а также создание кода программы.
Разработка будет проводиться с использованием JDK 1.8 в среде разработке IntelliJIDEA. Графический контент будет разработан средствами Photoshop с использованием графического планшета.
Компьютерные игры делаются с учетом активного взаимодействия с пользователем. В виртуальной сцене находится множество видимых и невидимых объектов одновременно, задача программиста перемещать эти объекты тем самым влияя на игровой процесс. Цель игры создавать препятствия игроку, которые он вынужден решать, реагируя на события, происходящие в игровой вселенной. Любое его решение может породить цепь событий, которые приведут к победе или поражению игрока.
Цель дипломной работы - разработать кооперативную (мультиплеерную) игру в которой будет взаимодействие игроков между собой, а также с игровым окружением. Необходимо создать масштабируемый игровой движок.
Для достижения цели необходимо изучить язык программирования, а также исследовать предметную область «Геймдева».
Пояснительная записка к дипломной работе состоит из введения, четырех разделов, заключения, списка использованных источников и приложений. В первом разделе выполняется постановка задачи, формулируются требования к создаваемому программному обеспечению, выполняются анализ игр. Приводятся их классификация.
Во втором разделе описывается язык JAVA и его спецификации, плюсы и минусы разработки игр на нем.
В третьем разделе рассматривается процесс разработки, тонкости просчета углов, высчитывание координат, просчет столкновений моделей, а также приводится краткое описание хронологии разработки.
В четвёртом приведены результаты работы созданной программы, а также приводится описание игрового процесса.
Заключение содержит обобщённые результаты дипломной работы, выводы по работе и рекомендации по использованию её результатов.
1. Анализ предметной области
1.1 Основные понятия компьютерной игры
Компьютерная игра - это программное обеспечение, направленное на получение игрового опыта. Игра это некое приложение, которое обрабатывает вводимую информацию и реализует ее обработку, тем самым создавая необходимость разрешать игровые ситуации в игровой форме. Для взаимодействия с игрой используют разные контроллеры, например: геймпад, руль, графический планшет, клавиатура, мышь и т.д.
Компьютерные игры используются в целях развлечения и активно используются для получения прибыли. Игры могут быть разных видов: настольные игры, видео новеллы, шутеры, стратегии, головоломки, аркады и другие. Во многих странах мира игры стоят во главе досуга, а в некоторых странах считаются национальным спортом и даже профессией. Также нередко использование игр в качестве тренажеров для профессиональных целей, например в гражданской и военной авиации, в обучении вождению и т.д.
1.2 Развитие
Компьютерные игры появились в начале 20 века и сразу же начали завоевывать популярность в мире. По играм стали выходить книги, снимать фильмы. Появились первые журналы, которые занимались обзором игр, а также телевизионные передачи, которые занимались аналогичными вещами. Пик роста игровой популярности пришелся на конец 20 века, когда крупная студия Blizzard выпустила ряд революционных игр: Starcraft, Warcraft, Diablo. Однако зарождение игр было гораздо раньше 20 века.
1.2.1 50-е годы
Баэр, Дуглас, Хигинботем стали первыми людьми, которые начали развивать игровую тематик. Именно они разработали концепцию игрового интерактивного телевидения и создали две самые знаменитые игры для всего мира: теннис, крестики-нолики.
1.2.2 60-е годы
DigitalEquipmentCorporation были первыми, кто совершил революцию в игровой индустрии. Этой студии разработчиков удалось создать космическую аркадную игру, где корабль перемещался и стрелял в 2D плоскости. Игра стала культовой, до сих пор выходят клоны данной игры. В дальнейшем эта студия произведет множество революций в других областях IT.
Рис. 1.1 - Игра Colossal Cave Adventure
1.2.3 70-е годы
В семидесятых годах появились компьютерные мыши, что открыло новые возможности для игроков и разработчиков игр, также появились первые консоли. В эти времена выходит эпохальная игра - ColossalCaveAdventure, которая подталкивает игровое сообщество к очередному рывку в игровых технологиях. В конце семидесятых игры становятся частью поп-культуры, игровые автоматы появляются во многих игровых заведениях, а играть становиться модным увлечением, которому придается все больше и больше людей по всему свету.
Рис. 1.2 - Pac-man
1.2.4 80-е годы
В эти времена происходит финальное укрепление компьютерных игр в мировом сообществе. Это связанно с сильным падением цен на персональные компьютеры, а также из-за резкого падения цен на них. В эти года появились первые компании специализирующиеся только на разработке компьютерных игр. Одна из таких команд (Namco) выпустила игру, которая популярна по сей день - Pacman. В данной игре необходимо путешествовать по лабиринту, избегая врагов, которые были в виде призраков, так как при прикосновении враги убивали игрока. До сих пор по данной игре проводят ежегодные турниры с денежными призами.
В конце восьмидесятых происходит очередной скачок технологий, появляются графические видеокарты, которые позволяют отображать до 256 цветов на экране, а не 16, как это было ранее в компьютерных играх и на консолях.
1.2.5 90-е годы
В девяностые игровая индустрия продолжила развиваться стремительными темпами. IdSoftware, которая успешно работает до сих пор, в 1993 году завершила разработку игры в новом жанре - шутер. Игра получила название - «DOOM» и стала популярной игрой на ближайшее время. Также девяностые запомнились первыми играми с возможностью игры по сети. Данная возможность оказалась революционной, а актуальность сетевых баталий стремится к 100% и по сей день.
Разработчики продолжали развивать игровые технологии и уже в середине девяностых они смогли создать первую полноценную трехмерную игру, которая дала толчок для гигантов сегодняшнего игрового мира: Quake, Diablo, Starcraft, RedAlert, TombRaider и другие.
Рис. 1.3 - Одна из первых 3D игр -DukeNukem 3D
В конце десятилетия появляются признанные всем миром игры. Первой является полностью трехмерный сюжетный шутер - “Half - Life”. Данная игра была выпущена игровым гигантом Valve. Второй игрой является стратегия от студии Blizzard - Starcraft.
Рис. 1.4 - Стратегическая игра Command & Conquer: Red Alert
1.2.6 Новое время
В настоящее время игры прочно укрепились в повседневной жизни миллионов людей, они заполнили не только компьютеры, но и телефоны. Сложно представить человека, который ни разу не играл в «Tetris», или никогда не играл в змейку на какой-либо из платформ. К сожалению, качество выходящих игр не всегда на высоте. Очень часто можно наблюдать картину, когда компания из-за жажды денег выпускает игру с большим количество ошибок, тем самым подрывая веру в игровую индустрию, собственную компанию, а также портя впечатления от прохождения игры.
Рис. 1.5 - Современная игра Crysis
Игры являются не только развлечением, но еще и двигателем прогресса, ведь они являются одной из причин стремительного роста производительности компьютеров, а также причиной для развития 3D технологий, нейронных сетей, алгоритмики.
1.3 Классификация компьютерных игр
Критерии классификации компьютерных игр могут быть различными:
- Жанр: игровой процесс задает направление жанра или совокупности нескольких жанров;
- Режим игры: может быть одиночным или многопользовательским;
- Визуализация: игры могут быть графически оформленными или обыкновенными текстовыми, трехмерными и двухмерными, и даже звуковыми (когда вместо визуализации процесса используются звуки);
- Платформозависимость: какие платформы поддерживают запуск игры. Игры могут быть и платформонезависимыми или кроссплатформенными.
- Жанр: игровой процесс задает направление жанра или совокупности нескольких жанров;
Жанровая классификация:
- Квест (англ. Quest) или приключенческая игра (англ. adventuregame) - игра, в которой хорошо продуман сюжет, в основном являющийся линейным. Основными элементами геймплея чаще всего являются разнообразные головоломки.
- Боевик или экшн (Action) - игра, основой геймплея которой являются боевые действия, драки, перестрелки, сражения, исход которых зависит от быстроты реакции игрока.
- Ролевая игра (RPG -- англ. RolePlayingGame) - игры данного жанра отличаются наличием у управляемого персонажа определенных характеристик и способностей, которые в ходе игры можно совершенствовать и улучшать. Сюда же можно отнести и многопользовательские ролевые игры (MMORPG), отличающиеся от обычных RPG отсутствием завершенного сюжета и какой-либо конечной цели. Пример: игра Gothic (серия).
- Стратегическая игра (Strategy) - основой игрового процесса данных игр является управление различными глобальными процессами и их стратегическое развитие. К примеру, развитие экономики объектов, создание и управление армией, строительство архитектурных объектов и т.д. Данный жанр имеет два режима игры: пошаговый режим или режим реального времени.
- Компьютерный симулятор (Simulator) - игра, основной целью которой является симуляция каких-либо реальных жизненных действий и их воспроизведение. К примеру, управление автомобилем или космическим судном.
1.4 Игровая терминология
Как правило, игровые термины заимствуются из иностранных языков. Основным языком для заимствования является английский. Лишь изредка можно заменить английское слово русским аналогом.
Texture - изображение, которое накладывается на плоскость в игровом пространстве. Используется для придания реалистичного вида объектам.
2D-game - игра в двухмерном пространстве, где для перемещения объектов используются координаты X,Y.
3D-game - игра в трехмерном пространстве, где для перемещения объектов используются координаты X,Y, Z.
Tile - небольшое изображение, которое используется для конструирования уровней в играх.
AutoTile- это механизм создания бесшовных карт. Используется для придания сдвоенным блокам цельный вид.
Polygon - многоугольник в пространстве, который используется для отображения моделей на экране.
Pixel - точка в графическом окне, имеющая свой цвет и координаты.
TextureFiltering - алгоритм фильтрации текстур, который сглаживает углы и убирает «лесенки» с итогового кадра игры.
Camera- точка в пространстве имеющая координаты, а также точку в которую направлен объектив камеры. Камерой также называют то, что отображается на экране.
RenderScale - масштаб прорисовки изображения. Используется для уменьшения нагрузки на платформу, а также для увеличения числа кадров там, где это необходимо.
1.5 Взаимодействие игровых объектов
Любая игра состоит из набора объектов, которые взаимодействуют между собой. Как правило, мы управляем объектом, в следствии чего происходит влияние на другие объекты. Не каждый объект может взаимодействовать с другими. Например, можно пройти сквозь куст, который никак не повлияет. Такие объекты называют декоративными. Они существуют для наполнения игрового мира. Рассмотрим игровую модель на примере игры "Dreamfall: TheLongestJourney".
В этой игре нам необходимо продвигаться по сюжету через препятствия. Необходимо решать головоломки, участвовать в боях, участвовать в диалогах, перемещаться по карте и т.д. За время игры предстоит поиграть за трех героинь, которые будут оказывать влияние на окружающий мир. Основная особенность этой игры заключается в вариативности ее прохождения. Мы можем решить одну и ту же проблему разными способами. Например, мы можем использовать скрытное перемещение и действие или использовать грубую силу, также есть возможность просто договориться. Такая вариативность усложняет разработку, но разнообразит прохождение. Как правило, в старых играх выбор способа прохождения не влияет на финал, зато в новых играх это известная практика.
В игре используется система луча. Луч отклоняется на заданный мышью угол и ищутся пересечения с объектами, если такие пересечение найдены, появляется рамка вокруг объекта, с которым найдено пересечение. Пример Raycasting:
Рис. 1.6 - Использование Raycasting
На рисунке 1.6 видно, что красный луч пересек плоскость фигуры, а значит, игре необходимо обработать событие при наведении.
Рис. 1.7 - Использование Raycasting в игре для поиска предметов
Если нажать левую кнопку мыши, произойдет взаимодействие с объектом, как следствие будет воспроизведен аудиофайл, который соответствует книге.
Рис 1.8 - Результат взаимодействия с объектом
На основе полученных наблюдений можно составить алгоритм
Рис. 1.9 - Поэтапная схема взаимодействий с объектами
Поиск пересечений с помощью луча не всегда решает проблему, иногда необходимо прибегнуть к другому приему - триггер. Пример взаимодействия с невидимым объектом:
1.6 Итог
Обобщим взаимодействия и сделаем определенные выводы на основе анализа некоторых примеров взаимодействия различных объектов в игровой среде.
Среди взаимодействующих объектов выделяются общие черты, а именно:
- Способ взаимодействия: может быть автоматическим, при нахождении объекта на сцене, по средствам RayCasting (при помощи инструментов поиска);
- Состояние объекта: устанавливает поведение объекта в определенный момент;
- Коммуникация: объекты принимают и отправляют сообщения, обмениваясь информацией между собой;
- Условие взаимодействия: установленные алгоритмы действий объектов, зависящие от определенных условий, к примеру, нажатие клавиши мыши, изменение значения переменных и т.д.);
- Событие (или действие, происходящее при помощи проверки условия и способа взаимодействия): срабатывание разных событий, зависящих от типа сообщения и влияющих на состояние объекта.
2. Язык Java
2.1 Определение
Java - объектно-ориентированный язык программирования от компании SunMicrosystems. Приложения Java всегда компилируются в специальный и безопасный байт-код, поэтому они могут работать на любой операционной системе. Виртуальной Java-машине (JVM) необходимо присутствовать на месте запуска байт-кода, иначе он просто не запустится. Официально Javaувидела свет- 23 мая 1995 года. На сегодняшний день технология Java позволяет преображать простые интернет страницы в красивые анимированные документы, а также создавать приложения, которые не зависят от операционной системы на которой они выполняются.
2.2 История создания
Команде программистов во главе с Гослингом была поставлена задача - создать систему, которую можно будет использовать повсеместно в бытовой технике.
Гослинг, будучи молодым специалистом, перешел в Sunв конце 20 века из исследовательского отдела IBM. На первой работе он работал над графическим интерфейсом NeWS. Он также участвовал в создании GOSMACS, который являлся первым графическим текстовым редактором. Эта работа (которая потом стала называться проектом "Green") продемонстрировала Гослингу и его команде, как важны для покупателя качества, как надежность, стоимость, соответствие стандартам и простота. Для простых пользователей приоритетом является простота эксплуатации и низкие цены.
Для поддержки собственной конкурентно способности на рынке бытовых товаров, компаниям необходимо понять, что процессоры всего лишь ресурс и средство достижения цели, а также необходимо придерживаться общепринятых стандартов в данной области.
Первые версии языка Java назывались Oak («дуб») и разрабатывались Гослингом для программирования бытовой электротехники. Затем он был переименован в Java и стал использоваться для создания клиентских приложений и серверного ПО, а также для десктопных приложений. Одна из версий появления имени Java: Java назван в честь одноименного кофе, любимого некоторыми программистами, поэтому на официальной эмблеме языка изображена чашка с дымящимся кофе. Также есть и другая версия происхождения имени Java, а именно, Java это сленговое имя кофе (по имени одноименного острова, где производится популярный кофе) с аллюзией на кофе-машину, как пример бытового устройства, для программирования которых изначально язык создавался.
2.3 Процесс создания
Чтобы не связывать разработку с конкретной платформой, Гослинг начал с расширения компилятора С++. Со временем, однако, он понял, что один С++, как его ни расширяй, не сможет удовлетворить все потребности. Поэтому в середине 1991 года был задуман язык Oak. (Впоследствии при поиске торговой марки его название было заменено на Java). "В конце концов, язык - это средство, а не самоцель, - поясняет Гослинг. - Мы не собирались зацикливаться на С++, а хотели разработать систему, которая позволяла бы создавать большую распределенную разнородную сеть из бытовых электронных устройств, способных взаимодействовать между собой".
В конце 1992 года, предприняв, по выражению тогдашнего инженера проекта Патрика Нотона, "огромные усилия по доработке Oak и других компонентов", коллектив проекта "Green" выпустил "*7" - устройство типа PDA, названное Гослингом "ручным пультом дистанционного управления".
"За полтора года мы сделали столько же, сколько иные большие коллективы в Sun делали за три года, - с гордостью отмечает Нотон. - Операционную систему GreenOS, язык, инструментарий, пользовательский интерфейс, новую аппаратную платформу, три заказных микросхемы... и каждый этап был связан с риском, т.к. мы использовали совершенно новые технологии". (Нотон до прихода в команду Green возглавлял проект Sun по разработке пользовательской среды OpenWindow.)
Малогабаритность устройства *7 выгодно подчеркивала компактность и эффективность кода, являвшегося ядром технологии. Этот продукт широко демонстрировался в Sun и произвел впечатление на таких важных персон, как Скотт Макнили и Билл Джой, однако его дальнейшая судьба оставалось неясной.
Гослинг считает браузер таким компонентом, который "создает рынок" для инструментальных средств, серверов и сред разработки. И во всех этих средствах язык Java играет ключевую роль. "До появления Java страница WWW фактически представляла собой листок бумаги. С появлением Java браузер задает структуру и резко расширяет возможности провайдеров содержания".
Гослинг полагает, что технология Java заставит людей переосмыслить роль вычислений клиент-сервер. "В стандартной модели вы имеете определенные базы данных, пишете пакеты клиентского ПО, взаимодействующего с ними, и создаете какой-то интерфейс". В рамках этой модели трудно создавать распределенные системы и осуществлять их модернизацию, особенно если их части имеют разное происхождение, указывает Гослинг.
Имея же такие инструментальные средства как Java и Web, вы получаете исходно организованную систему, подчеркивает он. "Если вы создаете на языке Java клиентскую часть приложения, то его запуск сводится просто к переходу на соответствующую страницу. Инсталляция тривиальна - просто поместите необходимое ПО на Web-сервер. И никаких проблем с переносом, поскольку имеется только одна версия приложения". Многие компании, по словам Гослинга, уже организуют базы данных в виде Web-страниц с использованием интерфейса CommonGatewayInterface (CGI) - специфического стандарта для работы внешних программ на сервере HTTP.
2.4 Основные особенности языка
Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) - программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.
Достоинство подобного способа выполнения программ - в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. В последнее время был внесен ряд усовершенствований, которые несколько увеличили скорость выполнения программ на Java:
? применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде;
? широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках;
? аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM);
По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и большее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.
Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы.NET компанией Microsoft.
Основные возможности:
? автоматическое управление памятью;
? расширенные возможности обработки исключительных ситуаций;
? богатый набор средств фильтрации ввода/вывода;
? набор стандартных коллекций, таких как массив
? на уровне отдельных SQL-запросов - на основе JDBC, SQLJ;
? на уровне концепции объектов, обладающих способностью к хранению в базе данных - на основе JavaDataObjects и JavaPersistence API;
? поддержка шаблонов (начиная с версии 1.5);
? параллельное выполнение программ.
2.5 Примитивные типы
В языке Java только 8 примитивных (скалярных, простых) типов: boolean, byte, char, short, int, long, float, double.
Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причем в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения, и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; для типа float - так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы.
Такая жёсткая стандартизация была необходима, чтобы сделать язык платформенно-независимым, что является одним из идеологических требований к Java и одной из причин её успеха. Тем не менее, одна небольшая проблема с платформенной независимостью всё же осталась. Некоторые процессоры используют для промежуточного хранения результатов 10-байтовые регистры или другими способами улучшают точность вычислений. Для того чтобы сделать Java максимально совместимой между разными системами, в ранних версиях любые способы повышения точности вычислений были запрещены. Однако это приводило к снижению быстродействия. Выяснилось, что ухудшение точности ради платформенной независимости мало кому нужно, тем более, если за это приходится платить замедлением работы программ. После многочисленных протестов этот запрет отменили, но добавили ключевое слово strictfp, запрещающее повышение точности.
2.6 Преобразования при математических операциях
В языке Java действуют следующие правила:
1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.
2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
4. Иначе оба операнда преобразуются к типу int.
Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++.
SunMicrosystems - американская компания, производитель программного и аппаратного обеспечения, основана в 1982 году, в период с апреля 2009 года по январь 2010 года была поглощена корпорацией Oracle. Штаб-квартира компании располагалась в Санта-Кларе, Калифорния, в Силиконовой долине. (Акроним от StanfordUniversityNetworks, при этом использовалось словесное написание - англ. Sun (Солнце) - с прописными буквами.)
Являлась одним из крупнейших производителей серверов и рабочих станций на базе RISC-процессоров SPARC собственной разработки, серверов стандартной х86-архитектуры на базе микропроцессоров Opteron (AMD) и микропроцессоров Xeon (Intel); известна как разработчик таких технологий как NFS и Java, а также поддерживает программное обеспечение с открытым исходным кодом, в частности OpenSolaris и GNU/Linux. RISC (англ. Restricted (reduced) instructionsetcomputer - компьютер с упрощённым набором команд) - архитектура процессора, в которой быстродействие увеличивается за счёт упрощения команд, чтобы их декодирование было проще, а время выполнения - короче. Также в продуктовом портфеле компании были системы хранения и программное обеспечение (операционная система Solaris и средства разработки). Производственные мощности компании располагались в городе Хиллсборо (англ. Hillsboro), штат Орегон и Линлитго (англ. Linlithgow), Шотландия.
2.7 Этапы развития языка Java
История разработки языка Java, изложенная Патриком Нотоном, соавтором браузера HotJava и нынешним вице-президентом по технологии корпорации Starwave.
Декабрь 1990 г. - Нотон отказывается от предложения перейти в компанию NeXT и начинает работу в компании Sun над проектом, получившим впоследствии название Green.
Январь 1991 г. - Совещание типа мозгового штурма по проекту Stealth (названном так Скоттом Макнили) в Аспене, в котором участвовали Билл Джой, Энди Бехтолсхейм, Уэйн Розинг, Майк Шеридан, ДжеймГослинг и Патрик Нотон.
Февраль 1991 г. - Гослинг, Шеридан и Нотон всерьез берутся за работу. Нотон занимается графической системой Aspen, Гослинг - идеями языка программирования, Шеридан - бизнес-разработкой.
Апрель 1991 г. - Переезд по новому адресу и разрыв прямого соединения с локальной сетью (и большинством других средств связи) компании Sun. Проект продолжается под названием Green.
Апрель 1991 г. - К проекту Green присоединяются Эд Фрэнк (архитектор системы SPARCstation 10), КрейгФоррест (дизайнер чипа SS10) и Крис Уорт (разработчик системы NeWS).
Май 1991 г. - Эд Фрэнк присваивает прототипу аппаратуры название *7 (или Star7; *7 - код, который было необходимо набрать в офисе SandHill, чтобы ответить на любой звонок с любого телефона).
Июнь 1991 г. - Гослинг начинает работу над интерпретатором Oak, который через несколько лет (при поисках торговой марки) переименован в Java.
Август 1991 г. - Осуществлено объединение Oak и Aspen; заработала их первая реальная программа.
Август 1991 г. - Коллектив разработчиков Green демонстрирует идеи базового пользовательского интерфейса и графическую систему сооснователям компании Sun Скотту Макнили и Биллу Джою.
Октябрь 1991 г. - Шеридан и Нотон присваивают конструкторской философии своего коллектива девиз "1st Person", который со временем становится названием компании.
Ноябрь 1991 г. - Офис проекта Green снова подключается к главной сети компании Sun линией на 56 Кбит/с
Март 1992 г. - К проекту Green присоединяется Джонатан Пейн, который позднее участвует в написании HotJava.
Лето 1992 г. - Интенсивная деятельность по доработке Oak, Green OS, пользовательского интерфейса, аппаратуры Star7 и соответствующих компонентов.
Сентябрь 1992 г. - Завершена разработка устройства Star7; оно продемонстрировано Джою и Макнили.
Октябрь 1992 г. - Из компании SunLabs переходит Уэйн Розинг, принимающий на себя руководство коллективом.
Ноябрь 1992 г. - Организована корпорация FirstPerson.
Январь 1993 г. - Коллектив переезжает в Пало Альто в здание, где раньше находилась лаборатория WesternResearchLab компании DEC и была основана исходная группа HamiltonGroup (она же OSF).
Апрель 1993 г. - Выпуск первого графического браузера для Internet - Mosaic 1.0, разработанного в центре NCSA.
Июнь 1993 г. - Компания TimeWarner продолжает проводить свои испытания интерактивного кабельного ТВ с компанией SGI, несмотря на признанное превосходство технологии компании Sun и уверения, что Sun выиграла эту сделку.
Лето 1993 г. - Нотон пролетает 300 тыс. миль, продавая Oak всем, занимающимся бытовой электроникой и интерактивным телевидением, тем временем темп с которой люди получают доступ к Internet, головокружительно нарастает.
Август 1993 г. - Через несколько месяцев многообещающих переговоров с компанией 3DO относительно разработки ОС для приставок, президент 3DO Трип Хокинс предлагает купить технологию. Макнили отказывается, и сделка срывается.
Сентябрь 1993 г. - К коллективу присоединяется Артур Ван Хофф, поначалу - чтобы создать среду разработки приложений, предназначенных для интерактивного телевидения, а потом разрабатывающий, главным образом, сам язык.
Декабрь 1993 г. - Экспертиза операций на высоком уровне в FirstPerson обнаруживает, что эта группа не имеет реальных партнеров или маркетинговой стратегии и неясно представляет себе дату выпуска.
Февраль 1994 г. - Отменено публичное заявление компании FirstPerson о выпуске, которое должно было состояться на конференции Technology, EntertainmentandDesign (TED).
Февраль 1994 г. - Исполнительным лицам компании Sun для разносторонней экспертизы представлен альтернативный бизнес-план корпорации FirstPerson по разработке мультимедийной платформы для CD-ROM и онлайновой работы.
Апрель 1994 г. - Создана компания SunInteractive; в нее переходит половина сотрудников FirstPerson.
Июнь 1994 г. - Начат проект Liveoak, нацеленный Биллом Джоем на использование Oak в крупном проекте небольшой операционной системы.
Июль 1994 г. - Нотон ограничивает область применения проекта Liveoak, просто переориентировав Oak на Internet.
Сентябрь 1994 г. - Пейн и Нотон начинают писать WebRunner - браузер типа Mosaic, позднее переименованный в HotJava.
Сентябрь 1994 г. - Прототип HotJava впервые продемонстрирован исполнительным лицам компании Sun.
Октябрь 1994 г. - Нотон уходит в компанию Starwave.
Осень 1994 г. - Ван Хофф реализует компилятор Java на языке Java. (Ранее Гослинг реализовывал его на языке С).
Май 1995 г. - Компания Sun официально представляет Java и HotJava на выставке SunWorld '95.
Одним из интереснейших аспектов Java программирования являются Java-апплеты. апплет - прикладная программа на Java в форме байт-кода. Java-апплеты выполняются в веб-браузере с использованием виртуальной Java машины (JVM), или в Sun'sAppletViewer, автономном инструменте для тестирования апплетов. Java-апплеты были внедрены в первой версии языка Java в 1995. Java-апплеты обычно пишутся на языке программирования Java, но могут быть написаны и на других языках, которые компилируются в байт?код Java, таких, как Jython.
2.8 Графический интерфейс
JavaFX - платформа на основе Java для создания приложений с насыщенным графическим интерфейсом. Может использоваться как для создания настольных приложений, запускаемых непосредственно из-под операционных систем, так и для интернет-приложений, работающих в браузерах, и для приложений на мобильных устройствах. JavaFX призвана заменить использовавшую ранее библиотеку Swing. Платформа JavaFX конкурирует с MicrosoftSilverlight, AdobeFlash и аналогичными системами.
Всего было 8 официальных версий JavaFX. На данный момент актуальна версия JavaFX 8 вкоторой и будет разработано графическое приложение - игра. Основные изменения в 8 версии касаются поддержки 3D и сенсорного ввода.
Рис. 2.1 - Иерархия классов - узлов в JavaFX 2.0
Самым базовым классом является Node - узел в графе сцены, наследникам предоставляются поля для настройки размеров: минимальная ширина, минимальная высота, предпочтительная высота, предпочтительная ширина, максимальная ширина, максимальная высота.
Наследники класса Region являются контейнерами, некими областями на сцене, внутри которых реализуется тот или иной графический элемент.
BorderPane - панель, которая располагает свои узлы в верхней, нижней, левой, правой, центральной позициях на сцене. Если задавать координаты для какого-то графического элемента, то эти координаты будут проигнорированы.
Pane - панель, которая располагает графические элементы также как и BorderPane. Учитывает заданное смещение пользователем.
StackPane - панель аналогичная Pane, растягивает элемент на всю доступную область.
GridPane - сеточная панель, которая реализует заполнение сцены таблицей. В любую ячейку таблицы можно поместить графический элемент.
FlowPane - автоматически настраиваемая панель на основе сетки, которая самостоятельно переносит графические элементы на новую строку без расширения основного окна или сцены.
Рис. 2.2 - Реализация узла FlowPane
TilePane - аналог FlowPane, учитывающий размеры графического элемента. Создает сетку из ячеек. Размер ячейки равен самому крупному элементу внутри всех ячеек.
Рис. 2.3 - Реализация узла TilePane
компьютерная игра java
HBox и VBox - горизонтальные и вертикальные списки содержащие графические элементы.
Рис. 2.4 - Реализация HBox
Также JavaFX содержит большое количество элементов управления и интерфейса, в том числе: Меню, выпадающие списки, html редактор, переключатель страниц, слайдер, кнопка и т.д. Каждый из этих элементов можно стилизовать средствами CSS Такое разнообразие позволяет легко и быстро написать удобное приложение с качественным графическим интерфейсом, который избавит разработчика от траты большого количества времени на реализацию данного функционала вручную.
Рис. 2.5 - Пример построения интерфейса с помощью JavaFX и CSS
3. Описание процесса разработки
3.1 Создание окна приложения
Перед созданием игры необходимо создать простое графическое окно, которое в дальнейшем будет содержать в себе сцены с анимацией. Чтобы создать окно необходимо создать класс, унаследованный от класса Application. В нем необходимо реализовать метод main(Stringargs[]) и start(StageprimaryStage).Все необходимые библиотеки подключаются средствами IDE - IntelliJIDEA.
classLauncherextendsApplication{
public static void main(String args[]) {
launch(args);
}
public void start(Stage primaryStage) throws Exception {
}
}
Теперь необходимо заполнить наше окно, также задать заголовок окна.В JavaFX 8 добавили возможность запретить выходить из полноэкранного режима, а также убрать подсказку о сочетании клавиш для выхода из него.
primaryStage.setFullScreenExitHint("");
primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
Маловажная, но необходимая вещь - иконка приложения, чтобы задать ее добавим в метод start строчку:
primaryStage.getIcons().add(newImage(“img/icon/icon.png”));
Java самостоятельно разместит значок на панели задач ОС, а также в местах где это необходимо ОС.Чтобы установить заголовок окна необходимо добавить еще одну строчку: primaryStage.setTitle(“OnemoreSpacegame”);
Так как Java использует UNICODE, название приложения может быть на многих языках, в том числе на русском, а также содержать спецсимволы.
Следующим шагом необходимо развернуть приложение на весь экран. Для этого нам понадобиться узнать разрешение основного монитора рабочего стола. Чтобы избежать ошибок в некоторых ОС можно заблокировать разрешение путем нескольких шагов. Для начала необходимо установить минимальное и максимальное разрешение окна. После необходимо запретить изменять размеры окна, а также установить значение полноэкранного режима в позицию «истины».
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
heigh = (int) screenSize.getHeight();
width = (int) screenSize.getWidth();
primaryStage.setMinWidth(width);
primaryStage.setMinHeight(heigh);
primaryStage.setMaxHeight(heigh);
primaryStage.setMaxWidth(width);
primaryStage.setResizable(false);
primaryStage.setFullScreen(true);
Рис. 3.1 - Отображение иконки в панели задач Windows 7
Теперь, чтобы окно отображалось, как полноэкранное необходимо создать сцену. Далее мы сможем рисовать на этой сцене, а также считывать любые событие происходящие в приложение. Чтобы добавить сцену необходимо объявить новый экземпляр класс Scene. Помимо этого необходимо создать узел root, внутри которого будут размещены наши графические элементы.
StackPane root = new StackPane();
Scene scene = new Scene(root);
Чтобы отобразить сцену в нашем окне необходимо: PrimaryStage.setScene(scene);
Главная сцена нашей игры готова. Теперь можно создавать игру.
3.2 Создание игрового меню
В каждой игре необходимо игровое меню, которое позволяет осуществлять запуск игры (смена сцены), ставить паузу, вызывать опции, а также осуществлять завершение приложения.
Рис. 3.2 - Игровое меню
Для начала следует определиться с размерами, а также установить фон для него. Чтобы загрузить картинку в приложение с использованием JavaFX необходимо воспользоваться классом Image и ImageView. Первый класс загружает наше изображение в память виртуальной машины, а второй класс решает задачу отображения изображения внутри сцены. Описывать данный процесс будем до создания нашей сцены на основе root. Также необходимо с помощью методов setFitHeight и setFitWidth задать высоты и ширину нашего изображения. В нашем случае необходимо замостить изображением всю сцену вне зависимости от размеров картинки.
ImageViewlauncherBG = new ImageView(new Image("img/launcher/background.jpg"));
launcherBG.setFitHeight(heigh);
launcherBG.setFitWidth(width);
Теперь можно добавить наш фон в сцену. Для этого необходимо вызвать метод addAll у root. root.getChildren().addAll(launcherBG);
Рис. 3.3 - Фон игрового меню
Теперь необходимо создать наши кнопки, которые будут обрабатывать события, происходящие на сцене. Выделим отдельный класс GameMenu под эту задачу. Пусть наше меню состоит из четырех пунктов, как в примере. Также у нас есть указатель в виде космического корабля, который имеет эффекты трансформации: прозрачность, поворот. JavaFX имеет встроенные обработчики данных преобразований. Это существенно упрощает разработку меню. Начнем с описания полей класса, а также конструктора, в котором будет реализован весь код класса для удобства добавления его на сцену.
Для обработки события нашей главной кнопки «Играть» необходимо иметь ссылку на наше рабочее окно, а значит необходимо принять его в конструкторе.
classGameMenu extends Parent{
publicGameMenu(Stage primaryStage) {
Особое внимание следует обратить на объявление класса. Как видно из примера, класс GameMenu наследуется от класса Parent. Это сделано для того, чтобы мы могли добавить наше меню в сцену вызвав метод у ссылки root в классе Launcher. СоздадимменювклассеLauncher.
GameMenu menu = new GameMenu(primaryStage);
root.getChildren().addAll(menu);
Теперь, когда у нас есть конструктор можно начинать создавать меню. Меню состоит из четырех позиций. В каждой из строки есть два объекта: корабль, кнопка. Чтобы разместить их на одном уровне воспользуемся сеточным заполнением, которое реализует стандартный класс GridPane. Создадим экземпляр данного класса:
GridPanepane = newGridPane();
Для задания графических настроек возможно использование средств CSS, но наше меню выглядит достаточно просто, поэтому обойдемся без этого. Для самых сложных меню в графическом плане рекомендуется использовать готовые изображения, заранее загруженные в память. Также рекомендуется анимировать их собственными силами, а не посредствами языка. Немного настроим меню. Для этого воспользуемся набором встроенных методов:
setHgap - устанавливает горизонтальный отступ между ячейками в пикселях.
setVgap - устанавливает вертикальный отступ между ячейками в пикселях.
getColumnConstrains() - метод необходим для задания ширины столбца. В данной ситуации нам важна лишь ширина первого столбца.
setPadding() - отступ содержимого от краев внутри ячеек.
pane.setHgap(15);
pane.setVgap(15);
pane.getColumnConstraints().add(new ColumnConstraints(50));
pane.setPadding(new Insets(5, 5, 5, 5));
Для удобства отладки можно добавить строку, активирующую рисование линий нашей таблицы.
pane.setGridLinesVisible(true);
Чтобы заполнить первый столбец первой строки необходимо загрузить изображение корабля, а также создать ссылки классов отвечающих за преобразование, которое обсуждалось ранее. В JavaFX это классы: RotateTransition и FadeTransition. Для каждого из пунктов создадим ссылку на каждый их этих классов. Важно создать данные переменные как поля класса, для доступа из любой части кода. Если создавать эти ссылки внутри конструктора, то они будут недоступны вне. К тому же для поля класса всегда применяются более мягкие условии использования. В том числе автоматическое присваивание значения отличного от NULL. Вынося это объявление в поле класса мы избегаем необходимости постоянно создавать новые экземпляры данного класса, а также избегаем ошибко при проверки допустимого синтаксиса языка Java.
RotateTransitionrt;
FadeTransitionft;
Теперь необходимо загрузить изображении корабля, к которому будет применены данные трансформации. Загрузим аналогичным образом, как в случае с фоном. Теперь необходимо выполнить ряд трансформаций с нашим кораблем. Чтобы не переносить центр изображения из левого верхнего угла в математический центр и не нагружать программу лишними просчетами, перенесем наше изображение внутри мини-сцены на пятнадцать пикселей вправо. Установим исходные размеры корабля тридцать пять на пятьдесят пикселей. Так как в нашем меню корабль появляется только при наведении установим изначальную прозрачность равную нулю. Данный код повторяется для каждого корабля.
ImageViewround = newImageView(newImage("img/launcher/round.png"));
round.setTranslateX(15);//15
round.setFitWidth(35);
round.setFitHeight(50);
round.setOpacity(0);
Чтобы разместить наш корабль внутри сетки необходимо выбрать координату внутри таблицы и добавить туда объект. Также необходимо добавить всю нашу сцену в родительский класс, иначе меню не появится.
GridPane.setConstraints(round, 0, 0);
pane.getChildren().add(round);
GridPane.setConstraints(round1, 0, 1);
pane.getChildren().add(round1);
GridPane.setConstraints(round2, 0, 2);
pane.getChildren().add(round2);
GridPane.setConstraints(round3, 0, 3);
pane.getChildren().add(round3);
getChildren().add(pane);
Скомпилировав приложение мы увидим, что корабли заняли предназначавшиеся им места, а наша таблица размещена в центре окна. Также видны пустые зоны между ячейками, которые были заданы ранее.
Рис. 3.4 - Первые шаги создания меню
После заполнения первого столбца необходимо заполнить второй кнопками. Кнопки будут обрабатывать события, а также влиять на корабли. Именно поэтому мы создали четыре пары экземпляров классов трансформации. Для удобства создадим новый класс, который называется MenuButton. Данный класс будет отвечать за наполнение правого столбца игрового меню, а также оказывать влияние на первый столбец. Чтобы сделать простую графическую кнопку можно воспользоваться встроенным классом Button, но при таком подходе вам предстоит большая работа по изменению визуального оформления данной кнопки средствами CSS. Гораздо проще и эффективнее сделать кнопки средствами JavaFX и фигурами. Конструктор MenuButton будет принимать строку, которая будет написана на данной кнопке.
private static class MenuButton extends StackPane {
private Text text;
private Rectangle bg;
public MenuButton(String name) {
text = new Text(name);
text.setFont(text.getFont().font(40));
text.setFill(Color.WHITE);
text.setEffect(new DropShadow(10, Color.BLUE));
bg = new Rectangle(250, 75);
bg.setOpacity(0.5);
bg.setFill(Color.BLACK);
bg.setArcHeight(75);
bg.setArcWidth(75);
bg.setEffect(new GaussianBlur(10));
bg.setEffect(new InnerShadow(50, Color.GRAY));
getChildren().addAll(bg, text);
}
}
В конструкторе класса создается экземпляр класса Text, устанавливается сороковой размер кегли, применяется заливка белым цветом, а также применяется эффект принадлежащий к языковым средствами. Так как наш текст будет располагаться на подложке, есть необходимость создать и ее. Роль подложки возьмет на себя простой прямоугольник с эффектами трансформации. Чтобы создать его необходимо добавить в код строку: Rectanglebg = newRectangle(250, 75); Где двести пятьдесят и семьдесят это размеры прямоугольника. Чтобы создать прозрачность нашего прямоугольника необходимо воспользоваться методом opacity. Далее зальем весь прямоугольник черным цветом. Это необходимо для придания нашей кнопки адекватного вида. Для того, чтобы превратить нашу квадратную кнопку в овальную вполне достаточно сделать скругления. Метод setArcHeight устанавливает скругления относительно оси OY. Метод setArcWidth используется для скругления относительно оси ОХ. Для придания эффекта размытия воспользуемся встроенным фильтром GaussianBlur, который размывает изображения и «замыливает» острые края кнопки. Эффект внутренней тени (InnerShadow) сделает нашу кнопку более стилизированной.
Рис. 3.5 - Финальный внешний вид кнопки без слушателя
Теперь необходимо добавить реакции кнопок на события. Пускай при нажатии на кнопку меняется цвет текста. Для этого необходимо создать слушатель, который будет постоянно обрабатывать события на данном объекте. Мы не указываем в слушателе ссылку на text или bg, значит слушатель будет применен ко всем слою. Это делается для упрощения наведения на кнопку конечным пользователем. Если есть необходимость, возможность описать реакцию для этих слоев отдельно. Аналогичным образом необходимо описать событие при отжатии кнопки мышки. Заметьте, в данной ситуации нет привязке в левой, центральной или правой кнопки мыши. Любой клик будет будет расценен как событие.
Рис. 3.6 - Окрас кнопки при нажатии на нее
setOnMousePressed(event -> {
text.setFill(javafx.scene.paint.Color.ORANGE);
});
setOnMouseReleased(event -> {
text.setFill(javafx.scene.paint.Color.YELLOW);
});
Добавим наши кнопки в меню. Для этого необходимо создать четыре экземпляра кнопки, а также поместить их в сетку с меню. Для каждой из кнопок рекомендуется указать выравнивание, для того, чтобы избежать проблем со «съезжанием» кнопки в сторону от предполагаемого центра. Чтобы добавить кнопку сделаем аналогичные действия, что и с кораблем.
MenuButton play = new MenuButton("Play");
play.setAlignment(Pos.CENTER);
MenuButton options = new MenuButton("Options");
play.setAlignment(Pos.CENTER);
MenuButton credits = new MenuButton("Credits");
play.setAlignment(Pos.CENTER);
MenuButton exit = new MenuButton("Exit");
play.setAlignment(Pos.CENTER);
GridPane.setConstraints(play, 1, 0);
pane.getChildren().add(play);
GridPane.setConstraints(options, 1, 1);
pane.getChildren().add(options);
GridPane.setConstraints(credits, 1, 2);
pane.getChildren().add(credits);
GridPane.setConstraints(exit, 1, 3);
pane.getChildren().add(exit);
Рис 3.7 - Промежуточный внешний вид
Теперь необходимо описать события при нажатии на кнопку. Так как при каждом нажатии у нас вызывается свое событие, разумно описывать слушатели внутри класса GameMenu. К сожалению, описание выйдет достаточно объемным, но при желании всегда можно создать отдельный метод обработчик, который немного сократил бы код программы. Опишем слушателя на примере кнопки Play.
/**in*/
play.setOnMouseEntered(event -> {
play.setOnMouse();
if (rt!= null) {
rt.stop();
rt = null;
}
if (ft!= null) {
ft.stop();
ft = null;
}
ft = newFadeTransition(Duration.millis(500), round);
ft.setToValue(1);
ft.play();
rt = newRotateTransition(Duration.millis(500), round);
rt.setToAngle(90);
rt.play();
});
/**out*/
play.setOnMouseExited(event -> {
play.setOffMouse();
if (rt!= null) {
rt.stop();
rt = null;
}
if (ft!= null) {
ft.stop();
ft = null;
}
ft = newFadeTransition(Duration.millis(500), round);
ft.setToValue(0);
ft.play();
rt = newRotateTransition(Duration.millis(500), round);
rt.setToAngle(0);
rt.play();
});
В первой части кода описывается реакция при наведении на объект Play. Так как мы переопределяем метод описанный в классе объекте play, необходим его ручной вызов. Для этого мы создадим два метода: setOffMouse и setOnMouse. Описание данных методов приведено далее. Чтобы запустить вращение и выцветание корабля необходимо остановить данные трансформации, если они есть, перед началом новых, иначе это может вызвать ошибки в ходе выполнения, которые приведут к фатальным ошибкам в программе или в лучшем случае будут отображать совсем не то, что нам необходимо. Для запуска новой анимации необходимо создать экземпляр необходимого класса, установить периодичность (в данном случае длительность) преобразования и применить ее к выбранному объекту. В нашем случае - round. При выходе мыши из поля данного блока, необходимо вернуть прозрачность на нулевой уровень, а также вернуть угол поворота к изначальному значению. Внутри классов трансформации есть возможность использовать метод, задающий с какой именно точки будет происходить вращение, данный метод может упростить жизнь во многих ситуациях, но в нашем случае это вызовет «телепортации» корабля в позицию, которая, скорее всего, будет отличаться от текущей позиции. Для запуска трансформации необходимо использовать метод play.
...Подобные документы
История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.
курсовая работа [168,1 K], добавлен 27.09.2013Сетевые возможности языков программирования. Преимущества использования Java-апплетов. Классы, входящие в состав библиотеки java.awt. Создание пользовательского интерфейса. Сокетное соединение с сервером. Графика в Java. Значения составляющих цвета.
курсовая работа [508,1 K], добавлен 10.11.2014Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.
курсовая работа [12,4 K], добавлен 18.06.2008Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.
курсовая работа [645,0 K], добавлен 26.03.2014Описание языков программирования Java и JavaFX. Среда разработки NetBeans и класс численных методов. Архитектура и принцип работы апплета с понятным пользовательским интерфейсом. Разработка алгоритма программы на примере модели межвидовой конкуренции.
курсовая работа [1023,2 K], добавлен 19.09.2012Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.
курсовая работа [197,5 K], добавлен 19.11.2009Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.
курсовая работа [1,8 M], добавлен 16.09.2015Принципы написания консольных приложений на языке Java в среде Eclipse. Составление программы завтрака на основе списка продуктов, передаваемых в качестве параметров в командной строке. Создание пакета для классов, интерфейса, базового класса иерархии.
лабораторная работа [1,2 M], добавлен 01.05.2014- Создание базы данных автомобилестроительного предприятия в виде настольного приложения на языке Java
Разработка логической схемы базы данных автомобилестроительного предприятия. Инфологическое моделирование системы. Создание графического интерфейса пользователя для базы данных средствами языка программирования Java. Тестирование программных средств.
курсовая работа [2,3 M], добавлен 16.12.2013 История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.
курсовая работа [795,9 K], добавлен 14.12.2012Java Script как язык управления сценарием отображения документа. Отличие world wide web от остальных инструментов для работы с Internet. Использование каскадных таблиц стилей в рамках разработки спецификации HTML. Элементы программы Netscape Navigator.
контрольная работа [1,1 M], добавлен 02.12.2009Кратка историческая справка развития языка Java. Анализ предметной области. Java platform, enterprise and standart edition. Апплеты, сервлеты, gui-приложения. Розработка программного кода, консольное приложение. Результаты работы апплета, сервлета.
курсовая работа [549,2 K], добавлен 23.12.2015Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.
курсовая работа [276,1 K], добавлен 19.07.2014Архитектура Java и Java RMI, их основные свойства, базовая система и элементы. Безопасность и виртуальная Java-машина. Интерфейс Java API. Пример использования приложения RMI. Работа с программой "Calculator". Универсальность, портативность платформ.
курсовая работа [208,6 K], добавлен 03.12.2013Моделирование различных систем событий. Особенности мультиагентной платформы JADE. Использование агентов, нарушающих принятый порядок работы системы. Реализация программы на языке Java. Вычислительная модель агента. Моделирование игры в "наперстки".
курсовая работа [423,6 K], добавлен 30.01.2016Основа пользовательского интерфейса. Возможности пакетов java.awt.geom, java.awt, классов java.awt.Graphics и java.awt.Graphics2D. Основные графические примитивы и работа с потоками. Листинг программы и составление композиции аффинных преобразований.
методичка [525,3 K], добавлен 30.06.2009Архитектура уровня команд платформы Java, формат файла класса Java. Компилятор ассемблероподобного языка, позволяющий создавать файлы классов, корректно обрабатываемые реальной JVM, поддерживающий все команды байт-кода Java и важнейшие возможности JVM.
курсовая работа [292,6 K], добавлен 17.09.2008Принцип работы Java. Аплеты как особенность Java-технологии, характеристика методов их защиты. Модель безопасности JDK1.2 и концепция "песочницы". Иерархия криптографических сервисов, алгоритмов. Объектная организация криптографической подсистемы Java.
реферат [54,8 K], добавлен 09.09.2015Общее понятие о пакете "java.net". Логическая структура соединений через сокеты. Создание объекта Socket, соединение между узлами Internet. Способы создания потока. Алгоритм работы системы клиент-сервер. Листинг ServerForm.java, запуск подпроцесса.
лабораторная работа [174,6 K], добавлен 27.11.2013Понятие пакета как объединения классов (java.awt, java.lang). Способы импорта, проблема конфликта (пакеты содержат классы с одинаковым именем). Особенности реализации интерфейса, его поля. Понятие наследования интерфейса. Общие методы классов-оболочек.
презентация [140,1 K], добавлен 21.06.2014