Pages

Senin, 25 Juni 2012

Mouse


sejak awal mereka pada akhir tahun 1960 sebagai perangkat input CAD, mice telah beradaptasi untuk banyak kegunaan. termasuk game komputer. mereka populer terutama pada PC game, tetapi biasanya tidak mendukung pada konsol game. tidak seperti keyboard atau joystick, mouse tidak hanya menghasilkan tombol atau tombol yang ditekan, tetapi menghasilkan 2D posisi juga. ini memberikan pilihan yang lebih banyak dari pilihan input pada biaya yang lebih tinggi dari belajar curva untuk para pemain.
mice dapat digunakan dalam berbagai skenario, dari memilih unit dalam judul strategi real-time kemouselook populer banyak ditemukan penembak-penembak pertama. dalam semua kasus, pengoperasian mouse dapat dibagai menjadi transmisi informasi posisional(berkat sensor mouse internal) dan mengirim pesan tombol ditekan dan dilepas.
mari kita periksa bagaimana mengoperasikan mouse dibawah DirectInput. Source code ini sangat mirip dengan permintaan keyboard karena DirectInput memperlakukan semua perangkat sama. hal ini menguntungkan bagi programmer karena banyak detail pusat yang tersembunyi. mari kita asumsikan kita mempunyai objek DirectInput utama dan running, dan mulai dengan melewati penciptaan perangkat :
LPDIRECTINPUTDEVICE g_pMouse;
HRESULT             hr;
hr = g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, NULL);
Seperti yang dapat kamu lihat, ini sangat mirip untuk meminta keyboard; yang menjadi perbedaan hanyalah GUID kita lewati untuk meminta perangkat yang kita inginkan. Kemudian, format data dapat diatur seperti ini
hr = g_pMouse->SetDataFormat(&c_dfDIMouse);
dalam keadaan ini c_dfDIMouse parameter memberitahukan DirectInput kita akan melewati struktur DIMOUSESTATE ke IDirectInputDevice::GetDeviceState. Struktur ini akan mengikuti tanda seperti ini :
typedef struct DIMOUSESTATE {
    LONG lX;
    LONG lY;
    LONG lZ;
    BYTE rgbButtons[4];
} DIMOUSESTATE, *LPDIMOUSESTATE;
Struktur ini mengembalikan posisi X dan Y, dan sumbu Z opsional, yang biasanya ditugaskan untuk roda. Kemudian, tombol array bekerja seperti array keyboard. Tombol yang ditekan jika sedikit high_order diatur. Varian dari struktur ini adalah DIMOUSESTATE2, diatur dalam parameter c_dfDIMouse2. satu-satunya perbedaan adalah bahwa yang terakhir mendukung 8 tombol daripada 4 pendukung oleh DIMOUSESTATE. Inilah yang paling berguna dalam mouse untuk system CAD, sebagai contoh.
Setelah format data telah disetel, kita perlu mengatur tingkat kerjasama. Tidak ada yang mengejutkan disini, karena kode ini sama persis dengan versi keyboard.
hr = g_pMouse->SetCooperativeLevel(hWnd,
               DISCL_EXCLUSIVE | DISCL_FOREGROUND);
Selain itu, kita membutuhkan perangkat yang siap digunakan dengan jalur :
g_pMouse->Acquire();

ini adalah source code lengkapnya :
LPDIRECTINPUTDEVICE g_pMouse;
HRESULT hr = g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, NULL);
hr = g_pMouse->SetDataFormat(&c_dfDIMouse);
hr = g_pMouse->SetCooperativeLevel(hWnd,
               DISCL_EXCLUSIVE | DISCL_FOREGROUND);
g_pMouse->Acquire();

membaca dari mouse didapatkan dengan memanggil GetDeviceState, yang akan mengembalikan struktur LPDIMOUSESTATE. Kodenya akan menjadi :

DIMOUSESTATE dims;      // DirectInput mouse state structure
ZeroMemory( &dims, sizeof(dims) );
hr = g_pMouse->GetDeviceState( sizeof(DIMOUSESTATE), &dims );
if( FAILED(hr) )
{
           hr = g_pMouse->Acquire();
while( hr == DIERR_INPUTLOST ||  hr == DIERR_OTHERAPPHASPRIO ||
hr == DIERR_NOTACQUIRED)
hr = g_pMouse->Acquire();
}

