Как сделать игру на java

Добавил пользователь Алексей Ф.
Обновлено: 19.09.2024

Как создать игру на java?
я вполне умею писать на джава, но насчет о создании игры затрудняюсь.
Вот мои траблы:
1. Звук. (год как изучал, но звук так и не смог)
2. Левел-дизайн. (как в код можно прописать каждый блок в уровне и прочее айтемы).
3. Каст-сцены (музыкальная заставочка, или алгоритм бота какого-то. как это осуществить время рассчитывать типо).
4. Анимация спрайтов. (в коде как прописать анимация).
5. Система камеры.

ну в общем всё. Спасибо за помощь! Вы скажете мне "не мучайся и юзай конструкторы типо гамакер". А я настолько люблю Джаву, что отказываюсь от этого всего готового продукта и хочу парочку игр сделать на Джава.

Возможно ли на Java написать красивую игру?
Доброго времени суток! Я начинающий программист,немного знаю pascal,решил заняться Java'ой,мне.

Возможно ли на Java написать 3d движок(частично игру)?
Возможно ли написать на Java движок, который может загружать 3d модели, 3d мир и ходить по нему от.

Помогите написать какую-нибудь игру в Java
пожайство помогите написать какой нибудь игру в java

Лучше смотрите в сторону игровых движков.

--
Если вы хотите написать полноценную 3D игру, то готовьтесь потратить пару месяцев только на создание 3D моделей и костной анимации.

sdasdaw, глупость говорите,
конечно лезть в 3Д не стоит но 2Д поле непознанное и актуально всегда, даже вам больше скажу квейк 1 думм и дюкнукен это 2Д.
На Java 3Д игру написать не трудно если конечно вы не нацелены создать нечто но средней руки можно, но первый камень в огород это обязательная установка библиотек java 3D а иначе работать вообще ничего не будет, а пользователь сейчас ленивый и устанавливать ничего не собирается. Можно загорячиться самому и создать на математике движок но это отдать года 3 надо на эту затею, у вас есть 3 года добросовестного труда и бессонных ночей ? и это не сарказм, впахивать надо как папа Карло чтобы вымучивать что то стоящее.

P.S. а я делаю 2Д игры ^^

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

Я такой человек, что если что-то и делать, то не очередной Flappy Bird. Поэтому, если нужно создать что-то конкурентно способное, то лучше не использовать Java, а готовый движок. (Я нивкоем разе не против Java 2D игр)

Можно загорячиться самому и создать на математике движок но это отдать года 3 надо на эту затею, у вас есть 3 года добросовестного труда и бессонных ночей ?

Если вы это адресуете мне, то я это прекрасно понимаю (особенно когда это все делается в одиночку). И знаю как работает (примерно) рендер. Идет уже 10й месяц как создаю игру.

sdasdaw, Я любитель ретро игр. В денди играю там мясного пацана играл и прочее пиксельные игры. Кароче к таким тянет как то. 3Д я даже не хочу. Только 2д. Я пробовал кстати, но требуеться интернет чтобы нормально юзать LibGDX. Я в деревушке, где интернетом не пахнет. Каждый раз юзать интернет не получиться. Только с работы кое как вот сижу.

Nidl, я тоже только 2Д делаю. Вот как только познакомился с Джавой, у меня начались траблы. С гамакера перешел, создал пару популярных игрушек и захотелось чето другое. Вот джаву нашел как то. ПОизучал, норм. Но полноценных игр с нормальным геймплеем - это сделать НЕВОЗМОЖНО. Но мне хочеться написать игру на чистом коде, ну типо профессионал)
Кстати крутые игры, на чем писал?

NoobMRX, любителям ретро (пикселей), посвящается особенная настройка графики

NoobMRX, Kingdom New Lands советую (саундтрек хотя-бы)

--
Если все же хотите что-то создать, сейчас на шумихе godot. Имеется свой язык (GDScript), движок есть как на виндовс, так и на Linux.

sdasdaw,на java можно шикарное 2д писать и 3д тоже (для 3д только иной подход нужен не классический, я видел как некие умельцы на голой математике и неком алгоритме пиксельных матриц сделал лвл из квейк 4).
я пишу игры только кодом, редакторы не использую, считаю для себя что это не спортивно, на сегодняшний день имею собранный лично код конструктор в котором можно собирать игры с боковым скролом аля марио и посложней, так и изометрию.

Игра где девочка ходит по школе книжки ищет написана на AS2, курочки написаны на AS3 (курочки не 3д, анимация по кадровая), игра про космос написана на AS2, игра где маляфка горничная ходит по вселенной аля сайлент хил скрещенный с кастельванией написана на JAVA это уже третий эпизод приключений, там открытый мир, динамическое освещение, боевка аля первые финал фентези, для рисования лвл и крт сделал свой редактор чтобы ускорить процесс и тоже на JAVA, в игре около 6000+ строчек кода есть система диалогов и мини игр.

Nidl, го мне исходник твоих редакторов уровней и карт. Пожалуйста. А как ты умудрился написать освещение? OpenGL? Анимация спрайтов как реализовал? Кстати как ты скопмилировал проект? В одной jar? Или с папками?

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

Освещение это динамически меняющая в реальном времени картинка, голая математика. Есть объекты которые могут излучать свет и я создал систему ключей которыми могу помечать объекты которые есть свет и какой свет, далее код конструктор динамически по ситуации и рисует картинку с всеми источниками света которую накладывает сверху, у меня кстати свет пульсирует что придает немного атмосферности под это на java пришлось скормить целый поток что дико много, все работает автономно и добавление новой карты с расстановкой NPC врагов и диалогов занимает не более 15 минут ^^ к примеру примитивная модель поведения персонажей которые могут чувствовать препятствия и принимать решения тоже обрабатывает отдельный поток.
Далее спрайты и анимация, здесь 2 пути java, нам нужно окно и им мы делаем JPanel в нем мы помещаем большую картинку JLabel с всей раскадровкой движений и действий которые по шагу или таймеру переставляем. Можно сделать колоду карт из картинок и менять им видимость но при движении можем получить дерганную анимацию. Но из здесь не все радушно, у java не очеь понятная модель добавления графики, конечно многие могут возразить что что здесь не понятного, так то оно так но в потоке все работает по разному, например если в статике картинка нам до лампочки то в потоке тот или иной метод с неба может взять такие жуткие тормаза и это просто из за добавления картинки точнее способа ее отображения на JFrame здесь тоже шло не мало времени что бы нащупать идеальны вариант.
Эм про компиляцию в java, сначало я создаю jar файл в котором вкладываю все ресурсы, музыку спрайты бекграунды, после делаю из него exe с подключением библиотек java, это нужно для того что пользователь не заморачивался установкой jre, так я получаю автономные проекты которые работают от win XP до win 10 включительно.

Самое трудоемкое в создании игр это их нарисовать, на один арт у меня уходит 1 неделя. Можно и быстрей но мой график работы этого не позволяет. Например код курочек я могу набросать за 2 часа, а вот найти и подготовить спрайты бекграунды, или самому их нарисовать, здесь мы имеет недели.

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

* Построение цикла игры при помощи GameCanvas

* Игровые сцены похожи на луковицу

* Использование спрайтов для анимации персонажа

Пакет MIDP 2.0 содержит Game API, упрощающий создание двумерных игр. Этот API является компактным и состоит всего из пяти классов в пакете javax.microedition.lcdui.game. Эти классы обеспечивают две основные возможности:

* Новый класс GameCanvas предоставляет функции прорисовки экрана и реакции на входное воздействие в теле цикла программы игры, не используя системные входные потоки и потоки прорисовки.

* Мощный и гибкий уровень API облегчает создание сложных сцен.

Построение цикла игры при помощи GameCanvas

GameCanvas представляет собой класс Canvas с дополнительными возможностями; он предоставляет методы для непосредственной прорисовки, а также для контроля за состоянием клавиатуры. Эти новые методы делают возможным заключение всей функциональности игры в одном цикле под управлением одного потока. Для того чтобы увидеть преимущества этого подхода, подумайте, как бы вы могли реализовать типовую игру с использованием Canvas:

public void MicroTankCanvas

public void run()

// Обновить состояние игры.

// Задержка на один шаг времени.

public void paint(Graphics g)

protected void keyPressed(int keyCode)

// Реакция на нажатия клавиш.

