JavaFx Game
Разработка игры на Java / #1 – Как сделать игру на JavaFx?
Представляем вам курс по разработке мини игр на базе языка Java. За курс вы с нуля построите несколько игр на базе JavaFx библиотеки и научитесь строить приложения с графическим интерфейсом.
Видеоурок
Полезные ссылки:
- Курс по языку Java ;
- Скачать JDK ;
- Программа Intellij IDEA
Немного информации про Java
Язык Java уже много лет является одним из лидеров среди языков программирования. Не мудрено что как лидер он позволяет выполнять разработку приложений из разных сфер. На базе языка Java вы можете строить веб проекты, приложения под мобильные игры, ботов, серверные системы и всевозможные приложения, а также игры под ПК.

На сегодняшний день язык Джава является одним из самых популярных и востребованных языков в мире. Разработанные проекты на его основе компилируются в байт код (byte-code), что позволяет выполнять их позже на любой ОС вне зависимости от того где проект был создан.
Такая особенность языка используется и при построении ПК приложений, а также игр. Проект, что разработан на Джава или на одной из его библиотек может быть запущен на разных устройствах с разными операционными системами. Главное чтобы на устройствах был установлен JVM (Java Virtual Machine).
Информация про JavaFx
В ходе курса мы будем использовать JavaFx, но помимо этой библиотеки есть и многие другие, что выполняют схожую роль и позволяют строить приложения под ПК с графическим интерфейсом.
Одной из таковых библиотек является Java Swing. Возможно, ранее вы уже про нее слышали. Джава Свинг очень популярна и её популярность обусловлена датой её выхода. Дело все в том, что Джава Свинг является одной из первых библиотек, что были разработаны под язык Джава для построения приложений с графическим интерфейсом.
Если сравнить их на сегодняшний день, то JavaFx является более новой и современной библиотекой в сравнении с Java Swing. В JavaFx вы можете создавать интерфейс программы через специальную отдельную программу и процесс построения дизайна превращается в нечто очень простое и увлекательное. Вы сможете создавать интерфейс программы словно вы работаете в Фотошоп, но в более облегченном интерфейсе. К сожалению, Джава Свинг не может таким похвастаться и там дизайн проекта вам нужно будет прописывать самостоятельно.
Как раз по причине того что JavaFx куда более новая, удобная и более мощная библиотека – именно потому мы будем изучать её для построения проектов с графическим интерфейсом.
План курса
За курс мы с вами ознакомимся с основными концепциями JavaFx и научимся на его основе строить программы. В качестве приложений мы будем создавать небольшие игры, что будут иметь графический интерфейс и набор функций описанных на базе языка Джава.
Перед изучением курса вам нужно уметь работать с языком программирования Джава. Если вы не знакомы с этим языком, то можете пройти наш бесплатный курс по этому языку.
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Пишем игру “Dendy Tanks” на Java с нуля.
Мы подготовили для вас увлекательный онлайн тренинг по написанию графической игры “Танки”, который поможет легко и быстро познакомиться с практической стороной разработки на Java. Ноль теории, только практика. Если ты никогда не программировал – не проблема! Смотри и делай!
Кому это будет полезно:
- Новичкам. Отсутствие опыта в программировании не должно вас останавливать. Мы предоставляем вам шанс сделать свою первую программу на Java и получить опыт практического применения данного языка программирования в создании настоящей компьютерной игры.
- Начинающим Java разработчикам без опыта. Вы сможете углубить и применить на практике свои знания языка Java под руководством тренера.
Чему вы научитесь:
- Писать простые программы и подпрограммы с использованием языка Java
- Работать с массивами данных
- Использовать типы данных и классы Java
- Применять все базовые навыки (переменные, условные конструкции, циклы, методы) на практике
Формат тренинга
Вас ждёт прямой эфир на YouTube с Андреем Бондаренко в течение 3-х часов, общение в чате во время эфира и в специальном телеграм-канале вне эфира. Все примеры и исходные данные также будут в телеграм-канале, к которому вы сможете присоединиться после регистрации.
Программа тренинга:
- Создание карты поля боя
- Работа над передвижением танка
- Реализация стрельбы
- Обучение танка двигаться в указанный квадрант
- Добавление танка-противника
- Итог: танк проходит всё поле боя и чистит его
- Ответы на вопросы. Куда развиваться дальше?
Подарки
10 самых активных участников тренинга получат от CyberBionic Systematics Подарочные сертификаты на обучение стоимостью 1000 грн.
Учись вместе с друзьями
Регистрируйся на онлайн интенсив и поделись новостью с друзьями. Вместе учиться намного интереснее!
Покупай подписку с доступом ко всем курсам и сервисам
Библиотека современных IT знаний в удобном формате
Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.
- Все видеокурсы на 3 месяца
- Тестирование по 10 курсам
- Проверка 5 домашних заданий
- Консультация с тренером 30 мин
- Все видеокурсы на 1 год
- Тестирование по 24 курсам
- Проверка 20 домашних заданий
- Консультация с тренером 120 мин
- Все видеокурсы на 6 месяцев
- Тестирование по 16 курсам
- Проверка 10 домашних заданий
- Консультация с тренером 60 мин
Java и создание игр: о движках от А до Я
Создание развлекательных приложений и игр – перспективные направления в программировании. Пользователи готовы не только скачивать соответствующий контент бесплатно, но и платить за него. Особенно тогда, когда софт получается действительно качественным.
Во время создания игр можно использовать разнообразные языки программирования. Некоторые разработчики предпочитают Си-семейство. Оно универсально, но новичкам «с нуля» приступить к коддингу будет трудно. Поэтому тем, кто только начинает изучать процесс разработки игр и программирования, стоит обратить внимание на Java. Это – весьма простой язык, посредством которого можно создавать уникальные перспективные проекты с минимальными трудностями. Основной принцип Джавы – меньше писать, больше делать.
Движок – это…
Перед тем, как приступать к работе с кодом и задумываться над созданием игр, нужно уяснить – справиться с поставленной задачей удастся только при помощи так называемого движка. Термин слышали многие, но не все понимают, что это такое.
Игровой движок – совокупность неких модулей программного типа, которые включают в себя различные элементы, задействованных при создании игр и развлекательных приложений. Готовый «сборник» утилит. Выступает в качестве базового программного обеспечения при разработке игрового софта.
При помощи движка можно обеспечить:
- музыкальное и звуковое сопровождение;
- сетевую игру;
- графическую визуализацию;
- перемещение внутриигровых персонажей (а также их взаимодействие согласно имеющимся скриптам);
- соблюдение физических эффектов и закономерностей;
- встроенные графические сцены.
Грамотно подобранный движок дает разработчику больше возможностей при коддинге. С ним создавать игры для Андроид, Windows/Mac и iOS просто и интересно. Навыки программирования могут быть минимальными.
Движки для программистов и библиотеки на Джаве
Ява – язык программирования, который пользуется у программистов очень большим спросом. Освоить его способен даже новичок без существенных затруднений. Большинство современных платформ для создания игр поддерживают Java-семейство. Это позволяет программерам и разрабам выбрать оптимальный для себя «пакет» готовых утилит при создания развлекательного контента. Далее будут перечислены лучшие движки JavaScript и библиотеки.
GDevelop
Универсальная утилита – подходит и новичкам, и продвинутым программистам. С ее помощью можно сделать:
- платформеры;
- шутеры;
- элементарные игры 8-bit.
Создана для того, чтобы дать возможность разработчикам (особенно новичкам) освоить работу с 2d-играми. Трехмерную графику не поддерживает.
GDevelop предлагает экспорт на различные платформы: Android, iOS, FaceBook (ныне Meta) Instant Games и не только. Подойдет тем, кто заинтересован в экспортировании игр, но не хочет углубляться в непосредственную разработку софта и долго изучать низкоуровневую архитектуру игровых движков.
MelonJS
Еще один вариант, если хотите научиться делать собственные 2D-игры. Подключив соответствующую библиотеку к коду, можно получить доступ к качественной поддержке:
- физики;
- столкновений;
- спрайтов;
- деформаций.
В успешных проектах все это играет огромную роль. Из минусов – не самая лучшая документация. Зато пользовательского контента у MelonJS полно. А еще имеется отличное комьюнити.
Идеальный вариант для новичков. Является весьма мощным инструментом в умелых руках. Но продвинутым программерам предлагаемых возможностей будет маловато.
ImpactJS
Имеет ориентацию преимущественно на двухмерную графику. В отличие от предыдущих вариантов обладает плагинами, которые при добавлении в Impact позволяют имитировать 3D-среду.
Дополнительно к Impact «идут» следующие инструменты:
- редактор уровней;
- дебаггер;
- фреймворк для публикации в Ejecta.
Через Impact удается без проблем размещать утилиты в AppStore.
Babylon
Мощный инструмент, предусматривающий веб-рендеринг. Игровым движком его назвать нельзя, но на основе BabylonJS удастся создать game. Движок рендеринга предусматривает доступ к низкоуровневому функционалу.
Babylon – утилита, которая подойдет продвинутым программистам. Новичкам с ней работать затруднительно, особенно если учесть, что это – не совсем игровой движок.
PhaserJS
Среди популярных вариантов, поддерживающих Java, выделяют PhaserJS. Он позволяет программировать не только для компьютеров, но и для мобильных устройств. Обладает поддержкой WebGL. Годится для написания 2D-софта.
Это – бесплатный движок. За дополнительную плату можно подключить особые плагины, значительно увеличивающие мощь «пакета».
Pixi
Библиотека, задействованная при программировании в двухмерном пространстве. Работает с WebGL, задействуется для воплощения потрясающих интерфейсов. И не обязательно они будут размещаться в играх.
Включает в себя:
Идеальный вариант для тех, кого больше беспокоит визуализация. Для сложных и весьма крупных проектов лучше воспользоваться каким-нибудь другим вариантом.
PlayCanvas
Среда программирования для развлекательных приложений, включающая в себя все необходимое разработчику. Здесь удается не только писать коды, но и проводить тестирование, настройку сцен, экспорт контента в одно нажатие.
PlayCanvas – условно-бесплатный «набор программиста». Годится для небольших публичных проектов. За «тайные» коммерческие идеи предстоит платить ежемесячно.
A-Frame
Инновационное решение в программировании. A-Frame может предоставить пользователям больше возможностей, нежели предыдущие библиотеки. И все это за счет того, что ориентирован движок на VR и AR.
Синтаксис напоминает HTML-верстку. Подойдет для 3d-программирования с «полным погружением». В основном утилитой пользуются опытные программеры.
PhysicsJS
Основан на физическом взаимодействии имеющихся объектов. Используется при разработке всех видов игрушек. Для Андроид в том числе.
Отличное решение для тех, кому важна сложная физика в реализуемом софте. То же самое касается применения при создании собственных движков на основе уже имеющихся библиотек.
Универсальные решения для программистов
Перечислять программы, при помощи которых можно создавать любые игрушки для мобильных и компьютерных устройств, удается бесконечно долго. Но в мире сложилась тенденция, согласно которой несколько вариантов вышли на передовую. Они используются программистами на разных языках чаще остальных. К концу статьи каждый потенциальный разработчик сможет выбрать платформу, с которой он будет работать, зная Java.
Unreal Engine 4
Настоящая легенда в сфере gaming programming. Разрабатывался «пакет» с 1998 года. С тех пор все время совершенствуется и дорабатывается. Современная версия UE 4 является универсальной. При помощи нее создаются развлекательные приложения для:
- игровых консолей;
- мобильных платформ;
- компьютеров.
Является частично бесплатным. Платить за использование оного не нужно, если прибыль с созданного приложения в месяц не переваливает за 3 000 долларов США. В противном случае предстоит переводить создателям движка проценты с получаемых доходов.
Unity
Юнити – популярный вариант среди разработчиков. Обошел иные платформы для создания игр, благодаря простоте осваивания. Развивается с 2005 года.
Подойдет для 3D-игрушек. Как и предыдущий вариант, является кроссплатформенным. На Юнити пишут не только простые игры (головоломки, аркады), но и шутеры от первого лица с тщательно проработанным игровым миром.
Недостаток один – графика в созданных утилитах далека от 100% реалистичности. Если разработчику важна графическая составляющая, лучше пользоваться UE 4. Несмотря на это, более половины утилит для Android написаны именно на Unity. Подходит как новичкам, так и продвинутым программистам.
Corona
Программы для создания игрушек можно перечислять бесконечно долго. И выбрать что-то одно бывает непросто. Добавить к списку наиболее успешных и популярных «пакетов» можно утилиту под названием Corona SDK.
Он выступает в качестве платформы для двухмерных игр. Предусматривает:
- поддержку API;
- сложные функции в 2D-играх;
- в основе API используется Luna;
- монетизацию через Corona Ads.
Данный вариант является кроссплатформенным. Подходит и для Андроид, и для iOS. Осваивается без существенных затруднений, поэтому идеальна для новичков. Имеется тестирование в режиме реального времени.
Обладает разнообразными полезными фитчами:
- Sublime Text;
- Corona Editor;
- Composer GUI.
Через Corona’s Physycs Engine можно отслеживать взаимодействие игровых объектов между собой. Этот прием позволяет довести физику в развлекательном софте до идеального состояния с минимальными временными потерями.
Как создать собственную игру – советы
Для того, чтобы писать программы и игровой контент на Java, рекомендуется изучить основы программирования. Существуют следующие варианты развития событий:
- Самообразование. Результат виден лишь у целеустремленных будущих программистов. В интернете полно полезной информации по рассмотренной тематике. И не всегда за нее нужно платить.
- Обучение в ВУЗе. Подойдет направление «Программирование». В некоторых университетах есть вариант «геймдев». Долгий и дорогостоящий вариант, но в результате на руках окажется диплом. Выпускник сможет писать сложные программы.
- Прохождение курсов.
Последний вариант больше всего подходит тем, кто не готов сидеть 5 и более лет в университете. Специализированные образовательные центры предлагают как очные/заочные курсы, так и дистанционные.
Преимуществом такого подхода является то, что человек может выбрать узкую направленность. Пример – изучение только процесса создания игр на Android или iOS. В конце обучения (длится до года) выдается сертификат установленного образца. При желании можно изучать движки для игр iOS, Windows, Android более подробно. Для самых популярных «утилит» существуют отдельные курсы. Делятся они по уровню навыков. Подходящие уроки подберет себе и новичок, и продвинутый программер.
Создание игры на Java: основы, примеры и пошаговая инструкция


