Buat Game Space Shooter dengan Android Studio

Space Shooter merupakan game klasik yang dari dulu sudah ada dan terus berkembang dengan gameplay yang lebih menantang, musuh yang beraneka ragam dan tentunya dengan grafis yang lebih bagus. Berbagai tools jg bisa digunakan untuk membuatnya seperti Unity, Unreal Engine dan untuk tutorial kali ini kita akan membuatnya menggunakan Android Studio.

Game ini bisa dibilang termasuk game legenda yang masih eksis hingga sekarang. Saya pertama kali memainkan game ini waktu itu masih di console Nintendo dan bagi saya waktu itu cukup seru untuk dimainkan. Lalu dari waktu ke waktu dengan munculnya berbagai console baru, game ini berkembang dengan berbagai variasi didalamnya.

http://game-oldies.com/play-online/life-force-nintendo-nes

 

http://nerdexp.com/spaceship/

 

http://projectnes.blogspot.co.id/2011/03/extent-of-their-storage-media-galaga.html

 

Saya cukup senang memainkan game ini, lalu saya penasaran bagaimana jika game ini kita sendiri yang buat? Apakah rasa senang itu akan terasa lebih jika dibandingkan dengan bermain dari game orang lain. Menjawab pertanyaan itu saya coba untuk membuat game SpaceShooter ini dengan gameplay yang sangat simple dan tidak memerlukan waktu yang lama.

Sekaligus mengungkap rasa penasaran saya, apakah bisa kita membuat game dengan android studio? Dimana android studio ini biasa digunakan untuk membuat aplikasi android bukan game. Hasil googling sebentar, ternyata banyak tutorial yang menunjukkan bahwa kita dapat membuatnya lewat android studio, bahkan mungkin lewat IDE lain seperti Eclipse dan Netbeans pun bisa.

 

Dalam pembuatan game pada umumnya dibutuhkan beberapa orang dengan talenta masing-masing, karena dalam pembuatan game tidak hanya melibatkan orang yang jago dalam programming saja namun melibatkan orang-orang yang ahli dalam grafis, pembuatan musik, perancangan gameplay dan masih banyak lagi. Namun ditutorial kali ini kita akan fokus pada programmingnya saja karena kita akan menggunakan asset dari luar yang banyak orang sudah menyediakannya secara free.

Berikut adalah daftar asset yang bisa diunduh untuk nantinya digunakan ditutorial ini:

  1. http://www.kenney.nl/assets/space-shooter-redux, sebagian besar asset didapatkan dari sini
  2. http://www.noiseforfun.com/2012-sound-effects/explode/

Lalu dari kumpulan asset diatas kita akan menggunakan beberapa diantaranya yaitu:

  1. SpaceShip warna biru sebagai player
  2. Enemy warna oranye dengan 3 model berbeda
  3. Meteor dengan 3 model berbeda
  4. Star dengan 3 model berbeda
  5. Laser sebagai senjata dari player dengan warna biru

   

1 hal lagi sebelum masuk ke programnya yaitu koordinat di android, ini penting karena nanti dalam pembuatan objek atau pembaruan posisi objek akan selalu menggunakan posisi koordinat. Jadi di Android mempunyai sistem koordinat seperti ini:

  1. 0,0 itu letaknya di sudut kiri atas
  2. maxX, 0 itu letaknya di sudut kanan atas
  3. 0, maxY itu letaknya di sudut kiri bawah
  4. maxX, maxY itu letaknya di suruh kanan bawah

Jadi untuk bergerak dari kiri ke kanan maka nilai xnya ditambah dan kebalikannya jika ingin bergerak dari kanan ke kiri maka nilai xnya dikurangin. Berlaku jg untuk axis y, jika ingin bergerak turun maka nilai ynya ditambah, jika ingin bergerak naik maka nilai ynya dikurangin.

Objek yang digambarpun juga mempunyai sistem koordinat yang sama, nilai posisi 0,0 itu berada dikiri atas

Jika asset sudah siap dan koordinat sudah paham kita masuk ke programnnya. Untuk membuat SpaceShooter simple ini hanya dibutuhkan 1 Activity yaitu MainActivity. Terdapat beberapa settingan di MainActivity ini:

MainActivity.java

Terlihat dari kode diatas beberapa settingan diperlukan agar game ini bisa berjalan dengan baik.

  • FLAG_FULLSCREEN akan membuat tampilan Activity menjadi full screen.
  • FLAG_KEEP_SCREEN_ON akan membuat smartphone on, kenapa diperlukan ini karena controller dari game ini berupa sensor Accelerometer yang membuat kita tidak menyentuh layar dan hanya menggoyangkan hp saja. Ini akan membuat layar off jika tidak ada interaksi sentuhan selama beberapa detik atau menit tergantung setingan hp.
  • getWindowManager().getDefaultDisplay() ini akan mengembalikan ukuran layar yang nantinya akan digunakan untuk menentukan koordinat berbagai objek.
  • Sensor Accelerometer digunakan untuk menggerakkan player kekanan dan kekiri.
  • Tampilan dari MainActivity ini menggunakan sebuah class yang me-extends SurfaceView.

GameView.java

Cukup banyak kode diclass ini, saya coba untuk menjelaskannya satu persatu.

  • Class ini extends SurfaceView dimana nantinya sebagai media untuk menempatkan beberapa objek diatasnya. Untuk lebih detailnya tentang SurfaceView bisa dibaca di https://developer.android.com/reference/android/view/SurfaceView.html
  • Class ini jua implements Runnable karena didalam class ini akan dibuat sebuah thread baru yang nantinya digunakan untuk menggambarkan objek dengan posisi dan kondisi yang berbeda-beda setiap framenya.
  • Perlu dicermati pada method run(), didalamnya memanggil method update(), draw(), control() secara berulang-ulang. update() digunakan untuk melakukan perubahan disemua objek yang dibentuk ataupun bisa melakukan pembuatan dan penghapusan objek. draw() ini digunakan untuk menggambarkan objek dengan keadaan yang telah diupdate sebelumnya. Lalu didalam method control() terdapat Thread.sleep(20) itu artinya Thread akan berhenti selama 20 miliseconds.
  • Dari yang saya amati control() digunakan untuk mengatur jumlah frame per secondnya. Di kasus ini digunakan Thread.sleep(20) itu artinya dalam 1000 miliseconds atau 1 detik akan terdapat 1000/20 = 50 pemanggilan update() dan draw(), jadi ada 50 frame/second.
  • Lalu ada method pause() dan resume(), kedua method ini dipanggil dari MainActivity yang berfungsi untuk menghentikan Thread dan membuat Thread baru.
  • Setelah itu ada method steerLeft(), steerRight() dan stay(), ini juga dipanggil dari MainActivity ketika sensor berubah nilainya.
  • reset() ini membuat tampilan seperti pada awal sebelum game dimulai.
  • onTouchEvent() merupakan Listener yang menangkap response sentuhan dari user di smartphone. Method ini digunakan ketika sudah gameover dan ingin memulai game kembali yaitu dengan menyentuhnya sekali.

SoundPlayer.java

Class ini intinya digunakan untuk memainkan suara. Class ini juga menggunakan thread baru karena waktu pertama saya coba tanpa menggunakan thread baru terkadang ada lag didalam game.

SharedPreferencesManager.java

Class ini digunakan untuk memudahkan dalam menyimpan dan memanggil nilai high score.

Lalu kemudian tersisa class-class yang berperan sebagai :

  1. Player
  2. Meteor
  3. Laser
  4. Star
  5. Enemy

Didalam class-class tersebut semuanya terdapat method udpate() yang fungsinya untuk memperbarui posisi dan kondisi objek yang dibuat dari class tersebut. Saya ambil contoh untuk class Player:

Player.java

Sedikit penjelasan mengenai kode diatas, terdapat pengecekan apakah mIsSteerLeft == true, jika true maka mX -= 10 * mSteerSpeed akan dipanggil yang artinya posisi player dalam axis x akan bergeser ke kiri dengan nilai 10 * mSteerSpeed. mSteerSpeed ini digunakan untuk menentukan seberapa besar perpindahan objek. Biasanya dalam pembuatan game jika menggerakkan sesuatu, speednya lah yang akan diubah nilainya.

Didalam method update() di class Player ini, juga terdapat kode lain seperti mCollision. Ini adalah sebuah variabel Rect yang mempunyai nilai pada masing-masing sisinya. Ini digunakan untuk mendeteksi tabrakan antar objek. Seperti meteor menabrak player atau laser mengenai meteor.

Lalu juga ada kode untuk memperbarui posisi dan kondisi laser yang dikeluarkan dari player. Laser akan dibuat didalam class player ini ketika method fire() dipanggil dari class GameView. Laser juga akan dihancurkan jika nilai Ynya kurang dari 0, ini dilakukan agar memori tidak penuh.

Untuk class-class lain kurang lebih sama konsepnya jadi lebih detailnya bisa dipelajari sendiri. Kodenya akan saya share digithub dengan harapan game ini bisa terus dikembangkan.

Berikut adalah screenshot dari game Space Shooter ini:

  

 

Kode : https://github.com/andevindo/space-shooter-as

Sample APK Versi 1.0 : https://github.com/andevindo/space-shooter-as/raw/master/apk/space-shooter-v1.0.apk