Selasa, 10 November 2009

Membuat Game Space Invader (1)

Sudah lama sekali blog ini tidak saya urus. Padahal ini adalah blog kesayangan saya yang paling saya sayangi diantara blog-blog yang lain.

Selama ini arah dari blog ini tidak jelas dan masih sering ngelantur ke sana kemari. Itulah masalahnya kalau cuman punya blog satu. Untunglah sekarang blog saya sudah ada 8, kurang dua lagi pas sepuluh. Setelah itu mau serius cari duit ::

Karena blog ini sesungguhnya adalah blog tentang game, belajar bikin game, belajar membuat game, dll (mendaftarkan keyword buat nembak SE ::) maka sudah selayaknyalah dan sepantasnyalah maka saya harus mengisinya dengan belajar membuat game (nembak lagi ::)

Kali ini saya akan membahas bagaimana cara membuat game Space Invader. Anda tahu game itu kan, kalau gak tahu silahkan cari sendiri di Google. ::

Bahasa yang digunakan disini adalah Blitz3D (download disini, jangan lupa dipelajari dulu dasarnya).

Walaupun codenya ditulis dengan Blitz3d namun saya berusaha agar isinya bisa diterapkan ke bahasa-bahasa yang lainnya.

Game ini akan saya mulai dari dasar sekali hingga mahir sekali. Gak tanggung tanggung, saya juga akan membahas hingga ke tingkat FX, Logo, AI, dll agar gamenya tampak profesional.

GDD (Game Design Document) Dasar I
Kita mulai gamenya dari yang paling dasar dahulu:1 musuh, 1 peluru


Bentuk gamenya akan tampak seperti gambar diatas.

- Musuh akan bergerak dari kiri ke kanan
- Pemain bergerak kekiri atau ke kanan mengikuti tombol keyboard yang ditekan
- Pemain bisa menembak dengan menekan tombol 'F'
- Pemain hanya bisa menembak satu peluru setiap sekali tembakan.

Spesifikasi yang saya tuliskan diatas adalah spesifikasi untuk game space invader yang paling sederhana. Kita bisa mengembangkannya ke yang lebih rumit lagi, dan tentang hal itu akan saya bahas di tulisan-tulisan berikutnya.

Gambar-Gambar yang diperlukan untuk membuat game ini adalah gambar alien dan gambar pesawat.

Anda bisa menemukan gambar ini di folder graphic. Atau anda bisa mendownload gambar di bawah ini.

player.bmp

alien.bmp

Saya sarankan untuk menyimpan kedua file ini dalam satu folder, bersama dengan file source-code-nya.

Setelah semua yang dibutuhkan selesai, tinggal buat gamenya. Buka Blitz3d anda, dan ketikkan code berikut ini:

Graphics 640,480,16,2
SetBuffer BackBuffer()