Это не совсем удачная схема. Метод run(), выполняющийся в потоке приложения, обновляет игру в каждом цикле. Типичной задачей может быть обновление позиции мяча или звездолета и анимация персонажа или объекта. Для обновления экрана метод repaint() вызывается в каждом цикле. Система передает события от клавиатуры в метод keyPresed(), который соответствующим образом обновляет состояние игры.

Проблема заключается в том, что все работает в различных потоках и код игры распределяется по трем различным методам. При вызове в основном цикле анимации в main() метода repaint() нет способа точно определить время вызова системой метода paint(). При вызове системой метода keyPressed() нет способа узнать, что происходит в других частях приложения. Если ваша программа в keyPressed() производит обновление состояния игры одновременно с прорисовкой экрана в paint(), экран может выглядеть не так, как предполагалось. Если прорисовка экрана выполняется дольше времени одного цикла программы в run(), то анимация может выглядеть прерывистой или необычной.

GameCanvas дает вам возможность обойти обычные механизмы прорисовки и обработки событий клавиатуры, и вся логика игры может быть сосредоточена в одном цикле. Во-первых, GameCanvas позволяет вам обратиться непосредственно к своему объекту Graphics при помощи метода getGraphics(). Вся прорисовка на полученном объекте Graphics выполняется в неэкранном буфере. Вы можете затем скопировать буфер на экран, используя flushGraphics(), который не возвращает управления до тех пор, пока экран не будет обновлен. Такой подход обеспечивает более тонкий контроль, чем вызов repaint(). Метод repaint() сразу возвращает управление, и ваше приложение не может точно определить, когда система вызовет paint() для обновления экрана.

GameCanvas также содержит метод для получения текущего состояния клавиатуры, который можно применить для так называемого опроса. Вместо ожидания вызова системой keyPressed() вы можете непосредственно определить, какие клавиши нажаты, вызвав метод GameCanvas getKeyStates().

Типичный цикл игры с использованием GameCanvas может выглядеть примерно так:

public void MicroTankCanvas

public void run()

Graphics g = getGraphics();

// Обновить состояние игры.

int keyState = getKeyStates();

// Реакция на нажатия клавиш.

// Задержка на один шаг времени.

В следующем примере демонстрируется основной цикл игровой программы. Она показывает вращающийся символ X, который вы можете перемещать по экрану при помощи клавиш перемещения курсора. Метод run() является чрезвычайно ясным, благодаря объекту GameCanvas.

public class SimpleGameCanvas

private boolean mTrucking;

private long mFrameDelay;

private int mX, mY;

private int mState;

mX = getWidth() / 2;

mY = getHeight() / 2;

public void start()

Thread t = new Thread(this);

public void stop()

public void run()

Graphics g = getGraphics();

while (mTrucking == true)

catch (InterruptedException ie) <>

private void tick()

mState = (mState + 1) % 20;

private void input()

int keyStates = getKeyStates();

if ((keyStates & LEFT_PRESSED) != 0)

mX = Math.max(0, mX - 1);

if ((keyStates & RIGHT_PRESSED) != 0)

mX = Math.min(getWidth(), mX + 1);

if ((keyStates & UP_PRESSED) != 0)

mY = Math.max(0, mY - 1);

if ((keyStates & DOWN_PRESSED) != 0)

mY = Math.min(getHeight(), mY + 1);

private void render(Graphics g)

g.fillRect(0, 0, getWidth(), getHeight());

g.drawLine(mX, mY, mX - 10 + mState, mY - 10);

g.drawLine(mX, mY, mX + 10, mY - 10 + mState);

g.drawLine(mX, mY, mX + 10 - mState, mY + 10);

g.drawLine(mX, mY, mX - 10, mY + 10 - mState);

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

Образ экрана SimpleGameMIDlet

Игровые сцены похожи на луковицу

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

Game API обеспечивает гибкую поддержку уровней при помощи четырех классов:

* Layer является абстрактным предком всех уровней. Он определяет основные атрибуты уровня, а именно - позицию, размер и видимость уровня. Каждый подкласс Layer должен определить метод paint() для прорисовки уровня на рабочей поверхности Graphics. Два конкретных подкласса TiledLayer и Sprite должны удовлетворить ваши требования в программировании двумерных игр.

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

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

