Создание игры на Java без сторонних библиотек, часть первая

Привет хаброжители. Данный пост является «рерайтом» моего поста для песочницы. На этот раз я постараюсь охватить больше тем, чем тогда.
Почему Java?
Ничего объективного я тут не скажу, а скажу лишь то, что я люблю этот язык, и мне нравиться писать на нем. Да, на Java нет игр AAA-класса, но Java предоставляет огромные возможности, больше кол-во встроенных средств и быстроту написания кода.
IDE
Начнем с выбора IDE. Я являюсь фанатом Eclipse и посоветую вам его.
Если же почему-то вам он не понравился, вы можете использовать NetBeans, Intellij IDEA или командную строку и ваш любимый редактор.
JDK
И скачаем JDK последней версии: JDK 7u4
Скорее всего проблем с установкой IDE у вас не возникнет, а если у вас 64-битная система, все же посоветую устанавливать 32-битный Eclipse, так как иногда бывают ошибки и Eclipse у вас просто не запустится.
Под катом мы приступим к созданию игры.
Класс Game
Итак, создаем проект, в нем класс Game(попутно создав в нем точку входа). Данный класс должен наследовать класс Canvas и реализовать интерфейс Runnable:
public class Game extends Canvas implements Runnable < private static final long serialVersionUID = 1L; public void run() < //функция run появляется после того, как мы добавили "implements Runnable" >public static void main(String[] args) < >>
Создадим переменную running типа Boolean, которая, как вы уже догадались будет показывать нам запущена ли игра, или нет.
Создадим функцию start() и в ней мы будем создавать новый поток и переводить running в true:
public void start()
Создадим три функции — update(long delta), render() и init(). Я надеюсь что их значение вам понятно. В функции run() создадим главный игровой цикл, перед ним будем вызывать init(), а в нем самом render() и update(). Так же мы будем вычислять разницу между кадрами(delta time).
public void run() < long lastTime = System.currentTimeMillis(); long delta; init(); while(running) < delta = System.currentTimeMillis() - lastTime; lastTime = System.currentTimeMillis(); update(delta); render(); >> public void init() < >public void render() < >public void update(long delta)
Пока поработаем над функцией render().
public void render() < BufferStrategy bs = getBufferStrategy(); if (bs == null) < createBufferStrategy(2); //создаем BufferStrategy для нашего холста requestFocus(); return; >Graphics g = bs.getDrawGraphics(); //получаем Graphics из созданной нами BufferStrategy g.setColor(Color.black); //выбрать цвет g.fillRect(0, 0, getWidth(), getHeight()); //заполнить прямоугольник g.dispose(); bs.show(); //показать >
Вам наверное уже не терпится запустить и попробовать, но не спешите. Мы должны создать фрейм и добавить наш холст на него. Заодно и объявим три переменных.
public static int WIDTH = 400; //ширина public static int HEIGHT = 300; //высота public static String NAME = "TUTORIAL 1"; //заголовок окна public static void main(String[] args) < Game game = new Game(); game.setPreferredSize(new Dimension(WIDTH, HEIGHT)); JFrame frame = new JFrame(Game.NAME); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //выход из приложения по нажатию клавиши ESC frame.setLayout(new BorderLayout()); frame.add(game, BorderLayout.CENTER); //добавляем холст на наш фрейм frame.pack(); frame.setResizable(false); frame.setVisible(true); game.start(); >

Примерно вот так выглядит наш класс Game сейчас.
Класс Sprite
Создадим новый класс Sprite. Поскольку этот класс небольшой, я сразу приведу весь его код с комментариями:
import java.awt.Graphics; import java.awt.Image; public class Sprite < private Image image; //изображение public Sprite(Image image) < this.image = image; >public int getWidth() < //получаем ширину картинки return image.getWidth(null); >public int getHeight() < //получаем высоту картинки return image.getHeight(null); >public void draw(Graphics g,int x,int y) < //рисуем картинку g.drawImage(image,x,y,null); >>
Сразу же проверим работоспособность. Возьмем эту картинку и скопируем ее в папку с нашим классом Sprite. Добавим функцию getSprite() в класс Game(временно).

