Final Project PBO (Sudoku Game)
Final Project PBO (G)
Sudoku
Deskripsi Aplikasi
Sudoku merupakan salah satu permainan klasik dimana pemain diberikan suatu papan permainan berukuran 9 x 9 kotak, yang dimana beberapa kotaknya sudah berisi suatu angka dengan rentang 1-9. Pemain diharuskan untuk menyelesaikan permainan dengan mengisi semua kotak dengan angka yang benar. Angka harus ditempatkan dengan pertimbangan bahwa tidak boleh ada angka yang sama dalam satu baris, satu kolom, dan juga suatu area 3 x 3 di papan.
Selain itu, pengimplementasian sudoku juga merupakan salah satu contoh problem yang diselesaikan dengan Constraint Satisfaction Problem (CSP). Mirip seperti 8-Queens problem, sudoku juga memiliki batasan-batasan dalam meletakkan angka ke dalam papan. Mungkin awalnya sudoku terlihat simpel, tetapi sebenarnya jika kita bandingkan dengan 8-Queens Problem, sudoku sebenarnya memiliki constraint yang lebih banyak karena adanya 9 angka yang berbeda tetapi harus mencakup semuanya dan tepat satu.
Di aplikasi sudoku ini, saya membuat fungsi dan pengaturan sederhana dimana aplikasi bisa membuat suatu papan sudoku secara acak nilainya dan pasti dapat diselesaikan. Kemudian untuk permainannya sendiri, terdapat 3 opsi kesulitan yang akan merubah batas waktu dalam permainan dan banyaknya kotak yang harus diisi oleh pemain. Untuk tombol fungsional, saya menyediakan 2 tombol, untuk menjalankan ataupun menghentikan permainan dan juga tombol untuk mengirim solusi yang pemain sudah dapatkan.
Prinsip Inheritance pada Aplikasi (1)
Pada Java, inheritance merupakan salah satu prinsip yang cukup sering digunakan pada Object Oriented Programming. Inheritance memungkin satu kelas memiliki child class / kelas anak yang mana dapat menggunakan method yang sudah didefinisikan sebelumnya di parent class / kelas induknya. Biasanya inheritance digunakan untuk mengklasifikasikan suatu objek yang bisa memiliki beragam variasi pada atribut dan perilakunya/method.
Sementara untuk aplikasi sudoku yang saya buat, mungkin bisa dilihat pada diagram kelas yang ada di bawah, pembentukkan kelas yang ada tidak secara langsung menerapkan prinsip inheritance. Kenapa tidak digunakan inheritance pada game sudoku ? Singkatnya karena game sudoku umumnya hanya perlu untuk membentuk puzzle sudoku secara acak yang dapat diselesaikan. Karena kompleksitas dari aplikasi terdapat pada penerapan algoritmanya bukan dari banyaknya objek yang membentuk aplikasi, maka tidak diperlukan inheritance pada pembentukkan kelas.
Walaupun demikian, sebenarnya secara tidak langsung ada penerapan prinsip inheritance pada aplikasi ini, yaitu pada kelas SudokuFrame. Kelas SudokuFrame merupakan kelas yang bertanggung jawab untuk menampilkan frame yang membentuk GUI aplikasi, sehingga memudahkan pemain dalam berinteraksi dengan game. Untuk membuat frame, kelas ini melakukan extend dari Jframe yang merupakan kelas fundamental di Java Swing untuk pembuatan frame di GUI. Bisa dibilang bahwa kelas Jframe menurunkan method yang sudah ada agar dapat digunakan pada kelas SudokuFrame. Contoh penggunannya bisa kita lihat seperti pada method :
- setTitle("Sudoku")
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
- getContentPane().setLayout(null), dan sebagainya.
Fitur Aplikasi (2)
- Membuat dan menghasilkan suatu urutan papan sudoku yang dapat diselesaikan secara acak.
- Aplikasi dapat menyelesaikan dan memberikan solusi sudoku dengan algoritma backtracking.
- Adanya GUI agar memudahkan user dalam memainkan game sudoku.
- 3 opsi kesulitan untuk permainan sudoku (easy, medium, dan hard)
- Aplikasi mampu menampilkan solusi dari puzzle sudoku serta memperbaiki input dari user.
Manfaat / Kegunaan
Fungsionalitas Singkat dari Setiap Kelas
Kelas ini singkatnya berisi pengaturan-pengaturan untuk frame yang akan menampilkan informasi mengenai game. Saat dibentuk class baru, maka konstruktor akan langsung membuat frame yang mana elemen-elemennya saya bagi ke dalam 2 method: initializeGrid dan initializeControls. Sesuai namanya, kedua method tersebut masing-masing akan menampilkan elemen berupa tabel permainan yang berbentuk 9 x 9 grid, dan kontrol seperti opsi kesulitan dan tombol fungsional seperti start dan submit. Selain itu ada satu method lagi attachListeners yang berfungsi untuk menyambungkan event dari button ke method yang nantinya akan dibentuk di kelas SudokuEventHandler.
Kelas SudokuEventHandler menerima input dan perubahan yang terjadi pada frame kemudian menjalankan logika utama dalam permainan sudoku di aplikasi ini. Secara singkat, kelas ini mengurus tindakan apa yang akan dilakukan program saat pemain menekan tombol "Start". "Give Up!", atau "Submit".
Komentar
Posting Komentar