GAME PONG DENGAN EFEK SUARA
Dibuat oleh Kelompok 11:
·
Luqman Alfarisi 13212128
·
Zuhditazmi 13212149
1. Deskripsi
Game Pong merupakan sebuah game
sederhana menyerupai permainan ping pong namun hanya dalam 2 dimensi. Akan ada
bola yang bergerak memantul-mantul jika menabrak dinding atas dan bawah serta
mengenai “pad” pemain. Pad ini dapat bergerak ke atas dan kebawah tergantung
dari inputan pemain. Ketika bola masuk ke salah satu daerah pemain, maka pemain
lawan mendapat poin. Game selesai ketika salah satu pemain mendapat point 3. Jika
pengguna yang menang maka akan berlanjut ke level selanjutnya, namun jika computer
yang menang maka “live” dari pengguna akan berkurang. Jika live dari pengguna
habis atau pengguna berhasil mengalahkan komputer hingga level 5, maka
permainan berakhir. Jika “live” habis maka pengguna dinyatakan “LOSE” namun
Jika pengguna berhasil mengalahkan komputer pada level 5, maka pengguna
dinyatakan “WIN”. Kemudian pengguna dapat melihat statistic “WIN” dan “LOSE”nya.
2. Requirement
Pada proyek perancangan sistem embedded ini kami memilih
untuk membuat “Game Pong” seperti yang sudah dideskripsikan diatas. Untuk
membuat game yang reliable, maka dibutuhkan keandalan dan performansi yang
cukup. Keandalan disini berupa proyek tidak memiliki kelemahan yang krusial
seperti adanya bugs yang menyebabkan game berhenti. Sedangkan performansi yang
dimaksud adalah sistem dapat menjalankan semua tugasnya tanpa terganggu tugas
yang lain sehingga game akan berjalan secara lancar. Untuk memenuhi hal
tersebut, maka requirement yang diperlukan dalam pembuatan game ini adalah
sebagai berikut:
·
Sistem dapat melakukan masing-masing tugas tanpa
mengganggu satu sama lain.
·
Sistem memiliki tampilan yang interaktif dan
juga dapat mengeluarkan suara agar permainan lebih menarik.
·
Sistem dapat menampilkan score, live dan level
kepada pengguna.
·
Sistem dapat membaca inputan dari pengguna untuk
menggerakkan pad.
3. Spesifikasi Perangkat
Dengan requirement diatas, didapatkan spesifikasi perangkat
yang dibutuhkan sebagai berikut:
·
Sistem menggunakan Board Nuvoton Learning Board
Nu-LB-NUC-140 dikarenakan merupakan keharusan dari proyek ini dan board ini
dapat menggunakan fitur OS.
·
Sistem menggunakan LCD 128 x 64 untuk
menampilkan tampilan yang interaktif.
·
Sistem menggunakan buzzer untuk memunculkan
suara.
·
Sistem menggunakan keypad sebagai input dari
pengguna.
·
Game harus memiliki menu untuk menampilkan
bantuan dan juga memilih level game yang diinginkan.
·
Game memunculkan tampilan kalah dan menang pada
akhir permainan.
·
Game harus menampilkan live, score, dan level
agar pengguna dapat mengetahui status game tersebut.
·
Sistem harus dapat bekerja secara concurrent
sehingga tugas antara pergerakan bola, pembacaan input, pengeluaran suara, dll tidak
saling mengganggu/menghambat yang dapat menyebabkan berbagai masalah sehingga
menurunkan user value.
Untuk memenuhi spesifikasi tersebut, maka peripherals pada
board NUC140VE3CN yang dipakai dan pin-pin yang digunakan adalah:
- LCD 128x64 dengan SPI (pin D8, D9, D10, D11, D14)
- Keypad dengan GPIO (pin A0-A5)
- Buzzer dengan GPIO (pin B11)
4. Pemodelan Sistem
Secara keseluruhan DFD dari sistem adalah sebagai berikut:
Sistem dimodelkan dengan statechart dimana terdapat 3 state untuk
yaitu START, PLAY, dan FINISH untuk tampilan game dan terdapat 4 state untuk
buzzer yaitu Sound OFF, Sound EDGE, Sound LOSE, dan Sound WIN.
Untuk melakukan tugasnya masing-masing secara concurrent,
program dibagi menjadi 5 task yaitu:
·
Main Program
·
Task 1: Read Keypad
Task ini berfungsi untuk memperbarui bacaan
keypad untuk digunakan sebagai masukan bagi task lain. Keypad dibaca dengan
perintah ScanKey() disertai debouncing 100ms dengan osDelay. Hal ini dilakukan
agar selama debouncing task lain bisa berjalan. Task ini dijadwalkan tiap 100ms.
Flowchart dari task ini adalah sebagai berikut:
·
Task 2: Game Display
Task ini berfungsi untuk memperbaharui
tampilan game tergantung state dari game. Pada state PLAY maka task ini akan
menampilkan display permainan dan tampilan WIN LOSE. Pada state FINISH maka
task ini akan menampilkan display game over dan tawaran untuk mengulang
permainan.
·
Task 3: Calculate Move
Task ini berfungsi untuk memperbaharui
mekanik game. Pada task ini dilakukan banyak perhitungan termasuk gerakan bola
dan gerakan pad pemain. Pada task ini juga ditentukan apabila terjadi perubahan
skor atau suatu level berakhir. Task ini juga mengatur perpindahan state game
dan state suara.
·
Task 4: Menu Display
Task ini berfungsi untuk mengendalikan
tampilan awal saat pemilihan menu. Task ini mengatur display pada state START
mulai dari splash screen sampai pilihan menu.
·
Task 5: Buzzer
Task ini berfungsi untuk mengendalikan
keluaran suara tergantung pada state suara. State suara yang diubah oleh task
calculate_move akan diterjemahkan menjadi bunyi yang sesuai. Bunyi akan muncul
pada 3 event, yaitu saat bola memantul tembok, bola masuk daerah pemain, dan
bola masuk daerah lawan. Pada jeda penyalaan buzzer digunakan osDelay agar task
lain bisa berjalan dan task buzzer tidak blocking.
5. Implementasi
Antarmuka yang digunakan pada permainan:
·
Permainan menggunakan 9 tombol keypad sebagai
masukan, keypad dinomori 1-9 seperti keypad pada biasanya
·
Permainan menggunakan layar dan buzzer sebagai
keluaran.
·
Layar akan menampilkan splash screen, menu, dan
tampilan game.
·
Buzzer akan mengeluarkan suara ketika bola
mengenai pad dan ketika bola masuk daerah sendiri atau daerah lawan
OS yang digunakan adalah RTX bawaan dari keil.Implementasi
konkurensi dari model sistem adalah sebagai berikut:
void read_keypad (void const *argument);
void game_display (void const *argument);
void calculate_move (void const *argument);
void menu_display (void const *argument);
void buzzer (void
const *argument);
6. Hasil
Tampilan Awal Aplikasi:
·
Ketika board dihidupkan atau baru di reset, maka
akan ditampilkan beberapa splash screen supaya permainan lebih menarik
Menu:
• Kemudian
setelah pengguna menekan tombol manapun, akan ditampilkan menu
• Ada
3 menu yaitu PLAY, HELP, dan SET LEVEL
• Pemilihan
menu menggunakan keypad tombol 1,2, dan 3
Menu Help:
• Pada
menu ini dapat ditampilkan cara bermain game
• Menu
ini menampilkan teks yang cukup panjang sehingga dibagi menjadi dua halaman.
• Navigasi
dilakukan dengan menggunakan keypad tombol 1 dan 3
Menu SET LEVEL:
• Pada
menu ini pengguna dapat memilih level yang ingin dimainkan
• Pemilihan
level menggunakan tombol keypad sesuai nomor level yang diiginkan
• Misalnya
untuk memilih level 3, takan keypad nomor 4
• Jika
pengguna langsung memilih PLAY, default adalah LEVEL 0
Menu Play-Tahap Inisialisasi:
• Pada
tahap awal akan ditampilkan terlebih dahulu level yang dimainkan
• Misalnya
jika dipilih LEVEL 3 pada SET LEVEL, maka tampilan awal permainan akan seperti
gambar di samping
Menu PLAY- tahap permainan:
• Pada
tahap permainan akan ditampilkan sebagai gambar di samping
• Pemain
bisa menggerakkan padnya dengan menekan tombol 3 untuk naik dan tombol 8 untuk
turun
• Sedangkan
bola akan memantul secara otomatis dan pad komputar akan bergerak otomatis juga
• Ketika
bola mengenai pad, maka akan ada bunyi beep pendek sekali
• Ketika
bola masuk daerah sendiri dan daerah lawan juga ada bunyi tertentu
Akhir Level-Menang:
• Ketika
pemain mencapai skor 3 lebih dulu, maka ia memenangkan level tersebut
• Jika
level yang dimenangkan bukan level 5, maka akan ditampilkan level berikutnya
dan permainan berlanjut
• Jika
yang dimenangkan adalah level 5, maka akan muncul grafik “YOU WIN”
Akhir level-Kalah:
• Jika
computer mencapai skor 3 terlebih dulu, maka pemain dianggap kalah pada level
itu dan nyawanya akan berkurang 1.
• Jika
nyawa masih ada, maka level tersebut akan diulang
• Jika
nyawa habis, maka akan ditampilkan grafik “LOSE”
Akhir Permainan:
• Di
akhir permainan akan ditampilkan statistik. Win menunjukkan berapa level yang
dimenangkan. Lose menunjukkan berapa nyawa yang hilang
• Kemudian
pengguna bisa memilih untuk bermain lagi atau kembali ke menu awal