public Sprite getSprite(String path) < BufferedImage sourceImage = null; try < URL url = this.getClass().getClassLoader().getResource(path); sourceImage = ImageIO.read(url); >catch (IOException e) < e.printStackTrace(); >Sprite sprite = new Sprite(Toolkit.getDefaultToolkit().createImage(sourceImage.getSource())); return sprite; >
Добавим нашу картинку в папку assets(папку создать в корне проекта), саму папку надо добавить в build path.
Далее создаем переменную hero типа Sprite. В функции init() инициализируем ее. В Функции render() рисуем:
//в "шапку" public static Sprite hero; //в init() hero = getSprite("man.png"); //в render() после g.fillRect(0, 0, getWidth(), getHeight()); hero.draw(g, 20, 20);

Input
Для обработки инпута мы создадим класс, наследующий KeyAdapter:
private class KeyInputHandler extends KeyAdapter
Тут же и объявим две переменных в шапке класса Game:
private boolean leftPressed = false; private boolean rightPressed = false;
Внутри класса KeyInputHandler создадим две функции:
public void keyPressed(KeyEvent e) < //клавиша нажата if (e.getKeyCode() == KeyEvent.VK_LEFT) < leftPressed = true; >if (e.getKeyCode() == KeyEvent.VK_RIGHT) < rightPressed = true; >> public void keyReleased(KeyEvent e) < //клавиша отпущена if (e.getKeyCode() == KeyEvent.VK_LEFT) < leftPressed = false; >if (e.getKeyCode() == KeyEvent.VK_RIGHT) < rightPressed = false; >>
Теперь в функции init() добавим следующее:
addKeyListener(new KeyInputHandler());
Создадим переменные x и y для героя(так как пока что мы еще не написали класс Entity). Сделаем чтобы герой всегда рисовался на этих координатах.
private static int x = 0; private static int y = 0; hero.draw(g, x, y);
А теперь в функции update() будем проверять нажаты ли клавиши и изменять x-координату.
public void update(long delta) < if (leftPressed == true) < x--; >if (rightPressed == true) < x++; >>
Пишем 2d-игру на Java
В этой статье будет описываться создание 2D игры на Java. Сразу предупреждаю, вы должны хотя бы базово знать язык Java, поскольку на подробное объяснение каждой строки у меня нету времени. И очень прошу вас, не списывать просто код, а пытаться понять что означает каждая строка, и писать со смыслом. И еще, я использую Eclipse, но вы можете использовать любой IDE.
Задача:
Я планирую создать игру, напоминающую шутер с видом от 3 лица.
Начало:
Ну что, приступим!
Для начала создадим проект. Назовем его «Just game». И сразу создаем класс Display.java. В него пишем:
public static void main(String[] args) < JFrame frame = new JFrame(/* название нашей игры */); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true); frame.setVisible(true); >
Теперь разберемся, что мы сделали.
JFrame frame = new JFrame(/*название нашей игры*/);
мы создаем рамку, которая и будет отображаться при запуске нашей игры
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
устанавливаем операцию, которая будет происходить при нажатии на крестик. EXIT_ON_CLOSE — выйти из программы
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true);
устанавливаем нашей рамке максимальные размеры, убираем декорации(кнопки свернуть, закрыть, уменьшить/увеличить и т.п.), т.е. делаем игру на весь экран. Если вы хотите, чтобы игра не была бы на весь экран, то используйте:
frame.setSize(/*ширина*/,/*высота*/); frame.setResizable(false); //false чтобы нельзя было бы поменять размеры рамки, true -можно
frame.setVisble(true);
— делаем рамку видимой
Только не забудьте, все настройки рамки надо писать до того, как вы сделаете её видимой
Ну чтож, теперь нажимаем «Run» и пробуем запустить нашу игру. Если все написано правильно, у вас не должны возникать ошибки и должно появиться пустое, серое окно.
Серое окно… Как скучно… Давайте создадим что-нибудь поинтереснее.
Создадим новый класс, под названием «Main». Main класс у нас будет являться панелью, которую мы вставим в рамку, по этому он должен расширять JPanel. (Для тех, кто не знает, расширять пишется как extends после названия класса)
Возвращаемся в класс Display и после настроек рамки, но перед установлением её видимости, пишем:
frame.add(new Main());
Вы спросите — «Ну и зачем мы это сделали?». Представьте себе картину. Эта картина и является конечная наша игра. А теперь представьте рамку. Без ничего внутри, просто пустую рамку. На ней ничего нельзя нарисовать, она бесполезна. Для этого, мы вставили в картину пустой лист, на котором программа в дальнейшем может рисовать картину. На этом закончим наше лирическое отступление и вернемся к классу Main.
Нам нужно осуществить отрисовку, по этому мы должны добавить метод paint. Для этого пишем:
public void paint(Graphics g) < //отрисовка всех объектов >
Ну и для начала, можем написать внутри этого метода отрисовку линии. Для этого пишем:
g.drawLine(20, 20, 100, 100);
Теперь запускаем программу, и видим:

