Project on java games

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

java-game

Here are 325 public repositories matching this topic.

FreeCol / freecol

FreeCol: FreeCol is a turn-based strategy game based on the old game Colonization, and similar to Civilization. The objective of the game is to create an independent nation.

PixelGuys / Cubyz

Voxel game with extensive modding API and procedural generated content.

mingli1 / Unlucky

Java LibGDX Android 2D RPG Game

mykola-dev / Tetris

The well known brick game written with Kotlin Multiplatform and Jetpack Compose Multiplatform.

hdescottes / GdxGame

Turn-based RPG game using Java and libGDX

arminkz / PlantsVsZombies

My own clone of Plants Vs. Zombies game using Java/Swing

TheDudeFromCI / WraithEngine

A free, open source, Java game engine library built on top of LWJGL. Designed to act as a use-exactly-what-you-need, no-assumptions framework, WraithEngine is versatile enough to act as a library within other tools or projects, or a full fledged standalone game engine.

Читайте также:  Can you run it java plugin

Rohitjoshi9023 / KBC—Kaun-Banega-Crorepati

It is Core Java based Game based on Indian television game show having best animation as possible in Core java 5000+ lines

2003scape / rsc-client

🎮 runescape classic web client

OSSpk / Minesweeper-Desktop-Game

💣 An object-oriented clone of the famous Windows game Minesweeper made in Java-Swing Framework following the Model View Controller (MVC) Architecture. Its a stand-alone desktop game which also provides save and load game functionalities.

ashish2199 / Aidos

A beginner friendly project with aim of creating our own version of Bomberman.

Sesu8642 / FeudalTactics

Strategy game with countless unique and challenging levels.

mtala3t / Super-Mario-Java-2D-Game

It is a simple Java 2D game like super mario.

kishanrajput23 / Java-Tutorials

Compilation of all study materials related to code with harry java course with assignment solutions

rafiulgits / SFC-The-Game

A game, developing for create awareness about cancer

derickfelix / GreatSpace

👾 Space Invaders Game Style

mynttt / gnuman

Satirical Pacman Clone with Map Editor using JavaFX

onurozuduru / java-shooter-game-project

A simple Java game project for programming class.

tonikolaba / BatBat-Game

BatBat 🔋 ⚡ is an easy and free Maven Java game run in Spring Boot.

arminkz / Pacman

A simple java game using swing also with Map Editor and Map Compiler

Improve this page

Add a description, image, and links to the java-game topic page so that developers can more easily learn about it.

Add this topic to your repo

To associate your repository with the java-game topic, visit your repo’s landing page and select «manage topics.»

Источник

Пишем 2-d игру на Java #2

Доброго времени суток всем! Продолжение 1-ого урока (ссылка на первый).

Задачи

Начало

Приступим. Для начала создадим новый класс Player.java.

Создадим несколько переменных, типа int. Первая это x, вторая это y, и третья speed. Пускай они будут приватными, во избежание дальнейших ошибок(установите сразу им значения, x=0, y=0, speed = любая скорость, я буду ставить 2). Также, создадим три метода — getSpeed(), getX() и getY(). Они выглядят так:

 public int getX() < return x; >public int getY() < return y; >public int getSpeed()

Они будут возвращать нам текущие x и y координаты нашего игрока, а также скорость игрока.

Теперь, нам нужен метод, отвечающий за движение. Так его и назовем — move. Пока у нас нету слушателя клавиш, по этому, просто напишем:

Возвращаемся в наш класс Main.java и в нем, создаем объект нашего игрока:

Player player = new Player();

Далее, в методе actionPerformed() пишем:

Теперь, у нас при каждом обновлении таймера будет двигаться игрок. Но сейчас мы это движение не увидим, т.к. координаты игрока мы нигде не используем. Сейчас я коротко объясню как происходит движение на экране. Двигается не сама картинка нашего игрока, а задний план, который имитирует движение игрока. Так что, переходим в метод paint() и там, вместо координат отрисовки, вписываем player.getX() и player.getY(). Должно выйти так:

g.drawImage(img, player.getX(), player.getY(),frame.getWidth(), frame.getHeight(), null);

Запускаем, и видим что наш фон двигается.

Теперь я объясню, что мы не совсем корректно сделали.

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

По-хорошему, мы должны иметь отдельный объект, Universe (Вселенная) в котором и будет содержаться информация о нашей карте(время суток, координаты и т.п.). В последующих уроках мы это сделаем, а пока, просто добавим в классе игрока две новые переменные: mapX и mapY, и сразу установим им значения, 0 и 0. И, как в случае с x и y, создадим 2 getter’a.

Теперь подкорректируем наш метод move().

Напишем вместо x+=speed это:

И вернемся к методу paint и поменяем

