Java games and codes

Simple 2D arcade game in java with source code

Today we are going to see how to create a sample classic arcade video game using only a sample code of java. The object of the game (mini project) is to prevent the ball from falling while moving the cursor left or right. the score increase by +1 point in every touch and best score is displayed when the red ball falls. i have also made a challenge by activating another black ball, the user should avoid it or the game is over. in every +10 point the speed increase x2 to make the game difficult.

Source Code

import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.Timer; import javax.swing.WindowConstants; public class RedBall extends JComponent implements ActionListener, MouseMotionListener, KeyListener  private int ballx = 150; private int bally = 30; private int ballx1 = 100; private int bally1 = 10; private int paddlex = 0; private int ballySpeed = 7; private int ballxSpeed = 5; private int bally1Speed = 14; private int ballx1Speed = 10; public int score = 0; public int score1 = 0; private int scorefinal; public int bestscore; public int bestscore1; public boolean gameOver, started; public static void main(String[] args)  JFrame wind = new JFrame("RedBall/GamePinfo"); RedBall g = new RedBall(); wind.add(g); wind.pack(); wind.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); wind.setLocationRelativeTo(null); wind.setVisible(true); wind.addMouseMotionListener(g); Timer tt = new Timer(17, g); tt.start(); > public void newball(int ballx, int bally, int ballxspeed, int ballyspeed)  ballx = 150; bally = 30; ballxspeed = 5; ballyspeed = 7; JOptionPane.showMessageDialog(null, "new ball !"); return; > @Override public Dimension getPreferredSize()  return new Dimension(800, 600); > @Override protected void paintComponent(Graphics g)  //draw the sky g.setColor(Color.cyan); g.fillRect(0, 0, 800, 600); g.setColor(Color.GREEN); g.fillRect(0, 550, 800, 100); //draw the paddel g.setColor(Color.black); g.fillRect(paddlex, 500, 100, 20); //draw the ball g.setColor(Color.RED); g.fillOval(ballx, bally, 30, 30); //draw the ball_1 if (score >= 5)  g.setColor(Color.BLACK); g.fillOval(ballx1, bally1, 30, 30); > //score if (score >= 5)  g.setColor(Color.red); g.setFont(new Font("Arial", 8, 50)); g.drawString(String.valueOf(score + score1), 30 / 1 - 15, 80); > else  g.setColor(Color.white); g.setFont(new Font("Arial", 8, 50)); g.drawString(String.valueOf(score), 30 / 1 - 15, 80); > // start && gameOver g.setColor(Color.white); g.setFont(new Font("Arial", 8, 50)); if (gameOver)  g.drawString(String.valueOf(" Best Score :" + scorefinal), 50 / 1 - 15, 200); > > @Override public void actionPerformed(ActionEvent e)  ballx = ballx + ballxSpeed; bally = bally + ballySpeed; // Window Down if (ballx >= paddlex && ballx  paddlex + 100 && bally >= 475)  ballySpeed = -7; score++; > if (bally >= 700 )  score = 0; bally = 30; gameOver = true; > // Window up if (bally  0)  ballySpeed = 7; > // Window right if (ballx >= 775)  ballxSpeed = -5; > // Window left if (ballx  0)  ballxSpeed = 5; > //********************************************************************** ballx1 = ballx1 + ballx1Speed; bally1 = bally1 + bally1Speed; // Window down if (ballx1 >= paddlex && ballx1  paddlex + 100 && bally1 >= 475)  bally1Speed = -14; score1++; > if (bally1 >= 700)  score1 = 0; bally1 = 10; > // Window up if (bally1  0)  bally1Speed = 14; > // Window right if (ballx1 >= 775)  ballx1Speed = -10; > // Window left if (ballx1  0)  ballx1Speed = 10; > //********************************************************************** bestscore = score; bestscore1 = score1; if (scorefinal > bestscore)  scorefinal = scorefinal; > else  scorefinal = bestscore1; scorefinal = score + score1; > if (scorefinal > bestscore)  scorefinal = scorefinal; > else  scorefinal = bestscore; scorefinal = score + score1; > repaint(); > @Override public void mouseMoved(MouseEvent e)  paddlex = e.getX() - 50; repaint(); > @Override public void mouseDragged(MouseEvent e)  > @Override public void keyTyped(KeyEvent e)  > @Override public void keyPressed(KeyEvent e)  > @Override public void keyReleased(KeyEvent e)  > > 

Источник

Пишем 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 -можно

Только не забудьте, все настройки рамки надо писать до того, как вы сделаете её видимой

Ну чтож, теперь нажимаем «Run» и пробуем запустить нашу игру. Если все написано правильно, у вас не должны возникать ошибки и должно появиться пустое, серое окно.

Серое окно… Как скучно… Давайте создадим что-нибудь поинтереснее.

Создадим новый класс, под названием «Main». Main класс у нас будет являться панелью, которую мы вставим в рамку, по этому он должен расширять JPanel. (Для тех, кто не знает, расширять пишется как extends после названия класса)

Возвращаемся в класс Display и после настроек рамки, но перед установлением её видимости, пишем:

Вы спросите — «Ну и зачем мы это сделали?». Представьте себе картину. Эта картина и является конечная наша игра. А теперь представьте рамку. Без ничего внутри, просто пустую рамку. На ней ничего нельзя нарисовать, она бесполезна. Для этого, мы вставили в картину пустой лист, на котором программа в дальнейшем может рисовать картину. На этом закончим наше лирическое отступление и вернемся к классу Main.

Нам нужно осуществить отрисовку, по этому мы должны добавить метод paint. Для этого пишем:

public void paint(Graphics g) < //отрисовка всех объектов >

Ну и для начала, можем написать внутри этого метода отрисовку линии. Для этого пишем:

Теперь запускаем программу, и видим:

image

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

image

Для начала, нам нужно указать путь к картинке. Для этого не в методе paint, пишем:

Image img = new ImageIcon("2.png").getImage();

(предварительно надо в наш проект скинуть картинку и назвать ее 2.png)

После этого удаляем строчку отрисовки линии, а вместо нее в метод paint пишем:

Разберемся поближе с методом drawImage, так как мы будем часто его затрагивать.

drawImage(картинка которую мы будем рисовать, которую мы объявили раннее, координата X с которой будет рисоваться картинка, координата Y с которой будет рисоваться картинка, paint);

Отдельно хочу поговорить о параметре paint. Лучше всего оставляйте его null. Я только однажды сталкивался, когда мне нужно было использовать paint. Это было когда я отрисовывал текст, и задавал ему размер шрифта. Но советую не лезть туда и использовать null.

Теперь запускаем программу, и видим:

image

Чего-то она маленькая, не правда ли? Давайте научимся увеличивать её размеры. Добавляем к drawImage() параметры так, чтобы вышло:

g.drawImage(img, 0, 0, 1920, 1080, null);

Что мы сейчас добавили? Эти два параметра растягивают картинку, до координат 1920 и 1080. Получается, что картинка на весь экран. Давайте запустим программу и это проверим.

image

Ну наконец-то. Теперь мы умеем любые картинки растягивать на весь экран. Но вот проблема. Метод 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 и в него пишем:

После этого, можете не запускать программу, ведь в ней ничего не изменится. Давайте заменим текстуру домика на нормальную текстуру карты. Её вы можете нарисовать сами, либо скопировать у меня пробную:

image

Размер картинки может быть любой, все равно её размер будет подгоняться прямо в программе. Ах да, разрешения компьютеров могут быть разные, так что добавим-ка в конструктор такие вещи:

И перед конструктором добавим:

И сходим еще в класс Display.java и там немного изменяем метод frame.add:

Таким образом, наша рамка будет передаваться в класс Main.java. Переходим в этот класс, и там где у нас метод paint() меняем строку drawImage() на:

g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null);

Таким образом, теперь наша игра будет отрисовывать картинку на весь экран, в независимости от его разрешения. Запускаем:

image

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

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(); >>

Источник

Читайте также:  METANIT.COM
Оцените статью