Jumat, 13 November 2009

Membuat Game Space Invader (3)

Pada tulisan kemarin kita sudah membahas bagaimana caranya membuat game pesawat sederhana. Bisa dibilang semua fungsi dasarnya sudah selesai kita bikin dan game kita sudah selesai. Namun untuk membuat game yang bagus dan layak untuk dimainkan, maka game yang kita buat kemarin masih belum cukup.

Pada tulisan ini saya akan membahas tentang bagaimana menambahkan animasi efek ledakan. Animasi efek ledakan akan membuat game tampak lebih bagus dan lebih hidup.

Untuk membuat efek ledakan, cara yang paling sederhana adalah dengan menggunakan animasi. Gambar animasi ledakan dapat diambil dari internet. Ada bermacam-macam gambar animasi ledakan mulai dari yang sederhana hingga yang rumit. Animasi juga bisa dibuat sendiri dengan menggunakan metode pemrograman dengan cara memanipulasi gambar-gambar particle-particle yang jumlahnya banyak dan beragam sehingga memunculkan effect seperti ledakan.

Pada tulisan kali ini, saya akan menggunakan gambar animasi ledakan seperti dibawah ini.



Gambar ini bisa didapatkan di dalam folder graphics. Atau anda bisa mendownload gambar diatas. Saya sarankan anda untuk menyimpan gambarnya dalam folder yang sama dengan file code program. Pastikan filenya disimpan dengan nama "kaboom.bmp"

Sebelum kita mulai membuat effek ledakan, pertama kita harus mendefinisikan dulu tentang apa dan bagaiman effek ledakan yang ingin kita buat.

- ledakan muncul saat pesawat alien tertembak
- ledakan menggunakan gambar animasi ledakan
- ledakan menghilang saat animasi telah selesai dijalankan.

Karena ledakan muncul saat pesawat alien tertembak, maka kita harus menambahkan kode untuk mengaktifkan ledakan di dalam fungsi bullet_upd() karena pada fungsi inilah pengecekan tabrakan antara peluru dan alien terjadi. Pada saat peluru bertabrakan dengan alien maka ledakan akan diaktifkan.

Pada saat mengaktifkan ledakan, kita harus menentukan posisi ledakan. Posisi ledakan seharusnya berada pada tempat yang sama dengan posisi alien yang tertembak.

Untuk menangani ledakan, kita mendefinisikan fungsi baru yaitu fungsi exp_upd(). Saat ledakan berlangsung, maka gambar animasi ledakan akan dijalankan dengan cara memutar frame satu persatu hingga selesai. Saat frame sudah selesai dimainkan semuanya maka ledakan akan di nonaktifkan lagi.

Karena ledakan perlu untuk digambar, maka pada fungsi render() akan ditambahkan perintah untuk menggambar animasi ledakan. Ingat bahwa efek ledakan hanya digambar pada saat ledakan sedang aktif, yaitu setelah musuh tertembak. Kita menggunakan variabel exp_stat yang berisi informasi tentang status dari ledakan. Bila nilainya True maka ledakan sedang terjadi, sedangkan bila nilainya false maka sedang tidak sedang terjadi.

Kita butuh butuh variabel untuk menyimpan data-data seperti posisi x, posisi y, status ledakan (aktif, tidak aktif), frame ledakan dan gambar ledakan. Maka dari itu kita akan mendifinisikan variabel-variabel untuk ini. Variabel-variabel tersebut adalah:


img_exp = untuk menyimpan gambar animasi ledakan
exp_stat = status ledakan (aktif/tidak aktif)
exp_frame = frame animasi ledakan
exp_x = posisi x
exp_y = posisi y


Code lengkapnya bisa dilihat di bawah ini.

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")
Global img_exp=LoadAnimImage("kaboom.bmp",60,48,0,6)

;alien status
Global alien_x=0 ;posisi x alien
Global alien_y=0 ;posisi y alien
Global alien_dir=1 ;arah gerak alien

;player status
Global ship_x

;bullet status
Global bl_x
Global bl_y
Global bl_stat

;expl status
Global exp_stat
Global exp_frame
Global exp_x
Global exp_y

While Not KeyHit(1)
keyboard()
alien_upd()
bl_upd()
exp_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

;gambar expl
If exp_stat Then DrawImage img_exp,exp_x,exp_y,exp_frame

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
exp_stat=True
exp_x=alien_x
exp_y=alien_y
exp_frame=0

If Rand(1,2)=1
alien_x=0
alien_dir=1
Else
alien_x=591
alien_dir=-1
EndIf
EndIf
EndIf
End Function

Function exp_upd()
If exp_stat
exp_frame=exp_frame+1
If exp_frame>5 Then exp_stat=False
EndIf
End Function


Related Article:
Seamless background for your game and web
Membuat Game Space Invader (2)

2 komentar:

Sariful mengatakan...

Boleh di coba nich..., ternyata programer sakti toh... salam kenal...

Fajar mengatakan...

kalau ada yang gak ngerti boleh ditanyakan.
kalau saya gak ngerti juga, saya yang nantinya balik tanya :)