Thursday, 20 December 2012

Persiapan sebelum Memprogram dengan DirectX 9


Kali ini kita akan mencoba membuat aplikasi 3D dengan DirectX versi 9. Sebelumnya, yang diperlukan adalah SDK (Software Development Kit) untuk DirectX. Untuk itu silahkan download melalui link berikut (Saat tulisan ini dibuat versi terakhirnya Juni 2010):

Link : http://www.microsoft.com/en-us/download/details.aspx?id=6812
Size : 571.7 MB

Ukurannya memang lumayan besar hahahaha. Setelah selesai download instal seperti biasa, maka hasilnya pada Program Files -> Microsoft DirectX SDK (June 2010) akan terlihat seperti gambar berikut :



Gambar 1. Lokasi standar SDK


Didalamnya terdapat juga Sample(s) yang dapat kita coba, tapi hanya untuk Microsoft Visual Studio 2008 (atau diatasnya). Jangan cemas, IDE yang kita perlukan cukup yang gratisan aja hahaha , yaitu Code::Blocks. Setelah semuanya siap, mudah-mudahan ditulisan selanjutnya kita mulai memprogram dengan DirectX, tepatnya Direct3D (DirectX API)!.

- krofz

Wednesday, 14 November 2012

ada SQL, ada Database

Berbicara dengan database kita tidak akan lepas dengan SQL, ibarat ada gula ada semut. SQL atau Structured Query Language, adalah "sebuah bahasa yang digunakan untuk mengakses data dalam basis data relasional" (lebih lanjut : Wikipedia) . Dalam prakteknya penggunaan query yang tepat dapat menggantikan beberapa (puluh) baris kode, hehehe. Maklum habis putar otak untuk nampilin nilai dari 2 buah tabel yang dimana salah satu nilai dari tabel 1, tidak ada di tabel 2. Saat bereksperimen dengan query ini, software yang digunakan adalah buatan Visual Basic (versi 6). Ya! jadul memang, tapi yang penting hasilnya hahaha. Berbeda dengan C++, penulisan kode program VB pun harus ditulis baris demi baris. Pada C++ untuk mengakhiri statement adalah dengan semicolon (';') atau setelah tanda kurung kurawal suatu kondisi / fungsi.

Sehingga beberapa statement dapat ditulis satu baris. Dan beberapa programmer membuat seminim mungkin dan seseksi mungkin kode maupun barisnya seperti pakaian ABG (cewe) jaman sekarang (oops ??? ), dan itulah mengapa disini saya katakan "query yang tepat dapat menggantikan beberapa (puluh) baris kode" karena VB perlu "Enter, Enter, Enter... " hahaha. Maklum sebelumnya bikin kode panjang banget, dan berharap jalan, ternyata error juga . Memang disini tidak membahas software buatan C++ untuk mengakses databasenya. Tapi mungkin suatu saat , amin!. Ok! kita balik lagi ke pokok bahasan. Berikut ini penampakan dari 2 tabel yang akan menjadi contoh :

Gambar 1. Dua Tabel
DBMS yang dipakai MS Access, dan versinya dibawah versi 2007, lihat aja tampilannya . Query yang dipakai :
SELECT * FROM Barang b LEFT JOIN GrupBarang g ON b.Grup = g.Grup WHERE g.Grup IS NULL

hasilnya :
Gambar 2. Hasil Query
Query tersebut akan menyeleksi mana saja record yang akan ditampilkan. Record akan ditampilkan jika kode grup tidak sama dengan grup yang ada pada tabel GrupBarang. Sedikit tips semakin sedikit baris memang tidak menjamin program kita semakin cepat secara perfomance, akhir kata Semoga bermanfaat!

- Krofz

Sunday, 2 September 2012

Suasana Baru pada Kehidupan Saya



"Ilmu-mu akan hilang
ketika kau tidak mengajarkannya kepada orang lain"
  
Tak terasa blog saya sudah berumur 4 Tahun. Dengan latar belakang berwarna gelap, dan warna teks yang terang (kalau gelap juga, nggak kelihatan dong ) selalu setia untuk para pembaca. Membuat sebuah game dengan C++ memang tak semudah membalikkan telapak tangan, tapi tak sesulit dibandingkan membalikkan sebuah rumah (#eh??). Penulisan yang menggunakan bahasa agak gaul dan deskripsi materi yang mungkin pas-pasan semoga tidak membawa pembaca kepada jalan sesat . Sampai saat ini belum ada pembahasan serius dalam membuat game pada blog ini .

Seiring berjalannya waktu, kita memiliki berbagai macam perubahan atau problematik dalam kehidupan nyata. Seperti tuntutan pekerjaan yang membuat saya harus menjadi programmer Visual Basic (yang masih amatiran hehehe ). Sehingga saya perlu menguasai bahasa ini secepatnya agar dapat mempermudah pekerjaan saya ini.

Dampaknya kemampuan C++ saya mungkin tidak dapat berkembang dengan pesat (sebelumnya saja tidak pesat, apalagi sekarang ). Walaupun beralih bahasa, semoga pemahaman dari pemrograman dan algoritma itu sendiri semakin berkembang dan matang. Dan saya akan berusaha untuk tetap meng-update blog ini  . Akhir kata, "Selamat datang kehidupan baru!"

- krofz

Saturday, 18 August 2012

Win32: Menampilkan Teks Sederhana


Tulisan ini (mungkin :P) merupakan lanjutan dari:
Win32: Menggambar Dengan WM_PAINT (1)

Jika pada artikel sebelumnya kita membuat sebuah garis-garis yang indah hehehe, maka sekarang kita akan menampilkan sebuah teks. Dengan menggunakan fungsi yang telah disediakan maka prosesnya menjadi lebih mudah. Langkah pertama adalah membuat project Win32 yang baru, File -> New -> Project -> Win32 GUI Project -> Go. Pilih Frame Based sebagai tipe dasarnya lalu lanjutkan sampai finish. Sampai sini kita telah memiliki jendela sederhana, cukup untuk menampung teks yang akan kita tampilkan. Tambahkan header string ( #include <string> ) setelah header windows . Dan masukkan beberapa kode (lihat potongan kode dibawah), sehingga tampak seperti berikut:


#include <windows.h>

#include <string>

...
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

    //DC = Device Context
    HDC hDC;
    PAINTSTRUCT Ps;
 
    switch (message)                  /* handle the messages */
    {
        case WM_PAINT:{
   
            hDC = BeginPaint(hwnd,&Ps);
            std::string teks = "Contoh Teks ................!";

            //BOOL TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);
            TextOut(hDC, 50, 50, teks.c_str(),teks.length());  //teks 1
            TextOut(hDC, 50, 70, "Contoh Teks",10);    //teks 2

            //COLORREF SetTextColor(HDC hdc, COLORREF crColor);
            SetTextColor(hDC,RGB(255,25,5));
            TextOut(hDC, 50, 90, "Contoh Teks....",14);   //teks 3

            COLORREF _Biru = RGB(5,25,255);
            SetTextColor(hDC,_Biru);
            TextOut(hDC, 50, 110, "Contoh Teks..",18);   //teks 4

            EndPaint(hwnd,&Ps);
            break;
        }

        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
...

Dengan penggunaan string mempermudahkan dalam menampilkan teks dengan TextOut(). Perhatikan baris untuk teks 1 dan teks 2, pada parameter terakhir kita harus menentukan berapa banyak karakter yang akan ditampilkan. Pada teks 2, kita isi parameter keempat dengan kalimat "Contoh Teks" (tanpa tanda kutip). Jumlah karakter yang harus ditampilkan adalah 11, tetapi karena panjangnya hanya diisi 10 (lihat baris teks 2, parameter terakhir) maka karakter terkahir yaitu 's' tidak dapat ditampilkan. Suatu ketika kita ingin menampilkan kalimat yang amat panjang dan memasukkan angka besar sembarang, misal 100 atau 200. Lalu bagaimana hasilnya? Maka akan akan muncul karakter-karakter aneh setelahnya (seperti pada teks 3 dan teks 4). Untuk itu lah penggunaan tipe data string akan membantu kita hehehe. Dengan menggunakan teks.length() kita dapat memperoleh banyaknya karakter.

 Selain itu kita juga dapat menampilkan karakter dengan warna yang telah ditentukan. Dengan menggunakan SetTextColor(), kita isi parameter kedua dengan fungsi RGB(Red,Green,Blue) atau variabel bertipe COLORREF. File project untuk artikel ini dapat anda download dari Link ini. So, Happy Coding!

 - krofz

Wednesday, 11 July 2012

Win32: Menggambar Dengan WM_PAINT (1)


Garis-garis yang menakjubkan!

IDE : Code::Blocks v10.05

Kali ini kita akan membuat beberapa garis yang membentuk sebuah objek. Pertama-tama mari kita membuat project Win32 terlebih dahulu, dengan memilih File -> New -> Project -> Win32 GUI Project -> Go. Pilih Frame Based sebagai tipe dasarnya lalu lanjutkan sampai finish. Untuk memulai proses penggambaran kita perlu menambahkan WM_PAINT pada looping message :


...
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT Ps;

    switch (message)         /* handle the messages */
    {
        case WM_PAINT:
   //waktunya menggambar sesuatu!
...

Sebelum masuk ke dalam message yang akan diolah, kita buat terlebih dahulu variabel untuk menampung garis, yaitu variabel hDC (dengan tipe data HDC ~ Handle Device Context). Setelah tercipta langsung saja ke proses melukis (inggris : paint) melalui WM_PAINT. Perhatikan lalu tambahkan kode berikut ini:


...
void symbolTambah(HDC *_hDC, int x, int y)
{
    MoveToEx(*_hDC,x+50,y, NULL);   //+, 1
    LineTo(*_hDC,x+30,y+40);        //+, 2
    LineTo(*_hDC,x, y+40);          //+, 3
    LineTo(*_hDC,x-10,y+60);        //+, 4
    LineTo(*_hDC,x+20,y+60);        //+, 5
    LineTo(*_hDC,x,y+100);          //+, 6
    LineTo(*_hDC,x+30,y+100);       //+, 7
    LineTo(*_hDC,x+50,y+60);        //+, 8
    LineTo(*_hDC,x+80,y+60);        //+, 9
    LineTo(*_hDC,x+90,y+40);        //+, 10
    LineTo(*_hDC,x+60,y+40);        //+, 11
    LineTo(*_hDC,x+80,y);           //+, 12
    LineTo(*_hDC,x+50,y);           //+, 13
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT Ps;

    switch (message)                  /* handle the messages */
    {
 case WM_PAINT:
  hDC = BeginPaint( hwnd, &Ps);
  MoveToEx(hDC, 120, 30, NULL);   //C 1
  LineTo(hDC, 70, 130);   //C 2
  LineTo(hDC, 160, 130);  //C 3
  LineTo(hDC, 180, 110);  //C 4
  LineTo(hDC, 120, 110);  //C 5
  LineTo(hDC, 150, 50);   //C 6
  LineTo(hDC, 200, 50);   //C 7
  LineTo(hDC, 220, 30);   //C 8
  LineTo(hDC, 120,30);    //C 9

  //menampilkan karakter tambah ('+')
  symbolTambah(&hDC,210,30);
  symbolTambah(&hDC,320,30);
  EndPaint(hwnd, &Ps);
        break;
...


MoveToEx(HDC,X,Y,tagPOINT) adalah proses dimana titik pertama akan digambar. LineTo(HDC,X,Y) digunakan untuk membentuk garis dari titik sebelumnya menuju ke titik yang baru dibuat. Keterangan komentar C1 bertujuan sebagai penanda pada gambar berbentuk huruf C. Gambar C tersebut dibentuk dengan 9 titik, dimana titik pertama dan kesembilan menempati posisi yang sama. Selanjutnya membuat karakter '+', tapi disini kita memerlukan 2 buah karakter '+'. Dibanding membuat karakter yang sama dengan copy-paste kode (atau menulis ulang?!!! ~ cape deeh! ), kita buat saja sebuah fungsi untuk mempermudah yaitu symbolTambah(HDC,X,Y). Kordinat X dan Y -nya dapat kita sesuaikan. Sehingga akan terlihat seperti gambar berikut:

Gambar 1. Menampilkan informasi untuk setiap titik pada gambar.

Jika anda mengalami masalah saat membuat file project atau menulis kode-kode diatas. Anda dapat men-Download file berikut dari MediaFire. So, Happy Coding .

- krofz
 

back to top

back to top