g.drawImage(img, player.getX(), player.getY(),frame.getWidth(), frame.getHeight(), null);
g.drawImage(img, player.getMapX(), player.getMapY(),frame.getWidth(), frame.getHeight(), null);

Запускаем, и видим что ничего не поменялось. Это хороший знак, значит мы все правильно сделали.

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

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

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

В конструкторе класса Main.java допишем такую строку:

frame.addKeyListener(new KeyAdapter() < >);

Некоторые могут спросить, почему мы используем метод «добавить слушателя», а добавляем адаптер? Просто адаптер позволяет не использовать все три метода класса слушателя, а допустим, как в нашем случае, мы реализуем в нем только два:

 @Override public void keyPressed(KeyEvent e) < // TODO Auto-generated method stub >@Override public void keyReleased(KeyEvent e) < // TODO Auto-generated method stub >

Первый метод отвечает за нажатие на клавишу, а второй за ее отпускание. Третий метод реагирует на короткое нажатие клавиши, а не задерживание её, как в первом методе. Теперь, чтобы у нас не получилась белеберда, и чтобы не усложнять себе жизнь, сделаем точно такие же два метода в классе игрока. И теперь в наших методах, находящихся в классе Main.java напишем:

Готово! Теперь у нас есть слушатель нажатий на клавиши. Давайте проверим его работоспособность, просто написав в каждом из методов в классе Player.java такую строку:

System.out.println(e.getKeyCode());

Запускаем программу, смотрим в нашу консоль, и нажимаем на клавиши.

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

Теперь создадим энум, который будет отвечать за направление игрока. Для тех, кто не знает, энум, это такая переменная, которая может иметь несколько значений, которые мы заранее прописали. Создаем энум, под названием Direction. В него, через запятую, пишем такие значения: UP, DOWN, LEFT, RIGHT, NONE. Теперь, в классе Player создаем новую переменную типа Direction, которую назовем playerDirection (сразу поставьте значение Direction.NONE). Теперь, сделаем так, чтобы при нажатии соответствующих кнопок, направление игрока изменялось. Кстати, мы всегда будем работать с методами keyPressed и keyReleased из класса Player.java, в классе Main.java их не трогайте. Так вот, для начала, в методе keyPressed объявим переменную, типа int, которая равна e.getKeyCode(). Мы делаем это для удобства, чтобы в дальнейшем каждый раз не прописывать одно и то же. Так вот, дальше пишем:

if(key == KeyEvent.VK_W) < playerDirection = Direction.UP; >if(key == KeyEvent.VK_S) < playerDirection = Direction.DOWN; >if(key == KeyEvent.VK_A) < playerDirection = Direction.LEFT; >if(key == KeyEvent.VK_D)

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

Далее, изменим метод move. Он должен будет выглядеть так:

Для тех, кто не знает, switch это тоже самое что и if, только в более удобной форме. Запускаем программу, и любуемся!

На сегодня все. Опять же, оставляю весь код, для тех, кто запутался.

Player.java

import java.awt.event.KeyEvent; public class Player < private int x = 0; private int y = 0; private int speed = 2; private int mapX = 0; private int mapY = 0; private Direction playerDirection = Direction.NONE; public void move() < switch(playerDirection) < case UP: mapY+=speed; break; case DOWN: mapY-=speed; break; case LEFT: mapX+=speed; break; case RIGHT: mapX-=speed; break; default: break; >> public void keyPressed(KeyEvent e) < int key = e.getKeyCode(); if(key == KeyEvent.VK_W) < playerDirection = Direction.UP; >if(key == KeyEvent.VK_S) < playerDirection = Direction.DOWN; >if(key == KeyEvent.VK_A) < playerDirection = Direction.LEFT; >if(key == KeyEvent.VK_D) < playerDirection = Direction.RIGHT; >> public void keyReleased(KeyEvent e) < System.out.println(e.getKeyCode()); >public int getX() < return x; >public int getY() < return y; >public int getSpeed() < return speed; >public int getMapX() < return mapX; >public int getMapY() < return mapY; >> 

Main.java

import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; 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); Player player = new Player(); JFrame frame; public Main(JFrame frame) < this.frame = frame; timer.start(); frame.addKeyListener(new KeyAdapter() < @Override public void keyPressed(KeyEvent e) < // TODO Auto-generated method stub player.keyPressed(e); >@Override public void keyReleased(KeyEvent e) < // TODO Auto-generated method stub player.keyReleased(e); >>); > public void paint(Graphics g) < g.drawImage(img, player.getMapX(), player.getMapY(),frame.getWidth(), frame.getHeight(), null); >@Override public void actionPerformed(ActionEvent e) < // TODO Auto-generated method stub repaint(); player.move(); >> 

Display.java

Спасибо за внимание! Не забудьте проголосовать.

Источник

Оцените статью