Kamis, 06 Agustus 2015

Membuat Program Bomb Game Shoot Them Up

Membuat objek Bom untuk pemain game (user) sehingga dalam keadaan terdesak pemain bisa melepaskan bom untuk menyelamatkan diri.


Selamat Pagi rekan-rekan sekalian, tak terasa artikel yang membahas tentang game shoot them up sudah sampai pada tahap ini. Kali ini ogut akan mengajarkan cara untuk membuat bom di game perang yang telah kita rintis sebelumnya.


Variasi lain yang dapat ditambahkan untuk membuat game menjadi lebih menarik adalah bom. Jika berada dalam keadaan terdesak pemain dapat memakai senjata pamungkas untuk memusnahkan semua musuh yang tampak di layar. Kekuatan bom dapat diatur  sesuai dengan kehendak kita sebagai pembuat game, dan daya hancur bom harus disesuaikan dengan game, jangan terlalu dahsyat dan jangan terlalu kecil

Proses pembuatan bom sangat sederhana, dan yang terpenting pada saat bom dilepas musuh dan peluru musuh yang ada di layar terkena efeknya (hanya yang ada di layar).

typedef struct
{
double X1, Y1; 
double X2, Y2;
double X3, Y3; 
double X4, Y4;
}Object_Bomb;

void Isi_Koordinat_Bomb(Object_Bomb Animasi_Bomb_p[4], Game_Object Pesawat_p, double d_bomb)
{
Animasi_Bomb_p[0].X1 = Pesawat_p.X1;
Animasi_Bomb_p[0].Y1 = Pesawat_p.Y1;
Animasi_Bomb_p[0].X2 = Pesawat_p.X4;
Animasi_Bomb_p[0].Y2 = Pesawat_p.Y4;
Animasi_Bomb_p[0].X3 = Pesawat_p.X4 - d_bomb;
Animasi_Bomb_p[0].Y3 = Pesawat_p.Y4;
Animasi_Bomb_p[0].X4 = Pesawat_p.X1 - d_bomb;
Animasi_Bomb_p[0].Y4 = Pesawat_p.Y1;

Animasi_Bomb_p[1].X1 = Pesawat_p.X3;
Animasi_Bomb_p[1].Y1 = Pesawat_p.Y3;
Animasi_Bomb_p[1].X2 = Pesawat_p.X2;
Animasi_Bomb_p[1].Y2 = Pesawat_p.Y2;
Animasi_Bomb_p[1].X3 = Pesawat_p.X2 + d_bomb;
Animasi_Bomb_p[1].Y3 = Pesawat_p.Y2;
Animasi_Bomb_p[1].X4 = Pesawat_p.X3 + d_bomb;
Animasi_Bomb_p[1].Y4 = Pesawat_p.Y3;

Animasi_Bomb_p[2].X1 = Pesawat_p.X2;
Animasi_Bomb_p[2].Y1 = Pesawat_p.Y2;
Animasi_Bomb_p[2].X2 = Pesawat_p.X1;
Animasi_Bomb_p[2].Y2 = Pesawat_p.Y1;
Animasi_Bomb_p[2].X3 = Pesawat_p.X1;
Animasi_Bomb_p[2].Y3 = Pesawat_p.Y1 - d_bomb;
Animasi_Bomb_p[2].X4 = Pesawat_p.X2;
Animasi_Bomb_p[2].Y4 = Pesawat_p.Y2 - d_bomb;

Animasi_Bomb_p[3].X1 = Pesawat_p.X4;
Animasi_Bomb_p[3].Y1 = Pesawat_p.Y4;
Animasi_Bomb_p[3].X2 = Pesawat_p.X3;
Animasi_Bomb_p[3].Y2 = Pesawat_p.Y3;
Animasi_Bomb_p[3].X3 = Pesawat_p.X3;
Animasi_Bomb_p[3].Y3 = Pesawat_p.Y3 + d_bomb;
Animasi_Bomb_p[3].X4 = Pesawat_p.X4;
Animasi_Bomb_p[3].Y4 = Pesawat_p.Y4 + d_bomb;
}

void Display_Bomb(Object_Bomb Animasi_Bomb_p[4], double d_geser, unsigned int image, unsigned int mask)
{
int i;

for (i = 0; i < 4; i++)
{
glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ZERO);

glBindTexture(GL_TEXTURE_2D, mask);
glBegin(GL_POLYGON);
glTexCoord2d(0.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X1, Animasi_Bomb_p[i].Y1);

glTexCoord2d(1.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X2, Animasi_Bomb_p[i].Y2);

glTexCoord2d(1.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X3, Animasi_Bomb_p[i].Y3);

glTexCoord2d(0.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X4, Animasi_Bomb_p[i].Y4);
glEnd();


glBlendFunc(GL_ONE, GL_ONE);

glBindTexture(GL_TEXTURE_2D, image);
glBegin(GL_POLYGON);
glTexCoord2d(0.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X1, Animasi_Bomb_p[i].Y1);

glTexCoord2d(1.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X2, Animasi_Bomb_p[i].Y2);

glTexCoord2d(1.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X3, Animasi_Bomb_p[i].Y3);

glTexCoord2d(0.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X4, Animasi_Bomb_p[i].Y4);
glEnd();

glDisable(GL_BLEND);
}

//update posisi bomb
Animasi_Bomb_p[0].X1 -= d_geser;
Animasi_Bomb_p[0].X2 -= d_geser;
Animasi_Bomb_p[0].X3 -= d_geser;
Animasi_Bomb_p[0].X4 -= d_geser;

Animasi_Bomb_p[1].X1 += d_geser;
Animasi_Bomb_p[1].X2 += d_geser;
Animasi_Bomb_p[1].X3 += d_geser;
Animasi_Bomb_p[1].X4 += d_geser;

Animasi_Bomb_p[2].Y1 -= d_geser;
Animasi_Bomb_p[2].Y2 -= d_geser;
Animasi_Bomb_p[2].Y3 -= d_geser;
Animasi_Bomb_p[2].Y4 -= d_geser;

Animasi_Bomb_p[3].Y1 += d_geser;
Animasi_Bomb_p[3].Y2 += d_geser;
Animasi_Bomb_p[3].Y3 += d_geser;
Animasi_Bomb_p[3].Y4 += d_geser;
}

Sedangkan di Main_Program.cpp ogut menyisipkan perintah-perintah di bawah pada fungsi Keyboard_ditekan dan fungsi Display_ke_Screen.

void Keyboard_ditekan()
{
...
...
...
//key untuk melepas bom
if (GetKeyState('B') & 0x80)
{
if ((Bomb_Aktif != 1) && (Pesawat[0].Bomb > 0))
{
Bomb_Aktif = 1;
Destroy_musuh_peluru = 1;
Counter_animasi_bomb = 0;

Pesawat[0].Bomb--;

//koordinat untuk animasi bomb
Isi_Koordinat_Bomb(Animasi_Bomb, Pesawat[0], 100.0);

SoundEffect[8].Play(false);
}
}
...
...
...
}

void Display_ke_Screen()
{
...
...   
...
//BOMB
if (Bomb_Aktif == 1)
{
if (Destroy_musuh_peluru == 1)
{
//musnahkan peluru enemy
for (i = 0; i < total_peluru_enemy; i++)
{
if ( Peluru_Enemy1[i].Power != 0)
{
Peluru_Enemy1[i].Power = 0;

Aktifkan_Api_Tertembak(Api_Tertembak, total_efek_tertembak, 
Peluru_Enemy1[i], 30.0);
}
}

//musuh yang ada di layar kena bomb
//Power musuh berkurang
for (i = 0; i < total_enemy1; i++)
{
if ((Enemy_1[i].Power != 0) && (Enemy_1[i].Inside_Screen == 1))
{
Enemy_1[i].Power -= Bomb_Power;

if (Enemy_1[i].Power <= 0)
{
Enemy_1[i].Power = 0;

Aktifkan_Api_Terbakar(Api_terbakar_m1, total_efek_terbakar, 
Enemy_1[i], 80.0);

SoundEffect[3].Play(false);
}
}
}

Destroy_musuh_peluru = 0;
}

//tampilkan animasi bom
Display_Bomb(Animasi_Bomb, 30.0 ,i_bomb, m_bomb);
Counter_animasi_bomb++;

if (Counter_animasi_bomb == 60)
Bomb_Aktif = 0;
}
...
...
...
}

Demikian rekan-rekan cara membuat bom, variasi bom dapat anda kembangkan sendiri karena ogut hanya memberi contoh yang mudah. Sampai disini dulu yah nanti akan ogut sambung lagi dengan cerita game yang lebih seru, karena masih banyak ide yang terus bermunculan tetapi waktu menulis yang agak sempit sehingga ogut harus membagi waktu antara menulis dan kegiatan lain. 

Salam Sukses Selalu


Heriady
heriady.yoh@gmail.com



Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Vektor R2