Perhatikan bagaimana saya telah  menambahkan kode pencegahan untuk menghindari kehilangan jelas dari mouse kita karena kejadian yang tidak terduga. Selain itu, kode ini sangat mirip untuk membaca keyboard. Untuk mengakses atribut mouse, yang harus kita lakukan adalah :
int MouseX = dims.lX;
int MouseY = dims.lY;
bool lbutton = (dims.rgbButtons[0] & 0x80)!=0);

biasanya, tombol 0 ditugaskan untuk tombol kiri mouse, tombol 1 ditugaskan untuk tombol kanan mouse, dan tombol 2 ditugaskan untuk tombol tengah (jika tersedia). Mengenai posisi, ingat bahwa mouse adalah perangkat penunjuk relatif. Ketika pertama kali diperoleh, posisi mouse akan mengulang ke (0,0). Jadi, setiap baru membaca akan kembali ke perpindahan yang terakhir. Jadi, jika kita menggerakan mouse secara vertikal, kita akan melihat perpindahan kearah Y. Tetapi ketika kita berhenti bergerak, nilai dari mouse akan kembali ke (0,0). Ingatlah, mouse tidak bekerja dengan posisi melainkan bekerja dengan perpindahaan. Terakhir, tapi tidak sedikit, mouse biasanya dikonfigurasi ke poin X menjadi  negatif kekiri dan titik positif Y dari posisi badan kita saat duduk dimeja.
Selain itu, ingatlah untuk melepaskan mouse segera setelah anda selesai menggunakannya. Code ini kembali sangat mirip dengan kode melepaskan keyboard :
if( g_pMouse ) g_pMouse->Unacquire();
SAFE_RELEASE( g_pMouse );
SAFE_RELEASE( g_pDI );

Penggunaan yang populer dari mos=use adalah untuk mengimplementasikan mouselook klasik yang digunakan di banyak first-person penembak. Mouselook ini mudah untuk dikode setelah anda memahami bagaimana cara mengoperasikan mouse. Yang harus kita lakukan adalah gunakan kunci untuk mengubah posisi kita, dan gunakan mouse untuk mengarahkan kembali cara pandang kita. Saya akan menjelaskan semua efeknya, sehingga kita dapat menggabungkan apa yang kita pelajari tentang keyboard dan mice. Permainan paling tidak harus mempunyai 4 derajat kebebasan. Kita harus mempunyai posisi yang terdiri dari niali X dan Z, dan kemudian persimpangan dan sudut lintas. Nilai Y sering  ditambahkan dalam campuran sehingga kita dapat mendaki perbedaan ketinggiannya, tetapi putaran umumnya tidak dibutuhkan. Kita akan menggunakan pemetaan berikut :
Mouse : Mouselook
Arah kiri : menembaki kiri
Arah kanan : menembaki kanan
Arah atas : maju kedepan
Arah bawah : bergerak ke belakang
Pertama-tama mari kita fokus pada keyboard dan lupakan tentang orientasi sebentar. Dengan asumsi keyboar DirectInput standar, kita akan membutuhkan kode berikut untuk mengimplementasikan perilaku yang kita inginkan :
int strafe= (buffer[DIK_RIGHT] & 0x80)!=0) - (buffer[DIK_LEFT] & 0x80)!=0);
int fwd= (buffer[DIK_UP] & 0x80)!=0) - (buffer[DIK_DOWN] & 0x80)!=0);
perhatikan bagaimana kita telah membungkus kontrol kursor dengan elegan. Dengan mengurangi lawan arah, kita mendapatkan 2 nomor, strafe dan fwd, dalam jangkauan -1...1. nomor ini digunakan untuk mengemudikan posisi update rutin kita.
pos.x += fwd*FWDSPEED*elapsed*cos(yaw) +
strafe*STRAFESPEED*elapsed*cos(yaw+3.1416/2);
pos.z += fwd*FWDSPEED*elapsed*sin(yaw) +
strafe*STRAFESPEED*elapsed*sin(yaw+3.1416/2);
variable fwd dan strafe mengontrol bagaimana setiap member dikalikan denggan -1, 0, 1 untuk melakukan efek yang diinginkan. Sekarang, marilah menjaga lintasan dan persimpangan melalui mouse :
yaw+= YAWSPEED*elapsed*dims.lX;
pitch+= PITCHSPEED* elapsed*dims.lY;
jadi sekarang kita mempunyai pos.x, pos.z, persimpangan dan lintasan yang baru dari stuktur pemain yang terupdate. Sesungguhnya kita harus menjaga 2 perangakat tetap hidup dan kita harus mendefinisikan semua konstanta dalam topi untuk mengatur kecepatan yang diinginkan. Perhatikan bagaimana jalan ini memastikan performa perangkat independen kita. Untuk kelengkapan, ini adalah kode yang dibutuhkan untuk memperhitungkan semua parameter kamera spesifik yang siap dipasang ke OpenGL atau DirectX.
point campos(pos.x,pos.y,pos.z);
point camlookat(pos.x+cos(yaw)*cos(pitch),pos.y+sin(pitch),
pos.z+sin(yaw)*cos(pitch))
perhitungan koordinat lookat hanya untuk pemetaan bola yang menggunakan pitch dan yaw. Tergantung pada bagaimana sumbu anda ditata, sebuah tanda mungkin akan berubah atau anda mungkin perlu menambahkan sudut konstan seperti Pi ke nilai pitch

READ MORE - Mouse

Senin, 23 April 2012

Review Game Insaniquarium

Pada kesempatan kali ini, saya akan mereview sebuah game PC yaitu Insaniquarium.

Insaniquarium adalah sebuah permainan tentang ikan-ikan, dimana kita sebagai player diharuskan menjaga ikan-ikan tersebut dengan cara memberi makan dan melindunginya dari serangan alien yang muncul secara tiba-tiba, namun tugas kita bukan hanya itu, di game ini juga banyak disediakan quest-quest dan beberapa binatang laut yang dapat membantu kita dalam menjaga ikan. Pada setiap level yang telah sukses dimainkan maka kita akan mendapat satu ekor hewan pembantu baru. Dimana ada 20 hewan pembantu yang tersedia dan masing-masing memiliki fungsi yang berbeda-beda. Sekarang saya akan mereview hewan-hewan yang akan membantu kita selama permainan :


Stinky
Akan selalu berada dibawah tank kita untuk membantu kita dalam mengambil koin-koin

Clyde
Bertugas untuk mengambil koin-koin juga, tapi hewan ini tidak selalu berada dibawah tank, dia dapat berpindah-pindah tempat

Niko
Seekor kerang yang dapat mengeluarkan mutiara, dimana mutiara tersebut dapat menambah uang yang kita punya

Vert
Berbentuk seperti tulang ikan, hewan ini dapat mengeluarkan koin emas, dan dia tidak perlu diberi makan

Itchy
Ikan pedang yang dapat membantu kita melawan alien yang tiba-tiba muncul

Rufus
Seekor kepiting yang membantu kita melawan alien, saat alien itu berada didasar tank.

Prego
Berbentuk seperti ibu dari ikan, disini tugasnya adalah membantu kita dengan cara melahirkan ikan guppy yang baru.

Meryl
Putri duyung yang dapat bernyanyi hingga nyanyiannya dapat memberi semangat para ikan dan membuat ikan lebih cepat menghasilkan koin

Zorf
Seekor kuda laut yang membantu kita untuk memberi makan para ikan-ikan

wadsworth
Ikan paus yang membantu kita melindung ikan-ikan kecil dan medium dari serangan alien, dengan cara memasukkan ikan-ikan tersebut kedalam mulutnya

Seimour
Seekor kura-kura yang dapat membuat koin dan berlian yang turun berjalan lebih lambat

Nimbus
Ikan pari yang dapat membuat koin-koin, berlian dan makanan yang turun tetap mengambang.

Shrapnel
Ikan besi yang dapat mengeluarkan bom, dimana bom ini jika diklik akan menambah uang kita, namun jika meledak akan membunuh ikan

AMP
Belut listrik yang dapat membunuh ikan kita dengan sengatan listriknya dan mengubahnya menjadi berlian

Gumbo
Berbentuk seperti angler fish yang mempunyai lampu disekitar kepalanya, yang dapat membantu ikan-ikan untuk mengikuti cahaya lampunya untuk menghindar dari alien

Gash
Seekor ikan yang akan membantu kita untuk menghajar alien yang muncul, tetapi akan memakan ikan kita sebagai pengantinya.

Blip
Ikan yang akan membantu kita memberikan petunjuk dimana letak alien akan muncul

Angie
Akan membantu menghidupkan kembali ikan kita yang telah mati

Rhubard
Hewan yang akan mencapit ikan kita bila dia berada dibawah tank, hal ini dilakukan agar ikan tidak berada dibawah tank

Presto
Hewan yang dapat kita rubah sesuai keinginan kita, dengan cara klik kanan



Dalam game ini ada 4 jenis permainan yang disediakan, yang pertama yaitu adventure, time trial, challenge dan virtual tank.
Adventure adalah jenis permainan yang dimana didalamnya nanti kita harus berhasil membeli sebuah telur dengan harga yang akan terus naik pada setiap levelnya, setiap telur yang berhasil kita beli akan menetaskan hewan pembantu kita.

Time trial, memiliki cara bermain yang sama dengan adventure hanya saja kita dibatasi oleh waktu

Challenge, pada challenge kita diberikan 4 buah tank yang akan terbuka satu persatu bila kita dapat menyeleaikan setiap questnya

virtual tank, adalah tank virtual yang memungkinkan kita untuk memelihara hewan tetapi hewan itu tidak akan mati.

Demikian review game kali ini, mungkin lain kali dapat dilanjut dengan review game lain  :D



READ MORE - Review Game Insaniquarium

Senin, 09 April 2012

Review Game Engine - OGRE

Game engine (bahasa Indonesia: mesin permainan) adalah sebuah sistem software yang dirancang untuk pembuatan dan pengembangan suatu video game. Ada banyak sekali game engine yang dirancang untuk bekerja pada beberapa konsol video game dan sistem operasi desktop seperti Microsoft Windows, Linux dan Mac OS X. Fungsi utama yang secara khusus disediakan oleh game engine meliputi mesin render (renderer) untuk grafik 2D atau 3D, mesin fisika, deteksi tabrakan (dan tanggapan tabrakan), suara, script, animasi, kecerdasan buatan, jaringan, streaming, manajemen momori, threading, dukungan lokalisasi dan layar grafik. Proses pembuatan game seringkali dihemat oleh sebagian besar developer dengan menggunakan kembali game engine yang sama untuk membuat game yang berbeda.

Pada zaman sekarang ini sudah banyak sekali game engine yang beredar, antara lain :
1.       OGRE
2.       Irrlicht
3.       Panda3D. Contoh game-nya : Pirates of the Caribbean Online.
4.       Crystal Space
5.       jME
6.       Blender Game Engine
7.       Reality Factory
8.       The Nebula Device 2
9.       RealmForge
10.   OpenSceneGraph
11.   C4 Engine
12.   Torque Game Engine
13.   3DGameStudio
14.   TV3D SDK 6.5
15.   Leadwerks Engine 2
16.   Unity. Contoh game-nya : Tiger Woods PGA Tour Online.
17.   DX Studio
18.   NeoAxis Engine
19.   Visual3D.NET Game Engine
20.   Esenthel Engine

      Dan pada kesempatan kali ini saya akan mencoba untuk me-review salah satu game engine yang ada, yaitu OGRE. Ogre merupakan Singkatan dari Object-Oriented Graphics Rendering Engine yang merupakan game engine fleksibel yang berbasis scene ditulis dengan bahasa C++ didesain agar lebih mudah dipakai oleh para developer untuk memproduksi game dan demo yang menggunakan hardware 3D. Library kelas menggambarkan semua rincian dari penggunaan sistem library seperti Direct3D dan OpenGL yang menyediakan sebuah antarmuka berbasis pada objek dunia dan kelas intuitif lainnya.

penulis                            : Steve Streeting
Api Grafik                      : OpenGL, Directx
Bahasa Pemrograman     : C/C++
Sistem Operasi               : Windows, linux, MacOS
Status                             : Produktif/stabil
Dokumentasi                  : Ada
Source Code                 : Ada
Harga                            : Gratis (OpenSource)
Mesh yang didukung      : Milkshape3D, 3D studio Max, Maya, Blender dan Wings3D.

     Pengenalan identitas OGRE sudah dibahas, sekarang saya akan mencoba untuk membahas kelemahan dan kelebihannya :