Даниил Шатухин Редактор в «Хабре», тестировщик и любитель веба
На Java разрабатывают практически всё, от банковских приложений до научных программ. Плюс языка в том, что код будет работать везде, где есть виртуальная машина Java. Именно поэтому Java часто выбирают для кроссплатформенных приложений, в том числе для мобильных и десктопных игр. Рассказываем, как это работает, и прикладываем инструкцию, как написать свою первую игру на Java.

Освойте профессию «Java-разработчик»
Java для разработки игр
Долгое время Java был основным языком для разработки мобильных игр под сотовые телефоны, потом язык стал сердцем системы Android. Поэтому множество проектов из начала двухтысячных годов используют под капотом Java. К примеру, культовая игра Gravity Defied, в которой надо помочь мотоциклисту проехаться по холмам и не упасть, разработана на Java.
Пример десктопного проекта игры на Java — Minecraft, основная версия полностью написана на этом языке. Позже Microsoft переписала проект на C++ и выпустила Bedrock Edition, но все равно продолжает поддерживать версию на Java, которая обеспечивает большую совместимость, особенно на старом железе.
Java можно использовать не только для изучения основ геймдева, но и для разработки больших успешных проектов, в которые играют миллионы пользователей.
Профессия / 14 месяцев
Java-разработчик
Освойте востребованный язык
3 575 ₽/мес 7 150 ₽/мес

Игровые движки на Java
- jMonkeyEngine — высокопроизводительный движок для 3D-игр. Полностью поддерживает работу с драйвером для 3D-графики OpenGL и содержит в себе множество готовых реализаций для физических симуляций и визуализаций. Код проекта открыт, а использовать jMonkeyEngine можно бесплатно.
- LibGDX — фреймворк для создания игр, написанный на Java, но некоторые части реализованы на C++. Проект кроссплатформенный, поэтому с его помощью можно создавать игры для Windows, Linux, RaspberryOS, macOS, Android, iOS и браузера. В основном его используют для мобильных 2D-игр.
- LWJGL (Lightweight Java Game Library) — мощный 3D-движок для высокоэффективных проектов. Поддерживает работу с Vulkan, OpenGL и другими открытыми графическими API. Есть все необходимое для сборки готовых проектов под Windows, macOS, Linux и VR-гарнитуры Oculus. Именно на этом движке написали Java-версию Minecraft.
Правила игры
Теперь мы знаем практически всё, что нужно для создания собственной игры на Java. Делать ее будем с помощью графической библиотеки Swing. Она уже входит в Java и помогает создавать интерфейсы для окон и виджетов. Это не профессиональный движок, но он позволяет реализовать простые игры.
Для начала обозначим правила:
- главным игровым объектом будет яркий квадрат, двигающийся по горизонтали в нижней части окна;
- в верхней части появляются объекты другой формы и цвета, опускающиеся вниз с разной скоростью;
- падающие объекты нельзя задевать;
- в левой верхней части расположен счетчик объектов, от которых удалось увернуться;
- если коснуться падающего объекта, то игра завершается.

