Sabtu, 25 Mei 2013

User Input


Keyboard
            Keyboard adalah perangkat input utama untuk game berbasis PC, tetapi juga tersedia untuk ponsel, beberapa konsol, dan perangkat sawit. Yang membuat mereka, kemungkinan besar, perangkat input yang paling banyak tersedia. Sayangnya, seperti perangkat input populer sangat tidak cocok untuk game. Pemetaan keyboard mengambil waktu untuk belajar, dan gambaran umum tentang keyboard ini sama sekali tidak praktis untuk anak-anak kecil. Menjadi multifungsi perangkat yang dapat digunakan untuk mengetik dokumen dan untuk bermain game, tidak mengherankan bahwa keyboard dapat dibaca dengan menggunakan berbagai metode, tergantung pada kebutuhan spesifik dari aplikasi. Beberapa metode mengambil string penuh, yang lain bekerja atas dasar kunci-demi-kunci, dan sebagainya. Tapi untuk tujuan game, dua jenis rutinitas relevan. Pertama, ada rutinitas sinkron, yang menunggu sampai tombol ditekan dan kemudian melaporkannya ke aplikasi. Kedua, ada rutinitas asynchronous, yang segera kembali setelah dipanggil, dan memberikan informasi tentang aplikasi yang tombol ditekan, jika ada.
            Mode membaca sinkron digunakan untuk mengetik informasi, seperti nama karakter dalam role-playing game (RPG). Mereka bekerja dengan polling kontroler sampai pesan input kunci baru tiba. Tapi mereka tidak sangat baik cocok untuk gameplay nyata. Kode permainan harus terus menerus memeriksa untuk melihat apakah tombol ditekan, dan apapun respon, terus menggambar, melaksanakan AI, dan sebagainya. Jadi, pengendali asynchronous adalah cara untuk pergi. Mereka menyediakan tes cepat untuk memeriksa keadaan keyboard yang efisien. Rutinitas Asynchronous juga bisa milik dua keluarga yang berbeda. Beberapa dari mereka yang dirancang untuk menguji keadaan kunci individu, sehingga pemrogram melewati kode kunci sebagai parameter dan mendapat negara sebagai terjadi. Lainnya, seperti yang terpapar oleh DirectInput, mengambil keyboard seluruh negara dalam satu panggilan, sehingga programmer kemudian dapat mengakses struktur data dan memeriksa keadaan setiap tombol tanpa lebih lanjut cek hardware. Tipe kedua rutin umumnya lebih efisien karena ada overhead kurang
terlibat.



Sebagai contoh, kita akan fokus pada panggilan asynchronous satu tombol untuk platform PC. Panggilan adalah Windows spesifik dan merupakan bagian dari Win32 API. Perintahnya adalah
pendek GetAsyncKeyState (int keycode); Panggilan ini menerima kode kunci dan mengembalikan nilai pendek, yang mengkode informasi negara yang berbeda. Kuncinya kode kita lulus sebagai parameter dapat menjadi karakter dikapitalisasi, seperti "K", atau kode kunci diperpanjang, yang digunakan untuk membaca karakter khusus. Dengan menggunakan kode kunci diperpanjang, kita bisa membaca kunci tertentu, seperti Hapus, tombol fungsi, Tabs, dan sebagainya. Tabel 5.1 menyediakan daftar kode kunci khusus utama untuk ini menelepon.

Tabel 5.1. Keycodes untuk panggilan GetAsyncKeyState
Keycode Deskripsi
VK_RSHIFT VK_SHIFT, VK, LSHIFT Salah satu dari dua Shift
VK_MENU Salah satu dari tombol Alt
VK_CTRL VK_RCTRL, VK_LCTRL Setiap tombol Ctrl
VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT The tombol kursor
VK_F1 ... VK_F12 Tombol Fungsi
VK_ESCAPE The tombol Esc
VK_SPACE The Spasi
VK_RETURN Enter / Return
VK_HOME, VK_END, VK_PRIOR, VK_NEXT Tombol keypad numerik
VK_BACK The tombol Backspace
VK_TAB Kunci Tab
VK_INSERT, VK_DELETE Insert dan Delete

            Nilai kembali mengkodekan keadaan kunci dilewatkan sebagai parameter. Bit yang paling signifikan diaktifkan jika tombol saat ditekan, sedangkan least significant bit diaktifkan jika kunci ini diaktifkan yang terakhir Waktu GetAsyncKeyState dipanggil. Berikut adalah contoh bagaimana untuk memeriksa apakah tombol Shift kiri adalah ditekan:

Jika (GetAsyncKeyState (VK_LSHIFT))
 {
 / / Apapun
 }
Perhatikan bahwa, karena sifat panggilan, kita dapat memeriksa beberapa tombol. Contoh berikutnya menunjukkan bagaimana untuk menguji untuk Shift kiri DAN Kembali kombinasi:
Jika ((GetAsyncKeyState (VK_LSHIFT)) && (GetAsyncKeyState (VK_RETURN)))
 {
 / / Apapun
 }

Seperti yang Anda lihat, setiap tes kunci memerlukan system call, yang dapat menyusahkan bagi sistem-sistem memeriksabanyak kunci yang berbeda. Sekarang, mari kita bandingkan panggilan ini dengan cek keyboard yang utuh, yang dapat dilakukan dengan menggunakan panggilan:
bool GetKeyboardState (PBYTE * lpKeyState);
Berikut hasilnya hanya mengkodekan apakah fungsi berhasil, dan daging yang sebenarnya dikembalikan sebagai array lulus sebagai referensi. Kemudian, pemeriksaan berturut-turut seperti berikut ini melakukan tes individu, yang tidak lain array lookup sederhana:
if (keystate [VK_RSHIFT])
 {
 Pergeseran / / kanan ditekan
 }



            Sekali lagi, untuk game yang memeriksa banyak kunci (seperti simulator penerbangan), opsi ini bisa lebih baik daripada diulang panggilan ke GetAsyncKeyState. Programmer hanya perlu menyadari bahwa panggilan awal untuk GetKeyboardState diperlukan untuk memuat array. Lain yang mungkin perangkap untuk diperhatikan adalah bahwa modus kedua ini tidak segera memeriksa kunci ketika Anda melakukan tes. Tombol diperiksa pada panggilan untuk GetKeyboardState. Jika ada yang signifikan menunda antara tes ini dan lookup array, efek samping yang tidak diinginkan mungkin terjadi karena array akan mengandung "lama" nilai-nilai kunci. Keyboard dengan DirectInput DirectInput menyediakan akses asynchronous cepat untuk negara-negara kunci. Sebuah panggilan tunggal dapat mengambil keadaan Seluruh Keyboard, tes berikutnya sehingga hanya tabel lookup. Operasi ini demikian sangat mirip dengan GetKeyboardState Win32 menelepon. Namun sebelum kita menggali ke dalam kode pembacaan Keyboard, kita perlu membahas bagaimana DirectInput bekerja.
            DirectInput merangkum keyboard, joystick, tikus, dan setiap masukan eksotis lainnya perifer bawah umum interface yang disebut perangkat. Operasi ini benar-benar mudah. Pertama-tama kita perlu boot DirectInput. Ini menyiratkan menciptakan objek DirectInput, dari mana semua benda lain yang berhubungan dengan proses input dapat berasal. Obyek DirectInput demikian dapat digunakan untuk membuat perangkat, yang merupakan antarmuka logis untuk peripheral. Setelah perangkat telah dibuat, kita perlu menentukan beberapa parameter, seperti format data yang kita inginkan untuk pertukaran dengan perangkat, dan tingkat koperasi, yang memberitahu DirectInput jika perangkat untuk dibagi di antara aplikasi yang berbeda atau jika kita perlu secara eksklusif. Perangkat DirectInput kemudian dapat disurvei asynchronous. Kami query keadaan perangkat, tidak menunggu peristiwa tertentu seperti kunci atau tekan tombol. Ini berarti DirectInput akan mengambil snapshot dari kondisi saat ini perangkat dan mengembalikannya ke aplikasi sehingga dapat diproses. Sebagai ringkasan, berikut adalah daftar langkah-langkah terlibat dalam mendirikan keyboard DirectInput:

1.      Membuat objek DirectInput.
2.      Buat perangkat keyboard yang.
3.      Mengatur format data untuk membacanya.
4.      Mengatur tingkat koperasi akan Anda gunakan dengan sistem operasi.
5.       Baca data yang diperlukan.

Mari kita sekarang beralih ke contoh spesifik, dimulai dengan kode DirectInput diperlukan untuk boot API. Itu kode dalam bagian ini telah diuji di kedua DirectX8 dan DirectX9. DirectInput hampir identik dalam kedua versi.
LPDIRECTINPUT8 g_pDI = NULL;
HRESULT hr = DirectInput8Create (GetModuleHandle (NULL), DIRCTINPUT_VERSION,
IID_IDirectInput8, (VOID **) & g_pDI, NULL)))

Dalam kode sebelumnya, parameter pertama digunakan untuk mengirim pegangan contoh untuk aplikasi yang menciptakan objek DirectInput. Kemudian, kita harus lulus versi DirectInput kita meminta. Itu makro DIRCTINPUT_VERSION adalah cara yang berguna untuk lulus nomor versi saat ini. Selanjutnya, kita harus lulus pengenal antarmuka yang unik untuk obyek yang kita minta. Kami menggunakan IID_IDirectInput8 untuk meminta DirectInput objek, tetapi kita bisa menggunakan parameter lain untuk menentukan versi ANSI atau Unicode antarmuka. Kami kemudian melewati pointer sehingga kami dapat menerima objek sudah diinisialisasi, dan parameter terakhir digunakan untuk melakukan Component Object Model (COM) agregasi. Anda mungkin tidak akan ingin agregat Anda Objek DirectInput untuk hal lain, sehingga meninggalkan ini sebagai NULL.
           


            Sekarang kita memiliki objek DirectInput siap untuk digunakan. Sekarang saatnya untuk kode keyboard nyata. Kami akan pertama meminta perangkat dan mengatur beberapa parameter yang menentukan bagaimana kita akan berkomunikasi dengannya. Kemudian, kita akan memeriksa kode sumber yang digunakan untuk membaca data dari keyboard. Langkah pertama adalah untuk benar-benar meminta perangkat dari objek DirectInput. Hal ini dicapai dengan kalimat:
HRESULT hr = g_pDI-> CreateDevice (GUID_SYSKeyboard, & g_pKeyboard, NULL);

Panggilan harus menerima Global Unique Identifier (GUID) untuk perangkat yang diinginkan. DirectInput dibangun di atas dari COM, model pemrograman berorientasi obyek. Dalam COM, GUIDs digunakan untuk mengidentifikasi objek tertentu atau interface. Secara internal, GUID hanya struktur 128-bit, tetapi mereka digunakan untuk mewakili fungsi, benda, dan umumnya setiap DirectX membangun. Dalam kasus ini, GUIDs klasik untuk perangkat yang berbeda

● GUID_SYSKeyboard: Keyboard sistem default.
● GUID_SysMouse: Sistem tikus default.

            GUID tambahan dapat diberikan ke joystick. Namun, GUID ini tidak harus ditulis secara langsung, tetapi sebagai hasil dari panggilan untuk DirectInput8 :: EnumDevices. Kami akan mencakup joystick pada bagian berikutnya. Untuk keyboard kita, GUID_SYSKeyboard akan melakukan pekerjaan. Parameter kedua adalah pointer ke baru menciptakan perangkat, dan parameter terakhir ini lagi disediakan untuk agregasi dan sehingga harus diatur ke NULL. Sekarang, kita harus memberitahu keyboard bagaimana kita ingin bertukar data. Hal ini dicapai dengan panggilan untuk SetDataFormat, seperti yang ditunjukkan di sini:
HRESULT hr = g_pKeyboard-> SetDataFormat (& c_dfDIKeyboard);

Panggilan harus menerima parameter tipe LPCDIDATAFORMAT, yang merupakan struktur didefinisikan sebagai:


typedef struct {DIDATAFORMAT
 DWORD dwSize;
 DWORD dwObjSize;
 DWORD dwFlags;
 DWORD dwDataSize;
 DWORD dwNumObjs;
 LPDIOBJECTDATAFORMAT rgodf;
} DIDATAFORMAT, * LPDIDATAFORMAT;
typedef const DIDATAFORMAT * LPCDIDATAFORMAT;

            Struktur ini mengontrol jumlah objek kita akan meminta, format masing-masing, dan sebagainya. Karena struktur yang kompleks untuk mengisi, DirectInput sudah dilengkapi dengan beberapa format data yang telah ditetapkan yang dapat kita gunakan secara langsung. Untuk keyboard, c_dfDIKeyboard Format memberitahu DirectInput kita akan meminta keyboard lengkap, disimpan dalam array dari 256 byte. Selain itu, kita perlu memberitahu DirectInput tentang tingkat koperasi akan kita gunakan dengan perangkat ini. Ini dicapai dengan menggunakan garis:
HRESULT hr = g_pKeyboard-> SetCooperativeLevel (hWnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE);

Di sini kita melewati jendela menangani sebagai parameter pertama, dan parameter kedua adalah ATAU dari serangkaian bendera yang mengontrol tingkat koperasi. Dalam kasus ini, kita mengatakan DirectInput yang kita inginkan eksklusif mengakses dan bahwa akses ini seharusnya hanya berlaku jika aplikasi tersebut di latar depan. Sebagai aplikasi kita bergerak ke latar belakang, perangkat secara otomatis unacquired. Selain itu, kami perlu mendapatkan keyboard, sehingga kami dapat mulai query negaranya. Baris berikut akan melakukan bahwa bagi kita:
g_pKeyboard-> Acquire ();

Dan sekarang kami siap untuk mulai menggunakan keyboard. Berikut adalah potongan kode yang menyatakan kedua DirectInput dan keyboard, dan memastikan perangkat siap. Kesalahan pemeriksaan telah dihilangkan untuk kejelasan:

HRESULT jam;
hr = DirectInput8Create (GetModuleHandle (NULL), DIRCTINPUT_VERSION,
 IID_IDirectInput8, (VOID **) & g_pDI, NULL);
hr = g_pDI-> CreateDevice (GUID_SYSKeyboard, & g_pKeyboard, NULL);
hr = g_pKeyboard-> SetDataFormat (& c_dfDIKeyboard);
hr = g_pKeyboard-> SetCooperativeLevel (hDlg, dwCoopFlags);
hr = g_pKeyboard-> Acquire ();

Membaca keyboard bahkan lebih mudah daripada mempersiapkan itu. Yang harus kita lakukan adalah mempersiapkan array 256-byte dan menyebarkannya ke DirectInput dengan keyboard yang diperoleh untuk query negaranya:
Diks BYTE [256]; / / keyboard DirectInput penyangga negara
ZeroMemory (diks, sizeof (diks));
hr = g_pKeyboard-> GetDeviceState (sizeof (diks), diks);

Perhatikan bagaimana kita menghapus buffer dan kemudian menyebarkannya ke DirectInput. Seperti GetAsyncKeyState, kunci tertentu Kode harus digunakan setelah membaca query untuk setiap tombol. Dalam kasus ini, semua kunci yang diwakili oleh simbolik konstanta, seperti:
DIK_RETURN Kunci kembali
DIK_SPACE Tombol spasi
DIK_A ... DIK_Z Tombol abjad
DIK_F1 ... DIK_F10 Tombol Fungsi