Kelebihan
  • Gratis karena opensource
  • Dapat memilih render yang diinginkan, OpenGL atau DirectX.
  • Kemungkinan kinerja OGRE dalam scene culling lebih baik.
  • Dapat dirender dengan baik meskipun dengan kartu grafis bawaan Intel.
  • Mempunyai komunitas yang besar.
Kekurangan
  • Hanya sebuah rendering engine tidak dilengkapi dengan tool jaringan, suara dan lain sebagainya.







READ MORE - Review Game Engine - OGRE

Minggu, 04 Maret 2012

Apa itu Game?

Game merupakan sebuah aktivitas rekreasi dengan tujuan bersenang-senang, mengisi waktu luang, atau berolahraga ringan. Game diambil dari dari bahasa Inggris yang diterjemahkan yang artinya Permainan,  Permainan biasanya dilakukan sendiri atau bersama-sama.  Game ini sebuah aktivitas yang terstruktur atau semi terstruktur.
Game komputer atau sering juga disebut dengan pc game adalah sebuah permainan yang hanya dapat dimainkan di PC atau Laptop bukan pada video console. Sebuah game pc biasanya dipublikasikan secara mandiri atau melalui pihak ketiga, yang kemudian didistribusikan pada media fisik seperti DVD atau CD atau dapat didistribusikan melalui internet. Sebuah game PC biasanya mempunyai spesifikasi tersendiri untuk dapat dimainkan di PC, biasanya yang dibutuhkan adalah processor diatas pentium III, RAM atau VGA, atau dibutuhkannya koneksi internet untuk bermain game online. Pada dasarnya game pada komputer sendiri dibagi menjadi 2 yaitu game online dan game offline. Untuk dapat lebih mudah memahaminya, maka akan saya jabarkan dalam bentuk tabel.

Game Online
Game Offline
Dimainkan di PC / Laptop
Dimainkan di PC / Laptop
Membutukan koneksi internet
Tidak membutuhkan koneksi internet
Dapat berhubungan dengan banyak orang
Hanya dapat dimainkan dengan beberpa orang
Game sering terupdate
Tidak ada update game (kecuali keluar versi baru)
Gamenya gratis
Gamenya ada yang gratis ada yang berbayar
Pembelian item game (untuk karakter) cenderung membutuhkan uang yang cukup banyak
Kebanyakan item yang ada bisa langsung dibeli tanpa uang
Game tidak akan bisa tamat (bisa dimainkan sampai level berapapun)
Hanya bisa dimainkan sebentar karna memiliki batasan level (level yang tersedia sedikit)

Game komputer yang ada sekarang sangatlah banyak, sehingga dapat dikategorikan menjadi :


  • ·         Shooting = game tembak-tembakan. Contohnya seperti Call of Duty atau Counter Strike
  • ·         Fighting / Battle = game perkelahian. Contohnya seperti Mortal Kombat, Tekken, dll.
  • ·         Petualangan / Adventure = Game dengan banyak misi. Contohnya seperti Tomb Rider, GTA.
  • ·         Simulation = Game yang menggambarkan sebuah kehidupan. Contohnya seperti The Sims, atau tamagotchi.
  • ·         Role Playing Game / RPG = Mengendalikan kepintaran karakter atau memainkan sebuah karakter untuk mencapai suatu tingkatan tertentu, contohnya Final Fantasi, Dragon Quest.
  • ·         Strategi = Game yang membutuhkan keahlian berfikir untuk dapat memainkannya, contohnya seperti Catur.
  • ·         Puzzle = Game ini lebih terfokus pada pemecahan teka-teki atau mencari jalan keluar, seperti Tetris,  Bomberman, Puzzle Quest.
  • ·         Racing = permainan balapan seperti Need For Speed Underground
  • ·         Sport = permainan olahraga seperti NBA, FIFA, PES dll.
  • ·         Massive Multiplayer Online Game = Game yang dapat dimainkan dengan lebih dari 100 pemain, contohnya seperti ayodance, Ragnarok
  • ·         Browser Game = lebih cenderung pada game flash seperti zygna poker
  • ·         Education = game pendidikan contohnya seperti permainan berhitung, mengetik atau mewarnai.


READ MORE - Apa itu Game?