Selasa, 05 Januari 2021

FINAL PROJECT PBO A - Stack Game

FINAL PROJECT PBO A

Oleh:
Ega Prabu Pamungkas (05111940000014)
Inez Yulia Amanda (05111940000208)


STACK GAME


Stack game adalah game dimana pemain ditugaskan untuk menyusun blok-blok yang bergerak secara menyamping, setinggi mungkin, layaknya game untuk anak kecil dimana dia menyusun balok-balok setinggi mungkin. Salah satu contoh game digital yang menggunakan sistem ini adalah game android bernama “STACK” oleh Ketchap. Dengan visualisasi yang bagus dan game yang simple dapat menarik jutaan orang untuk mendownload aplikasi game tersebut.

Abstraksi:

Stack game akan memiliki beberapa blok bergerak secara satu-satu dan tugas dari player adalah menyusunnya setinggi mungkin. Beberapa fitur yang dimiliki, yaitu dapat menyimpan highscore dari permainan yang telah dimainkan, mengubah warna tema dari aplikasi , event blok yang akan menguntungkan pemain, serta sound effect dan background music.

Modulasi:

Berdasarkan penjelasan abstraksi beberapa class object yang akan dibuat adalah:

a. Main Class - untuk menjalankan game dan mengatur frame game
b. Stack Class - untuk mengatur apa yang ditampilkan di dalam game
c. Game Class - untuk mengatur sistem game berjalan
d. MainMenu Class - untuk mengatur apa yang ditampilkan di main menu
e. Playing Class - untuk mengatur apa yang ditampilkan saat bermain
f. GameOver Class - untuk mengatur apa yang ditamplikan di GameOver
g. GameObject Class - yang mengatur object blok dari game
h. Sprite Class - yang mengatur warna object blok dari game
i. Renderer - yang digunakan untuk merefresh game
j. Keyboard Class - untuk mengatur input dari keyboard
k. Theme Class - untuk mengatur tema aplikasi yang akan digunakan
l. Configuration Class - untuk menyimpan dan me-load best score
m. Resources Class - untuk me-load resources yang ada
n. Audio Class - untuk memutar musik yang telah di-load
o. GameComment Class - untuk mengatur comment game yang akan keluar

Penjelasan Source Code

Dokumentasi Source code lengkap dapat dilihat di link berikut yang berada di path "src/superrstack"
Link: Source Code (github)

1. Main Class
=> Di class ini akan diatur sifat-sifat dari JFrame yang digunakan, serta akan ada beberapa methode yang akan memanggil object Stack untuk dijalankan. Di class ini juga ada fungsi main yang akan menjalankan aplikasi.

2. Stack Class
=> Di class ini yang akan mengatur apa yang akan ditampilkan di dalam JFrame. Class ini menggunakan package Java Canvas. Class ini juga mengimplementasikan ActionListener untuk looping programnya. Method-method yang ada di class ini berfungsi untuk mengatur apakah akan menampilkan tampilan main menu, saat in-game, atau tampilan game over dengan memanggil method dari object class yang sesai dengan yang ingin ditampilkan. Di class ini juga dibuat lebar dan panjang dimensi canvas dengan scale tertentu.

3. Game Class
=> Di class ini akan dibuat object class yang berkaitan dengan game yang akan berjalan seperti menyimpan variabel bestScore, membuat object Resources untuk me-load resources yang ada, membuat object theme untuk me-load theme yang akan digunakan, serta method di class ini adalah me-load bestScore sebelumnya dengan memanggil method class yang mengaturnya, yaitu Configuration Class.

4. MainMenu Class
=> Di class ini akan diatur apa saja yang akan ditampilkan di main menu. Method-method class ini juga yang akan memanggil Renderer untuk merender background serta menggunakan "drawString" untuk menggambar text yang akan ditampilkan.

5. Playing Class
=> Di class ini akan diatur apa saja yang ditampilkan saat bermain, seperti text apa yang ditampilkan, blok-blok awal yang akan ditampilkan, mengatur saat game over apa yang dilakukan, serta mengatur jika blok baru akan muncul apa yang harus dilakukan. Sama seperti main class juga memiliki method untuk menggambar text dan merender background sekaligus sprite blok yang akan muncul

6. GameOver Class
=> Di class ini akan diatur apa saja yang akan ditampilkan di game over. Method-method class ini juga yang akan memanggil Renderer untuk merender background serta menggunakan "drawString" untuk menggambar text yang akan ditampilkan.

7. GameObject Class
=> Di class ini akan mengatur bagaimana object blok yang ada di game. Method update di class ini akan meilhat jika object masih bergerak apa yang dilakukan, jika ada input space akan meletakkan blok serta melihat berapa persen ketepatan meletakkan bloknya yang juga akan mengatur apa game comment yang akan muncul jika "excellent" persentasenya 90 keatas, jika "good" 50 ke atas dan di bawah 90, jika "bad" 50 persen ke bawah, jika "gold event" akan mengatur strig comment yang berkaitan dengan "gold event", serta gerakan blok dengan mengubah posisi x blok saat input space dibaca.