* LayerManager является очень подходящим классом для отслеживания всех уровней вашей сцены. Единичного вызова метода LayerManager paint() достаточно для прорисовки всех связанных с ним уровней.

Использование TiledLayer

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

Исходное изображение

Это изображение может быть разделено на 12 элементов размером 16 х 16 пикселей. Класс TiledLayer присваивает каждому элементу изображения номер, начиная с 1 в верхнем левом углу. Элементы в исходном изображении пронумерованы следующим образом:

Нумерация элементов изображения

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

Image image = Image.createImage("/board.jpg");

TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);

В данном примере новый объект TiledLayer имеет 10 столбцов и 10 строк. Взятые из изображения элементы представляют собой квадраты размером 16 пикселей.

Создание сцены при помощи этих элементов является простой задачей. Для присвоения элемента какой-либо ячейке вызовите setCall(). Вы должны указать номер столбца и строки ячейки и номер элемента. Например, вы можете присвоить элемент 5 третьей ячейке во второй строке, вызвав метод setCell(2, 1, 5). Эти параметры могут показаться вам не правильными. Но обратите внимание, что индекс элемента начинается с 1, а номера столбца и строки начинаются с 0. По умолчанию все ячейки нового объекта TiledLayer имеют значение номера элемента равное 0. Это значит, что они пусты.

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

private TiledLayer createBoard()

Image image = null;

catch (IOException ioe)

TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);

1, 1, 1, 1, 11, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 9, 0, 0, 0, 0, 0,

0, 0, 0, 0, 1, 0, 0, 0, 0, 0,

0, 0, 0, 7, 1, 0, 0, 0, 0, 0,

1, 1, 1, 1, 6, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 7, 11, 0,

0, 0, 0, 0, 0, 0, 7, 6, 0, 0,

0, 0, 0, 0, 0, 7, 6, 0, 0, 0

int column = i % 10;

int row = (i - column) / 10;

tiledLayer.setCell(column, row, map[i]);

Для отображения объекта TiledLayer на экране необходимо передать объект Graphics в его метод paint().

TiledLayer поддерживает также анимированные элементы, упрощающие перемещение набора ячеек по последовательности элементов. Более детальная информация приведена в документации по API для TiledLayer.

Использование спрайтов для анимации персонажа

Другим конкретным объектом Layer, предоставляемым в Game API, является Sprite. В некотором смысле, Sprite является концептуальной инверсией TileLayer. В то время как TiledLayer использует палитру элементов исходного изображения для формирования большой сцены, Sprite использует последовательность фреймов исходного изображения для анимации.

Все, что вам необходимо для создания объекта Sprite - исходное изображение и размер каждого фрейма. В TiledLayer исходное изображение разделяется на одинаковые по размеру элементы; в Sprite элементы изображения называются фреймами. В приведенном ниже примере для создания объекта Sprite с размером фрейма 32 х 32 пикселя используется исходное изображение tank.jpg.

private MicroTankSprite createTank()

Image image = null;

catch (IOException ioe)

return new MicroTankSprite(image, 32, 32);

Каждый фрейм исходного изображения имеет номер, начинающийся с нуля и выше. (Не путайтесь! Помните, что номера элементов изображения начинаются с 1.) Объект Sprite содержит последовательность фреймов, определяющую порядок отображения фреймов. По умолчанию последовательность фреймов в новом объекте Sprite начинается с 0 и продолжается дальше по всем доступным фреймам.

Для перехода к следующему или предыдущему фрейму в последовательности фреймов используются методы Sprite nextFrame() и prevFrame(). Эти методы выполняют циклические переходы в начале или конце последовательности фреймов. Например, если объект Sprite показывает последний фрейм в последовательности фреймов, вызов метода nextFrame() вызовет показ первого фрейма последовательности.

Для указания отличной от принятой по умолчанию последовательности фреймов, передайте последовательность в виде массива целых чисел в метод setFrameSequence().

Есть возможность перейти к определенному элементу текущей последовательности фреймов при помощи вызова метода setFrame(). Нет способа перейти к конкретному фрейму по его номеру. Вы можете только перейти к определенному элементу в последовательности фреймов.

Изменения фрейма станут видимыми только при следующей прорисовке объекта Sprite при помощи метода paint(), наследованного от Layer.

Объект Sprite может также трансформировать исходные фреймы. Их можно вращать на углы, кратные 90 градусам, зеркально отображать, либо комбинировать эти операции. Для этого применяются константы класса Sprite. Текущая трансформация объекта Sprite может быть установлена путем передачи одной из этих констант в метод setTransform(). В следующем примере текущий фрейм зеркально отображается вокруг вертикальной оси и поворачивается на 90 градусов:

Трансформации действуют так, чтобы опорный пиксель объекта Sprite не перемещался. По умолчанию опорный пиксель расположен по координатам 0,0 в координатной сетке объекта Sprite в его верхнем левом углу. При выполнении трансформации расположение опорного пикселя также трансформируется. Месторасположение объекта Sprite корректируется так, чтобы опорный пиксель остался на том же самом месте.

Вы можете изменить месторасположение опорного пикселя при помощи метода defineReferencePixel(). Для многих видов анимации вы будете определять опорный пиксель в центре спрайта.

И, наконец, класс Sprite предоставляет несколько методов collidesWith() для обнаружения конфликтов с другими объектами Sprite, TiledLayer или Image. Вы можете обнаружить конфликт при помощи конфликтных прямоугольников (быстро, но грубо) или на уровне пикселей (медленно, но точно). Нюансы использования этих методов приведены в документации по API.

Пример muTank

Пример muTank демонстрирует использование объектов TiledLayer, Sprite и LayerManager.

Пример muTank

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

MicroTankSprite интенсивно применяет трансформации. Используя исходное изображение только с тремя фреймами, MicroTankSprite может отобразить танк, указывающий на 16 различных направлений. Два открытых public метода turn() и forward() облегчают управление танком.

MicroTankCanvas представляет собой подкласс GameCanvas и содержит цикл анимации в методе run(), который должен быть вам знаком. Метод tick() определяет факт столкновения танка с границей поля. Если это обнаружено, последнее перемещение отменяется при помощи метода MicroTankSprite undo(). Метод input() просто контролирует нажатия клавиш и соответствующим образом корректирует направление или позицию танка. Метод render() использует объект LayerManager для управления прорисовкой. Объект LayerManager содержит два уровня - один для танка, один для игрового поля.

Метод debug(), вызываемый из цикла программы, сравнивает время цикла программы с желаемым временем цикла (80 миллисекунд) и отображает процент использованного времени на экране. Этот процесс выполняется только в диагностических целях и должен быть удален перед передачей игры пользователям.

Синхронизация цикла игры является более сложной, чем в предыдущем примере SimpleGameCanvas. Для того чтобы выполнить одну итерацию цикла игры точно за 80 миллисекунд, программа MicroTankCanvas измеряет время, затраченное на выполнение tick(), input() и render(). Затем она останавливается на оставшееся до 80 миллисекунд время цикла, поддерживая общее время выполнения каждой итерации как можно ближе к значению в 80 миллисекунд.

Game API пакета MIDP 2.0 предоставляет среду, упрощающую разработку двумерных игр. Во-первых, класс GameCanvas обеспечивает методы прорисовки и ввода событий клавиатуры, которые делают возможным создание компактного цикла игровой программы. Далее, система уровней дает возможность создавать сложные сцены. Класс TiledLayer собирает большой фон или сцену из палитры элементов исходного изображения. Класс Sprite подходит для анимированных персонажей и способен обнаруживать конфликты с другими объектами в игре. Класс LayerManager является связующим элементом, собирающим вместе различные уровни. Пример muTank предоставляет основу рабочего кода, демонстрирующего использование Game API.

Об авторе: Jonathan Knudsen [e-mail] [домашняя страница] является автором нескольких книг, в том числе "Беспроводная Java, второе издание", "Неофициальное руководство по роботам LEGO MINDSTORMS", "Изучение Java, второе издание" и "2D-графика в Java". Джонатан написал много статей о Java и роботах Lego, в том числе статьи для JavaWorld, EXE, NZZ Folio и O'Reilly Network. Джонатан имеет степень Принстонского университета по машиностроению.

Итак, что же нам нужно? В первую очередь, конечно, для работы необходима среда IDE. Я использовал Eclipse, хотя и в Net Beance мой код вполне корректно работал и редактировался.

Затем нам нужно обеспечить импорт необходимых библиотечных классов. В них есть всё, что нужно для обработки нашего кода.

