Jumat, 21 Desember 2012

Source Kode Membuat Apllikasi Game dalam C++


#include<iostream>
#include<windows.h>
using namespace std;

//variabel global untuk menyimpan informasi
//tombol yang ditekan
INPUT_RECORD InRec;

//fungsi delay(), digunakan untuk menunda proses eksekusi
//selama beberapa millisecond
#define delay Sleep

//fungsi gotoxy(), digunakan untuk menempatkan kursor
//pada posisi KOLOM dan BARIS
void gotoxy(unsigned int kolom, unsigned int baris)
{
    COORD posisi = {kolom,baris};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), posisi);
}

//fungsi kbhit(), digunakan untuk mendeteksi terjadinya
//penekanan tombol.  Jika terdapat tombol yang ditekan maka fungsi ini
//akan mengembalikan nilai TRUE sebaliknya FALSE
bool kbhit()
{
    bool result = false;
    DWORD EventCount,NumRead;   
    GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), &EventCount);
    if(EventCount>0)
    {
        ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &InRec, 1, &NumRead);
        result = InRec.EventType == KEY_EVENT;
    }
    return result;
}

//fungsi getch(), digunakan untuk mengambil informasi tombol yang
//terakhir kali ditekan.
unsigned int getch(bool kodeAscii=true)
{
    if(kodeAscii==true)
        return InRec.Event.KeyEvent.uChar.AsciiChar;
    else
        return InRec.Event.KeyEvent.wVirtualKeyCode;
}

// DAFTAR TOMBOL
//daftar ini akan berlaku jika kita memanggil fungsi getch()
//seperti berikut : getch(false);
const unsigned int PANAH_KIRI  = 37;
const unsigned int PANAH_KANAN = 39;
const unsigned int PANAH_ATAS  = 38;
const unsigned int PANAH_BAWAH = 40;
const unsigned int SPASI = 32;

//huruf A atau a mempunyai kode yang sama.  Aturan yang sama berlaku
//untuk huruf yang lain.
//huruf A ... Z dimulai dari 65 .. 90
//angka 0 ... 9 dimulai dari 48 .. 57
const unsigned int HURUF_X     = 88;

int main()
{
    gotoxy(10,4); cout << "===================================";
    gotoxy(10,5); cout << "==       Game Sederhana          ==";
    gotoxy(10,6); cout << "==        Author : VnP           ==";
    gotoxy(10,7); cout << "==     Cplusplus Indonesia       ==";
    gotoxy(10,8); cout << "===================================";

    gotoxy(10,19); cout << "     ARAH SENJATA =             ";
    gotoxy(10,20); cout << "     TEMBAK       = TIDAK       ";
    gotoxy(10,21); cout << "     KENA         = 0           ";
    gotoxy(10,22); cout << "   [ Tekan 'x' Untuk Keluar ] ";

    unsigned int tekan='w';

    //kontrol arah gerak tulisan
    //kalau TRUE tulisan akan bergerak ke KANAN (MAJU)
    //kalau FALSE tulisan akan bergerak ke KIRI (MUNDUR)
    bool maju = true;

    //kalau tombol SPASI ditekan,
    //variable ini akan di set TRUE
    bool tembak = false;

    //area animasi
    unsigned int BATASKANAN = 45;
    unsigned int BATASKIRI  = 10;
    unsigned int BATASATAS  = 10; //Batas atas dari jalannya PELURU
    unsigned int kolom      = 10;
    unsigned int baris      = 10; //kolom dari TARGET
    unsigned int kolom1     = 20; //baris dari TARGET
    unsigned int baris1     = 18; //kolom dari SENJATA
    unsigned int kolom2     = 20; //baris dari SENJATA
    unsigned int baris2     = 17; //kolom dari PELURU
    unsigned int kena       = 0;  //baris dari PELURU

    //teks yang akan dicetak
    string target = "..0..";
    string senjata = "^";
    string peluru = "+";

    //perulangan ini akan diulang selama tekan TIDAK SAMA dengan 'x'
    while(tekan!=HURUF_X)
    {

        //kontrol posisi
        if(maju==true)
        {
            //coba deh, ganti bagian ini dengan 'kolom>=BATASKANAN'
            //apa yang terjadi ?
            if (kolom>=BATASKANAN-target.length())
            {
                maju=false;
            } else
            {
                kolom++;
            }
        } else
        {
            if (kolom<=BATASKIRI)
            {
                maju=true;
            } else
            {
                kolom--;
            }
        }

        //kontrol senjata
        if(tekan == PANAH_KANAN)
        {
            //reset tombol tekan
            tekan=0;

            if (kolom1<BATASKANAN-senjata.length())
            {
                kolom1++;
                kolom2 = kolom1;
            }

            gotoxy(30,19);cout<<"KANAN";

        } else
        if(tekan==PANAH_KIRI)
        {
            //reset tombol tekan
            tekan=0;

            if (kolom1>BATASKIRI)
            {
                kolom1--;
                kolom2 = kolom1;
            }

            gotoxy(30,19);cout<<"KIRI ";

        } else           
        if(tekan==SPASI)
        {
            tembak = true;
            tekan=0;
            baris2 = 17;
        }

        //kontrol peluru
        if(tembak==true)
        {           
            if (baris2>BATASATAS)
            {
                //peluru selalu bergerak ke atas.
                //ini berarti baris harus dikurangi
                baris2--;

                gotoxy(30,20);cout << " IYA ";
            } else
            {
                //ketika posisi peluru sudah mencapai BATASATAS
                //kita bisa tembak lagi.
                tembak=false;

                //deteksi tabrakan PELURU & teks CPP
                if(kolom2>=kolom && kolom2<=kolom+target.length()-1)
                {
                    kena++;
                    gotoxy(30,21);cout << kena;
                }

                gotoxy(30,20);cout << "TIDAK";


            }
        }

        //TULIS teks
        gotoxy(kolom,baris); cout<< target;

        //menampilkan senjata
        gotoxy(kolom1,baris1); cout << senjata;

        //menampilkan peluru
        //hanya dilakukan jika kita menembak
        if(tembak==true)
        {
            gotoxy(kolom2,baris2); cout << peluru;
        }

        //cek apakah terjadi penekanan tombol,
        //jika 'ya', simpan tombol tersebut pada variabel TEKAN
        if(kbhit()) tekan = getch(false);

        //cout << " " <<tekan<<" "; //Cek kode tombol yang ditekan, aktifkan baris ini.

        delay(50);

        //HAPUS teks
        cout.width(target.length());

        //Coba deh, tambahkan titik di antara tanda kutip berikut
        //apa yang terjadi ?
        cout.fill(' ');

        //Diantara tanda kutip berikut, akan diisi dengan KARAKATER
        //yang ditentukan lewat fungsi cout.fill(KARAKATER) diatas
        gotoxy(kolom,baris); cout<<"";

        //hapus posisi lama senjata
        gotoxy(kolom1,baris1); cout <<" ";

        //hapus posisi lama peluru
        if(tembak==true)
        {
            gotoxy(kolom2,baris2); cout <<" ";
        }
    }

}

Tidak ada komentar:

Posting Komentar