Untuk tulisan kali ini saya akan membahas bagaimana caranya menambahkan peluru pada game Space Invader kita.
Sebelum kita memulai kita perlu mendifinisikan dulu tentang peluru ini.
1. Peluru ditembakkan setelah ditekan tombol 'F'
2. Pemain hanya bisa menembakkan satu peluru untuk sekali tembakan.
3. Peluru bergerak keatas
4. Saat peluru mengenai alien, maka alien akan menghilang dan muncul alien baru dari kiri/kanan.
5. Peluru yang telah melewati batas atas layar akan menghilang.
Dari beberapa keterangan di atas, saya rasa sudah cukup jelas bagaimana peluru ini nantinya. Ini adalah konsep untuk peluru yang paling sederhana. Kita bisa mengembangkan ke model peluru yang lebih canggih nantinya. Yang Insya Allah akan saya bahas di tulisan selanjutnya.
Gambar perlu dapat diambil dalam folder graphics. Atau bila anda tidak menemukannya bisa download gambar ini.

Sebaiknya gambarnya disimpan dengan nama "bullet.bmp" dan disimpan di tempat yang sama dengan folder tempat menyimpan source code/listing program.
Mari kita mulai menulis kodenya:
Graphics 640,480,16,2
SetBuffer BackBuffer()
;load gambar
Global img_alien=LoadImage("alien.bmp")
Global img_ship=LoadImage("player.bmp")
Global img_bullet=LoadImage("bullet.bmp")
;alien status
Global alien_x=0 ;posisi x alien
Global alien_y=0 ;posisi y alien
Global alien_dir=2 ;arah gerak alien
;player status
Global ship_x
;bullet status
Global bl_x
Global bl_y
Global bl_stat
While Not KeyHit(1)
keyboard()
alien_upd()
bl_upd()
Cls
render()
Flip
Wend
End
Function render()
;gambar alien
DrawImage img_alien,alien_x,alien_y
;gambar ship
DrawImage img_ship,ship_x,400
;gambar bullet
If bl_stat Then DrawImage img_bullet,bl_x,bl_y
End Function
Function keyboard()
;kiri
If KeyDown(203)
ship_x=ship_x-3
If ship_x<0 Then ship_x=0
EndIf
;kanan
If KeyDown(205)
ship_x=ship_x+3
If ship_x>608 Then ship_x=608
EndIf
;F
If KeyHit(33)
If bl_stat=False
;buat bullet
bl_stat=True
bl_x=ship_x+7
bl_y=400
EndIf
EndIf
End Function
Function alien_upd()
alien_x=alien_x+alien_dir
If alien_x<0
alien_dir=-alien_dir
EndIf
If alien_x>591
alien_dir=-alien_dir
EndIf
End Function
Function bl_upd()
If bl_stat
bl_y=bl_y-5
If bl_y<0 Then bl_stat=False
;check collision
If ImagesCollide(img_alien,alien_x,alien_y,0,img_bullet,bl_x,bl_y,0)
bl_stat=False
If Rand(1,2)=1
alien_x=0
alien_dir=2
Else
alien_x=591
alien_dir=-2
EndIf
EndIf
EndIf
End Function
Ada beberapa tambahan yang ditambahkan dalam kode kita. Karena kita akan menambahkan peluru, maka kita harus meload gambar peluru, dan menentukan variabel-variabel yang akan berfungsi untuk menyimpan informasi mengenai peluru.
Disini kita mendefinisikan 3 variabel
Global bl_x
Global bl_y
Global bl_stat
bl_x, bl_y masing-masing menyimpan informasi posisi x dan y dari peluru.
bl_stat berfungsi untuk menyimpan informasi apakah peluru ada atau tidak. Bila peluru masih ada di layar maka pemain tidak bisa menembak.
Fungsi baru:
Untung menangani peluru ini kita mendefinisikan sebuah fungsi baru yaitu fungsi bl_upd(). fungsi bl_upd() ini akan bertindak untuk mengurusi segala sesuatu yang terjadi pada peluru seperti pergerakan peluru, pengecekan apakah peluru mengenai alien, dsb.
Isi dari fungsi bl_upd()
Function bl_upd()
If bl_stat
bl_y=bl_y-5
If bl_y<0 Then bl_stat=False
;check collision
If ImagesCollide(img_alien,alien_x,alien_y,0,img_bullet,bl_x,bl_y,0)
bl_stat=False
If Rand(1,2)=1
alien_x=0
alien_dir=2
Else
alien_x=591
alien_dir=-2
EndIf
EndIf
EndIf
End Function
Pada baris pertama fungsi ini kita mengecek dulu status dari peluru dengan melihat pada variabel bl_stat . Jika peluru belum ditembakkan atau sudah menghilang dari layar maka kita tidak perlu repot-repot mengurusinya.
Code untuk menggerakkan peluru:
Kode diatas berfungsi menangani pergerakan peluru. Variabel bl_y yang mewakili posisi vertikal dari peluru dikurangi 5, sehingga peluru akan bergerak ke atas. Bila peluru ada dan berjalan keatas hingga keluar dari layar (bl_y<0) maka bl_stat diubah isinya menjadi false untuk menandakan bahwa peluru sedang tidak aktif.
bl_y=bl_y-5
If bl_y<0 Then bl_stat=False
Code untuk menangani collision/tabrakan antara peluru dan alien:
;check collision
If ImagesCollide(img_alien,alien_x,alien_y,0,img_bullet,bl_x,bl_y,0)
bl_stat=False
If Rand(1,2)=1
alien_x=0
alien_dir=2
Else
alien_x=591
alien_dir=-2
EndIf
EndIf
Kode diatas berfungsi untuk menangani tumbukan/tabrakan antara peluru dengan pesawat musuh. Fungsi yang digunakan adalah ImagesCollide(). Fungsi ini akan mengecek apakah dua buah benda bertubrukan ataukah tidak. Bila peluru menabrak kapal alien, maka Alien akan dibuat ulang.
Fungsi Rand() berfungsi untuk mengacak nilai. Disini kita mengacak nilai antara 1 dan 2. Bila muncul angka 1 maka alien akan muncul dari arah kiri, dan bila muncul angka 2 maka alien akan muncul dari arah kanan.
Selain penambahan fungsi baru, ada juga penambahan kode dalam fungsi yang sudah ada. Dalam fungsi keyboard() kita menambahkan kode untuk menangani penekanan tombol. Perintah yang digunakan adalah keyhit(). Berbeda dengan keydown(). Keyhit() berfungsi mengecek apakah sebuah tombol "sudah" ditekan atau belum, sedangkan fungsi Keydown() berfungsi mengecek apakah sebuah tombol "sedang" ditekan ataukah tidak.
Cuplikan codenya adalah sebagai berikut:
Pada saat kita menekan tombol F, maka bl_stat berubah menjadi true, untuk menandakan bahwa peluru sedang aktif. Dan kita juga harus mengeset posisi peluru. Ingat bahwa peluru pertama kali muncul di depan pesawat lalu melaju ke depan. Kita perlu tahu posisi pesawat sebelum menentukan posisi peluru. Pada code diatas, bl_x yang berisi informasi tentang posisi x dari peluru kita isi dengan ship_x+7. ship_x adalah posisi x pesawat, posisi ini kita tambahkan 7 agar peluru agak bergeser ke kanan sehingga akan muncul tepat di tengah dan bukan di pinggir pesawat.
;F
If KeyHit(33)
If bl_stat=False
;buat bullet
bl_stat=True
bl_x=ship_x+7
bl_y=400
EndIf
EndIf
Pada bagian Render() kita juga menambahan baris code untuk menggambar peluru. Ingat bahwa Peluru hanya perlu digambar bila peluru sedang aktif.
Coba ketik codenya dan jalankan untuk lihat hasilnya.
Pada tahap berikutnya kita akan melanjutkan dengan memberikan effect ledakan pada alien yang tertembak.
Related Article:
Membuat Game Space Invader (3)
Membuat Game Space Invader (1)




0 komentar:
Poskan Komentar