Jumat, 25 Desember 2015

PONG!



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