4. Mobile Game Developer War 4: Online Camp
Contoh game loop public void run() {
pada J2ME //Inisialisasi variable yang hanya dibuat1x
while (gameIsRun) {
//Berisi fungsi-fungsi yang dipanggil
agar game berjalan
getInput();
update();
draw();
flushGraphics();
try {
Thread.sleep(30);
}catch (InterruptedException ie) {
}
}
}
6. Mobile Game Developer War 4: Online Camp
Definisi
Implementasi game design menjadi
algoritma pemrograman.
7. Mobile Game Developer War 4: Online Camp
Contoh: Minesweeper
• Tampilkan semua kotak tergantung
statusnya
– Tertutup, terbuka kosong, terbuka
berisi, ditandai bendera
• Acak posisi bom
• Hitung nilai petunjuk di setiap kotak
• Jika ada kotak yang dibuka,
tampilkan isinya
– Jika ternyata kosong, buka kotak di
sekitarnya
• Game selesai kalau semua kotak
yang bukan bom sudah terbuka
8. Mobile Game Developer War 4: Online Camp
Contoh: Pong
• Tampilkan skor, paddle, dan bola
• Bola:
– Bola bergerak dengan kecepatan
tertentu
– Bola memantul ke tembok dan paddle
• Gameplay
– Jika bola lewat sisi kanan/kiri, maka
skor untuk pemain di sisi berlawanan
• Input:
– Jika ada input pemain A, gerakkan
paddle A
– Jika ada input pemain B, gerakkan
paddle B
9. Mobile Game Developer War 4: Online Camp
Contoh: Magic Cups
• Acak posisi bola
• Jika pemain memilih gelas
tertentu, buka dan tampilkan
isinya
11. Mobile Game Developer War 4: Online Camp
Game Input
• Menerima input keypad dari pemain public void run() {
1
while(true){
• Memproses aksi yang bersangkutan //System.out.println("Testing dulu
yah...");
private void getInput() getInput();
{
2 flushGraphics();
try {
int keystate = getKeyStates(); Thread.sleep(SLEEP_TIME);
if(keystate == UP_PRESSED){ } catch (InterruptedException e) {
System.out.println("UP"); e.printStackTrace();
}else if (keystate == LEFT_PRESSED){ }
System.out.println("LEFT"); }
}else if (keystate == DOWN_PRESSED){
}
System.out.println("DOWN");
}else if (keystate == RIGHT_PRESSED){
System.out.println("RIGHT");
}
}
Catatan: kemungkinan besar input akan terdeteksi lebih dari satu kali,
karena Update() dipanggil beberapa kali dalam waktu yang singkat.
Error ini akan kita tangani di materi berikutnya.
3
12. Mobile Game Developer War 4: Online Camp
Bedah Game Magic Cups
• Visual:
– Tiga buah gelas (tertutup dan terbuka)
– *untuk praktek pertama kita menggunakan
text saja
• Data penting
– Posisi bola (di balik gelas)
– Pilihan pemain
13. Mobile Game Developer War 4: Online Camp
Magic Cups Logic
public static int SLEEP_TIME = 1000/30;
int posisiBola;
• Init
int pilihanPemain; – Inisialisasi objek penting
Random r;
boolean gameover; • AcakBola
boolean sudahJawab;
– Mengacak variabel
protected MainCanvas() { 1 posisiBola
public void run() {
• PilihGelas
init(); – Meminta pemain memilih
acakBola();
pilihGelas();
gelas
while(!gameover){
getInput();
• CekPilihanPemain
cekPilihanPemain(); – Jika pemain sudah memilih,
flushGraphics();
try {
beri tahu hasilnya
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) { Penting! Jangan lupa
e.printStackTrace(); menambahkan import
} untuk objek Random.
} import javax.microedition.lcdui.game.GameCanvas;
System.out.println("Game over."); import javax.microedition.lcdui.Graphics;
} 2 import java.util.Random; 3
14. Mobile Game Developer War 4: Online Camp
Fungsi-fungsi yang dibuat
• Init
– Inisialisasi objek penting private void init(){
1
• AcakBola r = new Random();
gameover = false;
– Mengacak variabel posisiBola sudahJawab = false;
• PilihGelas }
pilihanPemain = -1;
– Meminta pemain memilih gelas
private void acakBola(){ 2
posisiBola = r.nextInt(3); //0-2
//System.out.println("Posisi bola: "+posisiBola);
}
private void pilihGelas(){
System.out.println("[ ] [ ] [ ]");
3
System.out.println("Tebak bola ada di mana.");
System.out.println("Tekan kiri, atas, atau kanan untuk menebak!");
} 2
15. Mobile Game Developer War 4: Online Camp
Fungsi-fungsi yang dibuat
• CekPilihanPemain
– Jika pemain sudah memilih, beri tahu hasilnya
private void cekPilihanPemain(){
if(sudahJawab) 1
{
//cek jawaban
if(pilihanPemain == posisiBola)
{
System.out.println("Selamat! Tebakan anda benar!");
}else{
System.out.println("Sayang sekali tebakan anda salah! :(");
}
private void gambarHasil() {
gambarHasil();
if(posisiBola==0){ 2
gameover=true; System.out.println("[o] [ ] [ ]");
} System.out.println("Bola ada di kiri");
} }
else if(posisiBola==1){
System.out.println("[ ] [o] [ ]");
System.out.println("Bola ada di tengah");
}
else if(posisiBola==2){
System.out.println("[ ] [ ] [o]");
System.out.println("Bola ada di kanan");
}
}
16. Mobile Game Developer War 4: Online Camp
Fungsi yang diubah
• Update fungsi getInput()
untuk menerima kiri, atas, private void getInput()
{
dan kanan sebagai int keystate = getKeyStates();
if(!sudahJawab){
jawaban if (keystate == LEFT_PRESSED){
//System.out.println("LEFT");
pilihanPemain =0;
sudahJawab=true;
}else if(keystate == UP_PRESSED){
//System.out.println("UP");
pilihanPemain =1;
sudahJawab=true;
}else if (keystate == RIGHT_PRESSED){
//System.out.println("RIGHT");
pilihanPemain =2;
sudahJawab=true;
}
}
}
17. Mobile Game Developer War 4: Online Camp
Hasil
Jawaban salah. Jawaban benar.
Namun game baru berjalan sekali saja.
18. Mobile Game Developer War 4: Online Camp
Buat permainan bisa dimainkan terus
menerus.
19. Mobile Game Developer War 4: Online Camp
Solusi
private void cekPilihanPemain(){
if(sudahJawab) 1
{ public void run() {
//cek jawaban init();
if(pilihanPemain == posisiBola) acakBola();
{ pilihGelas();
System.out.println("Selamat! while(!gameover){
Tebakan anda benar!"); getInput(); resetGame()
}else{ cekPilihanPemain();
System.out.println("Sayang sekali flushGraphics();
tebakan anda salah! :("); try {
} Thread.sleep(SLEEP_TIME);
gambarHasil(); } catch (InterruptedException e) {
//gameover=true; e.printStackTrace();
resetGame(); }
} }
} System.out.println("Game over.");
}
private void resetGame() {
acakBola();
pilihGelas(); Catatan: error pada slide 11 (Game
pilihanPemain=-1; Input) akan masih terjadi, kita akan
sudahJawab=false; perbaiki di Materi berikutnya.
} 2
20. Mobile Game Developer War 4: Online Camp
Catatan: error pada slide 11 (Game
Input) akan masih terjadi, kita akan
perbaiki di Materi berikutnya.
22. Mobile Game Developer War 4: Online Camp
Quest (Tantangan tambahan!)
1. Review sebuah game, dan jelaskan
game logic dari game tersebut (bebas,
kecuali game yang sudah dibahas di
materi ini)!
23. Mobile Game Developer War 4: Online Camp
Cara menyelesaikan Quest
1. Tulis jawaban pada email, atau dokumen
word / open office (jika menggunakan
gambar), dengan format nama file, nama-
materikeberapa.doc
– Contoh: Danang-materi2.doc
2. Kirim email ke:
quest@agateacademy.com
3. Gunakan subject “Quest Online Camp
02”
24. Mobile Game Developer War 4: Online Camp
• Untuk menyelesaikan materi, kunjungi
http://bit.ly/NxI8aZ
• Untuk pertanyaan atau diskusi, bisa
dilakukan via forum:
http://bit.ly/mgdw4forum
Editor's Notes
Game Loop merupakan jantung dari sebuah game. Biasanya Game Loop menangani user input, update game state, menangani AI, memainkan musik dan sound effect, dan menampilkan display game.
Bikin beberapa contoh game loop dan hal yang dilakukan: pong, minesweeper
Contoh game loop yang general
Prosesmemasukkanide game kedalamsebuahmekanikapermainanseringdisebutjuga Game Logic.Dimana game logic inimengaturbagaimanamekanisme game terbentuk. Mulaidaribagaimana char bergerak, melompat, bertemumusuh, highscore, dan lain – lain. Bahkanuntuk game puzzle, game logic lebihfokusterhadap problem solving.Misalnyapada game Sudoku, kitafokuskepadabagaimanamelakukanpengecekanterhadap angka yang kitamasukkankedalamkotak, cekapakahada angka yang samadalamsatukolomataubarisdancekapakahdalamkotak 3x3 ada angka yang samaatautidak.