Даааааа, не густо…
Давайте отрисуем какую-нибудь картинку. Например эту:

Для начала, нам нужно указать путь к картинке. Для этого не в методе paint, пишем:
Image img = new ImageIcon("2.png").getImage();
(предварительно надо в наш проект скинуть картинку и назвать ее 2.png)
После этого удаляем строчку отрисовки линии, а вместо нее в метод paint пишем:
g.drawImage(img, 0, 0, null);
Разберемся поближе с методом drawImage, так как мы будем часто его затрагивать.
drawImage(картинка которую мы будем рисовать, которую мы объявили раннее, координата X с которой будет рисоваться картинка, координата Y с которой будет рисоваться картинка, paint);
Отдельно хочу поговорить о параметре paint. Лучше всего оставляйте его null. Я только однажды сталкивался, когда мне нужно было использовать paint. Это было когда я отрисовывал текст, и задавал ему размер шрифта. Но советую не лезть туда и использовать null.
Теперь запускаем программу, и видим:

Чего-то она маленькая, не правда ли? Давайте научимся увеличивать её размеры. Добавляем к drawImage() параметры так, чтобы вышло:
g.drawImage(img, 0, 0, 1920, 1080, null);
Что мы сейчас добавили? Эти два параметра растягивают картинку, до координат 1920 и 1080. Получается, что картинка на весь экран. Давайте запустим программу и это проверим.

Ну наконец-то. Теперь мы умеем любые картинки растягивать на весь экран. Но вот проблема. Метод paint вызывается только один раз. И как же его обновлять постоянно? Для этого существует очень полезная вещь — таймер. Давайте создадим его.
Для этого пишем:
Timer timer = new Timer(20, this);
(20 это частота с которой обновляется таймер, this- где выполнять метод при обновлении таймера
Это мы должны вписать сразу после строки определения класса, т.е. после:
public class Main extends JPanel
Также, надо дополнить строку определения класса таким образом:
public class Main extends JPanel implements ActionListener
После прописывания этой строки, у вас название класса должно подчеркнуться красным. Чтобы это исправить, в самом конце класса добавьте метод:
@Override public void actionPerformed(ActionEvent e) < // TODO Auto-generated method stub >
Этот метод будет выполняться при обновлении таймера. В него мы должны написать repaint(); чтобы при каждом обновлении таймера у нас все элементы бы стирались, и нарисовывались заново.
Дальше, мы должны запустить таймер. Для этого, создаем конструктор класса Main и в него пишем:
timer.start();
После этого, можете не запускать программу, ведь в ней ничего не изменится. Давайте заменим текстуру домика на нормальную текстуру карты. Её вы можете нарисовать сами, либо скопировать у меня пробную:

Размер картинки может быть любой, все равно её размер будет подгоняться прямо в программе. Ах да, разрешения компьютеров могут быть разные, так что добавим-ка в конструктор такие вещи:
public Main(JFrame frame)
И перед конструктором добавим:
JFrame frame;
И сходим еще в класс Display.java и там немного изменяем метод frame.add:
frame.add(new Main(frame));
Таким образом, наша рамка будет передаваться в класс Main.java. Переходим в этот класс, и там где у нас метод paint() меняем строку drawImage() на:
g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null);
Таким образом, теперь наша игра будет отрисовывать картинку на весь экран, в независимости от его разрешения. Запускаем:

