Tutorial Pemrograman Pelles C: Animasi Alphabet A-Z Memantul


alphabetmantul1 Menyambung tulisan sebelumnya (AngkaMantul) yang membahas tentang program animasi angka 0-9 yang bergerak memantul-mantul secara simultan, maka kali ini kita akan membahas secara singkat tentang program animasi abjad A-Z yang bergerak secara simultan dalam 4 arah gerakan.

Program masih saya buat menggunakan Pelles C, yakni IDE dan kompiler C yang gratis bahkan untuk keperluan komersial.

Tekniknya sama seperti sebelumnya, hanya saja pada contoh program ini objeknya lebih banyak yakni 26 objek dan masing-masing objek memiliki arah gerak yang terdiri dari: UPLEFT, UPRIGHT, DNRIGHT, dan DNLEFT.

Struktur Data
Untuk menyimpan data objek, program menggunakan tipe data struktur dengan 5 buah variabel yang menjadi properti objek yakni posisi kolom, posisi baris, arah gerak, karakter objek, dan warna objek. Berikut adalah kode program deklarasi tipe datanya.

typedef struct
{
    unsigned int x;
    unsigned int y;
    unsigned int arah;
    char abjad[1];
    unsigned int warna;
} STRUCT_ALPHABET;

STRUCT_ALPHABET ALPHA[26];

Variabel ALPHA adalah variabel array yang menyimpan data 26 objek animasi dengan properti seperti struktur data di atas.

Skenario Program
Nah, agar memiliki gambaran tentang bagaimana nantinya program bekerja, maka berikut ini adalah skenario singkat program animasi 26 abjad (A-Z).

  1. Inisialisasi data.
  2. Tampilkan masing-masing objek (abjad) pada posisinya dengan atributnya masing-masing.
  3. Cek apakah posisi objek telah sampai pada tepi layar  console, jika IYA maka ubah arah gerakannya.
  4. Sleep(50) – tunda proses selama 50ms.
  5. Hapus objek di layar.
  6. Update posisi kolom dan posisi baris terbaru.
  7. Ulangi 2 hingga tombol keyboard ditekan.

abjadmantul

Berikut adalah kode program pada fungsi utama yang merupakan implementasi dari skenario program di atas.

    InitData();

    while(!_kbhit())
    {
        CetakAlphabets();
        for(i=0; i<=25; i++)
        {
            if (ALPHA[i].x==1)
            {
                if (ALPHA[i].arah==UPLEFT)
                    ALPHA[i].arah = UPRIGHT;
                else if (ALPHA[i].arah==DNLEFT)
                    ALPHA[i].arah = DNRIGHT;
            }   
            else if (ALPHA[i].x==79)
            {
                if (ALPHA[i].arah==UPRIGHT)
                    ALPHA[i].arah = UPLEFT;
                if (ALPHA[i].arah==DNRIGHT)
                    ALPHA[i].arah = DNLEFT;
            }

            if (ALPHA[i].y==2)
            {
                if (ALPHA[i].arah==UPRIGHT)
                    ALPHA[i].arah = DNRIGHT;
                if (ALPHA[i].arah==UPLEFT)
                    ALPHA[i].arah = DNLEFT;
            }
            else if (ALPHA[i].y==24)
            {
                if (ALPHA[i].arah==DNRIGHT)
                    ALPHA[i].arah = UPRIGHT;
                if (ALPHA[i].arah==DNLEFT)
                    ALPHA[i].arah = UPLEFT;
            }
            Sleep(0);
        }

        Sleep(50);
        HapusAlphabets();

        for (i=0; i<=25; i++)
        {
            switch (ALPHA[i].arah)
            {
                case UPLEFT:
                    ALPHA[i].x = ALPHA[i].x – 1;
                    ALPHA[i].y = ALPHA[i].y – 1;
                    break;
                case UPRIGHT:
                    ALPHA[i].x = ALPHA[i].x + 1;
                    ALPHA[i].y = ALPHA[i].y – 1;
                    break;
                case DNLEFT:
                    ALPHA[i].x = ALPHA[i].x – 1;
                    ALPHA[i].y = ALPHA[i].y + 1;
                    break;
                case DNRIGHT:
                    ALPHA[i].x = ALPHA[i].x + 1;
                    ALPHA[i].y = ALPHA[i].y + 1;
                    break;
            }
            Sleep(0);
        }   
    }

Beberapa Fungsi Pendukung
Untuk sedikit menyederhanakan program, maka dibuatlah beberapa fungsi yakni fungsi InitData(), CetakAlphabets(), dan HapusAlphabets() sebagai berikut.

void InitData(void)
{
    srand(GetTickCount()/1000.0);
    for (i=0; i<=25; i++)
    {
        ALPHA[i].x            = (rand() % 70) + 5;
        ALPHA[i].y             = (rand() % 20) + 3;
        ALPHA[i].arah         = (rand() % 4) + 1;
        ALPHA[i].abjad[0]     = 65 + i;
        ALPHA[i].warna         = (rand() % 15) + 1;
    }
}

void CetakAlphabets(void)
{
    for(i=0; i<=25; i++)
    {
        _gotoxy(ALPHA[i].x, ALPHA[i].y);
        _textcolor(ALPHA[i].warna);
        printf("%s", ALPHA[i].abjad);
    }
}

void HapusAlphabets(void)
{
    for(i=0; i<=25; i++)
    {
        _gotoxy(ALPHA[i].x, ALPHA[i].y);
        printf(" ");
    }
}

Fungsi InitData() memberikan nilai-nilai awal pada variabel-variabel objek yang sebagian besar adalah sebuah nilai integer yang dibangkitkan secara acak menggunakan fungsi pembangkit bilangan acak rand(). Untuk memastikan variasi keacakan nilai hasil fungsi generator bilangan acak rand(), maka digunakan fungsi srand() dengan bibit bilangan acak menggunakan fungsi GetTickCount() yang dibagi dengan bilangan 1000.0.

Fungsi CetakAlphabets() bertugas menampilkan abjad-abjad pada posisinya masing-masing dan dengan warna yang sesuai dengan properti warnanya masing-masing. Sedangkan fungsi HapusAlphabets() bertugas menghapus tampilan abjad-abjad sebelum proses update tampilan selanjutnya.

Dan berikut adalah screenshot lain ketika program sedang running.

abjadmantul2

Nah, semoga tutorial singkat ini bisa memberikan manfaat bagi kita semuanya.

Bagi Anda yang berminat untuk mempelajarinya lebih lanjut, silakan mengunduh project Pelles C-nya melalui link berikut ini.

AlphabetMantul.rar
(~21KB)

Selamat belajar dan selamat berkarya!

😀

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s