"⧪ MATERI GREENFOOT ⧪"

- Skenario WOMBATS
- Membuka berkas skenario
- Mengetahui detail skenario
- Menempatkan objek ke dalam dunia
- Menjalankan objek
- Menjalankan skenario
- Memanggil fungsi secara langsung
- Membuat dunia baru
- Memanggil fungsi dunia
- Mengubah perilaku objek
- Menyusun skenario
- Mengubah gambar
- Lebih lanjut tentang kelas Greenfoot
- Mengetahui detail sebuah objek
- Membuat kelas baru
- Buat skenariomu sendiri
Tutorial ini menggunakan dua skenario yang telah disediakan, yakni ‘wombats’ dan ‘wombats2’.
Setiap skenario akan muncul sebagai folder di sistem.
Gambar 1: Skenario Wombats di Greenfoot
` Anda mungkin membaca tutorial ini dari perangkat lunak Greenfoot, dan itu bagus.
Jika tidak, maka anda perlu membuka Greenfoot sekarang juga.
Pada proses instalasi di atas akan menginstal perangkat lunak
bernama ‘greenfoot’, jalankan. (Pada sistem Linux dan Unix
, ‘greenfoot’ berupa shell script yang dapat dijalankan.)
Setelah menjalankan Greenfoot dan jika skenario Wombats
tidak otomatis terbuka, maka pilih ‘Open...’ dari
menu ‘Project’ dan pilih skenario ‘wombats’
dari contoh skenario Greenfoot.
Anda akan melihat seperti Gambar 1 pada layar
(walaupun anda tidak akan melihat daun dan wombats untuk sementara).
Area besar bergaris yang menutupi sebagian besar jendela aplikasi
disebut “
dunia(world) ”. Karena skenario kita ini berhubungan dengan Wombat(lihat catatan kaki
1),
maka disini yang kita lihat adalah dunia Wombat. Di sebelah kanan dari jendela dunia adalah
jendela kelas(class) . Disini kita dapat melihat semua kelas Java
yang berhubungan dengan skenario.
Kelas
“World” dan “Actor” akan selalu ada disana, karena kelas tersebut sudah
menjadi bagian dari Greenfoot. Kelas lainnya yang ada di jendela adalah
kelas yang dikhususkan untuk skenario Wombat, dan akan akan berbeda
jika anda membuka skenario yang lain.
Bagian bawah dari jendela dunia adalah area Execution Control (bagian yang memiliki tombol ‘Act’ dan ‘Run’
dan pengatur kecepatan).
Di
bagian atas sebelah kanan jendela Greenfoot terdapat
tombol “Scenario Information”. Ketika anda mengklik tombol
tersebut, sebagian besar skenario akan menampilkan informasi detail
tentang skenario yang sedang dibuka. Biasanya informasi tersebut
berisikan tujuan dari skenario, bagaimana menjalankannya, apa yang bisa
anda lakukan dengan skenario itu, dan mungkin beberapa petunjuk untuk
anda jika ingin memodifikasi skenario tersebut.
Sekarang kita akan menempatkan beberapa objek ke dalam dunia.
Klik kanan (pada Mac: ctrl-klik) kelas Wombat
pada jendela kelas. Akan muncul menu, dan pilih ‘New
Wombat()’. Lalu klik dimanapun di dalam jendela dunia. Anda
baru saja membuat wombat(biasa disebut 'objek' pada Java) dan menempatkannya ke dalam dunia.
Makanan Wombat adalah daun, maka masukkan juga dedaunan ke dalam
dunia. klik kanan kelas Leaf lalu tempatkan daun ke dalam dunia.
Ada jalan pintas untuk mempercepat proses tersebut,
dengan menggunakan shift-klik ke dalam jendela dunia. Pastikan kita sudah
memilih kelas Leaf, lalu tahan tombol Shift pada keyboard dan klik
di dalam jendela dunia beberapa kali. Objek yang terpilih(disini adalah Leaf) akan masuk ke dalam dunia
setiap kali kita mengklik.
Klik tombol ‘Act’ di area execution
controls. Sekarang setiap objek akan berjalan(bertindak) sesuai dengan perannya masing-masing.
Setiap
objek berjalan sesuai dengan perintah program yang sudah
ditentukan(akan dijelaskan lebih lanjut berikutnya). Di contoh
ini, dedaunan diprogram untuk diam tidak bergerak, sedangkan
Wombat akan bergerak maju ke depan. Coba anda tempatkan dua wombat ke
dalam dunia dan tekan tombol‘Act’, maka keduanya akan bergerak.
Wombat suka makan dedaunan, maka jika Wombat bertemu dengan daun, mereka akan memakannya.
Klik
tombol ‘Run’, ini akan sama seperti dengan mengklik
tombol 'Act' secara berulang-ulang dengan cepat, dan anda akan
melihat tombol Run berubah menjadi tombol ‘Pause’. Mengklik tombol
tersebut akan menghentikan skenario secara keseluruhan.
Tombol
geser disebelah tombol Act dan Run berguna untuk mengatur
kecepatan skenario. Klik Run lalu geser tombol tersebut, dan anda akan
mengerti maksud saya.
Anda
dapat memanggil sebuah fungsi secara langsung, jika anda tidak ingin
menjalankan skenario secara keseluruhan. Fungsi adalah suatu tindakan
tertentu yang dapat dilakukan sebuah objek.
Jalankan
skenario dan pastikan ada Wombat di dalam jendela dunia, lalu klik
kanan pada Wombat dan anda akan melihat bahwa suatu objek dalam jendela
dunia juga dapat memiliki menu pop-up(Gambar 2).
Gambar 2: Menu pop-up suatu objek
Anda
dapat memilih fungsi dari daftar pilihan yang muncul, untuk
memerintahkan Wombat melakukan sesuatu. Sebagai contoh turnLeft(),
memilih fungsi ini akan memerintahkan Wombat untuk berbelok ke kiri.
Sekarang coba move().
Beberapa
fungsi akan memberikan informasi, contohnya getLeavesEaten() akan
memberitahu anda berapa jumlah daun yang telah dimakan si Wombat sampai
saat ini, silahkan dicoba.
Anda juga
akan melihat fungsi ‘act()’. Fungsi ini akan dipanggil setiap saat
anda mengklik tombol Act, tapi jika anda hanya ingin satu obyek
tertentu berjalan di jendela dunia, maka anda dapat memanggil
fungsi act() objek tersebut secara langsung.
Ada
saatnya anda memiliki banyak objek di dalam dunia, anda sudah
tidak membutuhkannya lagi dan ingin mengulangnya dari awal. Solusi
termudah adalah dengan membuang dunia itu dan membuat sebuah dunia
yang baru, ini dapat dilakukan dengan cara mengklik tombol 'Reset'.
Anda akan melihat jendela dunia yang baru dan kosong. Dunia lama sudah
terbuang beserta dengan segala objek di dalamnya, karena anda
tidak dapat memiliki 2 dunia sekaligus.
Kita
telah melihat objek di dalam dunia memiliki fungsi yang dapat dipanggil
melalui menu pop-up. Dunia sendiri adalah objek yang memiliki fungsi
dan dapat kita panggil.
Sebelumnya
kita sudah mengetahui bagaimana cara membuat sebuah dunia baru,
sekarang kita akan memanggil fungsi dunia yang berperan sebagai objek.
Di
bagian atas jendela dunia terdapat judul yang menunjukkan nama
dunia, “WombatWorld” pada kasus ini. Klik kanan judul tersebut dan
anda akan melihat menu pop-up dari dunia. (Untuk diperhatikan, judul yang dimaksud adalah yang terdapat di atas jendela dunia bukan pada jendela kelas di sebelah kanan.)
Salah
satu pilihan fungsi di menu ini adalah ‘populate()’. Coba dan lihatlah
hasilnya, fungsi tersebut akan membuat beberapa daun dan Wombat serta
memasukkanya ke dalam dunia. Setelah itu anda bisa menjalankan skenario.
Fungsi
lainnnya adalah ‘randomLeaves(int howMany)’. Fungsi ini menempatkan
beberapa daun ke dalam dunia secara acak. Anda mungkin penasaran dengan
kata-kata tambahan di dalam kurung int
howMany.
Kata-kata itu adalah ‘parameter’, yang berarti anda harus
menambahkan beberapa informasi tambahan ketika memanggil fungsi ini.
Kata ‘int’ merujuk pada angka dan ‘howMany’ merujuk kepada jumlah daun
yang anda inginkan.
Ketika
fungsi ini dipanggil, kotak dialog akan muncul dan menunggu anda untuk
memasukkan nilai untuk parameter tadi. Coba masukkan angka 12 dan klik
OK, lihatlah hasilnya.
(Jika
dihitung, terkadang daun yang tampak akan lebih sedikit dari angka
parameter yang dimasukkan. Hal ini karena beberapa daun mungkin berada
pada lokasi yang sama dan menumpuk di lokasi tersebut.)
Baiklah,
mungkin anda mulai bosan dengan Wombat yang hanya berlari mengelilingi dunia
tanpa henti. Sekarang mari kita lanjutkan dengan hal yang lebih
menantang : memprogram Wombat anda untuk melakukan hal-hal menarik!
Tutorial
ini menggangap pembaca sudah mengenal atau terbiasa dengan dasar bahasa
pemrograman Java. Tutorial ini tidak ditujukan untuk pengenalan Java
bagi pemula.
Anda
dapat memprogram objek anda sendiri seperti wombat atau apapun yang
anda mau dengan cara menulis kode Java untuk kelas dari objek tersebut,
dan itu yang akan kita lakukan sekarang.
Klik dua kali kelas Wombat di jendela kelas.
Sebuah teks editor akan muncul dan anda akan melihat kode pemrograman Java dari kelas Wombat.
Hal
pertama yang akan kita coba adalah mengubah perilaku Wombat yang ketika
sampai di area paling pinggir jendela dunia Wombat akan selalu
berbelok ke kiri, menjadi berbelok dengan arah secara acak. Untuk
melakukan hal ini, kita
akan menambahkan fungsi ‘turnRandom()’ pada kelas Wombat.
/**
*
Berbelok dengan arah secara acak.
*/
public
void turnRandom()
{
//
mendapatkan sebuah angka secara acak antara 0 dan 3...
int
turns = Greenfoot.getRandomNumber(4);
//
...lalu belok kiri sebanyak angka acak tersebut.
for(int
i=0; i<turns; i++) {
turnLeft();
}
}
Selanjutnya
mengubah fungsi ‘act()’ untuk memanggil fungsi turnRandom.
Fungsi act() sebelumnya terlihat seperti ini:
public
void act()
{
if(foundLeaf())
{
eatLeaf();
}
else
if(canMove()) {
move();
}
else
{
turnLeft();
}
}
Ubah panggilan kepada fungsi ‘turnLeft()’ menjadi panggilan kepada fungsi ‘turnRandom()’.
Selesai,
sekarang saatnya mencoba. Klik tombol ‘Compile’ yang terletak di
bagian atas teks editor. Jika terdapat pesan kesalahan, perbaiki dan
klik tombol compile lagi. Ulangi hal ini sampai tidak terdapat pesan
kesalahan lagi. Sekarang anda dapat menutup jendela teks editor.
Anda
harus menyusun(compile) skenario sebelum menjalankannya. Hal ini dapat
dilakukan dari dalam teks editor ataupun dari jendela utama aplikasi
Greenfoot dengan menekan tombol‘Compile’.
Setelah
sukses menyusun(compile), anda dapat melanjutkan membuat objek lagi.
Penyusunan(compile) yang sukses tanpa ada pesan kesalahan akan
menciptakan objek di dalam dunia secara otomatis.
Ada
dua cara untuk mengubah gambar dari suatu objek: Mengubah gambar kelas,
dimana hal tersebut akan mengubah gambar semua objek dari kelas tersebut. Cara
lainnnya adalah mengubah gambar secara programatikal dengan
memodifikasi kode, yang hanya akan mengubah objek secara individu. Tiap
objek dapat diubah gambarnya sewaktu-waktu.
Untuk
mengubah gambar kelas, pilih ‘Set Image...’ dari menu pop-up kelas yang
dipilih. Anda dapat mencoba dengan kelas Leaf, coba ganti dengan gambar
seperti pisang, dan wombat nantinya akan memakan pisang. (Mungkin bukan
hal yang direkomendasikan oleh penjaga kebun binatang, tapi itulah
sebabnya kita menggunakan simulasi...) Greenfoot sudah menyediakan
koleksi gambar yang siap digunakan, atau anda bisa menggunakan gambar
sendiri dengan cara memasukkan gambar ke dalam folder ‘images’ yang
terletak di dalam folder skenario (‘wombats’) lalu dapat memilih gambar
tersebut.
Cara
kedua adalah mengubah gambar dari objek secara programatikal. Hal ini
dapat dilakukan secara gampang hanya dengan cara memanggil fungsi ‘setImage’
yang merupakan rintisan dari kelas Actor. Fungsi ‘setImage’
memiliki dua versi: yang pertama memerlukan parameter dari
GreenfootImage, sedangkan yang kedua menggunakan gambar dari folder
gambar (lalu membaca gambar tersebut memakai fungsi GreenfootImage dan
mengubahnya).
Kita
akan menggunakan cara kedua yang memakai berkas gambar. Tugas yang akan
kita selesaikan adalah memastikan wombat tidak terlihat terbalik ketika
berbelok ke kiri. Di skenario ‘wombat’ sudah tersedia gambar yang
bernama ‘wombat-left.gif’ di dalam folder ‘images’. Gambar
tersebut berformat GIF yang akan menampilkan gambar wombat menghadap ke kiri, sama persis dengan yang telah
kita lihat sejauh ini.
Kita dapat mengubah gambar wombat menjadi versi menghadap kiri dengan menulis:
setImage("wombat-left.gif");
Fungsi
ini akan kita gunakan ketika wombat mengubah arahnya. Untuk
melakukannya kita perlu mengubah fungsi ‘setDirection(int Direction)’.
Cari fungsi tersebut di kode Wombat.
Beberapa
baris kode akan kita tambahkan disini untuk mengatur gambar dan
perputaran yang sesuai ketika menetapkan arah. Kita akan menggunakan
gambar ‘wombat-left’ saat wombat menghadap ke barat atau utara,
sedangkan gambar aslinya ‘wombat’ akan dipakai ketika menghadap
timur atau selatan. Untuk diperhatikan gambar ‘wombat-left’ tidak perlu
diputar saat menghadap ke barat karena sudah menghadap ke barat sedari
asalnya.
Fungsi ‘setDirection’ yang baru akan terlihat seperti:
/**
*
Menetapkan arah yang sedang dihadapi.
*/
public
void setDirection(int direction)
{
this.direction
= direction;
switch(direction)
{
case
SOUTH :
setImage("wombat.gif");
setRotation(90);
break;
case
EAST :
setImage("wombat.gif");
setRotation(0);
break;
case
NORTH :
setImage("wombat-left.gif");
setRotation(90);
break;
case
WEST :
setImage("wombat-left.gif");
setRotation(0);
break;
default
:
break;
}
}
Kode ini
akan berjalan sebagaimana mestinya. Jika ingin lebih serius, seharusnya
kita dapat memuat gambar dari berkas gambar hanya sekali(di dalam
konstruktor) dan menyimpannya ke dalam variabel bertipe GreenfootImage. Dengan begitu kita bisa menggunakan dua gambar dari objek untuk mengubah gambar berulang-ulang.
Setelah
ini mungkin kita ingin memisahkan gambar untuk wombat ketika naik dan turun,
tapi biarlah itu kami tinggalkan untuk pembaca yang antusias.
Untuk mengubah perilaku sebuah objek, seringkali kita akan memakai kelas-kelas standar dari Greenfoot. Greenfoot
menyediakan empat kelas penting yang perlu anda ketahui: World, Actor, GreenfootImage dan Greenfoot.
Kelas
World dan Actor sudah kita lihat sejauh ini di jendela aplikasi sebagai
kelas induk(superclass). Kelas GreenfootImage digunakan ketika
berkaitan dengan gambar, dan kelas Greenfoot menyediakan akses ke
framework Greenfoot itu sendiri.
Cara
termudah untuk mempelajari kelas-kelas tersebut adalah dengan membaca
dokumentasi API Greenfoot secara online. Anda bisa menemukannya di
Di
laman tersebut, anda dapat membaca penjelasan tentang kelas
Greenfoot(Greenfoot API) secara online, dan dapat diunduh secara utuh
untuk dicetak.
Anda
dapat memanggil fungsi ‘Inspect’ melalui menu pop-up dari setiap
wombat yang ada di jendela dunia, untuk melihat ke dalam objek dan
memeriksa nilai-nilai dari tiap variabel. Hal ini dapat bermanfaat
ketika sedang membuat kelas.
Anda
mungkin menyadari ada beberapa variabel yang sudah ditetapkan di kelas
Wombat(seperti ‘leavesEaten’) dan beberapa lagi bahkan tidak
terlihat di kelas Wombat. Hal itu karena variabel tambahan(seperti x, y
dan rotation) diwariskan dari kelas Actor dan akan ada di setiap objek
Greenfoot.
Jika suatu nilai
tergambar sebagai anak panah, maka variabel tersebut mempunyai
referensi ke objek lain, yang bisa dilihat dengan cara memilih variabel
tersebut lalu mengklik ‘Inspect’.
Sekarang
saatnya memberi tantangan kepada Wombat dengan menambahkan
rintangan, yaitu batu. (Kita akan membuat batunya begitu besar hingga
wombat tidak akan bisa memanjatnya)
Untuk
melakukannya, kita perlu membuat sub-kelas baru dari kelas induk Actor.
Pilih ‘New subclass’ dari menu pop-up kelas Actor, ini akan membuat
sebuah kelas baru sebagai sub-kelas dari kelas Actor. Ketik ‘Rock’
ketika diminta menulis nama kelas baru tersebut, anda juga akan diminta
memilih gambar untuk kelas tersebut.
Anda
bisa mencari(Mbah Google) atau membuat(memakai aplikasi grafis) gambar
dan menyimpannya di sub-folder ‘images’ dari folder skenario sebelum
membuat kelas baru ini. Disini kami sudah mempersiapkan berkas gambar
bernama ‘rock.gif’ di dalam folder skenario untuk anda.
Pilih gambar, klik OK, dan sebuah kelas baru bernama Rock sudah selesai dibuat.
Sekarang
buka teks editor untuk kelas itu, anda akan melihat kerangka kode yang
otomatis tersusun. Untuk saat ini, kita tidak perlu menulis kode
apapun(Batu hanya diam,tidak mempunyai perilaku khusus.)
Tutup jendela teks editor, susun(compile) lalu tes dan selesai ! Batu telah jadi
Sekarang
pilih fungsi populate() untuk memasukkan wombat dan dedauan, lalu
masukkan batu secara manual seperti yang sudah dijelaskan sebelumnya.
Anda akan melihat batu sudah masuk ke dalam skenario, tapi wombat masih
bisa berjalan melewatinya. Oh..ternyata belum selesai.
Tutorial
ini tidak mencakup untuk mengubah skenario secara signifikan atau
membuat skenario baru. Jika anda ingin mencoba hal tersebut, anda
mempunyai dua pilihan: Mempelajari dari skenario yang sudah ada, atau
anda dapat membaca Manual Untuk Programmer Greenfoot.
Tentu saja sebaiknya anda juga membaca dokumentasi kelas Greenfoot(Greenfoot API) seperti yang sudah dijelaskan sebelumnya.
Hal
terakhir yang akan kita kerjakan sekarang adalah melanjutkan persoalan
yang belum selesai, yaitu mencegah wombat berjalan melewati batu.
Buka
teks editor untuk kelas Wombat lalu cari fungsi ‘canMove’. Fungsi
ini berguna untuk mengecek apakah wombat sudah mencapai area
paling pinggir dari jendela dunia. Kita perlu mengubahnya untuk
menghasilkan nilai 'false' ketika ada batu di depan Wombat.
Ubah pernyataan 'return', yang sebelumnya seperti ini
return
true;
menjadi:
List
rocks = myWorld.getObjectsAt(x, y, Rock.class);
if(rocks.isEmpty())
{
return
true;
}
else
{
return
false;
}
Kode
ini akan mendaftar semua batu yang berada di depan Wombat. Jika daftar
ini kosong, maka Wombat bisa bergerak maju, tetapi jika ada batu yang
terdaftar maka Wombat tidak akan bisa bergerak maju.
Skenario
‘wombats2’ yang sudah termasuk ketika anda mengunduh tutorial ini,
berisi semua perubahan yang sudah didiskusikan di tutorial ini.
➽ TERIMA KASIH ➽