Splash Screen Ketika user membuka aplikasi, yang pertama kali ditampilkan adalah Splash Screen. Umumnya, Splash Screen untuk aplikasi game menunjukkan judul game, Publisher Company dan Development Team. Namun untuk aplikasi ini hanya akan ditampilkan logo game saja. Main Menu Setelah timer untuk Splash Screen berakhir, program masuk ke menu utama. Di sini, user dapat memilih antara Single Game, Networking Game, Highscore atau Quit Game. Single Game Jika memilih Single Game, user akan langsung dibawa ke dalam permainan di mana terdapat environment dan enemies. Networking Game Networking Game berisi semua yang ada di Single Game, ditambahkan fungsi networking, penghitungan highscore dan Player2. Login Screen Login Screen mengawali Networking Game, di mana user diminta memasukkan Name, untuk kemudian dikirim ke server untuk diproses. Login Menu Jika verifikasi login sukses, user akan masuk ke Login Menu di mana dia dapat memilih untuk membuat Room baru, atau mencari Room yang sudah ada. Jika dia memilih Create New Room, maka dia akan menjadi Master (Room Leader) di Room tersebut dan user lain akan menjadi Guest. Create New Room Pada awal pembuatan Room baru, user (Master) harus menunggu Guest yang ingin me-request untuk bergabung. Jika Master memilih untuk approve, maka Room baru akan tercipta dan kedua user tersebut akan langsung masuk ke dalamnya dan permainan akan dimulai. 32
List Existing Rooms Di bagian ini, user akan disuguhkan beberapa Room yang telah dibuat, dalam bentuk menu. Setelah memilih Room mana yang ingin dimasuki, user tersebut harus menunggu approval dari Master agar dapat masuk ke dalam permainan. Highscore Di bagian ini, client akan meminta data highscore pada server. Server kemudian akan mengirim balik data highscore sehingga dapat dilihat oleh client.
Detail 2: Core Engine Single Game: Core Engine Single Game dimulai dengan Setup Level secara umum. Setup Level Umum ini digunakan untuk semua Core Engine. Setelah melakukan Setup Level secara umum, Single Game kemudian melakukan Setup Level khusus Single Game, yaitu men-setup Player2 menjadi “Not Active”. Tahap ketiga adalah mengupdate sprite Player1 dan Enemies (Enemy1, Enemy2, Enemy3 dan Enemy4) agar dapat digambar dari buffer display untuk pertama kalinya. Tahap terakhir dari Single Game Core Engine adalah melakukan callback. Di dalamnya terdapat proses-proses yang dibutuhkan untuk permainan, yaitu Move Enemy, Update Timer, Update Score, Update Screen dan Wait for Callback Time. Callback dilakukan dalam 1000 ms. Input dari Player ditangani berupa Event Key. Jika Player menekan tombol, maka aplikasi akan memanggil sub-routine Handle Input untuk menentukan apa yang akan dilakukan.
33
Networking Game – Master: Core Engine Networking Game Master memiliki banyak kesamaan dengan Single Game, kecuali dalam dua hal, yaitu Setup Level dan Send Callback Data. Setup Level dalam Networking Master mengaktifkan sprite Player2 dan menginisiasi posisi awalnya (x=11, y=11). Send Callback Data mengirimkan data penting kepada slave secara rutin (callback time). Data yang dikirim adalah posisi enemy (enemyPosX dan enemyPosY) dan timer tersisa. Engine kemudian melakukan Compose Data dan menuliskannya ke dalam socket.
34
Gambar 3. 12 Core Engine - Single dan Master.
35
Gambar 3. 13 Setup Level - General.
36
Core Engine Networking Game (Slave): Networking Game dimulai dari setup level umum dilanjutkan dengan setup level network slave. Setup level network slave dilakukan untuk mengaktifkan sprite Player2 dan menginisiasi posisi awal sprite Player1 dan Player2. Perlu diketahui bahwa posisi awal sprite Player1 dan Player2 berkebalikan dengan mode play network master.
Gambar 3. 14 Core Engine - Slave.
37
Enemy Movement Algorithm Move Enemy menggunakan algoritma random number untuk mencari posisi baru Enemy. Jika posisi baru tersebut merupakan Free Tile, maka proses akan berlanjut ke tahap selanjutnya. Jika tidak, maka program akan kembali men-generate random position sampai mendapatkan posisi di atas Free Tile.
Gambar 3. 15 Enemy Movement Algorithm.
38
Explode Bomb Algorithm Core Engine memproses perhitungan explode bomb. Jumlah maksimum bomb yang diijinkan adalah dua untuk masing-masing pemain. Setiap bomb akan bertahan selama 4000 ms sebelum meledak. BREW tidak memiliki fasilitas multi-threading untuk memproses dua timer secara bersamaan. Untuk itu, sebuah algoritma harus dibuat agar BREW seakan-akan dapat menjalankan dua timer sekaligus, padahal hanya digunakan satu buah timer.
Gambar 3. 16 Algoritma Plant Bomb
39
Segera setelah engine memeriksa bahwa jumlah bomb yang ada masih belum memenuhi batas maksimal, fungsi plant bomb akan dipanggil. Index bomb dihitung dengan me-modulokan footprint bomb dengan nilai 2. Jadi index hanya dapat berupa 0 atau 1 karena hanya dua bomb yang diijinkan. Variable footprint bomb akan terus bertambah selama ada pemanggilan fungsi plant bomb. Semua timer yang berhubungan dengan plant bomb harus di-cancel. Ini harus dilakukan untuk me-reset timer jika sebelumnya telah terpasang bomb sehingga timer telah di-set lebih dahulu. Selanjutnya, variabel bomb yang bersangkutan harus diupdate. Variabel boolean diset menjadi “active”, posisi bomb diset sama dengan posisi player saat ini dan variabel timems diisi dari pengambilan timems sekarang. Untuk mengamankan agar posisi bomb tersebut tidak dapat dilewati player maupun enemy, sel matrix-nya harus di-set menjadi 1 (0 untuk free-tile). Engine kemudian akan memeriksa berapa total bomb yang ada di dalam permainan. Jika total bomb = 0, maka total bomb akan ditambah satu, timer akan diset dengan nilai 4000 ms lalu bomb diledakkan. Jika total bomb tidak sama dengan 0, maka total bomb akan ditambahkan satu, variabel time range akan dihitung dari timems sprite bomb sekarang dikurangi timems sprite bomb sebelumnya. Timer kemudian diset dengan nilai 4000 – TimeRange sebelum meledakkan bomb, lalu dengan nilai TimeRange dan meledakkan bomb selanjutnya.
Gambar 3. 17 Timeline Bomb Plant.
Gambar di atas adalah timeline dari algoritma di atas. Jika plant bomb dilakukan ketika masih ada bomb di dalam permainan, maka timer akan di-cancel dan diset dengan nilai baru. Setelah bomb pertama meledak, timer baru akan diset lagi 40
sebelum meledakkan bomb terakhir. Dengan cara ini maka user akan melihat seakanakan kedua bomb memiliki timer tersendiri, padahal hanya satu timer yang digunakan.
Detail 3: Networking Engine Networking Game Overview Untuk dapat menghubungkan dua aplikasi dalam networking, digunakan interface ISocket dan INetMgr pada BREW[1]. Interface INetMgr digunakan untuk mengatur kanal tempat data akan ditransfer (TCP) dan interface ISocket digunakan untuk pengiriman dan pembacaan data. Networking Game pada dasarnya adalah memasukkan proses handshaking setelah user memasukkan namanya dalam login screen. User akan menemukan room menu di mana ia dapat memilih untuk membuat room baru atau bergabung dengan room yang telah ada. Ketika proses handshaking selesai maka kedua player akan masuk ke dalam gameplay.
41
Gambar 3. 18 Networking Game Overview.
42
Bentuk Paket Data XML merupakan bentuk yang umum dan banyak dikenal aplikasi lain. Namun kekurangannya adalah ukurannya yang besar[5]. Dalam berkomunikasi dengan server dan client yang lain, game ini menggunakan bentuk XML (eXtended Markup Language) agar dapat menjadi bentuk yang umum. Ketika socket dibaca, maka engine akan mem-parsing bentuk XML tersebut sehingga tersisa hanya data yang diinginkan. Ada dua bagian dalam paket data yang dikirim: Paket Utama dan Paket Content.
Bentuk XML Paket Utama adalah sebagai berikut:
43
Gambar 3. 19 Paket Data XML - Header .
44
Bentuk Paket Data Content adalah sebagai berikut:
Gambar 3. 20 Paket Data XML - Content.
45
Proses Handshaking
Gambar 3. 21 Handshaking Master-Server-Slave.
Transfer Data: 1. master membuat room baru; 2. server me-reply bahwa room baru berhasil dibuat; 3. slave me-request room apa yang ada; 4. server me-reply slave; 5. slave memilih room dan mengirim pada server; 6. server meneruskan permintaan tersebut ke master; 7. master menyetujui permintaan slave; 8. slave menerima pesan dari server tentang persetujuan; 9. slave secara otomatis mengkonfirmasi; 10. server mengirimkan ID kepada slave; 11. (a) server memberi notifikasi terakhir kepada master; (b) server memberi notifikasi terakhir kepada slave. 46
Waktu Tunggu: T1: Delay antara master mengirim pesan dan menerima reply server T2: Lama master menunggu adanya user lain yang ingin join T3: Lama master memutuskan untuk accept / reject slave T4: Delay antara accept slave dan notifikasi terakhir dari server W1: Delay antara slave mengirim pesan dan menerima reply server W2: Lama slave memutuskan untuk bergabung dengan room mana W3: Lama slave menunggu persetujuan master W4 dan W5: Lama persetujuan master sampai notifikasi terakhir
Send Data Algorithm – Master Algoritma send data pada master dimulai dari proses menulis socket. Nilai balikannya kemudian akan diperiksa. Jika ERROR, maka Networking Engine akan memberikan notifikasi kesalahan untuk ditampilkan oleh User Interface Engine. Jika status berupa WOULDBLOCK (menandakan bahwa data belum masuk atau proses baca belum selesai), maka proses akan kembali ke penulisan socket. Jika statusnya adalah SUCCEES, maka engine akan melanjutkan ke pembacaan socket (dimulai dengan pembersihan socket). Nilai balikannya akan diperiksa lagi. Sama seperti proses sebelumnya, ERROR akan membuat engine menutup applet. Perbedaannya adalah pada WOULDBLOCK, di mana engine akan membersihkan socket untuk kembali ke proses selanjutnya (sebelum masuk ke send data algorithm. Jika statusnya adalah SUCCEED, maka engine akan mem-persing input dan menerjemahkannya dari bentuk XML. Setelah memproses semua input dari socket, maka socket tersebut akan dibersihkan untuk kembali ke proses selanjutnya.
47
Gambar 3. 22 Send Data Algorithm - Master.
48
Send Data Algorithm – Slave Algoritma send data pada slave memiliki kesamaan di awal dengan send data pada master. Jika penulisan socket berhasil (SUCCESS), maka engine akan membersihkan socket dan mencoba untuk membaca input socket. Status ERROR akan membuat applet menutup. Status WOULDBLOCK akan membuat engine mencoba membaca lagi socket (dimulai dengan membersihkan socket). Status SUCCESS akan membuat engine kembali ke proses pembacaan socket di atas.
Gambar 3. 23 Send Data Algorithm - Slave.
49
Read Data Algorithm – Slave Slave tidak memiliki callback, hanya proses read socket yang dilakukan berulangulang. Proses ini dimulai dari pembersihan memory untuk socket. Engine kemudian mencoba untuk membaca socket. Nilai balikannya kemudian akan diperiksa. Jika statusnya adalah ERROR, maka aplikasi akan menampilkan notifikasi adanya kesalahan lalu menutup dirinya sendiri, menandakan adanya masalah dengan jaringan. Jika statusnya berupa WOULDBLOCK, maka proses pembacaan akan dilakukan lagi (kembali ke tahap pembersihan socket). Jika statusnya adalah SUCCEED, maka engine akan melakukan parsing terhadap input yang masuk. Parsing akan memberikan data header untuk diterjemahkan kemudian dan data content untuk diisi ke struct agar dapat digunakan kemudian.
Gambar 3. 24 Read Data Algorithm - Slave.
50
III.7 Balance Aspek terakhir dari proses perancangan adalah keseimbangan/balance. Bagian ini bertujuan untuk memastikan bahwa pemain akan mendapatkan porsi resource yang seimbang dalam gameplay sehingga memastikan kepuasan maksimal selama bermain. Pengaturan balance dilakukan agar pemain mendapatkan pengalaman yang diinginkan oleh pembuat game[8]. Tujuan akhirnya adalah untuk membuat game tersebut tetap menantang: tidak terlalu susah dan tidak terlalu mudah.
Balance dalam networking mode:
Gambar 3. 25 Konsep Balance.
Poin balance:
setiap pemain mendapat jatah bomb maksimal dua;
ada empat Enemies yang pada mulanya diposisikan pada jarak yang sama dengan masing-masing pemain;
jumlah Fragile sama bagi setiap player;
jika ada enemy yang meledak maka poin bertambah dan enemy akan pindah ke tempat yang random.
51