MGDW4 Online Camp #2 (Game loop, game logic, dan game input)
-
Upload
agate-studio -
Category
Education
-
view
1.168 -
download
1
description
Transcript of MGDW4 Online Camp #2 (Game loop, game logic, dan game input)
Mobile Game Developer War 4: Online Camp
MGDW4 Online Camp #2
Game Loop, Game Logic, dan Game Input
Mobile Game Developer War 4: Online Camp
Definisi
Potongan kode utama yang dijalankan terus menerus.
Mobile Game Developer War 4: Online Camp
Contoh Game Loop sederhana
Mobile Game Developer War 4: Online Camp
Contoh game loop pada J2ME
public void run() {
//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) {
}
}
}
Mobile Game Developer War 4: Online Camp
Game Logic
Mobile Game Developer War 4: Online Camp
Definisi
Implementasi game design menjadi algoritma pemrograman.
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
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
Mobile Game Developer War 4: Online Camp
Contoh: Magic Cups• Acak posisi bola• Jika pemain memilih gelas
tertentu, buka dan tampilkan isinya
Mobile Game Developer War 4: Online Camp
WAKTUNYA PRAKTEK!
Mobile Game Developer War 4: Online Camp
Game Input• Menerima input keypad dari pemain• Memproses aksi yang bersangkutan
public void run() { while(true){ //System.out.println("Testing dulu yah..."); getInput(); flushGraphics(); try { Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } }
}
private void getInput(){ int keystate = getKeyStates(); if(keystate == UP_PRESSED){ System.out.println("UP"); }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"); }}
1
2
3
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.
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
Mobile Game Developer War 4: Online Camp
Magic Cups Logic• Init
– Inisialisasi objek penting
• AcakBola– Mengacak variabel posisiBola
• PilihGelas– Meminta pemain memilih
gelas
• CekPilihanPemain– Jika pemain sudah memilih,
beri tahu hasilnya
public static int SLEEP_TIME = 1000/30;int posisiBola;int pilihanPemain;Random r; boolean gameover;boolean sudahJawab;
protected MainCanvas() { 1
public void run() { init(); acakBola(); pilihGelas(); while(!gameover){ getInput(); cekPilihanPemain(); flushGraphics(); try { Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Game over.");} 2
Penting! Jangan lupa menambahkan import untuk objek Random.
import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.Graphics;import java.util.Random; 3
Mobile Game Developer War 4: Online Camp
Fungsi-fungsi yang dibuat• Init
– Inisialisasi objek penting
• AcakBola– Mengacak variabel posisiBola
• PilihGelas– Meminta pemain memilih gelas
private void init(){ r = new Random(); gameover = false; sudahJawab = false; pilihanPemain = -1;}
1
2
private void pilihGelas(){ System.out.println("[ ] [ ] [ ]"); System.out.println("Tebak bola ada di mana."); System.out.println("Tekan kiri, atas, atau kanan untuk menebak!"); }
private void acakBola(){ posisiBola = r.nextInt(3); //0-2 //System.out.println("Posisi bola: "+posisiBola);}
2
3
Mobile Game Developer War 4: Online Camp
Fungsi-fungsi yang dibuat• CekPilihanPemain
– Jika pemain sudah memilih, beri tahu hasilnyaprivate void cekPilihanPemain(){ if(sudahJawab) { //cek jawaban if(pilihanPemain == posisiBola) { System.out.println("Selamat! Tebakan anda benar!"); }else{ System.out.println("Sayang sekali tebakan anda salah! :("); } gambarHasil(); gameover=true; }}
1
private void gambarHasil() { if(posisiBola==0){ 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"); }}
2
Mobile Game Developer War 4: Online Camp
Fungsi yang diubah• Update fungsi getInput()
untuk menerima kiri, atas, dan kanan sebagai jawaban
private void getInput(){ int keystate = getKeyStates(); if(!sudahJawab){ 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; } } }
Mobile Game Developer War 4: Online Camp
Hasil
Namun game baru berjalan sekali saja.
Jawaban salah. Jawaban benar.
Mobile Game Developer War 4: Online Camp
Buat permainan bisa dimainkan terus menerus.
Mobile Game Developer War 4: Online Camp
Solusiprivate void cekPilihanPemain(){ if(sudahJawab) { //cek jawaban if(pilihanPemain == posisiBola) { System.out.println("Selamat! Tebakan anda benar!"); }else{ System.out.println("Sayang sekali tebakan anda salah! :("); } gambarHasil(); //gameover=true; resetGame(); }}
private void resetGame() { acakBola(); pilihGelas(); pilihanPemain=-1; sudahJawab=false;}
1
2
public void run() { init(); acakBola(); pilihGelas(); while(!gameover){ getInput(); cekPilihanPemain(); flushGraphics(); try { Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Game over.");}
resetGame()
Catatan: error pada slide 11 (Game Input) akan masih terjadi, kita akan perbaiki di Materi berikutnya.
Mobile Game Developer War 4: Online Camp
Catatan: error pada slide 11 (Game Input) akan masih terjadi, kita akan perbaiki di Materi berikutnya.
Mobile Game Developer War 4: Online Camp
MINI QUESTFinish mini quest to get exp!
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)!
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: [email protected]
3. Gunakan subject “Quest Online Camp 02”
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