8. Sprite Class
=> Di class ini yang akan mengatur lebar, panjang, dan warna warna dari sprite blok itu sendiri.

9. Renderer Class
=> Method-method class ini yang akan mengatur warna apa yang akan ditampilkan di background serta sprite nya, dimana sprite akan dilihat posisi dari x dan y dari blok itu sendiri.

10. Keyboard Class
=> Class ini yang mengatur input dari keyboard, dimana method-method yang ada mengatur key yang akan dibaca, apakah saat ditekan atau dilepas, serta abstract method dari KeyListener.

11. Theme Calss
=> Class ini yang mengatur theme apa saja yang tersedia untuk aplikasi game. Dimana method yang ada akan digunakan class lain untuk mengatur warna background, text, maupun sprite blok-nya.

12. Configuration Class
=> Class ini yang akan membaca dan menulis save file untuk skor terbaik yang tercetak dengan menggunakan nama dan path file "config.xml". Method-method yang ada adalah untuk membaca "config.xml" jika tidak ada akan dibuat file baru dengan skor terbaik 0, serta untuk menulis file dengan skor terbaik terbaru yang telah dicetak.

13. Resources Class
=> Class ini untuk mengatur apa saja resources yang akan digunakan, serta me-load nya dengan membuat variabel baru yang akan digunakan di class lain. Path yang akan diguankan adalah "res/(namafile)".

14. Audio Class
=> Class ini yang mengatur bgm dan sfx yang akan dimainkan saat bermain dan game over. Audio ini menggunakan file extension berupa wav. Method-method yang ada di class ini digunakan class lain untuk memutar audio dan menghentikan audio yang dimainkan, serta ada method untuk membaca audio file yang dilempar ke dalam class ini.

15. GameComment Class
=> Class ini yang akan mengatur game comment yang akan muncul saat menekan space di saat game sedang berjalan atau keadaan "Playing". Method-mehod yang ada akan digunakan di class lain untuk memanggil game comment yang telah diinisiasi di class ini. Terdapat 4 jenis comment, yaitu saat excellent, good, bad, serta saat gold blok event.

Aplikasi "Super Stack Game"

Aplikasi Super Stack Game dapat kalian download berupa zip dilink berikut ini.

Video Demo Final Project

Video Demo dari Super Stack Game ini dapat dilihat di link youtube berikut.

Penutup

Sekian dari kami selaku kelompok Final Project PBO A, jika ada salah kata mohon dimaklumi. Terima kasih atas perhatiannya dan semoga apa yang disampaikan dapat bermanfaat.

~F

Senin, 28 Desember 2020

(Tugas) Testing JavaFX

 JavaFX

JavaFX adalah salah satu teknologi dari Java yang diluncurkan untuk membangun aplikasi yang kaya dengan konten multimedia seperti grafis, sound, effect grafis dan video, yang diintegrasikan ke dalam Website dan berjalan di dalam jaringan internet.

JavaFX juga dirancang untuk mengembangkan aplikasi kaya fitur (RIA) Rich Internet Application yang dapat berjalan di berbagai platform contohnya mobile, desktop, dan televisi.

Berikut adalah salah satu contoh pengimplementasian JavaFX dengan class yang bernama Fortune Teller. Fortune Teller memiliki satu tombol dimana jika ditekan akan muncul secara acak salah satu string yang telah dimasukkan pada source code.

Class Fortune Teller



Berikut adalah hasil dari contoh Fortune Teller







Sekian yang dapat disampaikan, semoga dapat bermanfaat.

~F


(Tugas) Membuat TextVIewer dengan Java

 NotepadJV

Nama yang akan digunakan dalam pembuatan textviewer karena fungsi dan kegunaannya hampir sama dengan notepad hanya saja terbatas dalam penyimpanan file dan pembukaan file. NotepadJV dapat membaca file .txt dan menuliskan kontennya ke dalam aplikasi. TIdak hanya .txt tetapi semua dile sebenarnya dapat terbaca hanya saja jika file selain .txt ada kemungkinan konten yang terbaca tidak dalam bentuk huruf-huruf yang jelas. Terdapat dua kelas yang mengatur NotepadJV, yaitu NotePadJV yang mengatur GUI dan FileReadWrite yang mengatur untuk membaca dan menulis file.

Class NotePadJV


Class FileReadWrite



Berikut beberapa screenshot saat source code dijalankan.






Sekian yang dapat disampaikan, semoga bermanfaat

~F

Senin, 21 Desember 2020

(Tugas) Exception Handling

 Apa itu Exception Handling?

Exception adalah sebuah peristiwa yang menjalankan alur proses normal pada program. Peristiwa ini bisaanya berupa kesalahan(error) dari beberapa bentuk. Ini disebabkan program kita berakhir tidak normal.

Menangani Exception

Untuk menangani exception dalam Java, kita gunakan blok try-catch-finally. Apa yang kita lakukan dalam program kita adalah kita menempatkan pernyataan yang mungkin menghasilkan exception dalam blok ini. Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:

