MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

24
Mobile Game Developer War 4: Online Camp MGDW4 Online Camp #2 Game Loop, Game Logic, dan Game Input

description

Materi kedua Online Cmap MGDW4

Transcript of MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Page 1: 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

Page 2: 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.

Page 3: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Contoh Game Loop sederhana

Page 4: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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) {

}

}

}

Page 5: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Game Logic

Page 6: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Definisi

Implementasi game design menjadi algoritma pemrograman.

Page 7: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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

Page 8: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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

Page 9: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Contoh: Magic Cups• Acak posisi bola• Jika pemain memilih gelas

tertentu, buka dan tampilkan isinya

Page 10: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

WAKTUNYA PRAKTEK!

Page 11: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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.

Page 12: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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

Page 13: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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

Page 14: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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

Page 15: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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

Page 16: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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; } } }

Page 17: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Hasil

Namun game baru berjalan sekali saja.

Jawaban salah. Jawaban benar.

Page 18: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Buat permainan bisa dimainkan terus menerus.

Page 19: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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.

Page 20: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

Catatan: error pada slide 11 (Game Input) akan masih terjadi, kita akan perbaiki di Materi berikutnya.

Page 21: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

Mobile Game Developer War 4: Online Camp

MINI QUESTFinish mini quest to get exp!

Page 22: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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)!

Page 23: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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”

Page 24: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)

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