;load gambar
Global img_alien=LoadImage("alien.bmp")
Global img_ship=LoadImage("player.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

While Not KeyHit(1)
keyboard()
alien_upd()

Cls
render()
Flip
Wend
End

Function render()

;gambar alien
DrawImage img_alien,alien_x,alien_y

;draw ship
DrawImage img_ship,ship_x,400

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
;ctrl

End Function

Function alien_upd()
alien_x=alien_x+alien_dir

If alien_x<0
alien_dir=2
EndIf

If alien_x>591
alien_dir=-2
EndIf
End Function
Baris pertama program kita diawali dengan perintah Graphics untuk mengeset layar. Disini saya menggunakan layar dengan resolusi 640,480. Color depth yang digunakan adalah 16 bit. Angka 2 dibelakang menyatakan bahwa gamenya akan berbentuk window dan tidak fullscreen.

Perintah setbuffer backbuffer() berguna untuk mengarahkan arah proses penggambaran ke backbuffer(), hal ini agar proses penggambaran tidak tampak dilayar untuk menghindari layar berkedip. Perintah ini berhubungan dengan perintah Flip yang berfungsi 'mengkopy' backbuffer() ke layar monitor (FrontBuffer). Proses penggambaran dalam game selalu dilakukan di backbuffer() setelah itu baru dipindah ke FrontBuffer()

Pada baris berikutnya kita meload gambar-gambar yang diperlukan. Gambar yang kita load ada dua buah, yaitu gambar alien dan pesawat. Saat ini pelurunya masih belum di load karena di awal tutorial ini saya tidak membahas tentang peluru terlebih dahulu. Pembahasan tentang peluru akan dibahas pada tulisan selanjutnya.

Dalam kode, saya sering menggunakan global untuk variabel karena variabel-variabel itu nantinya akan di akses di dalam fungsi.

Kita perlu mendefinisikan variabel-variabel untuk menyimpan informasi dari tiap object yang ada di game kita.

Untuk alien, ada tiga buah variabel yang didefinisikan yang semuanya berguna untuk menyimpan informasi posisi x, posisi y, dan arah gerakan. Sedangkan untuk pesawat pemain kita hanya memberikan satu informasi yaitu posisi x. Karena pesawat hanya bergerak horisontal maka posisi y nya tetap sehingga tidak perlu disimpan dalam variabel.

Main Loop (Perulangan Utama)
Dalam setiap pasti ada yang namanya main loop atau perulangan utama. Bagian ini adalah inti dari program yang dibagi dalam dua bagian besar yaitu bagian update dan bagian render. Bagian update berfungsi untuk menangani segala hal yang berhubungan dengan perhitungan seperti posisi pesawat, gerakan peluru, posisi alien, dsb. Bagian render berfungsi menangani segala hal yang berhubungan dengan menggambar object-object dalam game.

Kode untuk main loop adalah sebagai berikut:
While Not KeyHit(1)
keyboard()
alien_upd()

Cls
render()
Flip
Wend
End
Main Loop diindikasikan dengan While ... Wend atau perulangan yang lain. Pada contoh diatas saya menggunakan While ... Wend. Kalau diartikan secara literal artinya, jalankan semua perintah yang ada diantara While ... Wend hingga tombol esc ditekan. Bila user menekan tombol esc, maka permainan akan berhenti (End). Pada perulangan diatas, bagian updatenya adalah fungsi keyboard() dan alien_upd(), sedangkan bagian yang menangani proses penggambaran ada pada perintah Cls, Render() dan Flip. Mengenai fungsi render() dan fungsi-fungsi yang lain yang tertera di atas, akan dijelaskan kemudian.

Fungsi-fungsi yang dipakai.
Dalam program diatas, anda bisa lihat, ada tiga buah fungsi yang didefinisikan yaitu : render(), keyboard() dan fungsi alien_upd().

Penting sekali untuk mendefinisikan fungsi-fungsi tertentu untuk menangani bagian-bagian dari game. Hal ini agar program kita akan tampak lebih rapi dan mudah dibetulkan sekaligus mudah untuk dikembangkan.

Fungsi render() berfungsi untuk menangani proses penggambaran, dalam fungsi ini kita menggambar masing-masing object sesuai dengan posisi dan statusnya masing-masing.

Fungsi alien_upd() berfungsi untuk menangani update status alien seperti animasi, pergerakan, AI, dsb. Pada program awal ini kita hanya menangani pergerakan alien. Alien akan bergerak kekanan dan jika alien sudah sampai di pojok kanan maka alien akan bergerak kekiiri, dan bila alien sudah berada di pinggir paling kiri layar maka alien kan bergerak kekanan. Begitu seterusnya. Alien akan bergerak ke kanan dan ke kiri secara bergantian.

Fungsi keyboard() berfungsi untuk menangani penekanan keyboard. Untuk mendeteksi penekanan keyboard kita menggunakan perintah keydown(). Kode scan untuk tombol kiri dan kanan berturut-turut adalah 203 dan 205. Kita tidak pakai tombol atas dan bawah karena pesawatnya tidak bisa bergerak ke atas dan kebawah.

Jika sudah selesai menulis kodenya. Tekan F5 atau tekan tombol Run dan lihat hasilnya.
Apabila anda berhasil, maka dilayar akan muncul pesawat alien yang bergerak ke kanan dan kiri dan pesawat yang akan bergerak bila tombol ditekan.

Pada bagian selanjutnya kita akan membahas tentang peluru. Jadi jangan kemana-mana yah tetap datang ke blog yang keren ini yah.

Related Article :
Membuat Game Space Invader (2)
RPG CHARACTER MAKER OFFLINE EDITION (2)

0 komentar: