aringga96 Blog

Perkenalkan Saya Riza. Selamat Datang di Blog Saya

Selamat Datang di Blog Saya

Pilihlah Kategori Blog yang ingin Dibaca

Technology

is the collection of techniques, skills, methods, and processes used in the production of goods or services or in the accomplishment of objectives, such as scientific investigation. Technology can be the knowledge of techniques, processes, and the like, or it can be embedded in machines to allow for operation without detailed knowledge of their workings.

Windows 7

is a personal computer operating system developed by Microsoft. It is a part of the Windows NT family of operating systems. Windows 7 was released to manufacturing on July 22, 2009, and became generally available on October 22, 2009,[8] less than three years after the release of its predecessor, Windows Vista. Windows 7's server counterpart, Windows Server 2008 R2, was released at the same time.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Wednesday, July 31, 2019

Membuat Game Flappy Ball Menggunakan Java, Inovasi Dari Game Flappy Bird..

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