Flappy Ball
Sebelum kita mulai ke cara pembuatan game flappyball ini, pastikan pc/laptop kalian sudah terinstall java sebelumnya karena jika tidak game ini tidak dapat dijalankan, game ini membutuhkan Java Virtual Machine (JVM) untuk menjalankannya.
Disini saya akan menggunakan netbean untuk proses pembuatan game ini jika kalian ingin menggunakan kode editor yang lain selain netbean seperti eclipse, sublime.. dll. Silahkan, yang terpenting dapat membuat kalian nyaman pada saat proses pembuatan game ini.
Berikut saya bagi dua kelas dalam membuat game ini, yaitu kelas FlappyBall (kelas utama nya) dan kelas Renderer.
Cara membuat project file class di netbeans :
klik File >> New Project >> (Pilih Java Application) Next >> (Beri Nama Project FlappyBall pada Project Name) Finish. Jika sudah maka kelas FlappyBall.java akan terbentuk, kemudian tambah kelas baru dengan nama Renderer.java klik kanan (mouse) pada project FlappyBall : New >> Java Class kemudian beri nama Renderer pada kolom Class Name maka kelas Renderer.java akan terbuat.
Berikut Source Code Renderer.java :
package flappyball;
//mengimport library kebutuhan-kebutuhan render
import java.awt.Graphics;
import javax.swing.JPanel;
//kelas Renderer ini dipakai untuk melakukan render warna pada tiap - tiap objek yang ada dalam game
public class Renderer extends JPanel {
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g){
super.paintComponent(g);
//perintah untuk mengatur warna pada game
FlappyBall.flappyball.repaint(g);
}
}
Berikut Source Code FlappyBall.java
package flappyball;
/*kumpulan library yang di import dan digunakan untuk membuat desain, bentuk, warna dan aksi pada game ini*/
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.Timer;
/*
kelas flappy ball mengimpelementasikan event yang berguna untuk menangkap input(masukan) dari user berupa
kunci key khusus dari keyboard yang diketikan oleh user & input(masukan) dari user ketika user mengklik mouse
*/
public class FlappyBall implements ActionListener, MouseListener, KeyListener{
//variabel flappyball ini mewakili kelas flappyball digunakan pada kelas renderer untuk merepaint bentuk sebuah game
public static FlappyBall flappyball;
//variabel LEBAR dan TINGGI ini digunakan untuk menentukan besar TINGGI dan LEBAR dari frame pada game ini
public final int LEBAR = 1200, TINGGI = 700;
//variabel ini digunakan untuk instansiasi objek kelas Renderer
public Renderer renderer;
//variabel ini digunakan sebagai bentuk ojek dari sebuah bolanya pada game yang berbentuk rectangle
public Rectangle ball;
//variabel ini digunakan untuk menampung banyak data untuk menampilkan rintangan tiang ketika game dijalankan
public ArrayList<Rectangle> columns;
//variabel score berfungsi untuk menampung skor yang dikumpulkan ketika berhasil melewati tiang-tiang
//variabel yMotion berfungsi untuk membuat bola dapat bergerak agak lambat ketika bola melompat dan terjatuh
//variabel ticks digunakan untuk mengatur tekanan bola ketika bola digerakkan
public int ticks, yMotion, score;
//variabel gameOver digunakan untuk menentukan kondisi jika game telah berakhir, started untuk kondisi berawalnya sebuah game
public boolean gameOver, started;
//variabel ini digunakan untuk bilangan random
public Random rand;
//constructor kelas flappyball
public FlappyBall(){
JFrame jframe = new JFrame();//instansiasi objek jframe untuk membuat sebuah frame game
Timer timer = new Timer(20, this);//instansiasi objek waktu sebagai waktu permainan
//instansiasi objek kelas renderer dibuat untuk menampilkan bentuk dari gamenya ketika program di run
renderer = new Renderer();
//instansiasi objek random digunakan untuk membangkitkan bilangan random
rand = new Random();
jframe.add(renderer);//jframe menambahkan renderer, variabel dari instansiasi kelas Renderer yang merender warna dan bentuk sebuah permainan
jframe.setTitle("Flappy Ball");//memasang sebuah judul pada jframe permainan dibagian atas
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setSize(LEBAR, TINGGI);//untuk mengatur lebar dan tinggi jframe game
jframe.addMouseListener(this);//menambahkan event mouse pada jframe ketika program dijalankan
jframe.addKeyListener(this);//menambahkan event mkeyboard(key) pada jframe ketika program dijalankan
jframe.setResizable(false);//perintah untuk menonaktifkan modifikasi ukuran jframe kepada user ketika game dijalankan
jframe.setVisible(true);//untuk menampilkan jframe ketika program di run
ball = new Rectangle(LEBAR / 2 - 10, TINGGI / 2 - 10, 20, 20);//mengatur ukuran objek bola pada permainan
columns = new ArrayList<Rectangle>();//menginstansiasi objek pada kelas ArrayList
//perintah dibawah ini untuk menambahkan sebuah kolom yang menampilkan tiang-tiang rintangan
addColumn(true);
addColumn(true);
addColumn(true);
addColumn(true);
//perintah ini digunakan untuk memulai waktu permainan
timer.start();
}
//method ini digunakan untuk menampilkan tiang-tiang rintangan ketika game dijalankan
public void addColumn(boolean start){
int space = 300;
int width = 100;
int height = 50 + rand.nextInt(300);
if (start) {
columns.add(new Rectangle(LEBAR + width + columns.size() * 300, TINGGI - height - 120, width, height));
columns.add(new Rectangle(LEBAR + width + (columns.size() - 1)* 300, 0, width, TINGGI - height - space));
}else{
columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, TINGGI - height - 120, width, height));
columns.add(new Rectangle(columns.get(columns.size() - 1).x, 0, width, TINGGI - height - space));
}
}
//method ini digunakan untuk mewarnakan objek tiang pada game
public void paintColumn(Graphics g, Rectangle column){
g.setColor(Color.green.darker());
g.fillRect(column.x, column.y, column.width, column.height);
}
//method ini digunakan untuk membuat sebuah objek bola dapat melompat
public void jump(){
if (gameOver) {
ball = new Rectangle(LEBAR / 2 - 10, TINGGI / 2 - 10, 20, 20);
columns.clear();
yMotion = 0;
score = 0;
addColumn(true);
addColumn(true);
addColumn(true);
addColumn(true);
gameOver = false;
}
if (!started) {
started = true;
}else if(!gameOver){
if (yMotion > 0) {
yMotion = 0;
}
yMotion -= 10;
}
}
//method ini untuk mengatur event pada sebuah game seperti kecepatan gerak bola pada game
@Override
public void actionPerformed(ActionEvent e){
int speed = 10;
ticks++;
if (started) {
for (int i = 0; i < columns.size(); i++) {
Rectangle column = columns.get(i);
column.x -= speed;
}
if (ticks % 2 == 0 && yMotion < 15) {
yMotion += 2;
}
for (int i = 0; i < columns.size(); i++) {
Rectangle column = columns.get(i);
if (column.x + column.width < 0) {
columns.remove(column);
if (column.y == 0) {
addColumn(false);
}
}
}
ball.y += yMotion;
for (Rectangle column : columns) {
if (column.y == 0 && ball.x + ball.width / 2 > column.x + column.width / 2 - 10 && ball.x + ball.width / 2 < column.x + column.width / 2 + 10) {
score++;
}
if (column.intersects(ball)) {
gameOver = true;
if (ball.x <= column.x) {
ball.x = column.x - ball.width;
}else{
if (column.y != 0){
ball.y = column.y - ball.height;
}else if(ball.y < column.height){
ball.y = column.height;
}
}
}
}
if (ball.y > TINGGI - 100 || ball.y < 0) {
gameOver = true;
}
if (ball.y + yMotion >= TINGGI - 120) {
ball.y = TINGGI - 120 - ball.height;
}
}
//perintah ini digunakan untuk menampilkan sebuahn game
renderer.repaint();
}
//method ini digunakan untuk memberikan warna objek yang ada pada game
public void repaint(Graphics g) {
g.setColor(Color.cyan);
g.fillRect(0, 0, LEBAR, TINGGI);
//blok perintah untuk permukaan tanah
g.setColor(Color.orange);
g.fillRect(0, TINGGI - 120, LEBAR, 150);
//blok perintah untuk rerumputan
g.setColor(Color.green);
g.fillRect(0, TINGGI - 120, LEBAR, 20);
g.setColor(Color.blue);
g.fillRect(ball.x, ball.y, ball.width, ball.height);
for(Rectangle column : columns){
paintColumn(g, column);
}
g.setColor(Color.yellow);
g.setFont(new Font("Arial", 1, 100));
if (!started) {
g.drawString("Click to Start", 320, TINGGI / 2 - 50);
}
if (gameOver) {
g.drawString("Game Over", 320, TINGGI / 2 - 50);
}
if (!gameOver && started) {
g.drawString(String.valueOf(score), LEBAR / 2 - 25, 100);
}
}
//pada blok program inti kita membuat instansiasi objek flappyball
public static void main(String[] args) {
flappyball = new FlappyBall();
}
//perintah ini ialah sebuah event dimana ketika mouse di klik oleh user maka bola akan melompat
@Override
public void mouseClicked(MouseEvent e) {
jump();//memanggil method jump
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
//perintah juga merupakan sebuah event untuk user agar user dapat berinteraksi dengan objek bola pada game menggunakan key pada keyboard
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
jump();
}
}
}
Setelah semua perintah berhasil terbuat, kemudian jalankan source code FlappyBall.java dengan mengklik kanan mouse >> Run File. maka game pun sudah bisa dimainkan dengan menggunakan mouse/keyboard. Demikianlah proses pembuatan game FlappyBall ini, Jika ada salah kata/kalimat dalam menjelaskan saya pribadi mohon maaf, semoga penjelasan yang saya dapat dimengerti oleh pembaca sekalian. Terima Kasih :)
Ref :
https://www.youtube.com/watch?v=I1qTZaUcFX0