На сегодня все. Оставляю код, для тех, кто запутался:
Display.java
import javax.swing.JFrame; public class Display < public static void main(String[] args) < JFrame frame = new JFrame("JustGame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true); frame.add(new Main(frame)); frame.setVisible(true); >>
Main.java
import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Main extends JPanel implements ActionListener < Image img = new ImageIcon("2.png").getImage(); Timer timer = new Timer(20, this); JFrame frame; public Main(JFrame frame) < this.frame = frame; >public void paint(Graphics g) < g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null); >@Override public void actionPerformed(ActionEvent e) < // TODO Auto-generated method stub repaint(); >>
Пишем игру “Dendy Tanks” на Java с нуля.
Мы подготовили для вас увлекательный онлайн тренинг по написанию графической игры “Танки”, который поможет легко и быстро познакомиться с практической стороной разработки на Java. Ноль теории, только практика. Если ты никогда не программировал – не проблема! Смотри и делай!
Кому это будет полезно:
- Новичкам. Отсутствие опыта в программировании не должно вас останавливать. Мы предоставляем вам шанс сделать свою первую программу на Java и получить опыт практического применения данного языка программирования в создании настоящей компьютерной игры.
- Начинающим Java разработчикам без опыта. Вы сможете углубить и применить на практике свои знания языка Java под руководством тренера.
Чему вы научитесь:
- Писать простые программы и подпрограммы с использованием языка Java
- Работать с массивами данных
- Использовать типы данных и классы Java
- Применять все базовые навыки (переменные, условные конструкции, циклы, методы) на практике
Формат тренинга
Вас ждёт прямой эфир на YouTube с Андреем Бондаренко в течение 3-х часов, общение в чате во время эфира и в специальном телеграм-канале вне эфира. Все примеры и исходные данные также будут в телеграм-канале, к которому вы сможете присоединиться после регистрации.
Программа тренинга:
- Создание карты поля боя
- Работа над передвижением танка
- Реализация стрельбы
- Обучение танка двигаться в указанный квадрант
- Добавление танка-противника
- Итог: танк проходит всё поле боя и чистит его
- Ответы на вопросы. Куда развиваться дальше?
Подарки
10 самых активных участников тренинга получат от CyberBionic Systematics Подарочные сертификаты на обучение стоимостью 1000 грн.
Учись вместе с друзьями
Регистрируйся на онлайн интенсив и поделись новостью с друзьями. Вместе учиться намного интереснее!
Покупай подписку с доступом ко всем курсам и сервисам
Библиотека современных IT знаний в удобном формате
Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.
- Все видеокурсы на 3 месяца
- Тестирование по 10 курсам
- Проверка 5 домашних заданий
- Консультация с тренером 30 мин
Создание Java-игры: с чего начать
Все, ну почти все, любят видеоигры. Поэтому, даже если вы не собираетесь быть профессиональным разработчиком игр или просто не знаете наверняка, выучить язык программирования на практике и создать свой собственный проект видеоигры - отличная идея. Кроме того, это может быть хорошей мотивацией для вашего обучения.