import static java.lang.System.out;

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

public static void main(String[] args)

throws NumberFormatException, IOException,

// TODO Auto-generated method stub

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

"\nпервый раз", "\nвторой раз", "\nтретий раз", "\nчетвёртый раз", "Это была "

+ "последняя попытка, вы проиграли ", "Вы ввели слишком большое число, вы ошиблись",

"Вы ввели слишком малое число, вы ошиблись", "Вы ввели верное число и выиграли!", "Введите"

+ " число ", "Угадайте число до 100 и введите сюда ", "Вы проиграли", "Вы ввели отрицательное "

+ "число, Введите число", "Вы ввели отрицательное число, Введите число">;

BufferedReader reader = new BufferedReader

StringBuilder lr = new StringBuilder();

lr.append("\nУ вас только 5 попыток!");

Метод Integer.parseInt позволит нам прочесть цифры из строки (строка и цифры для Java — разные типы данных и без точного указания, что читать, среда разработки выдаст ошибку).

int s = Integer.parseInt(reader.readLine());

Random r = new Random();

int x = r.nextInt(100)+1;

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

Эта статья адресована всем, кто думает о создании собственного проекта Java-игры и не знает, с чего начать.

Java плоха для GameDev? .. Мифы и реальность

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

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

Тем не менее, такие инди-проекты прорываются на рынок и становятся мегапопулярными. Хорошим примером такой игры является Minecraft, изначально созданный одним человеком, Маркусом Перссоном. По состоянию на май 2019 года было продано более 176 миллионов копий Minecraft. Это делает ее одной из самых продаваемых видеоигр всех времен. В 2014 году Microsoft купила Minecraft и Mojang за 2,5 миллиарда долларов США. Кстати, Маркус Перссон является Java-разработчиком, поэтому он написал свое выдающееся детище на этом языке. Так что, да, Java действительно хорош для инди-проектов.

Выводы: Java хорош для разработки мобильных игр и инди-проектов (эти рынки несколько пересекаются) и для разработки серверной части высоконагруженных онлайн-игр.

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

Может ли новичок-программист создать свою собственную игру? Как это сделать?

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

Обсудим три варианта создания игр на Java для начинающых.

Вариант 1. С нуля, используя пошаговые инструкции. CodeGym, Games section

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

Создание Java-игры: с чего начать

Раздел 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?

Это зависит от сложности режима, который вы хотите сделать. Вы должны знать хотя бы Java-классы и объекты, основы структур данных, однако было бы гораздо полезнее, если у вас есть более или менее солидные навыки использования ООП, ознакомления с потоками и коллекциями Java.

Случай 3. Я хорошо знаю Java Core, я готов к собственному игровому проекту.

У вас есть идея для независимого кроссплатформенного или мобильного проекта? Может быть, вы знаете, как создать свою собственную версию популярной игры? Что делать, если вы знаете Java Core и больше ничего не знаете о разработке игр? Написание игры на сыром Java - довольно сложная перспектива, но есть действительно интересные и полезные фреймворки и библиотеки, которые помогут вам воплотить вашу идею в жизнь.

Из чего состоит игра?

  • Графика
  • Физика (способ взаимодействия объектов в игре)
  • ИИ (он представлен не в каждой игре, но довольно часто)
  • Графический интерфейс пользователя
  • Звук

OpenGL - это кроссплатформенный интерфейс прикладного программирования (API) для рендеринга 2D и 3D векторной графики. В Java вы можете использовать функции OpenGL с некоторыми библиотеками - Java3D , JOGL (Java OpenGL) и LWJGL (облегченная библиотека игр Java). Все они кроссплатформенные, бесплатные и с открытым исходным кодом.

Создание 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-игр.

Что-то еще?

Разработка игр - это не только программирование. Если вы планируете работать со своим проектом самостоятельно, вам также следует:

Даже если вы абсолютный новичок, вы можете попробовать создать видеоигру, используя некоторые веб-учебники и инструменты, такие как CodeGym Game Section.

Вы также можете попытаться создать несколько режимов для существующих игр, и Minecraft (версия для Java) вместе с Forge.

Если вы достаточно хорошо знаете Java Core, то libGDX Framework - хороший выбор для изучения и использования в вашем первом игровом проекте.

Читайте также: