Friday, 4 April 2014

Kedalaman dua atau lebih jenis Objek (2)



Yang perlu diperhatikan adalah saat pengambilan koordinat pada sumbu Y, perhatikan gambar berikut :
Gambar. A) urutan bermasalah, B) urutan yang benar.


Dapat dilihat pada gambar diatas bahwa pada huruf A, bola berwarna biru berada didepan bola berwarna hijau. Itu berarti bola hijau ditampilkan lebih dahulu lalu dilanjutkan dengan bola biru. Pada gambar diatas bola biru berada pada koordinat Y = 75 dan bola hijau = 50. Hal ini wajar karena program menampilkan objek dimulai dengan sumbu Y terkecil. Perlu diperhatikan! semakin kebawah nilai sumbu Y semakin bertambah (positif) berbeda dengan Koordinat Kartesius pada Matematika . Karena pada kode kita sebelumnya, pengurutan dimulai dari yang terkecil, sehingga perlu perbaikan agar tampak seperti kondisi B pada gambar diatas. Eitss tenang dulu kita tidak menampilkannya dari yang terbesar dahulu, lalu? lihat solusi berikut.

Solusinya dengan menambahkan tinggi objek tersebut saat pengambilan nilai Y untuk variabel LowY atau Y terendah (penamaannya hanya istilah dengan pandangan semakin kebawah objeknya semakin rendah Y-nya walaupun pada program nilai Y bertambah :P). Sehingga didapat pada contoh diatas koordinat Y bola biru = 120, dan koordinat Y bola hijau = 140. Atau dapat juga menampilkan objek dengan menggunakan koordinat sebenarnya saat pengambilan nilai Y tanpa menambahkan tinggi, tetapi saat menampilkan objek posisi gambar diletakkan pada sumbu Y dikurang tinggi. Akhir kata, happy coding! :D

- krofz

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

Tuesday, 18 February 2014

Kedalaman sebuah Objek

Hell yeah! sudah tahun 2014 aja, tepatnya udah bulan Februari 2014 wahahaha. Tak terasa memang waktu berjalan begitu cepat.

Nah, kali ini kita melakukan beberapa teknik dalam menampilkan sebuah objek, untuk itu perhatikan kedua gambar berikut :

Gambar. Kedalaman Objek

Yup, kedalaman (Depth) yang dimaksud adalah bagaimana objek diletakkan terlebih dahulu pada program 2D. Contoh kita memiliki 10 objek gedung yang akan kita letakkan pada layar. Umumnya jika objek disimpan pada array maka kita akan menampilkan dari 0-9 secara berurutan. Masalah akan timbul jika yang ditampilkan tidak beraturan posisi Y / ketinggiannya. Seperti pada gambar diatas pada gambar berhuruf A, dimana objek gedung (seolah-olah yah hahaha xD ) ditampilkan secara berurutan sesuai indeks array, sedangkan posisinya selanjutnya mungkin ada yang lebih atas atau lebih bawah tidak beraturan sehingga akan tampil acak-acakan.

Lalu perhatikan lagi gambar diatas pada gambar huruf B, dimana objek tampak lebih rapi dan mulai tampak perspektif sebuah perkotaan yang dilihat dari atas gunung (oh yeah! :P ). Jika biasanya kode yang digunakan seperti berikut (Potongan kode) :

#define MAX_BOX 50

int main( int argc, char** argv)
{
    std::vector<Kotak> A;
    for(int i = 0; i<MAX_BOX;i++)
    {
        //inisialisasi kotak A sebanyak MAX_BOX
    }
    
    //loop utama
    while(!done){
        ...
        //menampilkan kotak A sebanyak MAX_BOX
        for(int i = 0; i<MAX_BOX;i++)
        {
            A[i].tampil(screen);
        }
    }
}
Maka kita perlu menambahkan beberapa proses agar objek yang ditampilkan berurutan sesuai posisi ketinggian, yaitu yang lebih rendah ditampilkan lebih dahulu (dari atas lalu kebawah, karena semakin kebawah nilai y semakin besar). Variabel yang diperlukan array yang akan menampung urutan objek. Berikut ini potongan kodenya :

#define MAX_BOX 50

int main( int argc, char** argv)
{
    std::vector<Kotak> A;
    for(int i = 0; i<MAX_BOX;i++)
    {
        //inisialisasi kotak A sebanyak MAX_BOX
    }
    
    //loop utama
    while(!done){
        ...
        const int NO_ = 0, Y_ = 1;
        int Urutan[MAX_BOX][2];

        //mengumpulkan data posisi Y dan nomor urut
        for(int i = 0; i < MAX_BOX;i++)
        {
            Urutan[i][NO_] = i;
            Urutan[i][Y_] = A[i].getY();
        }

        //melakukan pengurutan dengan Bubble Sort
        for(int i=0;i < MAX_BOX;i++)
        {
            for(int j=i;j < MAX_BOX;j++)
            {
               if(Urutan[i][Y_] > Urutan[j][Y_])
               {
                   int temp_;
                   temp_ = Urutan[i][NO_];
                   Urutan[i][NO_] = Urutan[j][NO_];
                   Urutan[j][NO_] = temp_;

                   temp_ = Urutan[i][Y_];
                   Urutan[i][Y_] = Urutan[j][Y_];
                   Urutan[j][Y_] = temp_;
               }
            }
        }

        //tahap terakhir menampilkan objek sesuai nilai urutan.
        for(int i = 0; i < MAX_BOX;i++)
        {
            A[Urutan[i][NO_]].tampil(screen);
        }
    }
}


Akhirnya objek yang tampil lebih rapi. So, Happy Coding!

- Krofz

Tuesday, 10 December 2013

Kunci Jawaban Tebak Gambar (Android) Level 8 dan 9



Berikut ini kunci jawaban game Tebak Gambar Level 8 dan 9. Saya hanya menulis 6 jawaban (level 8), 2 gambar clue (level 8), dan 8 jawaban (level 9) untuk intensitas soal yang sulit dan tidak termasuk pertanyaan terakhir :

Dengan tidak mengurangi kenikmatan saat bermain, pergunakan kunci jawaban berikut ketika anda sudah benar-benar stres hehehe  !

Level 8.
- Keset Rumah
- Aborsi Langsung
- Semesta Abadi
- Tendang Selangkangan
- Harga Lontong
- Patroli Gabungan

2 gambar jawaban berbentuk clue :


Gambar 1. S _ _ _ _ G - P _ _ _ _ _ N


Gambar 2. J _ _ _ A - G _ _ _ T


Level 9.
- Kurang Garam
- Energi Gitaris
- Kebelet Pipis
- Perempuan Tinggi
- Isu Pengasingan
- Suara Ketapel
- Pelumas Kereta
- Pemicu Acara


- krofz
 

back to top

back to top