Senin, 31 Oktober 2016

Source Code Balon (Bakal Calon) Game Balap Mobil

Berikut source code program Java untuk bakal calon game balap mobil.

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class AnimasiGrafik extends JFrame {
    final int LEBAR = 900, TINGGI = 650;
    double kecepatan = .5;
    final int UP = 0, RIGHT = 1, DOWN = 2, LEFT = 3;
    int arah = UP;

    //menentukan koordinat kotak area hijau sekeliling window
    Rectangle kiri = new Rectangle(0, 0, LEBAR / 9, TINGGI);
    Rectangle kanan = new Rectangle((LEBAR / 9) * 8, 0, LEBAR / 9, TINGGI);
    Rectangle atas = new Rectangle(0, 0, LEBAR, TINGGI / 9);
    Rectangle bawah = new Rectangle(0, (TINGGI / 9) * 8, LEBAR, TINGGI / 9);
    Rectangle tengah = new Rectangle((int) ((LEBAR / 9) * 2.5), 
                                     (int) ((TINGGI / 9) * 2.5),
                                     (int) ((LEBAR / 9) * 5), (TINGGI / 9) * 4);

    //menentukan koordinat kotak penghalang
    Rectangle rintangan1 = new Rectangle(LEBAR / 2, (int) ((TINGGI / 9) * 7), 
                                         LEBAR / 10, TINGGI / 9);
    Rectangle rintangan2 = new Rectangle(LEBAR / 3, (int) ((TINGGI / 9) * 5), 
                                         LEBAR / 10, TINGGI / 4);
    Rectangle rintangan3 = new Rectangle(2 * (LEBAR / 3),
                                         (int) ((TINGGI / 9) * 5), 
                                         LEBAR / 10, TINGGI / 4);
    Rectangle rintangan4 = new Rectangle(LEBAR / 3, TINGGI / 9, 
                                         LEBAR / 30, TINGGI / 9);
    Rectangle rintangan5 = new Rectangle(LEBAR / 2, (int) ((TINGGI / 9) * 1.5), 
                                         LEBAR / 30, TINGGI / 4);
    Rectangle finish = new Rectangle(LEBAR / 9, (TINGGI / 2) - TINGGI / 9, 
                                     (int) ((LEBAR / 9) * 1.5), TINGGI / 70);
    Rectangle pemain1 = new Rectangle(LEBAR / 9, TINGGI / 2, LEBAR / 30, 
                                      LEBAR / 30);

    public AnimasiGrafik() {
        super("Balap Mobil Kotak");
        setSize(LEBAR, TINGGI);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        GerakPemain1 m1 = new GerakPemain1();
        m1.start();
    }
    
    public void paint(Graphics g) {
        super.paint(g);
        //gambar kotak latar
        g.setColor(Color.DARK_GRAY);
        g.fillRect(0, 0, LEBAR, TINGGI);
        //gambar garis
        g.setColor(Color.GREEN);
        Rectangle lineO = new Rectangle(LEBAR / 9, TINGGI / 2, 
                                        (int) ((LEBAR / 9) * 1.5) / 2, 
                                        TINGGI / 140);
        Rectangle lineI = new Rectangle(((LEBAR / 9) + 
                                        ((int) ((LEBAR / 9) * 1.5) / 2)),
                                        (TINGGI / 2) + (TINGGI / 10), 
                                        (int) ((LEBAR / 9) * 1.5) / 2, 
                                        TINGGI / 140);

        g.fillRect(kiri.x, kiri.y, kiri.width, kiri.height);
        g.fillRect(kanan.x, kanan.y, kanan.width, kanan.height);
        g.fillRect(atas.x, atas.y, atas.width, atas.height);
        g.fillRect(bawah.x, bawah.y, bawah.width, bawah.height);
        g.fillRect(tengah.x, tengah.y, tengah.width, tengah.height);
        g.fillRect(rintangan1.x, rintangan1.y, rintangan1.width, 
                   rintangan1.height);
        g.fillRect(rintangan2.x, rintangan2.y, rintangan2.width, 
                   rintangan2.height);
        g.fillRect(rintangan3.x, rintangan3.y, rintangan3.width, 
                   rintangan3.height);
        g.fillRect(rintangan4.x, rintangan4.y, rintangan3.width, 
                   rintangan4.height);
        g.fillRect(rintangan5.x, rintangan5.y, rintangan5.width, 
                   rintangan5.height);

        //gambar garis start
        g.setColor(Color.WHITE);
        g.fillRect(lineO.x, lineO.y, lineO.width, lineO.height);
        g.fillRect(lineI.x, lineI.y, lineI.width, lineI.height);

        //gambar garis finish
        g.setColor(Color.YELLOW);
        g.fillRect(finish.x, finish.y, finish.width, finish.height);

        //gambar mobil
        g.setColor(Color.BLUE);
        g.fill3DRect(pemain1.x, pemain1.y, pemain1.width, pemain1.height, true);
    }

    private class GerakPemain1 extends Thread implements KeyListener {
        public void run() {
            addKeyListener(this);
            while (true) {
                try {
                    repaint();
                    if (pemain1.intersects(kiri)
                        || pemain1.intersects(kanan)
                        || pemain1.intersects(atas)
                        || pemain1.intersects(bawah)
                        || pemain1.intersects(rintangan1)
                        || pemain1.intersects(rintangan2)
                        || pemain1.intersects(rintangan4) 
                        || pemain1.intersects(rintangan5)) {
                        kecepatan = -4;
                    }

                    if (pemain1.intersects(tengah)) {
                        kecepatan = -2.5;
                    }

                    if (kecepatan <= 5) {
                        kecepatan += .2;
                    }

                    if (arah == UP) {
                        pemain1.y -= (int) kecepatan;
                    }

                    if (arah == DOWN) {
                        pemain1.y += (int) kecepatan;
                    }

                    if (arah == LEFT) {
                        pemain1.x -= (int) kecepatan;
                    }

                    if (arah == RIGHT) {
                        pemain1.x += (int) kecepatan;
                    }

                    Thread.sleep(75);
                } catch (Exception e) {
                    break;
                }
            }
        }

        public void keyPressed(KeyEvent event) {
        }

        public void keyReleased(KeyEvent event) {
        }

        public void keyTyped(KeyEvent event) {
            if (event.getKeyChar() == 'a') {
                arah = LEFT;
            }
            if (event.getKeyChar() == 's') {
                arah = DOWN;
            }
            if (event.getKeyChar() == 'd') {
                arah = RIGHT;
            }
            if (event.getKeyChar() == 'w') {
                arah = UP;
            }
        }
    }

    public static void main(String[] args) {
        new AnimasiGrafik();
    }
}

Tidak ada komentar: