Kamis, 06 Agustus 2015

Membuat Bonus Game Shoot Them Up dengan Visual C++ dan OpenGL

Membuat objek bonus untuk pemain game (user) seperti peluru alternatif, tambahan power dan tambahan bom


Selamat Pagi rekan-rekan sekalian, di pagi hari ini ogut akan melengkapi game shoot them up yang telah kita bahas sebelumnya, dan kali ini artikel akan membahas cara untuk membuat bonus agar game menjadi lebih ramai dan seru.



Bonus yang akan kita buat ada tiga macam yaitu:
  1. M bonus untuk memberi peluru tambahan bagi pesawat.
  2. P untuk menambah Power pesawat sebesar 500.
  3. B menambah jumlah bom untuk pesawat.

Proses pembuatan ketiga bonus di atas intinya sama saja, dan cara pembuatan ketiganya sama dengan membuat musuh. Yang sedikit berbeda adalah pada saat bonus tertembak hingga Power=0,  bonus tidak musnah seperti musuh tetapi berganti menjadi huruf yang diacak (random).

Karakteristik Bonus
Salah satu karakter dari bonus yang berbeda dengan musuh adalah waktu hidup. Bonus mempunyai waktu hidup tertentu yang dapat kita atur. Fungsi dari karakter ini adalah jika bonus tidak terambil oleh pemain / user maka bonus akan hilang dari layar. Untuk menghitung waktu hidup bonus ogut menggunakan dua variabel yaitu StartTime, LifeTime, sedangkan fungsi untuk menghitung berapa lama sebuah bonus hidup adalah sebagai berikut:

void Aktifkan_Bonus(Game_Object Bonus_p[], int tot_bonus_p)
{
int i;

for (i = 0; i < tot_bonus_p; i++)
{
//rubah Object Type bonus
//yang tidak aktif (99999) menjadi 180
if (Bonus_p[i].Object_Type == 99999)
{
Bonus_p[i].Power = 500;

//pada saat mengaktifkan bonus
//waktu hidup bonus mulai dihitung
Bonus_p[i].StartTime = timeGetTime();
Bonus_p[i].Object_Type = 180;

i = tot_bonus_p;
}
}
}

void Cek_LifeTime(Game_Object &My_Object)
{
//untuk Object yang mempunyai waktu hidup
//seperti bonus maka LifeTime != 0

//musuh yang mempunyai waktu hidup selamanya
//mempunyai nilai LifeTime = 0
if ((My_Object.Power == 0) || (My_Object.LifeTime == 0.0))
return;

//cek jika object kehabisan waktu
if ((timeGetTime() - My_Object.StartTime ) > My_Object.LifeTime)
//untuk object yang kehabisan waktu
//bila object keluar dari layar,
//maka object akan musnah seperti peluru
My_Object.Type_IS = 0;
}

Pemrograman
Untuk menampilkan bonus tidak ada perubahan berarti pada sisi pemrograman, hanya perlu ditambahkan beberapa perintah pada fungsi deteksi tabrakan. Sifat dari bonus yang ogut buat, jika bonus belum berbentuk huruf tidak bisa ditabrak, hanya bisa ditembak. Jika telah berubah menjadi huruf, bonus baru bisa ditabrak oleh pesawat. Untuk merealisasikan sisipkanlah perintah-perintah di bawah ini  pada fungsi deteksi tabrakan peluru versus objek:

//object 1 adalah peluru
//object 2 yang ditabrak oleh peluru
void Cek_PeluruVsObject(Game_Object Object1[],
int total_Obj1,
Game_Object Object2[],
int total_Obj2,
Object_Api Api_Tertembak_p[],
int total_api,
Object_Api Api_Terbakar1[],
int total_terbakar1,
int &score_p)
{
...
...
...

//jika object 2 adalah bonus
//(peluru pesawat tabrak bunus)
if (Object2[j].Object_Type == 180)
{
Object2[j].Power -= Object1[i].Destruct;
Object1[i].Power = 0;

Aktifkan_Api_Tertembak(Api_Tertembak_p,total_api, Object1[i], 30.0);

SoundEffect[2].Play(false);

//jika bonus musnah, maka rubah bonus
//menjadi huruf
if (Object2[j].Power <= 0)
{
Object2[j].Power = 0;

//bonus berubah jadi huruf yang dirandom
random_int = Get_Random_Int(1);

//jika hasil random M
if ((random_int >= 0) && (random_int <= 3))
Object2[j].Object_Type = 185;

//jika hasil random B
if ((random_int >= 4) && (random_int <= 6))
Object2[j].Object_Type = 186;

//jika hasil random P
if ((random_int >= 7) && (random_int <= 9))
Object2[j].Object_Type = 187;


Object2[j].Power = 500;
Object2[j].Type_IS = 0;

//image dari bonus dirubah menjadi huruf
Object2[j].Index_Image = 0;
Object2[j].Delay_II = 5;
Object2[j].Counter_II = 0;
Object2[j].Max_II = 2;


//isi string movement secara random
//untuk membuat huruf bonus
//bergerak secara acak
random_int = Get_Random_Int(3);

if ((random_int == 0) || (random_int == 1))
strcpy_s(Object2[j].String_Movement, "I100A100");

if ((random_int == 2) || (random_int == 3))
strcpy_s(Object2[j].String_Movement, "I100C100");

if ((random_int == 4) || (random_int == 5))
strcpy_s(Object2[j].String_Movement, "I100E100");

if ((random_int == 6) || (random_int == 7))
strcpy_s(Object2[j].String_Movement, "I100GA100");

if ((random_int == 8) || (random_int == 9))
strcpy_s(Object2[j].String_Movement, "I100");

//hitung ulang karena String_Movement
//dirubah
Object2[j].Total_M = strlen(Object2[j].String_Movement) / 4;

Object2[j].Index_M = 0;

Object2[j].Counter_OA = 0;

SoundEffect[6].Play(false);

}
}
...
...
...
}

Dan sisipkanlah perintah di bawah ini ke fungsi objek versus objek:

void Cek_ObjectVsObject(Game_Object Object1[],
int total_Obj1,
Game_Object Object2[],
int total_Obj2,
Object_Api Api_Tertembak_p[],
int total_api,
Object_Api Api_Terbakar1[],
int total_terbakar1,
Object_Api Api_Terbakar2[],
int total_terbakar2)
{
...
...
...

//jika pesawat tabrak huruf M
if ((Object1[i].Object_Type == 0) &&
(Object2[j].Object_Type == 185))
{

Object2[j].Power = 0;


//aktifkan peluru M
if (Object1[i].Peluru == 1)
Object1[i].Peluru = 2;
else
//jika pesawat telah mempunyai peluru M,
//bonus score 500
Object1[i].Score += 500;

SoundEffect[7].Play(false);

}

//jika pesawat tabrak huruf B
if ((Object1[i].Object_Type == 0) &&
(Object2[j].Object_Type == 186))
{
Object2[j].Power = 0;

//tambahkan bomb pesawat
Object1[i].Bomb += 1;

SoundEffect[7].Play(false);

}

//jika pesawat tabrak huruf P
if ((Object1[i].Object_Type == 0) &&
(Object2[j].Object_Type == 187))
{
Object2[j].Power = 0;

//Power pesawat ditambah
Object1[i].Power += 500;

SoundEffect[7].Play(false);

}

...
...
...
}

Demikian rekan-rekan cara membuat bonus, sampai disini dulu yah nanti ogut sambung lagi, karena masih ada yang perlu dibahas untuk membuat game shoot them up agar lebih bervariasi. Jika Anda kesulitan untuk memahami program di artikel ini pelajari terlebih dahulu artikel cara membuat musuh.

Salam Sukses Selalu


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Vektor R2