mgdw4 online camp #2 (game loop, game logic, dan game input)
DESCRIPTION
Materi kedua Online Cmap MGDW4TRANSCRIPT
![Page 1: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/1.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/2.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/3.jpg)
Mobile Game Developer War 4: Online Camp
Contoh Game Loop sederhana
![Page 4: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/4.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/5.jpg)
Mobile Game Developer War 4: Online Camp
Game Logic
![Page 6: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/6.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/7.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/8.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/9.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/10.jpg)
Mobile Game Developer War 4: Online Camp
WAKTUNYA PRAKTEK!
![Page 11: MGDW4 Online Camp #2 (Game loop, game logic, dan game input)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/11.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/12.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/13.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/14.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/15.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/16.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/17.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/18.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/19.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/20.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/21.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/22.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/23.jpg)
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)](https://reader036.vdocuments.site/reader036/viewer/2022070318/5576559bd8b42aaa548b4bbb/html5/thumbnails/24.jpg)
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