Monday, 8 November 2010

Kapal Luar Angkasa v0.2 (3)

Tulisan ini merupakan lanjutan dari:
Kapal Luar Angkasa v0.2 (1)
Kapal Luar Angkasa v0.2 (2)

Peluru

Yah, pada versi sebelumnya (v0.1) pun kita sudah dapat mengeluarkan peluru. Tapi kali ini musuhnya pun dapat melakukannya dan diperburuk dengan warna peluru yang membaur dengan background, jadi berhati-hatilah! . Berikut ini deklarasi dan inisialisasi pada kelas peluru :

...
class peluru
{
    SDL_Surface *gambar;
    SDL_Rect kotak;
    //serang : false = serang musuh, true = serang jagoan / player
    bool aktif, serang, atas;
    int jenis;
    float x, kecX;

public:
    peluru();

    //****  LANGSUNG  ****
    SDL_Rect getKotak(){ return kotak; }
    bool getAktif(){ return aktif; }
    bool getSerang(){ return serang; }
    void aktifFalse(){ aktif = false; }
    //****  ********  ****

    int getDamage();
    void setPeluru(int,int,float,bool,bool,int,int);
    void bergerak();
    void tampil();
};

...
peluru::peluru()
{
    kotak.x = 0;
    kotak.y = 0;

    aktif = false;
    atas = false;
    serang = PL_PLAYER;
    jenis = PEL_KECIL;

    x = 0;
    kecX = 0;
}

int peluru::getDamage()
{
    switch( jenis){
        case PEL_NORMAL: return 15; break;
        default: return 1;
    }
}

void peluru::setPeluru(int _x, int _y, float _kecX, bool _atas, bool _serang, int _jenis, int _gbr)
{
    jenis = _jenis;
    switch( jenis){
        case PEL_NORMAL: kotak.w = 20; kotak.h = 20; break;
        //default = PEL_KECIL (Peluru KeciL)
        default: kotak.w = 10; kotak.h = 10;
    }

    switch( _gbr){
        case PELG_CYAN: gambar = gbrPeluru02; break;
        //default PELG_MERAH
        default: gambar = gbrPeluru;
    }

    x = _x - (kotak.w/2);
    kotak.x = (int)x;
    kotak.y = _y - (kotak.h/2);

    kecX = _kecX;
    atas = _atas;
    serang = _serang;

    aktif = true;

}

void peluru::bergerak()
{
    x += kecX;
    kotak.x = (int)(x);

    const int kecY = 6;

    if( atas) kotak.y -= kecY;
    else kotak.y += kecY;

    if( kotak.x < 0 || kotak.x > lebar_layar || kotak.y < 0 ||
        kotak.y > tinggi_layar) aktif = false;
}

void peluru::tampil()
{
    terapinGbr( kotak.x, kotak.y, gambar, screen, &cPeluru[jenis]);
}
...

SDL_Surface *gambar, berfungsi sebagai penunjuk gambar atau alamat surface yang akan ditampilkan nanti pada fungsi tampil(), sesuai inisialisasi pada fungsi setPeluru(). Selanjutnya ada 3 var boolean, yaitu boolean aktif berfungsi untuk memberitahukan apakah objek ini eksis atau tidak. Boolean serang, jika sudah aktif maka akan ditujukan untuk siapa peluru ini. Jika bernilai false maka saat musuh menabrak peluru aktif ini, DUARR!!. Begitu pula sebaliknya. Sedangkan boolean atas untuk pergerakan pada sumbu Y, variabel boolean ini bisa dihilangkan jika mau. Dan digantikan dengan int atau float (misal int kecY, atau float kecY). Segala bentuk persiapan yang diperlukan ada di fungsi setPeluru(), seperti koordinat awal muncul, kecepatan (X) peluru, dsb.

Untuk pesawat sang jagoan, peluru ini akan aktif setelah kita menekan tombol spasi (yang terletak pada void kapal::penanganan(peluru *_peluru[])). Banyaknya peluru disesuaikan dengan variabel power punya si jagoan. Power ini didapat dari item yang keluar saat kita menghancurkan musuh. Item ini ditanggani oleh kelas item. Saat ini baru satu jenis item yang akan keluar yaitu item Power, nanti akan kita perbanyak jenisnya . Semua proses tabrakan ini tak lepas dari peran utama fungsi bool f_PeriksaTabrakan(SDL_Rect A, SDL_Rect B) yang sifatnya general (umum). Dengan fungsi SDL_Rect getKotak(){ return kotak; } yang memiliki hak akses public dan dimiliki oleh semua kelas yang akan terjadi proses tabrakan ini. Sehingga penggecekan pada fungsi f_PeriksaTabrakan() menjadi lancar.

Sedangkan musuh akan mengeluarkan peluru jika skor (score) kita telah melebihi nilai yang ditentukan. Ditambah lagi kecepatan nembaknya akan semakin cepat seiring skor yang diperoleh (int _fastShoot = (frame_perdetik*3) - (_score/200); ). Untuk lebih jelasnya lihat inisialisasi fungsi void musuh::bergerak(int _kec, int _X, int _score, peluru *_peluru[]). Tak penting berapa ratus atau bahkan ribu baris kode yang Anda tulis, yang terpenting adalah Anda mengerti arti dan fungsi dari kode yang Anda tulis. Sehingga source code yang telah Anda download tidak menjadi sampah yang bakal menuju Recycle Bin, hehehehe . Maaf jika ada yang kurang jelas atau loncat-loncat pembahasannya.

- krofz

No comments:

Post a Comment

Maaf jika komentar anda lama terbitnya ^__^, penulis berusaha OL sesering mungkin. Komentar anda adalah semangat blog ini, dan juga semangat para blogger lainnya. You can use XHTML tags: <a href="" rel="link"> </a>, <strong> </strong>, <b> </b>, <em> </em>, <i> </i>.

Spesial character use :
&lt; for <
&gt; for >


Use Pastebin.com for alternative to display your code :) .

 

back to top

back to top