Эта статья адресована всем, кто думает о создании собственного проекта Java-игры и не знает, с чего начать.
Java плоха для GameDev? .. Мифы и реальность
Если вы прочитаете некоторые форумы и статьи о разработке игр, у вас может сложиться впечатление, что Java не является хорошим выбором для разработки игр. Однако это мнение несколько устарело и неточно. Мир видеоигр очень разнообразен. Условно вы можете разделить игры на следующие категории:
- «Большие» игры. Такие как 3D-шутеры, масштабные экшн-приключения/action RPG. В эту категорию также входят проекты уровня AAA. Обычно это высокобюджетные игры, предназначенные для массовой аудитории, такие как Red Dead Redemption 2, Assassin Creed Origins и так далее. Игры такого типа обычно написаны на C ++ и сопровождаются игровыми движками. Java является редким гостем в разработке игр такого типа из-за особенностей JVM. Точнее, его можно использовать, например, для создания внутренних деталей.
- Инди-игры. Один геймер относится к инди-проектам с презрением, а другой любит их со страстью. Инди-игра означает независимую игру, созданную небольшой командой или даже одним разработчиком.
Среди инди много любительских проектов, некоторые из них не приносят денег своим создателям. Инди больше о оригинальной идее и игровом процессе, хороших сценариях и субъективном видении, а не о производительности и высококачественной графике.
Тем не менее, такие инди-проекты прорываются на рынок и становятся мегапопулярными. Хорошим примером такой игры является Minecraft, изначально созданный одним человеком, Маркусом Перссоном. По состоянию на май 2019 года было продано более 176 миллионов копий Minecraft. Это делает ее одной из самых продаваемых видеоигр всех времен. В 2014 году Microsoft купила Minecraft и Mojang за 2,5 миллиарда долларов США. Кстати, Маркус Перссон является Java-разработчиком, поэтому он написал свое выдающееся детище на этом языке. Так что, да, Java действительно хорош для инди-проектов.
- Мобильные игры. Этот огромный рынок продолжает расти вместе с количеством и производительностью смартфонов. Почти каждый играл в игру на своем мобильном устройстве. Хороша ли Java для разработки мобильных игр? Ответ твердое «да». Доля рынка Android-смартфонов сейчас составляет 80%, и на Java написано очень много мобильных игр.
Выводы: Java хорош для разработки мобильных игр и инди-проектов (эти рынки несколько пересекаются) и для разработки серверной части высоконагруженных онлайн-игр.
Более того, Java является универсальным языком. Он используется при разработке на стороне сервера, в больших данных, мобильных и веб-приложениях, торговых приложениях, встроенном пространстве и т.д. Java Developer может свободно менять свою роль в программировании. Следовательно, Java дает вам свободу выбора, может быть, даже больше, чем любой другой язык программирования.
Может ли новичок-программист создать свою собственную игру? Как это сделать?
На самом деле, даже самую простую видеоигру не так просто написать, особенно для тех, у кого туго с опытом программирования. К счастью, мы живем в эпоху открытой информации, поэтому мы можем найти различные пошаговые инструкции и курсы для разных уровней.
Обсудим три варианта создания игр на Java для начинающых.
Вариант 1. С нуля, используя пошаговые инструкции. CodeGym, Games section
Эта функция подходит для начинающих. Вы можете создать свою версию 6 классических игр с основами знаний Java. Раздел игр на CodeGym не входит в основной курс и доступен бесплатно для всех пользователей.

Раздел CodeGym Games позволяет вам создавать свои собственные версии легендарных видеоигр, таких как Minesweeper, 2048 или Snake (Space Invaders, Moon Lander и Racer находятся в разработке).
Каждая игра представляет собой задание с двумя десятками подзадач и пошаговыми инструкциями. Студент получает подзадачу и советы, пишет код, а затем проверяет с помощью автоматической системы CodeGym. Если код работает правильно, студент переходит к следующему шагу. Весь код пишется непосредственно на сайте CodeGym или в IntelliJ IDEA через специальный плагин, который вы можете получить на CodeGym.
Завершив последний шаг, у вас есть готовая к использованию игра, вы можете опубликовать ее на сайте, настроить ее в соответствии со своим виденьем и поделиться с друзьями.
Что вы должны знать для кодирования этих игр? Это уровень первых программ на Java: начальные знания о классах и объектах, базовые примитивные типы данных, String, циклы и ветки, а также массивы и начальные знания о структуре ArrayList. Авторы CodeGym рекомендуют пройти первые 5 уровней курса, чтобы получить такие знания.
Вариант 2. Для не совсем новичка в Java, который любит Minecraft
Если вам нравится Minecraft, то стоит попробовать сделать некоторые модификации с Java. Большинство модов добавляют некоторый контент в игру, чтобы изменить игровой процесс или дать игроку больше возможностей в том, как они взаимодействуют с миром Minecraft. Например, вы можете закодировать новый, более точный лук или что-то в этом роде. Некоторые люди создают мини-игры прямо в Minecraft.

Даже если вы не большой поклонник этой игры, каждому новичку было бы полезно работать с декомпилированным кодом, пытаясь понять его и изменить его для себя. Позже вы можете играть в Minecraft с вашими собственными режимами.
Чтобы начать с моддинга, у вас должны быть установлены IDE и JDK, а также инструмент для моддинга. Forge - один из самых популярных инструментов для моддинга Java. Есть множество учебных пособий и курсов по моддингу Java Minecraft.
Вот некоторые из них:
- Главное руководство по моддингу Minecraft с Java в 2019 году
- Майнкрафт моддинг учебник 1.12 (видео)
- Учебник по моддингу 1.14 (видео)
Что нужно знать для моддинга Minecraft с Java?
Это зависит от сложности режима, который вы хотите сделать. Вы должны знать хотя бы Java-классы и объекты, основы структур данных, однако было бы гораздо полезнее, если у вас есть более или менее солидные навыки использования ООП, ознакомления с потоками и коллекциями Java.
Случай 3. Я хорошо знаю Java Core, я готов к собственному игровому проекту.
У вас есть идея для независимого кроссплатформенного или мобильного проекта? Может быть, вы знаете, как создать свою собственную версию популярной игры? Что делать, если вы знаете Java Core и больше ничего не знаете о разработке игр? Написание игры на сыром Java - довольно сложная перспектива, но есть действительно интересные и полезные фреймворки и библиотеки, которые помогут вам воплотить вашу идею в жизнь.
Из чего состоит игра?
- Графика
- Физика (способ взаимодействия объектов в игре)
- ИИ (он представлен не в каждой игре, но довольно часто)
- Графический интерфейс пользователя
- Звук
OpenGL - это кроссплатформенный интерфейс прикладного программирования (API) для рендеринга 2D и 3D векторной графики. В Java вы можете использовать функции OpenGL с некоторыми библиотеками - Java3D , JOGL (Java OpenGL) и LWJGL (облегченная библиотека игр Java). Все они кроссплатформенные, бесплатные и с открытым исходным кодом.

Самый популярный - последний, LWJGL. LWJGL предоставляет вам доступ к графической библиотеке OpenGL и содержит все необходимое для создания 2D и 3D игр. LWJGL также поддерживает мощный кроссплатформенный API для создания музыкальных и звуковых эффектов OpenAL и поддерживает OpenCL, стандарт для кроссплатформенного параллельного программирования.
libGDX - это фреймворк LWJGL для кроссплатформенных игр. Он содержит полезный движок Box 2D, который позволяет создавать игровую физику, множество графических классов, инструменты для работы со звуком.
libGDX состоит из нескольких модулей, поэтому вы можете использовать его для создания персонажей на основе AI, управления светом, звуком и физикой.
С помощью libGDX и box2d вы можете разрабатывать игры для разных платформ, таких как Android, iOS, Windows, Linux, MacOS и Web. Вам не нужно заново создавать код для каждого из них, написать его один раз, и он будет работать на любой системе из-за кроссплатформенности.
Поэтому неплохо бы изучить libGDX для начинающего разработчика Java-игр.
Что-то еще?
Разработка игр - это не только программирование. Если вы планируете работать со своим проектом самостоятельно, вам также следует:
- Сделайте некоторые пиксельные рисунки, текстуры, спрайты персонажей. Вам нужен редактор изображений для этого. Например, Pinta или Paint.Net
- Левел-дизайн. Чтобы создать карту, вам нужен набор плиток. Вы можете создать его в графическом редакторе. Для создания карты из плиток вы можете использовать редактор карт Tiled.
- Создайте текстурные атласы. Текстурный атлас - это одно большое изображение, которое содержит все спрайты. Атлас определенно ускоряет процесс разработки. Вы можете использовать бесплатный сервис Sprite для этой задачи.
- Создать графический интерфейс. Используйте, например, Overlap2D
Даже если вы абсолютный новичок, вы можете попробовать создать видеоигру, используя некоторые веб-учебники и инструменты, такие как CodeGym Game Section.
Вы также можете попытаться создать несколько режимов для существующих игр, и Minecraft (версия для Java) вместе с Forge.
Если вы достаточно хорошо знаете Java Core, то libGDX Framework - хороший выбор для изучения и использования в вашем первом игровом проекте.
Зарегистрируйтесь на Портале
и получите красивый адрес своей странички вида: senior.ua/sergey.ivanov