You are on page 1of 21

Greenfoot

TUTORIAL 2
Membuat Game Sederhana dengan Greenfoot

Membuat Skenario
1. Jalankan Greenfoot dengan cara double click pada icon Greenfoot yang ada di desktop.

2. Maka akan muncul tampilan sebagai berikut:

3. Pada menu Scenario, pilih New.

4. Pada dialog box New Scenario yang muncul, ketikkan nama game yang diinginkan pada
kotak isian Folder name:, misalnya: Adventure, kemudian tekan tombol Create.

Fitri Handayani, S.Pd - 118 - STMIK IKMI Cirebon


Greenfoot

5. Maka tampilannya akan seperti berikut:

Jendela World

Jendela
Class

Control Execution

6. Jika dilihat dari Windows Explorer, maka akan terbentuk sebuah folder dengan nama
Adventure secara otomatis. Di dalam folder ini terdapat 2 (dua) folder yaitu images dan
sounds yang isinya masih kosong. Folder ini berfungsi untuk menyimpan file gambar
(images) dan file suara (sounds) yang digunakan di dalam game yang akan dibuat.

Fitri Handayani, S.Pd - 119 - STMIK IKMI Cirebon


Greenfoot

7. Sekarang kita lanjutkan dengan membuat skenario game yang akan dibuat. Pada menu
Scenario, pilih Scenario Information.

8. Maka akan muncul tampilan sebagai berikut:

9. Isikan informasi skenario game yang akan dibuat, kemudian tutup jendela README.TXT
jika sudah selesai.

Fitri Handayani, S.Pd - 120 - STMIK IKMI Cirebon


Greenfoot

Membuat Objek
1. Buatlah sebuah subclass di class World dengan cara klik kanan pada World, kemudian
pilih New subclass.

2. Ketikkan nama class pada kotak isian New class name:, misalnya: Land. Kemudian pilih
Image Categories:, lalu pilih gambar pada Library images:. Setelah selesai tekan tombol
Ok.

Fitri Handayani, S.Pd - 121 - STMIK IKMI Cirebon


Greenfoot

3. Class Land yang baru dibuat akan muncul di bawah class World. Jika ada arsiran pada
class yang baru dibuat atau diedit, tekan tombol Compile.

4. Tampilan setelah di-compile.

Fitri Handayani, S.Pd - 122 - STMIK IKMI Cirebon


Greenfoot

5. Buat class baru pada Actor dengan cara klik kanan lalu pilih New subclass. Ketikkan
nama class pada kotak isian New class name:, misalnya: Hero. Kemudian pilih Image
Categories:, lalu pilih gambar pada Library images:. Setelah selesai tekan tombol Ok.

6. Buat class-class lain yang dibutuhkan.

Membuat Coding
1. Ok, kita mulai untuk membuat codingnya, caranya klik kanan di Land lalu pilih Open
editor.

Fitri Handayani, S.Pd - 123 - STMIK IKMI Cirebon


Greenfoot

2. Maka akan muncul tampilan jendela coding seperti berikut:

Biasakan untuk mengisi data pembuat (author) dan versi/tanggal pembuatannya.


Perhatikan coding super(600, 400, 1); disini maksudnya adalah: angka 600
menunjukkan lebar layar pada sumbu x, angka 400 menunjukkan tinggi layar pada sumbu
y dan 1 adalah ukuran pixels/cell. Bisa diibaratkan ruangan ukuran 6 m x 4 m dengan
keramik lantai ukuran 10 cm x 10 cm.
3. Kita lanjutkan coding untuk Musuh1, klik kanan di Musuh1 lalu pilih Open editor.
Masukkan coding untuk memerintahkan Musuh1 bergerak dari kiri ke kanan:
setLocation(getX()+1,getY());

Fitri Handayani, S.Pd - 124 - STMIK IKMI Cirebon


Greenfoot

Jika sudah selesai memasukkan coding, tekan tombol Compile di pojok kiri atas pada
jendela coding. Jika tidak ada yang salah, maka di bagian bawah ada tulisan Class
compiled - no syntax errors (file class telah terbentuk dan tak ada perintah yang salah).

4. Lanjutkan dengan proses testing. Kembali ke layar utama Greenfoot lalu klik kanan pada
class Musuh1 dan pilih new Musuh1() kemudian pindahkan objek Musuh1 ketengah-
tengah layar. Lanjutkan dengan menekan tombol Run.
Perhatikan gerakannya, jika Musuh1 telah mencapai tepi layar, ia berhenti. Bagaimana
caranya agar Musuh1 bisa menembus (jika mencapai angka maksimal kembali ke angka
minimal)? Coding yang perlu ditambahkan adalah:
if(getX()==599)
{
setLocation(0,getY());
}
Keterangan:
if(getX()==599) apabila sumbu X mencapai angka maksimal (600 1), maka.
setLocation(0,getY()); kembalikan nilai sumbu X ke angka terkecil (0).

Fitri Handayani, S.Pd - 125 - STMIK IKMI Cirebon


Greenfoot

5. Lanjutkan membuat coding untuk musuh yang lainnya. Musuh2 yang bergerak dari kanan
ke kiri, Musuh3 yang bergerak dari atas ke bawah, Musuh4 yang bergerak dari bawah ke
atas, Musuh5 yang bergerak dari kiri bawah ke kanan atas.
6. Masukkan masing-masing objek ke dalam layar, kemudian ditest apakah sudah sesuai
dengan harapan atau belum? Jika belum, silahkan diperbaiki.
7. Jika gerakan di atas sudah selesai, silahkan lanjutkan dengan membuat gerakan pada
Hero, dengan aturan jika ditekan panah kanan maka akan bergerak ke kanan, jika ditekan
panah kiri maka akan bergerak ke kiri, jika ditekan panah atas maka akan ke atas dan jika
ditekan panah bawah maka akan ke bawah. Kerjakan satu persatu lalu ditest.
Jika menekan tombol panah kanan, maka actor Hero akan bergerak ke kanan, codingnya:
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 Hero ke arah kanan 1 cell.
Buatkan untuk tombol kiri (left), atas (up) dan bawah (down) lalu test hasilnya. Jika
dibutuhkan Actor Hero bisa juga dibuat tembus.
8. Sekarang coba kita periksa ketika tombol Reset ditekan, Actor selalu hilang. Buat agar
ketika menekan tombol Reset, Actor langsung kembali ke posisinya masing-masing. File
yang perlu diedit berada pada World Class yaitu file Land. Klik kanan pada Land,
kemudian pilih Open editor. Letakkan coding di bawah perintah super(600, 400, 1),
coding yang diperlukan:
addObject(new Hero(),20,200);
Keterangan:
addObject(new perintah dasar untuk menambahkan objek baru.
Hero() Actor Hero (ganti Hero dengan nama actor yang lain jika diperlukan).
20,200); terletak pada sumbu X = 20 (dari kiri maju 20 langkah) dan sumbu Y = 200
(dari atas turun 200 langkah).
9. Tambahkan seluruh Actor yang diperlukan, atur tata letak agar permainan lebih menarik.
Untuk membuat agar Actor berada tepat ditempat yang kita inginkan, click-and-drag
Actor ke tempat yang sesuai. Lanjutkan dengan klik kanan pada Actor dan pilih inspect,

Fitri Handayani, S.Pd - 126 - STMIK IKMI Cirebon


Greenfoot

maka akan muncul letak koordinat dari Actor tersebut secara jelas, kemudian buka Land
dan tambahkan addObject untuk Actor yang dibutuhkan.
Hasil coding di class Land:
public Land()
{
super(600, 400, 1);
addObject(new Hero(),20,200);
addObject(new Musuh1(),330,210);
addObject(new Musuh2(),330,260);
addObject(new Musuh3(),200,80);
addObject(new Musuh4(),430,300);
addObject(new Musuh5(),460,396);
addObject(new Princess(),580,380);
}
Tekan tombol Reset dan lihat hasilnya, lalu tekan tombol Run dan amati gerakannya.
10. Sekarang kita kembali ke Actor Hero. Jika Hero menabrak musuh, maka gambar Hero
berubah jadi tengkorak, ada suara kalah dan permainan berhenti.
Siapkan suara hit.wav di folder sounds dan gambar tengkorak dengan nama
tengkorak.png di folder images, lalu buat coding dan letakkan di bawah perintah
menggerakkan tombol tapi masih dalam public void act().
Musuh1 a=(Musuh1)getOneIntersectingObject(Musuh1.class);
if(a!=null)
{
setImage("tengkorak.png");
Greenfoot.playSound("hit.wav");
getWorld().removeObject(a);
Greenfoot.stop();
return;
}
Keterangan:
Musuh1 nama Actor.
a nama variabel. Boleh apa saja hanya untuk mengingat Musuh1 variabel a, Musuh2
variabel b.
getOneIntersectingObject object bersinggungan dengan Karena ini ada di class
Hero, maka dapat diartikan jika Object/Actor Hero bertemu Musuh1.
Greenfoot.playSound("hit.wav"); Greenfoot akan memainkan suara hit.wav.

Fitri Handayani, S.Pd - 127 - STMIK IKMI Cirebon


Greenfoot

getWorld().removeObject(a); hilangkan object yang ada pada variabel a (Musuh1


yang bersinggungan dengan Hero).
Greenfoot.stop(); menghentikan permainan.
return; kembali ke awal (perintah ini sangat penting dipakai jika perintah di atasnya
menghilangkan objek. Jangan sampai ada perintah lain yang menggunakan objek yang
telah dihilangkan, jika itu terjadi maka akan muncul pesan error).
11. Test dengan cara menabrakkan Actor Hero ke Musuh1. Jika belum berhasil, silahkan
diperbaiki. Jika sudah berhasil, silahkan lanjutkan untuk musuh-musuh yang lainnya.
12. Sekarang, kita akan membuat peluru. Caranya adalah buka coding pada Actor yang
mengeluarkan peluru, dalam hal ini Hero.
Tambahkan coding di atas public void act().
private int fireTime = 0;
private Land pelor;
public void addedToWorld(World dunia)
{
pelor = (Land) dunia;
}
Keterangan:
private variabel ini hanya dikenali di class yang bersangkutan (Hero).
Land nama class World.
pelor nama variabel (terserah tapi tidak boleh sama dengan nama Actor).
int tipe data yang disimpan oleh variabel.
fireTime nama variabel (terserah tapi tidak boleh sama dengan nama Actor).
public void addedToWorld(World dunia) tambahkan class pelor ke World.
dunia nama variabel baru.
13. Buatkan perintah agar Hero mengeluarkan peluru dengan cara menekan tombol x.
Sisipkan coding berikut di dalam public void act().
fireTime++;
if(Greenfoot.isKeyDown("x") && fireTime > 20)
{
pelor.addObject(new Peluru1(), getX(),getY());
Greenfoot.playSound("fire.wav");
fireTime = 0;
}

Fitri Handayani, S.Pd - 128 - STMIK IKMI Cirebon


Greenfoot

Keterangan:
fireTime++ menambahkan nilai variabel fireTime sebanyak 1 satuan.
if(Greenfoot.isKeyDown("x")) jika ditekan tombol x, maka.
pelor.addObject(new Peluru1(), getX(),getY()); akan keluar objek baru yang
bernama Peluru1, dan diletakkan sama dengan posisi Actor Hero.
Greenfoot.playSound("fire.wav"); memainkan suara fire.wav.
fireTime = 0 mereset nilai variabel fireTime kembali ke nol.
14. Setelah peluru keluar, sekarang kita atur agar peluru tersebut bergerak dari kiri ke kanan.
Buatkan coding berikut di Actor Peluru1.
setLocation(getX()+1,getY());
15. Test dan perhatikan gerakan Peluru1. Ternyata ada sedikit masalah yaitu Peluru1 tidak
akan hilang dan meninggalkan bekas di tepi Land. Untuk mengatasinya, tambahkan
coding berikut:
if(getX()==599)
{
getWorld().removeObject(this);
return;
}
16. Peluru yang dibuat belum berfungsi, karena musuh-musuh yang tertembak tidak akan mati
atau menghilang. Buatlah coding ketika peluru mengenai musuh-musuh, maka musuh dan
peluru tersebut akan menghilang dan mengeluarkan suara.
Musuh1 a=(Musuh1)getOneIntersectingObject(Musuh1.class);
if(a!=null)
{
Greenfoot.playSound("hit.wav");
getWorld().removeObject(a);
getWorld().removeObject(this);
return;
}
Lengkapi untuk musuh-musuh yang lainnya. Jika belum selesai, maka jangan dilanjutkan
ke langkah berikutnya.
17. Setelah semua bisa, bagaimana jika Princess tertembak?
Buat Princess mati dan permainan berakhir ketika tertembak. Masukkan coding berikut:
Princess f=(Princess)getOneIntersectingObject(Princess.class);
if(f!=null)

Fitri Handayani, S.Pd - 129 - STMIK IKMI Cirebon


Greenfoot

{
setImage("tengkorak.png");
Greenfoot.playSound("hit.wav");
getWorld().removeObject(f);
Greenfoot.stop();
return;
}
18. Bagaimana untuk mengalahkan Musuh1? Buatkan perintah agar Hero mengeluarkan
Peluru2 dengan cara menekan tombol z. Tambahkan coding berikut dan diletakkan di
bawah perintah menekan tombol x:
else if(Greenfoot.isKeyDown("z") && fireTime > 20)
{
pelor.addObject(new Peluru2(), getX(),getY());
Greenfoot.playSound("fire.wav");
fireTime = 0;
}
19. Kemudian buatkan coding agar Peluru2 bergerak dari kanan ke kiri dan perintah lainnya
seperti pada Peluru1, coding dibuat pada Peluru2 di dalam public void act().
// Gerakan peluru.
setLocation(getX()-1,getY());
//Menghilangkan peluru ketika sudah sampai di tepi Land.
if(getX()==0)
{
getWorld().removeObject(this);
return;
}
//Peluru mengenai musuh-musuh.
Musuh1 a=(Musuh1)getOneIntersectingObject(Musuh1.class);
if(a!=null)
{
Greenfoot.playSound("hit_01.wav");
getWorld().removeObject(a);
getWorld().removeObject(this);
return;
}

//Peluru mengenai Princess.
Princess f=( Princess)getOneIntersectingObject(Princess.class);

Fitri Handayani, S.Pd - 130 - STMIK IKMI Cirebon


Greenfoot

if(f!=null)
{
setImage("tengkorak.png");
Greenfoot.playSound("girlydie.wav");
getWorld().removeObject(f);
Greenfoot.stop();
return;
}

20. Agar permainan lebih menarik, sekarang kita buat skor untuk permainan ini. Aturan
skornya adalah: jika kita membunuh 1 musuh maka skor akan bertambah 10, dan setiap
peluru yang digunakan akan mengurangi skor 5.
21. Buat Actor Nilai dengan gambar angka 0.
22. Buat coding untuk Actor Nilai. Coding diletakkan di atas Public void act().
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);
}
Keterangan:
private int angka = 0; variabel angka.

Fitri Handayani, S.Pd - 131 - STMIK IKMI Cirebon


Greenfoot

Font jenisHuruf = gambar.getFont(); ambil jenis huruf.


gambar.setFont(jenisHuruf.deriveFont(24.0F)); gunakan huruf terbesar yaitu
24 dengan jenis font derive. 0F dibaca nol ef.
gantiGambar(); jalankan method gantiGambar.
private void gantiGambar() membuat method gantiGambar.
gambar.clear(); kosongkan gambar (angka 0 di awal).
gambar.setColor(Color.RED); menggunakan tulisan berwarna RED (merah).
Pilihan lainnya BLACK, WHITE, RED, GREEN (penulisan harus huruf besar semua).
gambar.drawString(huruf + angka, 1, 18); tata letak tulisannya dulu baru
angkanya.
23. Tekan tombol Compile di sebelah kiri atas, maka akan muncul peringatan:

Untuk mengatasinya, kita harus mengimport jenis Font dari Java. Masukkan coding
berikut di bawah import greenfoot.*;.
import java.awt.Font;
24. Tekan tombol Compile lagi, dan masih ada peringatan:

Fitri Handayani, S.Pd - 132 - STMIK IKMI Cirebon


Greenfoot

Untuk mengatasinya, kita harus mengimport jenis Color dari Java. Masukkan coding
berikut di bawah import java.awt.Font;.
import java.awt.Color;
25. Tekan Compile lagi, dan sekarang tidak ada error lagi. Tutup jendela coding tersebut.
26. Buka coding Land, lalu buat variabel di atas Public Land ().
Nilai skor = new Nilai("Skor: ");
27. Tambahkan coding di bawah perintah addObject(new Princess(),580,380);.
addObject(skor,100,380);
28. Tekan Compile dan perhatikan apakah tulisan Skor: 0 sudah ada atau belum.
29. Jika sudah selesai, sekarang kita akan membuat skor bertambah jika ada musuh yang mati.
30. Buka coding Nilai dan tambahkan coding yang setingkat dengan public/private void.
Coding berikut mempunyai pengertian nilai target bertambah dan masukan ke dalam
skor.
public void tambah(int skor)
{
target += skor;
}
31. Kemudian tambahkan coding berikut pada class public void act(). Coding berikut
mempunyai pengertian jika angka kurang dari target, maka skor akan bertambah.
if(angka < target)
{
angka++;
gantiGambar();
}

Fitri Handayani, S.Pd - 133 - STMIK IKMI Cirebon


Greenfoot

32. Setelah selesai dengan class Nilai, kita beralih ke class Land. Buka dan tambahkan
coding setingkat public void.
public void tambahNilai()
{
skor.tambah(10);
}
Coding tersebut berarti: Buat variabel public (dapat dibuka pada file lain) dengan
penambahan nilai 10.
33. Lanjutkan untuk menampilkan perubahan nilai ketika peluru mengenai musuh. Buka
coding Peluru1, tambahkan coding di bawah if(a!=null).
((Land) getWorld()).tambahNilai();
Berarti jika Peluru1 mengenai Musuh1, maka tambahkan nilai.
Coding lengkapnya adalah seperti berikut:
Musuh1 a=(Musuh1)getOneIntersectingObject(Musuh1.class);
if(a!=null)
{
((Land) getWorld()).tambahNilai();
Greenfoot.playSound("hit.wav");
getWorld().removeObject(a);
getWorld().removeObject(this);
return;
}
34. Lakukan hal yang sama untuk musuh-musuh lainnya, kemudian lanjutkan pada Peluru2
dengan Musuh1-5. Test dan lihat hasilnya.
35. Lanjutkan untuk pengurangan nilai, jika peluru dikeluarkan kurangi nilai 5, caranya buka
coding Nilai tambahkan coding dibawah public void tambah.
public void kurang(int skor)
{
target -=skor;
}
36. Pada public void act() tambahkan coding berikut setelah perintah if selesai:
else if(angka > target)
{
angka--;
gantiGambar();
}

Fitri Handayani, S.Pd - 134 - STMIK IKMI Cirebon


Greenfoot

37. Lanjutkan dengan menambahkan coding pada Land, tambahkan dibawah coding public
void tambahNilai().
public void kurangiNilai()
{
skor.kurang(5);
}
38. Lakukan pemicunya pada actor Hero (yang mengeluarkan peluru). Syaratnya, ketika
peluru ditekan, nilai langsung berkurang 5. Buat coding di bawah playSound.
((Land) getWorld()).kurangiNilai();
Coding lengkapnya seperti berikut:
if(Greenfoot.isKeyDown("x") && fireTime > 20)
{
pelor.addObject(new Peluru1(),getX(),getY());
Greenfoot.playSound("fire.wav");
fireTime = 0;
((Land) getWorld()).kurangiNilai();
}
else if(Greenfoot.isKeyDown("z") && fireTime > 20)
{
pelor.addObject(new Peluru2(),getX(),getY());
Greenfoot.playSound("fire.wav");
fireTime = 0;
((Land) getWorld()).kurangiNilai();
}
39. Sekarang kita akan membuat akhir dari permainan ini ketika Hero bertemu dengan
Princess.
Ketika Hero bertemu dengan Princess, maka akan muncul tulisan SELAMAT dengan
nilai dan permainan berakhir.
Tambahkan Actor PapanNilai dan masukkan codingnya seperti berikut:
import greenfoot.*;
import java.awt.Color;
import java.awt.Font;
import java.util.Calendar;
/**
* Write a description of class PapanNilai here.
*
* @author (Sandy Eka Permana)

Fitri Handayani, S.Pd - 135 - STMIK IKMI Cirebon


Greenfoot

* @version (22 Desember 2014)


*/
public class PapanNilai extends Actor
{
public static final float besarHuruf = 48.0f;
public static final int lebar = 500;
public static final int tinggi = 300;
//Tulisan yang muncul dilayar.
public PapanNilai(int skor)
{
bikinGambar("SELAMAT", "Skor Akhir: ", skor);
}
// Membuat gambar papan 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, lebar-10,tinggi-10);
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);
}
}
40. Di Actor Nilai tambahkan coding yang setingkat dengan public void act().
public int nilaiAkhir()
{
return angka;
}
41. Di World Land buat coding setingkat public void seperti ini:
//Nilai akhir didapat dari jumlah skor dikalikan 5 dan letakan di
tengah-tengah.
public void selesai()
{

Fitri Handayani, S.Pd - 136 - STMIK IKMI Cirebon


Greenfoot

addObject(new PapanNilai(skor.nilaiAkhir()*5),300,200);
}
42. Actor Hero bertemu dengan Actor Princess. Buka coding Actor Princess kemudian
masukkan coding berikut:
public void act()
{
//Jika Princess terselamatkan oleh Hero
Hero h=(Hero)getOneIntersectingObject(Hero.class);
if(h!=null)
{
((Land) getWorld()).selesai();
Greenfoot.playSound("login.wav");
Greenfoot.stop();
}
}
43. Test dan lihat hasilnya.

Share Greenfoot
Sekarang, kita akan membuat agar game yang sudah kita buat dapat dijalankan di komputer
lainnya meskipun tidak memiliki Greenfoot, tetapi harus ada Java.
1. Tekan tombol Share yang terletak di sebelah kanan atas layar utama Greenfoot.

2. Atau bisa juga dengan cara tekan menu Scenario, kemudian pilih Share. Atau dengan
cara menekan Ctrl+E.

3. Maka akan muncul tampilan sebagai berikut:

Fitri Handayani, S.Pd - 137 - STMIK IKMI Cirebon


Greenfoot

4. Tekan tombol Browse untuk menentukan letak game yang kita buat, kemudian tekan
tombol Export.
Pada dialog box Greenfoot Share terdapat 3 (tiga) tab pilihan, yaitu:
Publish : Mempublikasikan hasil game buatan kita ke situs
http://greenfootgallery.org.
Webpage : Jadikan sebagai file .html (buat 1 folder di dalamnya langsung terbentuk 2
file, yaitu .html dan .jar).
Application : Jadikan sebagai file Applikasi (menjadi file .jar).

Fitri Handayani, S.Pd - 138 - STMIK IKMI Cirebon

You might also like