Sekarang, untuk query kunci tertentu, kita harus menguji bit yang paling signifikan dari posisi array yang sesuai. Jika posisi yang diatur ke satu, kuncinya saat ini sedang ditekan. Dengan demikian, untuk memeriksa apakah tombol Kembali adalah diaktifkan, kode berikut dapat digunakan:
bool return_pressed = (buffer [DIK_RETURN] & 0x80) = 0)!;

            Seperti biasa, kita bisa membaca kombinasi, sehingga kami dapat memeriksa apakah beberapa tombol yang ditekan secara bersamaan. Karena hanya ada satu DirectInput membaca di awal, ini hanya berbagai pencarian. Membaca keyboard benar-benar mudah. Tapi kita harus berhati-hati dengan mendapatkan dan unacquiring yang perangkat, yang dapat membuat kontroler masukan kami kerusakan. Kadang-kadang, terutama pada beberapa tingkat kooperatif mode, kita bisa kehilangan kontak dengan keyboard sesaat. Ini disebut unacquiring perangkat. Yang paling alasan populer untuk ini adalah bahwa aplikasi kita pindah ke latar belakang, sehingga kehilangan akses keyboard mendukung aplikasi lain, yang sekarang di latar depan. Beberapa acara lain mungkin membuat kita kehilangan jejak perangkat kami juga. Jika ini terjadi, kita akan menemukan dalam panggilan GetDeviceState berikutnya, yang akan gagal. Kami kemudian harus reacquire keyboard sehingga kami dapat terus query negaranya. Hal ini dicapai sebagai berikut:
Diks BYTE [256]; / / keyboard DirectInput penyangga negara
ZeroMemory (diks, sizeof (diks));
hr = g_pKeyboard-> GetDeviceState (sizeof (diks), diks);
if (FAILED (jam))
 {
 hr = g_pKeyboard-> Acquire ();

 sementara (hr == DIERR_INPUTLOST | | hr == DIERR_OTHERAPPHASPRIO)
 hr = g_pKeyboard-> Acquire ();
 }

Perhatikan bagaimana kita mendeteksi kesalahan dan terus menelepon Memperoleh sampai kita memperoleh kembali akses ke perangkat. Setelah kami selesai dengan aplikasi kita, saatnya untuk melepaskan semua objek DirectInput damai. Melepaskan keyboard adalah proses dua langkah. Pertama, kita unacquire perangkat, kemudian lepaskan struktur datanya. Kedua, kita harus menghapus obyek DirectInput utama. Secara keseluruhan, urutan kehancuran dicapai dengan menggunakan kode berikut:
if (g_pKeyboard) g_pKeyboard-> Unacquire ();
SAFE_RELEASE (g_pKeyboard);
SAFE_RELEASE (g_pDI);

Perhatikan bahwa kita menggunakan macro SAFE_RELEASE disediakan dengan DirectX untuk memastikan bahwa semua struktur data dan memori yang dialokasikan akan dihapus.


Mouse
            Sejak awal mereka pada akhir 1960-an sebagai perangkat input CAD, tikus telah disesuaikan untuk banyak kegunaan termasuk game komputer. Mereka sangat populer di game PC, tapi game konsol biasanya tidak mendukung mereka. Tidak seperti keyboard atau joystick, mouse tidak hanya menghasilkan tombol atau tombol yang ditekan, tapi 2D posisi juga. Ini menyediakan pilihan yang lebih banyak masukan pada biaya kurva belajar yang lebih tinggi untuk pemain.
            Tikus dapat digunakan dalam berbagai skenario, dari unit memetik dalam judul strategi real-time untuk populer mouselook ditemukan di sebagian besar penembak orang pertama. Dalam semua kasus, pengoperasian mouse dapat dibagi menjadi transmisi informasi posisional (berkat sensor tikus internal) dan mengirim tekan tombol dan pesan rilis. Mari kita periksa bagaimana mouse beroperasi di bawah DirectInput. Kode sumber ini sangat mirip dengan keyboard meminta karena DirectInput memperlakukan semua perangkat yang sama. Hal ini menguntungkan bagi programmer karena rincian paling dalam yang tersembunyi. Mari kita asumsikan kita memiliki objek DirectInput utama dan berjalan, dan mulai dengan penciptaan perangkat lulus:
LPDIRECTINPUTDEVICE g_pMouse;
HRESULT jam;
hr = g_pDI-> CreateDevice (GUID_SysMouse, & g_pMouse, NULL);

Seperti yang Anda lihat, sangat mirip dengan meminta keyboard, satu-satunya perbedaan menjadi GUID kami lulus untuk meminta perangkat yang diinginkan. Kemudian, format data diatur sebagai berikut:
hr = g_pMouse-> SetDataFormat (& c_dfDIMouse);

Dalam hal ini, parameter c_dfDIMouse memberitahu DirectInput kita akan melewati struktur DIMOUSESTATE ke IDirectInputDevice :: GetDeviceState. Struktur ini memiliki tanda tangan berikut:
typedef struct {DIMOUSESTATE
 LONG lX;
 LY PANJANG;
 LONG lZ;
 RgbButtons BYTE [4];
} DIMOUSESTATE, * LPDIMOUSESTATE;

Struktur ini mengembalikan X dan posisi Y, dan Z sumbu opsional, yang biasanya ditugaskan untuk roda. Kemudian, tombol array bekerja seperti array Keyboard. Tombol ditekan jika bit high-order diatur. A varian dari struktur ini adalah DIMOUSESTATE2, ditetapkan oleh c_dfDIMouse2 parameter. Satu-satunya perbedaan adalah bahwa yang terakhir mendukung delapan tombol bukannya empat didukung oleh DIMOUSESTATE. Ini terutama berguna dalam tikus tertentu yang digunakan untuk sistem CAD, misalnya. Setelah format data telah ditetapkan, kita perlu mengatur level kooperatif. Tidak ada kejutan di sini, karena kode tersebut persis sama dengan versi Keyboard:
hr = g_pMouse-> SetCooperativeLevel (hWnd,
 DISCL_EXCLUSIVE | DISCL_FOREGROUND);

Selain itu, kita perlu untuk mendapatkan siap menggunakan perangkat dengan baris:
g_pMouse-> Acquire ();

Berikut adalah kode sumber penuh di review:
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 ini dicapai dengan panggilan GetDeviceState, yang akan mengembalikan LPDIMOUSESTATE struktur. Kode sumber akan:
DIMOUSESTATE dims; / / DirectInput ketatanegaraan tikus
ZeroMemory (& meredup, sizeof (meredup));

hr = g_pMouse-> GetDeviceState (sizeof (DIMOUSESTATE), & meredup);
if (FAILED (jam))
{
 hr = g_pMouse-> Acquire ();
sementara
(hr == DIERR_INPUTLOST | | hr == DIERR_OTHERAPPHASPRIO | |
hr == DIERR_NOTACQUIRED)
hr = g_pMouse-> Acquire ();
 }

Perhatikan bagaimana saya telah menambahkan kode pencegahan unacquiring untuk menghindari kehilangan jejak mouse kita karena kejadian tak terduga. Selain itu, kode ini sangat mirip dengan membaca keyboard. Untuk mengakses mouse atribut, 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 orang yang tepat, dan tombol 2 adalah ditugaskan untuk tombol tengah (jika tersedia). Mengenai posisi, ingat bahwa mouse adalah relatif perangkat penunjuk. Ketika pertama kali diperoleh, posisi mouse adalah ulang ke (0,0). Kemudian, masing-masing membaca baru akan kembali perpindahan dari yang terakhir. Jadi, jika kita menggerakkan mouse vertikal, kita akan melihat perpindahan dalam Y arah. Tetapi ketika kita menghentikan gerakan, nilai tikus membaca akan kembali ke (0,0). Ingat, mouse tidak bekerja dengan posisi melainkan bekerja dengan perpindahan. Terakhir, but not least, mouse biasanya dikonfigurasi poin X begitu negatif ke kiri, dan titik Y positif menjauh dari tubuh kita seperti kita duduk di meja.
Selain itu, ingatlah untuk melepaskan mouse segera setelah Anda selesai menggunakannya. Kode ini lagi sangat mirip dengan kode rilis Keyboard:
if (g_pMouse) g_pMouse-> Unacquire ();
SAFE_RELEASE (g_pMouse);
SAFE_RELEASE (g_pDI);
Mouselook

Sebuah penggunaan populer dari mouse adalah untuk menerapkan mouselook klasik yang digunakan dalam banyak penembak orang pertama. Itu mouselook mudah untuk kode setelah Anda memahami bagaimana mouse beroperasi. Yang harus kita lakukan adalah menggunakan kunci mengubah posisi kami, dan menggunakan mouse untuk reorientasi sudut pandang kita. Saya akan menjelaskan efek sepenuhnya, sehingga kita bisa menggabungkan apa yang telah kita pelajari tentang keyboard dan mouse. Permainan harus memiliki setidaknya empat derajat kebebasan. Kita harus memiliki posisi yang terdiri dari X dan Z nilai, dan kemudian yaw dan sudut lapangan. Nilai Y sering ditambahkan ke dalam campuran sehingga kita dapat mendaki berbeda ketinggian, tapi gulungan umumnya tidak diperlukan. Kami akan menggunakan pemetaan berikut:

● Tikus: Mouselook
● Panah kiri: memberondong kiri
● Panah kanan: memberondong tepat
● Panah: Maju
● Panah bawah: Mundur

Mari kita fokus pertama pada keyboard dan melupakan orientasi kedua. Dengan asumsi standar DirectInput Keyboard, kita akan membutuhkan kode berikut untuk menerapkan perilaku yang diinginkan:
int memberondong = (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 elegan dikemas kontrol kursor. Dengan mengurangi arah yang berlawanan, kita mendapatkan dua nomor, memberondong dan fwd, dalam kisaran -1 .. 1. Jumlah ini kemudian digunakan untuk menggerakkan posisi kami memperbarui rutin:
pos.x + = fwd * FWDSPEED * berlalu * cos (yaw) +
memberondong * STRAFESPEED * berlalu * cos (yaw 3,1416 / 2);
pos.z + = fwd * FWDSPEED * berlalu * sin (yaw) +
memberondong * STRAFESPEED * berlalu * sin (yaw 3,1416 / 2);

The fwd dan memberondong variabel mengontrol bagaimana masing-masing anggota dikalikan dengan -1-, 0, atau 1-untuk melakukan yang diinginkan efek. Sekarang, mari kita merawat lapangan dan yaw melalui mouse:

yaw + = YAWSPEED * berlalu * dims.lX;
lapangan + = PITCHSPEED * berlalu * dims.lY;

Jadi sekarang kita memiliki pos.x baru kami, pos.z, yaw, dan struktur pemain lapangan diperbarui. Jelas, kita perlu menjaga dua perangkat hidup, dan kita perlu mendefinisikan semua konstanta dalam topi untuk mengatur kecepatan yang diinginkan. Perhatikan bagaimana setiap konstan dikalikan dengan faktor waktu berlalu, yang menyimpan waktu yang dibutuhkan untuk membuat frame terakhir. Dengan cara ini kita memastikan perangkat-independen kinerja. Untuk kelengkapan, di sini adalah source code yang diperlukan untuk menghitung semua parameter kamera spesifik siap untuk dipasang ke OpenGL atau DirectX pipa:
Titik campos (pos.x, pos.y, pos.z);
Titik camlookat (pos.x + cos (yaw) * cos (pitch), pos.y + sin (pitch),
pos.z + sin (yaw) * cos (pitch));

The lookat perhitungan koordinat hanya pemetaan bola menggunakan pitch dan yaw. Tergantung pada bagaimana kapak Anda ditata, tanda mungkin berubah atau Anda mungkin perlu menambahkan sudut konstan seperti Pi ke lapangan nilai-nilai.

Minggu, 28 April 2013

Game Engine


Definisi Game Engine
Game engine adalah perangkat lunak yang dirancang untuk membuat dan mengembangkan video game. Fungsi utama yang diberikan oleh game engine meliputi rendering untuk 2D atau 3D graphic, collision detection, sound, scripting, animasi, artificial intelligence, networking, memory management, threading dan scene graph. Game engines memberikan perangkat untuk visual development dengan tambahan komponen perangkat lunak yang dapat dipakai berulang kali. Perangkat ini pada umumnya memberikan integrated development environment yang dapat mempermudah, serta mempercepat pengembangan game.Game engine juga sering disebut juga “Game Middleware”. Game Middleware adalah software yang didalamnya sudah terdapat elemen-elemen yang dibutuhkan oleh seorang game developer, kebanyakan dari game middleware memberikan fasilitas guna menunjang pengembangan game dengan mudah seperti graphics, sound dan Artificial intelligence.

Beberapa elemen yang ada di dalam game engine adalah :
Tools/Data
Dalam pengembangan game, dibutuhkan data yang tidak semudah menuliskan text files. Dalam pengembangan game, paling tidak dibutuhkan beberapa tools seperti 3d model editor, level editor dan graphics programs. Bahkan jika diperlukan, seringkali kita mengembangkan game engine tersebut dengan menambahkan beberapa code dan fitur yang diperlukan.

System
System sendiri adalah bagian dari game engine yang berfungsi untuk melakukan komunikasi dengan hardware yang berada di dalam mesin. Jika game engine sudah dibuat dengan baik maka system ini adalah satu-satunya bagian yang membutuhkan perubahan yang cukup banyak apabila dilakukan implementasi pada platform yang berbeda. Di dalam system sendiri terdapat beberapa sub system yaitu graphics, input, sound, timer, configuration. System sendiri bertanggung jawab untuk melakukan inisialisasi, update dan mematikan sub system yang terdapat di dalamnya.

Console
Dengan menambahkan console, kita dapat merubah setting game dan setting game engine di dalam game tanpa perlu melakukan restart pada game tersebut. Console sendiri lebih sering digunakan dalam proses debugging. Apabila game engine tersebut mengalami error kita tinggal mengoutputkan error message tersebut ke dalam console tanpa harus melakukan restart. Console sendiri dapat dihidupkan dan dimatikan sesuai keinginan.

Support
Support adalah bagian yang paling sering digunakan oleh system di dalam game engine. Support sendiri berisi rumus-rumus matematika yang biasa digunakan, vector, matrix, memory manager, file loader. Merupakan dasar dari game engine dan hampir digunakan semua projek game engine.

Renderer/Engine Core
Pada game engine, engine core / renderer terdiri dari beberapa sub yaitu visibility, Collision Detection dan Response, Camera, Static Geometry, Dynamic Geometry, Particle Systems, Billboarding, Meshes, Skybox, Lighting, Fogging, Vertex Shading, dan Output.

Game Interface
Game interface sendiri merupakan layer diantara game engine dan game itu sendiri. Berfungsi sebagai control yang bertujuan untuk memberikan interface apabila di dalam game engine tersebut terdapat fungsi fungsi yang bersifat dinamis sehingga memudahkan untuk mengembangkan game tersebut.

The Game
Merupakan inti dari penggunaan game engine sendiri, sehingga terserah kita bagaimana mengembangkan game tersebut.
Saat sekarang ini sudah sangat banyak game engine yang hadir, dan sangat maju. Para pembuat game engine kini berlomba-lomba untuk menciptakan game engine dengan tampilan yang menarik agar menciptakan suasana permainan yang nyaman atau enak untuk dilihat dan dimainkan dalam PC ataupun Console. Dengan tampilan atau graphic yang menarik yang kini semakin mendekati realitas dalam segi fisik para tokoh serta gameplay-nya, akan membuat para gamers semakin antusias untuk memainkan game tersebut.

Konsep dari game engine sebenernya cukup gampang, yaitu bahan dasar yang diperlukan sebuah game untuk menjalankan tugasnya, merender pixel demi pixel, menghitung physiscs, memperkirakan input tombol, dan lain hal, yang memungkinkan developer kreatif dapat membuat sebuah game dengan engine yang sama menjadi unik satu sama lain. Di analogikan sebagai sebuah mobil, game engine sudah merupakan bagian mobil, sekitar 50% jadi. Mesin dan rangkaian sistem pengapian, sampai pembuangan. Kurang body dan aksesoris.
Sebuah game engine memungkinkan penggunaan kembali komponen komponen yang dapat mempercepat hadirnya game menjadi nyata di layar monitor mu. Beberapa diantara nya yang termasuk dengan itu adalah deteksi tubrukan, tampilan grafis, setting dalam game, artificial intelligence dan lain lain. Semua komponen tadi disatukan dalam satu pake game engine. Artist dan Developer, dapat menambahkan pustaka texture dan model sendiri untuk dijadikan tokoh utama atau setting dunia dalam sebuah engine. Sekali lagi dalam analogi game, model dan texture dalam game engine bisa dibilang sebagai body dan aksesoris mobil.
Sebuah game engine dibagi lagi menjadi dua bagian besar. Yaitu API dan SDK. API ( Applicaiton Programming Interfaces ) adalah bagian operating system, services dan libraries yang diperlukan untuk memanfaatkan beberapa feature yang diperlukan. Dalam hal ini contohnya DirectX. Sementara SDK adalah kumpulan dari libraries dan API yang sudah siap digunakan untuk memodifikasi program yang menggunakan operating system dan services yang sama. Biasanya, game engine menyertakan keduanya.
Contohnya dalam Unreal Engine, menyiapkan antarmuka baku bagi programmer untuk menciptakan game nya dengan mudah, melalui scripting engine, yang disebut UnrealScript, dan juga libraries, yang berisi model standar dan texture standar dan juga world editor yang disebut sebagai UnrealED.

Jenis-jenis Game Engine
Roll-your-own game engine.
Banyak perusahaan game kecil seperti publisher indie biasanya menggunakan engine nya sendiri. Ini berarti mereka menggunakan API seperti XNA, DirectX atau OpenGL untuk membuat game engine mereka sendiri. Disisi lain, mereka kadang menggunakan libraries komersil atau malah open source. Terkadang mereka malah membuat semuanya dari nol.
Biasanya, game engine tipe ini lebih disukai karena selain kemungkinan besar tersedia gratis, juga memperbolehkan mereka, para developer, lebih fleksibel dalam mengintegrasikan komponen yang diinginkan untuk dibentuk sebagai game engine mereka sendiri. Kelemahannya, banyak engine yang dibuat dengan cara semacam ini malah menyerang balik developernya. Menara Games Studio membutuhkan satu tahun penuh untuk menyempurnakan game engine nya, hanya untuk di tulis ulang semuanya dalam beberapa hari penggunaan karena adanya bug kecil yang sangat mengganggu.

Mostly-ready game engines.
Engine engine ini biasanya sudah menyediakan semuanya begitu diberikan pada developer / programmer. Semuanya termasuk contoh GUI, physiscs, libraries model dan texture, dan segalanya. Banyak dari mereka yang sudah benar benar matang, sehingga dapat langsung digunakan untuk scripting sejak hari pertama.
Biasanya game engine semacam ini memiliki batasan batasan, terutama jika dibandingkan dengan game engine sebelumnya yang benar benar terbuka lebar. Hal ini ditujukan agar tidak terjadi terlalu banyak error yang mungkin terjadi setelah sebuah game yang menggunakan engine ini dirilis, dan masih memungkinkan game engine nya itu sendiri untuk mengoptimalkan kinerja game nya. Banyak dari game engine seperti ini, Unreal Engine, Source Engine, id Tech Engine dan sebagainya, yang sudah sangat optimal dibandingkan jika harus membuat dari awal. Hal ini dengan serta merta menyingkat sangat banyak waktu dan jelas, biaya dari para Developer game.

Point-and-click engines.
Engine untuk point-and-click merupakan engine yang sangat amat dibatasi, tapi dibuat sangat user friendly. Kamu bahkan bisa mulai membuat game mu sendiri menggunakan engine seperti GameMaker, Torque Game Builder dan Unity3D. Dengan sedikit memanfaatkan coding, kamu sudah bisa merilis game point-and-click yang kamu banget.
Kekurangannya terletak pada terbatasnya jenis interaksi yang bisa dilakukan, dan biasanya hal ini mencakup semuanya, mulai dari grafis, hingga tata suara. Tapi bukan berarti game engine jenis ini nggak berguna, bagi developer cerdas dan berdaya kreativitas tinggi, game engine bapuk seperti ini bisa dirubah menjadi sebuah game menyenangkan, seperti Flow. Game engine seperti ini memang ditujukan bagi developer yang ingin menyingkat waktu pemrogramman, dan secepatnya merilis game game mereka.

Beberapa contoh game engine
RealmForge
Merupakan free dan open source game engine untuk Microsoft .Net Framework dan dikhususkan pada visual3D Game Engine, merupakan cross platform game engine untuk .NET 2.0 dan Microsoft XNA.
RealmForge dibangun diatas AXIOM 3D rendering engine. Di tulis dalam bahasa C# keseluruhan. Dibangun untuk pembuatan game berbasis .NET.

Truevision3D
Merupakan game engine 3D yang dibangun dengan menggunakan visual basic 6 dan C++ dengan menggunakan Microsoft Directx API. Mulai versi 6.5, engine ini menggunakan direct 9 dan shader support, serta ditulis ulang menggunakan C++. Sampai perkembangan terbaru, belum ada wacana untuk mengembangkannya untuk mendukung penggunaan directx9 serta Microsoft XNA.

OGRE
OGRE (Object-Oriented Graphics Rendering Engine) merupakan engine yang mendukung 3D Graphic. Merupakan game engine yang fleksibel dalam melakukan 3D Rendering, ditulis dalam bahasa C++ sehingga memudahkan pengembang untuk membangun game yang mendukung 3D Graphics.

Sumber :
http://www.gamexeon.com

Sabtu, 09 Maret 2013

Komponen Basis Data



·         Data
Baik data terpdau maupun berbagi data (shared) yang tersimpan dan di pakai secara bersama.

·         Hardware
Perangkat keras berupa komputer dan komponen lainnya yang digunakan untuk melakukan pemrosesan, pengelolaan dan penyimpanan basis data.

·         Software
Perangkat lunak yang berguna sebagai perantara antara pemakai dengan data fisik. Perangkat lunak tersebut berupa sistem operasi yang dijadikan dasar untuk program lain,  DBMS (Database Management System) yang merupakan perangkat lunak basis data dan berbagai program aplikasi tambahan yang dibutuhkan.

·         User
Pemakai dari sebuah komputer dan dapat diklasifikasikan menjadi 3, yaitu pemrogram aplikasi, administrator basis data, dan pengguna akhir. Ketiga kategori tersebut saling terintegrasi.

Istilah - Istilah Dasar Basis Data


·         Entitas
Sekumpulan objek yang mempunyai karakteristik yang sama dan dapat dibedakan dari lainnya yang dapat diwujudkan dalai basis data. Contoh : Nasabah, Mahasiswa, Pegawai, Mobil

·         Enterprise
Suatu bentuk organisasi seperti: bank, universitas, rumah sakit, dan pabrik. Data yang disimpan dalam basis data merupakan data operasional dari suatu enterprise. Contoh data operasional : data keuangan dan data mahasiswa

·         Atribut ( Elemen Data )
Deskripsi data yang dapat mengindetifikasi entitas. Contoh : Entitas Mahasiswa atributnya terdiri dari NPM, Nama, dan Alamat.

·         Nilai Data ( Data Value )
Isi data / informasi yang tercakup dalam setiap attribut (elemen data). Contoh Atribut Nama Mahasiswa dapat berisi Nilai Data : Lukman, Anton.

·         Record Data
Kumpulan dari isi attribut yang saling berhubungan.
Contoh : kumpulan atribut NPM dan nama dari Entitas Mahasiswa berisikan "54410073", "Lukman”.

·         File
Kumpulan record yang menggambarkan entitas.

·         Kunci Elemen Data ( Key Data Element )
Tanda pengenal yang bersifat unik yang digunakan untuk menemukan record pada waktu akses. Adapun jenis-jenis key sebagai berikut :
·         Primary key        : Field yang mengidentifikasi sebuah record dalam file dan bersifat unik.
·         Secondary key   : Field yang mengidentifikasi sebuah record dalam file dan tidak bersifat unik.
·         Candidate key    :  Field yang bisa di pilih menjadi primary key.
·         Alternate key      :  Candidate key yang tidak di pilih sebagai primary key
·         Composite key   :  Primary key yang di benttuk dari beberapa field.
·         Foreign key        : Field yang bukan key pada file utama melainkan key pada file yang lain.

Pengantar Basis Data



Ruang Lingkup Basis Data
Basis data banyak digunakan dalam bidang bisnis untuk memudahkan penggunanya memperoleh informasi/mengambil sebuah keputusan dari sekian banyak data yang ada.penggunaan basis data dapat mengefisienkan waktu dari si pengguna sehingga data yg ingin di peroleh dapat di cari dengan cepat. Basis data (bahasa Inggris: database), atau sering pula dieja basisdata, adalah kumpulan informasi yang disimpan di dalam komputer secara sistematik sehingga dapat diperiksa menggunakan suatu program komputer untuk memperoleh informasi dari basis data tersebut.kegiatan pengolahan dalam basis data meliputi pemasukan data (input),mengolah data yang sudah dimasukan sehingga menjadi sebuah informasi yang dibutuhkan (proses),dan menyajikan hasil pemrosesan data tersebut sebagai informasi yang dibutuhkan si pengguna (output).

Perbedaan Sistem File Tradisional dengan Sistem File Basis Data dan Keterbatasan
Ketika awal penerapan sistem komputer, masing-masing rekaman disimpan pada file yang masing-masing terpisah. Sistem ini dinamakan sistem pemrosesan file tradisional. sistem ini masih didasarkan pada kebutuhan individu pengguna bukan individu sejmlah pengguna. Setiap ada kebutuhan baru dari seorang pengguna, kebutuhan tersebut segera diterjemahkan ke program komputer. Hasilnya, setiap program aplikasi melukiskan data tersendiri. Sementara ada kemungkinan data yang sama juga terdapat pada berkas-berkas lain.Sebelumnya, sistem yang digunakan untuk mengatasi semua permasalahan bisnis, menggunakan pengelolaan data secara tradisional dengan cara menyimpan record-record pada file-file yang terpisah yang disebut juga sistem pemrosesan file.

Berikut beberapa kekurangan sistem file tradisional :
1.      Timbulnya data rangkap (redundancy) atau ketidak konsistensan data.
Hal terjadi karena setiap 1 program aplikasi hanya diperuntukan bagi satu file sehingga file akan ditulis ulang terus menerus.misalnya pada sebuah perusahaan ada bagian (1) Pembukuan, (2) Produksi, (3) Personalia, dan (4) Pemasaran. Di keempat bagian itu diletakkan masing-masing sebuah komputer PC yang belum dihubungkan satu dengan lainnya, maka, mau tidak mau di setiap komputer tersebut harus memiliki data PEGAWAI.Akibatnya, keempat komputer tersebut sama-sama memiliki data PEGAWAI yang sebetulnya isinya sama.selain itu dapat menimbulkan inconsistency data atau ketidak konsistensi data.misalnya dari file PEGAWAI ada perubahan dibagian produksi perubahan tersebut hanya berubah pada satu file pegawai saja hal ini dapat mengakibatkan kesalahan dalam laporan file PEGAWAI.selain pemborosan di segala bidang kedua kekurangan ini dapat mengahambat kelancaran sistem dari suatu perusahaan.

2.      Kesukaran mengakses data.
Munculnya permintaan permintaan baru yang tidak diantisipasi dalam pembuatan program aplikasi,sehingga tidak memungkinkan untuk pengambilan data

3.      Data terisolir
Karena data tersebar dlam berbgai dile dan file-file mungkin dalam format yang berbeda akan sulit mengambil program aplikasi baruuntuk mengambil data yang sesuai.

4.      Masalah pengamanan
Tidak semua pemakai diperbolehkan mengakses seluruh data.jadi setiap bagian hanya mengakases file dari bagian tersebut.tetapi sejak program-program aplikasi ditambahkan secara ad-hoc maka sulit melaksanakan pengamanan seperti yang dihapkan.

5.      Data dependence
Apabila terjadi perubaan atau kesalahan pada program aplikasi maka pemakai tidak dapat mengakses data.

Intinya dari keempat kelemahan terakhir,sistem file tradisional sangat bergantung pada program aplikasi yang di gunakan (program oriented) dan perubahan data harus dilakukan secara menyeluruh.sistem file.contoh riilnya adalahdi Bank, bila sebuah bank belum menerapkan sistem basis data, maka kita tidak dapat menabung di cabang tertentu dan mengambil di cabang lainnya (sering diistilahkan dengan sistem online untuk menggambarkan penggunaan basis data).
Seiring dengan berjalannya waktu, sistem pemrosesan file ditinggalkan karena masih bersifat manual yang kemudian dikembangkan sistem pemrosesan dengan pendekatan basis data.




Pada sistem ini record-record data disimpan pada satu tempat yakni basis data dan diantara program aplikasi maupun pemakai terdapat DBMS (Database Management System).yang akan memproses data tersebut menjadi informasi yang diburuhkan. Dalam manajemen ini dapat memungkinkan data diakses secara bersamaan oleh banyak user. Fasilitas yang dimiliki oleh manajemen pun sudah semakin banyak yaitu antara lain fasilitas pemanipulasi data, recovery data, control konkurensi data, keamanan data. Fasilitas ini juga didukung dengan fasilitas komunikasi data karena manajemen ini sudah terhubung dengan suatu jaringan.Kini manajemen basis data berubah menjadi manajemen basis data tingkat lanjut dikarenakan perkembangan dunia usaha yang semakin meningkat dan ditunjang dengan perkembangan komunikasi yang mempermudah organisasi atau perusahaan untuk mengakses data. Manajemen basis data tingkat lanjut juga memfasilitasi data warehousing dan fasilitas basis data berbasis web yang juga merupakan salah satu strategi organisasi dalam meningkatkan kinerja dan keuntungan organisasi. Bisa kita lihat berdasarkan penjelasan sebelumnya dapat kita simpulkan perbedaan antara file manajemen tradisional dan file manajemen database.

1.3.  Konsep Dasar Basis Data
        Data adalah Representasi fakta dunia nyata yang mewakili suatu objek seperti manusia (pegawai, mahasiswa, pembeli), barang, hewan, peristiwa, konsep, keadaan, dan sebagainya yang direkam dalam bentu angka, huruf, simbol, teks, gambar, bunyi atau kombinasinya.
         Basis Data adalah Sekumpulan data yang terintegrasi yang diorganisasikan dan di simpan dengan minimum redundasi untuk memenuhi kebutuhan para pemakai di dalam suatu organisasi.yang melayani banyak aplikasi secara optimal. Sistem basis data terdiri dari basis data dan DBMS. DBMS (Database Management System) adalah perangkat lunak yang menangani semua pengaksesan ke database.

Sumber : Buku Sistem Basis Data

Teknologi Pengantar Game


Teori game atau permainan adalah suatu cara belajar yang digunakan dalam menganalisa interaksi antara sejumlah pemain maupun perorangan yang menunjukkan strategi-strategi yang rasional. Teori permainan pertama kali ditemukan oleh sekelompok ahli Matematika pada tahun 1944. Teori itu dikemukakan oleh John von Neumann and Oskar Morgenstern yang berisi:

"Permainan terdiri atas sekumpulan peraturan yang membangun situasi bersaing dari dua sampai beberapa orang atau kelompok dengan memilih strategi yang dibangun untuk memaksimalkan kemenangan sendiri atau pun untuk meminimalkan kemenangan lawan. Peraturan-peraturan menentukan kemungkinan tindakan untuk setiap pemain, sejumlah keterangan diterima setiap pemain sebagai kemajuan bermain, dan sejumlah kemenangan atau kekalahan dalam berbagai situasi.” (Theory of Games and Economic Behavior (3d ed. 1953))

Pengertian game menurut Agustinus Nilwan dalam bukunya “Pemrograman Animasi dan Game Profesional” terbitan Elex Media Komputindo, game merupakan permainan komputer yang dibuat dengan teknik dan metode animasi. Jika ingin mendalami pengunaan animasi haruslah memahami pembuatan game. Atau jika ingin membuat game, maka haruslah memahami teknik dan metode animasi, sebab keduanya saling berkaitan.

Permainan komputer (bahasa Inggris: computer game) adalah permainan video yang dimainkan pada komputer pribadi, dan bukan pada konsol permainan, maupun mesin ding-dong. Permainan komputer telah berevolusi dari sistem grafis sederhana sampai menjadi kompleks dan mutakhir. Namun, pasar permainan komputer di Amerika Serikat mulai menurun sejak tahun 1999.

Game komputer dibuat oleh satu atau beberapa pengembang game, biasanya bersama dengan spesialis lainnya (seperti game artists) dan dipublikasikan baik secara sendiri atau melalui penerbit pihak ketiga. Mereka kemudian mendistribusikan pada media fisik seperti DVD dan CD, atau dapat didistribusikan secara bebas melalui internet, software, atau melalui jasa pengiriman online seperti Direct2Drive dan Steam. Game komputer membutuhkan hardware khusus di komputer pengguna untuk bermain, seperti generasi spesifik unit pemrosesan grafik atau koneksi internet untuk bermain online, meskipun persyaratan sistem ini bermacam-macam pada setiap game.

Rating pada Game
Setiap judul game yang bisa dimainkan pada komputer, online, ataupun game seperti mesin ding-dong dan lain-lain tidak semerta-merta boleh dimainkan oleh siapa saja terutama anak-anak. Ada lembaga independen khusus yang menilai apakah layak suatu game dimainkan oleh oleh anak, abg, remaja, dan lain sebagainya. Untuk melihat rate penilaian suatu game video games, dapat dilihat di website www.esrb.com untuk yang valid.

ESRB atau Entertainment Software Rating Board adalah sebuah organisasi mandiri yang menetapkan sebuah regulator seperti menetapkan regulasi pemberian umur dan konten pada sebuah game atau software. Tentu saja regulasi ini memaksa sebuah industri game untuk mengadopsi panduan advertising dan bertanggung jawab untuk prinsip online privacy untuk komputer, video game dan software yang lain di wilayah Amerika Serikat dan Kanada.

ESRB sendiri didirikan pada tahun 1994 oleh Entertainment Software Associaton (ESA) yang sebelumnya bernama Interactive Digital Software Associaton (IDSA). Alasan mengapa didirikannya ESRB dikarenakan munculnya beberapa konten yang memiliki unsur kekerasan atau violence pada game seperti Night Trap, Mortal Kombat, Lethal Enforcers, dan Doom serta beberapa konten kontroversial lainnya seperti unsur seksual pada saat itu.

Mirip dengan sistem rating yang dilakukan di film (Motion Pictures Rating System), ESRB juga memberikan peringkat pada sebuah game yang berdasarkan konten dan kategori yang telah mereka buat. Tujuannya tidak lain adalah untuk membantu para penikmat atau konsumen dalam menentukan konten permainan yang sesuai dengan konsumen itu sendiri. Sistem penilaian tersebut bersifat sukarela, namun karena beberapa retail stores online maupun tidak mempunya peraturan bahwa mereka (retail stores) tidak akan atau tidak mau menjual game tanpa rating atau game yang belum terlebih dahulu mengajukan ratingnya ke ESRB maka mau tidak mau kebanyakan game telah diajukan ke ESRB untuk diberi rating. Hingga tahun 2009 yang lalu telah tercatat 18.000 game dari 350 publisher telah mendapatkan rating dari ESRB, tentu saja masih akan bertambah jumlahnya pada tahun 2010 dan tahun-tahun mendatang.

ESRB sendiri menggunakan simbol-simbol yang menggunakan penggabungan beberapa huruf abjad yang diambil dari huruf depan judul konten yang telah mereka tentukan. Hingga saat ini ESRB setidaknya telah memakai 7 simbol untuk membedakan kategori, simbol-simbolnya sebagai berikut:

EC (Every Childhood):
Seperti namanya, game yang terdaftar di kategori EC ini dianggap cocok atau bisa dimainkan untuk anak-anak antara umur 2-10 tahun. Game tersebut dimungkinkan memang dibuat dan dirancang untuk anak-anak dan biasanya memiliki unsur pendidikan. Biasanya game yang diberikan rating EC ini berdasarkan acara di TV untuk anak-anak. Rating ini mulai berlaku pada tahun 1994.

E (Everyone):
Seperti pada nama ratingnya, game yang mendapatkan rating E ini biasanya adalah game yang dianggap bisa dimainkan oleh semua orang dan segala umur (everyone). Game tersebut biasanya mengandung beberapa unsur fantasi, kartun, dan beberapa unsur kekerasan ringan (mild violence) yang biasanya bisa menghibur semua kalangan. Beberapa game yang telah memiliki rating E ini adalah Mario Bros, The Legend of Zelda, Sonic Adventure, Rayman dan beberapa game olah raga (sports). Rating ini mulai diberlakukan pada tahun 1998.   
E10+ (Everyone 10+):
Meskipun menggunakan kata Everyone, game yang mendapatkan rating E10+ ini biasanya memiliki unsur yang dianggap tidak cocok untuk dimainkan oleh anak-anak dibawah umur 10 tahun. Memang beberapa game masih mengandung unsur fantasi, kartun dan beberapa kekerasan ringan (mild violence) namun beberapa unsur lain seperti memiliki adegan berdarah-darah dan memakai tema sedikit sugestif tentu saja unsur tersebut tidak mungkin dimainkan oleh anak-anak. Beberapa judul game yang mendapatkan rating E10+ yaitu Madagascar, Lego Star Wars, Kingdom Hearts II, Sonic Unleashed dan Spore. Rating ini pertama kali diperkenalkan pada 2 Maret 2005 untuk game Donkey Kong Jungle Beat.

T (Teen):
Game yang mendapatkan rating T adalah game yang cocok untuk dimainkan anak remaja. Remaja kali ini didefinisikan adalah yang telah berumur lebih dari 13 tahun atau kata lain bahwa game tersebut bukan untuk anak dibawah umur 13 tahun (teen). Kali ini batasan-batasan telah mulai terlihat dari sebelumnya, game-game yang mendapatkan rating T ini mengandung unsur kekerasan dan tema sugestif yang agak berat (moderate), menggunakan bahasa yang kasar dalam percakapan, dan adanya konten simulasi yang dianggap agak dewasa lainnya. Game WWE Smackdown vs RAW (video game series), The Sims series, dan Guitar Hero adalah contoh kecil game yang mendapatkan rating T tersebut. Rating Teen mulai diberlakukan pada tahun 1994.

M (Mature):
Rating Mature atau yang ditempat asalnya lebih dikenal dengan rating Mature 17+ ini tentu saja mengarahkan bahwa game yang mendapatkan rating M adalah game yang ditujukan untuk orang dewasa diatas umur 17 tahun (mature). Dalam game itu sudah tentu mengandung unsur kekerasan yang berat, seksualitas, berdarah-darah, dan beberapa unsur yang memperlihatkan penggunaan alkohol, obat-obatan dan bahasa yang kasar. Beberapa penjual / toko pengecer game di wilayah Amerika dan Kanada memiliki kebijakan ketat bahwa seseorang yang berumur dibawah 17 tahun tidak boleh membeli game berating M tanpa persetujuan atau membeli tanpa ditemani orang tuanya. Beberapa game yang mendapatkan rating M seperti Halo series, Dead Space, Dead or Alive series dan Fallout. Rating ini mulai diberlakukan pada tahun 1994.

AO (Adults Only):
Hampir sama dengan rating M yaitu game yang berating AO ini hanya boleh dimainkan oleh yang memiliki usia lebih dari 17 tahun, namun pada rating AO ini lebih ketat lagi yaitu bahwa yang belum berumur 17 tahun atau lebih tidak boleh memiliki game berating AO dengan alasan apapun. Game yang mendapatkan rating AO ini adalah game yang memiliki unsur kekerasan, seksualitas dan pornografi yang sangat ekstrim. Peraturan untuk Rating AO ini lebih diperketat lagi setelah terjadi penolakan  dan pelarangan tegas dari Nintendo, Sony dan Microsoft sebagai produsen alat permainan video game (console) untuk merilis game yang mendapatkan rating AO ini sehingga pembuat game melakukan sedikit penurunan atau mengurangkan atau melunakkan game buatannya dari beberapa unsur diatas agar mendapatkan rating M sehingga game mereka bisa dirilis di console tersebut. Beberapa game yang hampir mendapatkan ratin AO adalah Grand Theft Auto: San Andreas dan Manhunt 2. Rating ini mulai digunakan pada tahun 1994.

RP (Rating Pending):
Jika game mendapatkan rating RP atau Rating Pending berarti game tersebut telah didaftarkan dan sedang menunggu penilaian akhir dari ESRB. Tentu saja game tersebut belum akan rilis sebelum hasil penilaian ESRB telah selesai maka rating RP ini baru hanya muncul pada iklan game tersebut dan baru setelah hasil akhir penilaian telah didapatkan dan game akan dirilis maka rating ini akan diganti dengan rating nilai ESRB.

Macam-macam Game
1.   Fun Games: permainannya seperti skate board, bilyard, catur, puzzle, tetris, golf, Windows Entertainment Pack Games dan semua permainan yang animasinya sedikit dan pembuatannya relatif mudah. Permainan semacam ini terlihat mudah dari segi grafiknya tetapi biasanya sulit dalam algoritma.
2.  
     Arcade Games: semua permainan yang mudah dimengerti, menyenangkan dan grafiknya bagus walau biasanya sederhana. Pengertian mudah dimengerti dan menyenangkan dikarenakan permainan ini hanyalah berkisar pada hal-hal yang disenangi umum seperti pukul memukul, tembak menembak, tusuk menusuk, kejar mengejar dan semua yang mudah dan menyenangkan. Yang termasuk kedalam permainan jenis ini adalah Prince of Persia, Street Fighter, Golden Axe, Grand Prix, Robocop.
3.  
   Strategic Games: biasanya permainan strategi perang atau bisa juga permainan lain tetapi tetap saja memerlukan strategi untuk memenangkannya seperti startegi bisnis dan strategi politik.
4
       Adventure Games: terbagi atas tiga macam yaitu petualangan biasa (Multi Layered Adventur), Dungeon-Underworld Adventure (3D Adventure) dan Roll Playing Game Adventure. Biasanya algoritma untuk membuat game ini adalah sedang-sedang saja sampai sulit. Tapi grafik jenis permainan ini benar-benar sulit. Contoh beberapa permainan jenis ini adalah Space Quest IV, Labyrinth of Word, War II dan Diablo.
5.   
     Simulation Games: dari semua jenis permainan yang ada, masing-masing memiliki tingkat kesulitan dan kemudahannya, jika bukan algoritmanya maka akan mudah dalam hal animasinya, akan tetapi games simulasi bisa disebut sebagai jenis permainan yang paling sulit, baik algoritma pembuatannya maupun animasinya. Permainan jenis ini juga yang paling membuat pusing dibandingkan dengan permainan jenis lainnya. Algoritmanya sangat sulit sebab harus memperhitungkan semua kejadian dalam kondisi sebenarnya. Berbagai efek animasi yang dibuat tidak cukup bermodalkan ahli grafik dan algoritma saja, tetapi sedikitnya harus mengerti persoalan matematika, teknik dan fisika. Contoh permainan jenis ini adalah Stellar7, F-15 Strike Eagle, Flight Simulator 98, F-14 Tomcat, F-16 Falcon, Jet Fighter.

Konsep Pengembangan Game
Komponen Game
·     Narrative: banyak permainan memiliki unsur-unsur naratif yang memberikan konteks untuk sebuah event pada game, membuat aktivitas bermain kurang abstrak dan meningkatkan nilai hiburan, meskipun unsur-unsur naratif yang tidak selalu jelas hadir atau hadir di semua. Tetris adalah contoh permainan tanpa narasi. Perlu dicatat bahwa beberapa narratologists mengklaim bahwa semua permainan memiliki unsur narasi. Beberapa melangkah lebih jauh dan menyatakan bahwa permainan yang pada dasarnya merupakan bentuk naratif. Narrative dalam praktiknya dapat menjadi titik awal bagi pengembangan permainan, atau alternatif yang dapat ditambahkan ke desain yang dimulai sebagai serangkaian mekanika game. Elemen Narrative dari permainan adalah aspek utama dari permainan yang digunakan dalam pemasaran, karena kemudahan yang mereka dapat terkait media non-interaktif.
·   
    Gameplay: istilah yang umum digunakan untuk menggambarkan aspek desain interaktif video game. Gameplay melibatkan interaksi pemain dengan permainan, biasanya untuk tujuan hiburan, pendidikan atau pelatihan.

Interaksi
Interaksi yang dilakukan dalam game adalah ketika user dapat berkomunikasi dengan user lainnya dalam waktu yang bersamaan walau tempat mengakses game tersebut berbeda. Interaksi yang dilakukan bisa saja berupa chatting pada saat bermain, atau kerja sama team dalam game tersebut, contohnya seperti game online Ayodance, Counter-Strike (CS), ataupun Defense of the Ancients (DotA).

Sebuah penelitian mengenai dampak dari game online terhadap kehidupan sosial pemainnya mengemukakan bahwa beberapa game online ternyata dapat mendorong terjadinya interaksi sosial dan cara baru memandang dunia.

Penelitian tersebut dijalankan oleh Constance Steinkuehler dan Dmitri Williams. Steinkuehler adalah professor pendidikan dari University of Wisconsin di Madison dan Williams adalah professor komunikasi verbal dari University of Illinois di Urbana-Champaign. Menurut mereka, game online telah menjadi sebuah media sosial yang dinamakan “Third Places”. Istilah "Third Places" sendiri dikemukakan pertama kali oleh Sosiologis bernama Ray Oldenburg pada tahun 1999 untuk menjelaskan tempat fisik di luar rumah dan tempat kerja yang digunakan orang untuk interaksi sosial secara informal. Rangkuman dari penelitian tersebut diterbitkan pada bulan Agustus ini di Journal of Computer-Mediated Communication dengan judul "Where Everybody Knows Your (Screen) Name: Online Games as 'Third Places.' "

Menurut mereka, selain sebagai tempat untuk interaksi sosial antara orang dengan kegemaran yang sama, game online juga dapat menjadi jembatan komunikasi untuk berbagi pandangan mengenai dunia dari orang yang berbeda pandangan dengan Anda.

AI
Kecerdasan Buatan (bahasa Inggris: Artificial Intelligence atau AI) didefinisikan sebagai kecerdasan yang ditunjukkan oleh suatu entitas buatan. Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin (komputer) agar dapat melakukan pekerjaan seperti yang dapat dilakukan manusia. Bidang yang menggunakan kecerdasan buatan selain  permainan komputer (games) adalah sistem pakar,  logika fuzzy, jaringan syaraf tiruan dan robotika.

Game interaktif ini diupayakan tokoh-tokoh yang berada didalamnya mampu diajak bicara dengan user game tersebut. Selain itu game ini dibuat dengan tampilan 3D untuk menguatkan kesan seolah-olah pemain game benar-benar sedang berbicara dengan tokoh game. "Chatbot", sebuah istilah untuk karakter game yang bisa diajak bicara, akan mengarahkan pemain dalam bebarapa petunjuk agar tercipta pembicaraan yang bersifat dialog seolah-olah berinteraksi dengan seseorang yang berbeda karakter.


Sumber :

Adsense Menu

 
Template by : Boedy Template | copyright@2011 | Design by : Boedy Acoy