Notasi blok bersifat perintah
  • Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
  • Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan
  • Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau keduanya.
  • Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani.

Contoh Exception Handling

Dalam contoh ini saya menggunakan source code algoritma dari sebuah permasalahan yang ada yang saya dapat dari github.

Permasalahan: 
https://leetcode.com/problems/coin-change/

Souce algoritma: 
https://github.com/williamfiset/Algorithms/blob/master/src/main/java/com/williamfiset/algorithms/dp/CoinChange.java

Dari source code di atas saya modifikasi sedikit sehingga beberapa line akan mengandung try-catch-finally. Penempatan try-catch-finally berada di tempat yang mengecek input dari pengguna sehingga jika terjadi Exception dapat terlihat.

Source Code:


Jika input yang diberikan sesuai akan menghasilkan output sebagai berikut


Jika input yang diberikan tidak sesuai akan menghasilkan output sebagai berikut


Juga ada beberapa kasus yang akan men-trigger beberapa exception handling. Sekian dari saya, semoga apa yang saya berikan bermanfaat.

~F

Senin, 14 Desember 2020

(Tugas) Membuat Game Pong dengan Java

 Penjelasan Singkat Class

Class yang akan dipakai adalah Class utama Pong yang mengatur tampilan, setting untuk bot, serta semua input yang diberikan, Class yang mengatur paddle-nya berada di Paddle, Class Ball mengatur tampilan bola dan bagaimana karakter dari bola pada game Pong, dan yang terakhir adalah Renderer yang mengatur rendering dari setiap ada perubahan atau penginputan yang masuk ke dalam program. Detail lebih lanjut untuk source code dari class adalah sebagai berikut.

1. Class Pong

2. Class Paddle

3. Class Ball

4. Class Renderer








Sekian dari saya, semoga bermanfaat

~F

Selasa, 24 November 2020

(ETS) ETS-1 Pemrograman Berbasis Objek Kelas A -- Nomor 3

Nomor 4 (Finished TimeStamp: Selasa, 24 November 2020 -- Pukul 21:33 WIB)

(http://fajarbaskoro.blogspot.com/2020/11/ets-1-pemrograman-berbasis-obyek.html) 

    Berdasarkan rancangan class maka akan diimplementasikan menggunakan pemrograman bahasa Java engan menggunakan BlueJ. Hasil implementasi untuk ketiga class, LayarManager, ATMMachine, dan KartuDebit adalah sebagai berikut.

1. Class KartuDebit


2. Class ATMMachine


3. Class LayarManager


Hasil dari eksekusi pengimpelmentasian di atas akan dijelaskan dalam bentuk video, sekaligus sebagai demo, serta menjawab nomor 4 pada soal ETS-1.


UPDATE:

Video demo dapat dilihat di link berikut: Nomor 4 (Video Demo)


~F

Senin, 23 November 2020

(ETS) ETS 1 - Pemrograman Berbasis Objek Kelas A -- Nomor 1 dan 2

 ETS 1 - PBO (Finished TimeStamp: Selasa, 24 November 2020 - 11:16)

http://fajarbaskoro.blogspot.com/2020/11/ets-1-pemrograman-berbasis-obyek.html

1. Skenario singkat fungsionalitas ATM berdasrkan tayangan video:

a. Layar awal akan ditampilkan jika tidak ada kartu debit yang dimasukkan.

b. Pengguna memasukkan kartu debit ke mesin atm

c. Setelah memasukkan kartu akan ditampilkan layar untuk memasukkan PIN kartu debit pengguna

d. Jika benar, maka akan ditampilkan layar utama dimana pengguna dapat memilih untuk menarik uang sebanyak nominal yang telah disediakan di layar utama

e. Jika nominal uang yang ingin ditarik tidak ditampilkan di layar, maka pengguna dapat memilih opsi transaksi lainnya dimana pengguna dapat memasukkan nilai nominasi yang diinginkan.

f. Setelah menentukan nominal yang inign ditarik, kartu akan keluar dari mesin lalu uangnya. 

g. Jika kamu memasukkan nominal secara manual, mesin akan menawarkan apakah kamu ingin mencetak struk atau tidak.

h. Setelah pengeluaran kartu debit pengguna dan uang, akan ditampilkan layar nominal sisa kartu debit anda beserta ucapan terima kasih.

i. Setelah itu, kembali ke layar awal.

2. Modulasi (karena fungsi ATM yang akan digunakan adalah fungsi menarik uang dari mesin ATM) :

Keterangan Class:

a, Class ATMMachine: fungsinya untuk mengatur segala proses yang terjadi berdasarkan input pengguna dan berinteraksi dengan objek KartuDebit.

b. Class LayarManager: fungsinya adalah mengatur layar akan ditampilkan berdasarkan input (event) yang terjadi pada mesin ATM.

c. Class KartuDebit: fungsinya untuk mengidentifikasi karut debit pengguna yang telah dimasukkan.

Gambaran Desain Class:

Gambaran Desain Class dan hubungannya



~F