Selasa, 30 November 2010

Membuat Game Berbasis Java

Ada banyak software atau aplikasi untuk membuat game, namun yang kali ini membahas tentang aplikasi Greenfoot, salah satu aplikasi pembuat game sederhana berbasis Java.

Langkah pertama ialah klik new di menu Scenario:


Buat game sesuai sekenario game yang dibuat misalkan petualangan si boy. dalam game ini berskenario terdapat seorang jagoan yang ingin menyelamatkan putri yang ditawan oleh penjahat dan game ini akan berakhir apabila si jagoan berhasil menyelamatkan putri dari tawanan penjahat .

Buat Base awal berupa Lokasi game berlangsung. untuk membuat dunia dimana game ini berlangsung klik new sub class di bagian world lalu akan tampil dialog seperti dibawah ini :

Kemudian beri nama untuk class world ini misal beri nama dengan class " dunia" dan pilih background untuk dunianya . setelah itu beri ukuran dunia ini tempat game berlangsung pada sub class dunia yang telah dibuat.Ukuran dunia nya berbasis sumbu, sumbu X untuk horizontal, dan sumbu Y untuk vertikal.
Misalnya kita buat 'dunia' nya ber ukuran 200X100, dengan ukuran 3 pixel pergambar.
Lalu kita buat codingnya
Pertama klik di subclass 'dunia' nya, lalu klik open editor

Kita buat (200,100,5)
200 adalah lebar 'dunia' nya
100 adalah tinggi 'dunia'nya
5 adalah ukuran piksel pergambarnya.

Setelah memasukkan codingnya, klik compile atau tekan tombol ctrl dengan k. jika sukses tampilannya akan seperti ini


Setelah itu kita buat si musuh, pertama klik ikon actor lalu pilih pilihan new subclass. subclass musuh ini kita beri nama snake. Lalu kita pilih gambar untuk si snake, setelah kita beri nama klik ok.
Sekarang kita buat si snake bergerak dari kiri ke kanan
Berikut ini codingnya:
kita tulis di bawah public void act.

public void act()
{s
etLocation(getX() + 1, getY());
}

keterangan:
getX+1 => berarti dia akan bergerak ke kanan, (+1)
getY() => berarti dia tidak akan bergerak dengan sumbu Y
setelah itu sperti biasa kita compile codingnya, jika compile nya berhasil maka akan tampil pesan seperti ini
Jika sudah selesai dengan semua coding perrgerakan musuhnya, kita akan membuat agar si musuh
bisa menembus batas si 'dunia' yang tadi. Caranya kita akan membuat coding tambahan di si musuh,
misalnya kita buat di si snake yang tadi.
Kita beri tambahan coding:

public void act()
{s
etLocation(getX() + 1, getY());
if(getX()==199)
{
setLocation(0,getY());
}
}
Keterangan:
if(getX()==199)
{
setLocation(0,getY());
}

jadi ketika si snake mencapai titik X 199, (ujung kanan si 'dunia')
si snake ini akan muncul di Lokasi X => 0 (ujung kiri si 'dunia')
Setelah itu, kita buat juga untuk musuh – musuh yang lainnya.
Jika bisa, lanjutkan, namun jika masih adaa error jangan dilanjutkan periksa kembali coding nya.
Setelah kita selesai dengan para musuhnya, sekarang kita akan membuat si 'jagoan'nya.
Caranya sama seperti sebelumnya, klik di actor, lalu pilih new subclass dan beri nama jagoannya,
misalnya boy. Setelah itu pilih gambar untuk si boy. Sekarang kita akan membuat coding untuk
pergerakan si boy, caranya klik subclass boy lalu pilih open editor setelah itu kita buat codingnya
seperti dibawah ini :

if(Greenfoot.isKeyDown("right"))
{
setLocation(getX()+1,getY());
}
Keterangan:

if(Greenfoot.isKeyDown("right")) jika → tombol “panah kanan” ditekan maka ...
setLocation(getX()+1,getY()); → gerakan Actor kearah kanan 1 cell
Setelah itu di test, lalu buat codingnya juga untuk bergerak ke atas, ke bawah, dan ke kiri.
Kalau kita klik tombol Reset, semua actor nya hilang, untuk membuat semua actornya ada kembali
ketika mengklik tombol Reset, kita buka editor di 'dunia' nya
lalu masukkan coding seperti dibawah ini:

addObject(new boy,7,145);

lalu pasang juga musuh – musuh nya di 'dunia' nya.

Nah sekarang kita akan membuat coding untuk matinya si 'boy'
caranya buka editor nya, lalu kita masukkan coding nya seperti ini :
snake a=(snake)getOneIntersectingObject(snake.class);

if(a!=null)
{
setImage("tengkorak.png");
Greenfoot.playSound("kalah.wav");
getWorld().removeObject(a);
Greenfoot.stopSimulation;
return;
}

Keterangan :

snake =nama class musuh
a = nama variabel, boleh bebas, namun untuk mempermudah kita gunakan a
setImage = untuk membuat Greenfoot memunculkan gambar, gambar nya harus ada di folder images
di folder scenarionya, untuk perintah setImage ini dapat menggunakan file dengan format .jpg
atau .png
Greenfoot.playSound = perintah untuk membuat Greenfoot memainkan suara, format file nya
harus .wav dan ada di folder sounds
getWorld().removeObject(a) = membuat variabel a (snake) hilang
stop; = membuat permainan berhenti
buat juga coding yang sama untuk menabrak musuh yang lainnya.

Sekarang kita buat Peluru untuk si 'boy'
caranya buka editor si 'boy'
Tambahkan coding diatas public void act()

private dunia pelor;

public voidaddedToWorld(World dunia)
{
pelor = (dunia) dunia;
}

private = variabel ini hanya dikenali di class yang bersangkutan (Prince)
dunia = nama class World
pelor = nama variabel (terserah tapi tidak boleh sama dengan nama Actor
public void addedToWorld(World dunia) = Tambahkan class pelor ke World
dunia = nama variabel baru
Lalu buat di dalam act (boleh paling atas atau paling bawah, yang akan memicu keluarnya
peluru, yaitu jika ditekan tombol x (jangan lupa cari suara dengan nama fire.wav)

if(Greenfoot.isKeyDown("x"))
{
pelor.addObject(new Peluru1(), getX(),getY());
Greenfoot.playSound("fire.wav");}
if(Greenfoot.isKeyDown("x")) = jika ditekan tombol x
pelor.addObject(new Peluru1(), getX(),getY()); = akan keluar Object baru yaitu peluru
letakan sama dengan Actor/Object aktif (boy) berada.
Greenfoot.playSound("fire.wav"); = munculkan suara fire.wav (file harus ada difolder sounds)
Setelah peluru bisa keluar atur agar pelurunya langsung bergerak, misal dari kanan ke kiri, buat
codingnya di Actor Peluru1
setLocation(getX()+2,getY());
Ternyata ada sedikit masalah yaitu peluru akan meninggalkan sisa dibelakang akhir background
untuk mengatasinya gunakan coding berikut:

if(getX()==199)
{
getWorld().removeObject(this);
return;
}

getWorld().removeObject(this); = hilangkan object ini
return; = kembali keawal (perintah sangat penting dipakai jika perintah diatasnya
menghilangkan object, jangan sampai ada perintah lain yang menggunakan Object yang
telah dihilangkan, jika itu yang terjadi akan muncul pesan error).
Peluru yang baru saja dibuat belum berfungsi apaapa
karena jika Musuh tertembak tidak mati/
hilang buat jika peluru terkena Musuh15
maka Musuh hilang dan peluru hilang dengan bunyi
ah, buat coding di Peluru1 atau Musuh1 contoh disini dibuat di Peluru1, masukan file die1.wav
Setelah semua bisa, bagaimana jika sang girl tertembak ?, buat sang girl mati dan
permainan berakhir. Buat coding di Princess dan isi dengan:

Peluru1 f=(Peluru1)getOneIntersectingObject(Peluru1.class);
if(f!=null)
{
Greenfoot.playSound("die1.wav");
setImage("kalah.png");
getWorld().removeObject(f);
Greenfoot.stopSimulation();
}

Buat coding peluru1 dan jangan lupa ganti arah geraknya jadi kekiri
..............
//peluru bergerak dari kiri ke kanan
setLocation(getX()+1,getY());
if(getX()==199)
{
getWorld().removeObject(this);
return;
}

//jika snake terkena peluru
snake a=(snake)getOneIntersectingObject(snake;
if(a!=null)
{
Greenfoot.playSound("die1.wav");
getWorld().removeObject(a);
getWorld().removeObject(this);
return;
}
...............

Membuat Skor
Agar permainan lebih menarik buat skor, dengan ketentuan setiap membunuh 1 musuh maka
nilai akan bertambah 20 dengan pengurangan pada peluru 1 peluru 1
nilai
Langkahlangkahnya:
1. Buat Actor Nilai dengan gambar angka 0 (ambil dari folder contoh di baloons tepatnya
di ..... greenfoot/scenarios/balloons/images/Counter.png)
2. Masuk ke jendela coding pada Actor Nilai dan buat coding diatas Public void act
3.
private int angka = 0;
private int target = 0;
private String huruf;
private int panjangHuruf;

public Nilai(String depan)
{
huruf=depan;
panjangHuruf = (huruf.length() + 2) * 16;
setImage(new GreenfootImage(panjangHuruf, 24));
GreenfootImage gambar = getImage();
Font jenisHuruf = gambar.getFont();
gambar.setFont(jenisHuruf.deriveFont(24.0F));
gantiGambar();
}
private void gantiGambar()
{
GreenfootImage gambar = getImage();
gambar.clear();
gambar.setColor(Color.RED);
gambar.drawString(huruf + angka, 1, 18);
}

private int angka = 0; ==> variabel angka
Font jenisHuruf = gambar.getFont(); ==> ambil jenis huruf karena perintah ini
diatasnya harus ada import java.awt.Font
gambar.setFont(jenisHuruf.deriveFont(24.0F)); ==> gunakan huruf terbesar yaitu 24
dengan jenis font derive. 0F dibaca nol ef
gantiGambar(); ==> jalankan class gantiGambar
private void gantiGambar() ==> membuat class gantiGambar
gambar.clear(); = kosongkan gambar (angka 0 diawal)
gambar.setColor(Color.RED); ==> pakai tulisan warna Merah. Pilihan lainnya BLACK,
WHITE, RED, GREEN (penulisan harus huruf besar semua). Karena
perintah ini memanggil perintah java diatasnya harus dibuat import
java.awt.Color
gambar.fillRect(20, 4, 24, 16); ==> background tulisan disini tidak dipakai
gambar.drawString(huruf + angka, 1, 18); ==> tata letaknya tulisan dulu baru angkanya
3. Tambahkan dibaris kedua
dari atas dibawah import greenfoot.*;
import java.awt.Font;
import java.awt.Color;
4. Buka classWorld(dunia) lalu buat variabel diatas Public Adventure ()
Nilai skor = new Nilai("Skor: ");
addObject(skor,35,280);
5. Tambahkan object dibawah perintah menambahkan object yang lain
6. Lihat hasilnya sudah munculkah tulisan Skornya ? jika sudah lanjut agar skor bertambah
jika musuh mati
buka kembali layar coding Nilai dan tambahkan coding yang setingkat dengan public/private
void.

public void tambah(int skor)
{
target += skor;
}
if(angka < b="(Musuh2)getOneIntersectingObject(Musuh2.class);" target =" skor;"> target)
{
angka;
gantiGambar();
}
lanjutkan dengan menambahkan coding pada World dunia, tambahkan dibawah coding
public void tambahNilai()
public void kurangiNilai()
{
skor.kurang(1);
}
Lakukan pemicunya pada actor Prince (pemicu yang mengeluarkan Peluru) syaratnya peluru
ditekan nilai langsung berkurang 1, buat coding di bawah playSound
((dunia) getWorld()).kurangiNilai();

panggil aksi → kurangiNilai yg berada di World dunia.
if(Greenfoot.isKeyDown("x"))
{
pelor.addObject(new Peluru1(), getX(),getY());
Greenfoot.playSound("fire.wav");
((dunia) getWorld()).kurangiNilai();
}

Pemunculan Papan Skor
Satu urusan lagi, papan skor dengan rancangan jika boy bertemu girl papan skor akan
muncul dengan ucapan SELAMAT dengan nilai ...... dan permainan berakhir.
Tambahkan Actor PapanSkor lalu buat codingnya, coding lengkapnya:
import greenfoot.*;
import java.awt.Color;
import java.awt.Font;
import java.util.Calendar;
/**
* @author (auvy)
* @version (1.0.0)
*/

public class PapanSkor extends Actor
{
public static final float besarHuruf = 48.0f;
public static final int lebar = 500;
public static final int tinggi = 300;
public PapanSkor(int skor)
{
bikinGambar("SELAMAT", "Skor Akhir: ", skor);
}
private void bikinGambar(String judul, String depan, int skor)
{
GreenfootImage gambar = new GreenfootImage(lebar, tinggi);
gambar.setColor(new Color(25, 5, 74, 160));
gambar.fillRect(0, 0, lebar, tinggi);
gambar.setColor(new Color(255, 255, 255, 50));
gambar.fillRect(5, 5, lebar10, tinggi10);
Font font = gambar.getFont();
font = font.deriveFont(besarHuruf);
gambar.setFont(font);
gambar.setColor(Color.GREEN);
gambar.drawString(judul, 60, 100);
gambar.drawString(depan + skor, 60, 200);
setImage(gambar);
}
}
Di Actor Nilai tambahkan coding yang setingkat dengan public void act()
public intnilaiAkhir()
{
return angka;
}
Di World dunia buat coding setingkat public void seperti ini:
public void selesai()
{ addObject(new PapanSkor(skor.nilaiAkhir()*5), 247,145);
}
Nilai akhir didapat dari jumlah skor dikalikan 5 da → n letakan di tengahtengah
Buat pemicunya di Actor boy atau girl (pilih salah satu), disini pakai girl
boy h=(boy)getOneIntersectingObject(boy.class);
if(h!=null)
{
((Adventure)getWorld()).selesai();
Greenfoot.playSound("login.wav");
Greenfoot.stopSimulation();
}


referensi : ahmad fauzan, auvy ahmad haidar "easy game with green foot"