Wednesday, 12 March 2014

Kedalaman dua atau lebih jenis Objek


Tulisan ini merupakan lanjutan dari:
Kedalaman sebuah Objek


Sebelumnya kita telah membuat proses untuk mengurutkan objek berdasarkan ketinggiannya (sumbu Y) bukan berdasarkan urutan indeks pada array. Dan proses tersebut hanya melibatkan 1 jenis class. Kali ini kita akan membuat untuk 2 class yang berbeda dan dapat diterapkan juga untuk 3 atau lebih class yang berbeda. Untuk mempermudah pengurutan kita harus mempersiapkan dahulu sebuah data struktur, berikut potongan kodenya :
struct sUrut
{
    //menyimpan nilai array
    int indeks;

    //koordinat terendah titik Y
    int lowY;

    int Jenis;
};


Dengan struktur diatas kita akan memperoleh nomor indeks array objek, lowY atau koordinat Y-nya, dan jenis objek tersebut contoh class Mobil diberi nomor jenis = 1, Gedung = 2, dst. Berbeda dengan kode sebelumnya (lihat artikel sebelumnya) yang hanya memanfaatkan array 2 dimensi. Selanjutnya untuk menggunakan tipe data sUrut ini caranya sangat mudah, perhatikan potongan kode berikut :
...
#define MAX_GEDUNG     60
#define MAX_MOBIL      20

#define OBJEK_MOBIL     1
#define OBJEK_GEDUNG    2

class cGedung
{
   ...
};

class cMobil
{
   ...
};

int main(){
   ...
   // start proses rendering gambar
   std::vector<sUrut> urutan;

   for(int i = 0; i < MAX_GEDUNG;i++)
   {
      sUrut temp_;
      temp_.indeks = i;
      temp_.Jenis = OBJEK_GEDUNG;
      temp_.lowY = Gedung[i].getY();
      urutan.push_back(temp_);
   }

   for(int i = 0; i < MAX_MOBIL;i++)
   {
      sUrut temp_;
      temp_.indeks = i;
      temp_.Jenis = OBJEK_MOBIL;
      temp_.lowY = Mobil[i].getY();
      urutan.push_back(temp_);
   }
   
   //melakukan pengurutan dengan Bubble Sort
   for(int i=0;i < urutan.size();i++)
   {
      for(int j=i;j < urutan.size();j++)
      {
         if( urutan[i].lowY > urutan[j].lowY)
         {
            //temp_ = temporary , variabel sementara
            int temp_;
            temp_ = urutan[i].indeks;
            urutan[i].indeks = urutan[j].indeks;
            urutan[j].indeks = temp_;

            temp_ = urutan[i].lowY;
            urutan[i].lowY = urutan[j].lowY;
            urutan[j].lowY = temp_;

            temp_ = urutan[i].Jenis;
            urutan[i].Jenis = urutan[j].Jenis;
            urutan[j].Jenis = temp_;
         }
      }
   }

   //tahap terakhir menampilkan objek sesuai nilai urutan.
   for(int i = 0; i < urutan.size();i++)
   {
      switch( urutan[i].Jenis)
      {
         case OBJEK_GEDUNG: Gedung[urutan[i].indeks].tampil(screen); break;
         case OBJEK_MOBIL: Mobil[urutan[i].indeks].tampil(screen); break;
         default:;
      }
   }
   // akhir proses rendering gambar 
   ...
}


Potongan kode diatas hanya menampilkan ilustrasi atau tampilan kode yang harus digunakan. Objek yang dipakai sesuai dengan program yang anda buat, contoh pada game yang anda buat terdapat Hewan, Dekorasi (Meja, dll) dapat disesuaikan dengan kode. Sementara pada contoh diatas menggunakan objek Gedung dan Mobil. Selanjutnya dengan pengunaan std::vector lebih mempermudah kita dalam menyimpan banyaknya objek dalam hal ini MAX_GEDUNG + MAX_MOBIL , yaitu 60 + 20 = 80. Sampai disini proses yang dibutuhkan telah selesai. Jika anda masih kesulitan dalam memahami kode diatas, artikel selanjutnya saya akan coba jelaskan setiap barisnya :D . Akhir kata Happy Coding!

- Krofz
 

back to top

back to top