Разработчик игр на Unity – одна
из самых творческих профессий в IT. Создайте виртуальные миры уже через полгода обучения
Пишем код
Для начала создадим класс, в котором будем хранить все необходимые переменные. Сразу зададим им начальные значения. Некоторые из них будут меняться по ходу игры и возвращаться в исходное значение после завершения. В нашем классе SimpleGame наследуется от JPanel, который помогает выстраивать интерфейс:
public class SimpleGame extends JPanel implements ActionListener, KeyListener < private int playerX = 175; // Начальное положение игрока по горизонтали private int playerY = 480; // Начальное положение игрока по вертикали private int playerSpeed = 15; // Скорость движения игрока private ArrayListenemyX = new ArrayList<>(); // X-координаты врагов private ArrayList enemyY = new ArrayList<>(); // Y-координаты врагов private int enemySpeed = 20; // Скорость движения врагов private Timer timer; // Таймер для обновления экрана private boolean gameOver = false; // Флаг окончания игры private int score = 0; // Счет игрока
Теперь создадим класс игры SimpleGame, в котором обозначим настройки. Вместе с этим создадим таймер с интервалом 100 миллисекунд и запустим его:
public SimpleGame() < addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); timer = new Timer(100, this); // Тут создаем таймер timer.start(); // В этой строчке его запускаем >
Код на Java не запустится, если в нем нет главного класса main, поэтому создадим его и обозначим в нем настройки окна. Название укажем в frame, а размеры — в setSize:
public static void main(String[] args)
Все подготовительные этапы выполнены, и можно переходить к отрисовке объектов на экране. Для этого используем возможности Swing. Фон зальем черным цветом, а объект игрока — белым. В качестве обозначения цветов можно использовать их англоязычные названия, но заглавными буквами. К примеру, BLACK, WHITE, RED:
public void paintComponent(Graphics g) < super.paintComponent(g); g.setColor(Color.BLACK); // Заливаем фон черным цветом g.fillRect(0, 0, 400, 600); g.setColor(Color.WHITE); // Белый цвет для фигуры игрока g.fillRect(playerX, playerY, 50, 50); // Рисуем объект игрока

Фон и игрок на экране уже есть, но теперь не хватает врагов. Отрисуем их в верхней части окна и отобразим с помощью красных кругов. Вражеских объектов на игровом поле может быть несколько одновременно, поэтому выводить их будем с помощью цикла for:
for (int i = 0; i < enemyX.size(); i++) < g.setColor(Color.RED); // Используем красный цвет g.fillOval(enemyX.get(i), enemyY.get(i), 20, 20); >

Теперь закончим основной интерфейс надписями на экране. В верхнем левом углу будем выводить актуальный счет, а после проигрыша по центру будем показывать надпись «Конец игры». Их сделаем белым цветом и выберем шрифт Arial. В конце игры будем останавливать игровой таймер:
g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.PLAIN, 20)); g.drawString("Счет: " + score, 10, 30); // Выводим счет игрока на экран if (gameOver) < g.setFont(new Font("Arial", Font.PLAIN, 40)); g.drawString("Конец игры", 120, 300); // Выводим надпись "Конец игры" при окончании игры timer.stop(); // Останавливаем таймер >

Пришло время оживить врагов. Их объекты должны спускаться вниз и удаляться при пересечении нижней линии окна. В этот же момент счет игрока должен увеличиваться на число, равное количеству вражеских объектов. Все это реализуем в классе actionPerformed. В конце обязательно обновляем экран. Иначе враги будут оставаться на нем и копиться:
@Override public void actionPerformed(ActionEvent e) < if (!gameOver) < for (int i = 0; i < enemyX.size(); i++) < enemyY.set(i, enemyY.get(i) + enemySpeed); // Двигаем врагов вниз по экрану if (enemyY.get(i) >= 600) < enemyX.remove(i); enemyY.remove(i); score++; // Увеличиваем счет при уничтожении врага >> repaint(); // Обновляем экран
Добавим механизм, который будет создавать на экране новых врагов, если на нем никого нет. В конце добавим проверку cтолкновений с объектом игрока:
if (enemyX.isEmpty()) < spawnEnemy(); // Создаем нового врага, если текущих нет на экране >checkCollision(); // Проверяем коллизию игрока с врагами
Мы уже реализовали правила рендеринга врагов и механизм их спуска вниз, но все еще не умеем отслеживать их количество на экране. В классе spawnEnemy сразу обозначим, что одновременно на экране может быть не меньше одного и не больше пяти вражеских объектов. Можно поэкспериментировать с количеством, меняя значение переменной numEnemies:
public void spawnEnemy() < Random rand = new Random(); int numEnemies = rand.nextInt(5) + 1; // Генерируем от 1 до 5 врагов за раз for (int i = 0; i < numEnemies; i++) < int x = rand.nextInt(350); // Генерируем случайную X-координату для врага int y = 0; enemyX.add(x); enemyY.add(y); // Добавляем врага в списки координат >>
Если игрок сталкивается с объектом врага, то игра сразу же завершается. В разработке игр столкновения объектов обычно называют коллизиями, а в профессиональных движках за их отслеживание отвечают специальные механизмы. В нашем проекте мы сами реализуем такой.
Для отслеживания столкновений важно знать границы двух объектов. Если они соприкасаются, то запускается определенное действие. К примеру, если границы двух объектов-автомобилей в игре сходятся, то начинает воспроизводиться анимация столкновения и разрушений. В нашем случае игра будет завершаться, а на экран выводится надпись «Конец игры»:
public void checkCollision() < Rectangle playerBounds = new Rectangle(playerX, playerY, 50, 50); // Границы игрока for (int i = 0; i < enemyX.size(); i++) < Rectangle enemyBounds = new Rectangle(enemyX.get(i), enemyY.get(i), 20, 20); // Границы врага if (playerBounds.intersects(enemyBounds)) < gameOver = true; // Если произошло столкновение, игра заканчивается break; >> >
Пришла пора оживить игрока. Главный объект может двигаться только влево и вправо по горизонтали. Это упрощает нам задачу, так как не надо реализовывать дополнительные модели управления. Для перемещения будем использовать клавиши стрелок, которые обозначаются как VK_LEFT и VK_RIGHT. При нажатии просто будем менять координаты объекта игрока по оси x:
@Override public void keyPressed(KeyEvent e) < int key = e.getKeyCode(); if (!gameOver) < if (key == KeyEvent.VK_LEFT && playerX >0) < playerX -= playerSpeed; // Перемещаем игрока влево >if (key == KeyEvent.VK_RIGHT && playerX < 350) < playerX += playerSpeed; // Перемещаем игрока вправо >> >
Весь код игры выглядит так:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.Random; public class SimpleGame extends JPanel implements ActionListener, KeyListener < private int playerX = 175; // Начальное положение игрока по горизонтали private int playerY = 480; // Начальное положение игрока по вертикали private int playerSpeed = 15; // Скорость движения игрока private ArrayListenemyX = new ArrayList<>(); // X-координаты врагов private ArrayList enemyY = new ArrayList<>(); // Y-координаты врагов private int enemySpeed = 20; // Скорость движения врагов private Timer timer; // Таймер для обновления экрана private boolean gameOver = false; // Флаг окончания игры private int score = 0; // Счет игрока public SimpleGame() < addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); timer = new Timer(100, this); // Тут создаем таймер timer.start(); // В этой строчке его запускаем >public static void main(String[] args) < JFrame frame = new JFrame("Simple Game"); SimpleGame game = new SimpleGame(); frame.add(game); frame.setSize(400, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); >public void paintComponent(Graphics g) < super.paintComponent(g); g.setColor(Color.BLACK); // Заливаем фон черным цветом g.fillRect(0, 0, 400, 600); g.setColor(Color.WHITE); // Белый цвет для фигуры игрока g.fillRect(playerX, playerY, 50, 50); // Рисуем объект игрока for (int i = 0; i < enemyX.size(); i++) < g.setColor(Color.RED); // Используем красный цвет g.fillOval(enemyX.get(i), enemyY.get(i), 20, 20); >g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.PLAIN, 20)); g.drawString("Счет: " + score, 10, 30); // Выводим счет игрока на экран if (gameOver) < g.setFont(new Font("Arial", Font.PLAIN, 40)); g.drawString("Конец игры", 120, 300); // Выводим надпись "Конец игры" при окончании игры timer.stop(); // Останавливаем таймер >> @Override public void actionPerformed(ActionEvent e) < if (!gameOver) < for (int i = 0; i < enemyX.size(); i++) < enemyY.set(i, enemyY.get(i) + enemySpeed); // Двигаем врагов вниз по экрану if (enemyY.get(i) >= 600) < enemyX.remove(i); enemyY.remove(i); score++; // Увеличиваем счет при уничтожении врага >> repaint(); // Перерисовываем экран if (enemyX.isEmpty()) < spawnEnemy(); // Создаем нового врага, если текущих нет на экране >checkCollision(); // Проверяем коллизию игрока с врагами > > public void spawnEnemy() < Random rand = new Random(); int numEnemies = rand.nextInt(5) + 1; // Генерируем от 1 до 5 врагов за раз for (int i = 0; i < numEnemies; i++) < int x = rand.nextInt(350); // Генерируем случайную X-координату для врага int y = 0; enemyX.add(x); enemyY.add(y); // Добавляем врага в списки координат >> public void checkCollision() < Rectangle playerBounds = new Rectangle(playerX, playerY, 50, 50); // Границы игрока for (int i = 0; i < enemyX.size(); i++) < Rectangle enemyBounds = new Rectangle(enemyX.get(i), enemyY.get(i), 20, 20); // Границы врага if (playerBounds.intersects(enemyBounds)) < gameOver = true; // Если произошло столкновение, игра заканчивается break; >> > @Override public void keyTyped(KeyEvent e) <> @Override public void keyPressed(KeyEvent e) < int key = e.getKeyCode(); if (!gameOver) < if (key == KeyEvent.VK_LEFT && playerX >0) < playerX -= playerSpeed; // Перемещаем игрока влево >if (key == KeyEvent.VK_RIGHT && playerX < 350) < playerX += playerSpeed; // Перемещаем игрока вправо >> > @Override public void keyReleased(KeyEvent e) <> >
Что дальше
У нас есть готовая игра, которую можно модифицировать, вот пара идей для вдохновения:
- в проект можно добавить фоновую музыку и звуки, которые будут воспроизводиться при движении игрока и проигрыше. Так игра получится увлекательнее и живее;
- уворачиваться от вражеских объектов со временем надоедает, поэтому для разнообразия игрового процесса можно добавить возможность уничтожать врагов с помощью стрельбы. Для этого надо реализовать класс пуль, их внешний вид и физику движения. При столкновении с врагом с экрана должны пропадать сам враг и пуля;
- вместе с врагами случайно могут спускаться различные бонусы, к примеру, дополнительная жизнь или щит от врагов на какое-то время;
- можно добавить возможность обменивать накопленные очки на дополнительные способности, облегчающие игру. К примеру, позиции спуска следующих игроков могут подсвечиваться, чтобы у игрока была возможность подготовиться.
Java-разработчик
Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.
