Tugas 10


Nama: Danar Sodik Priyambodo

Kelas: PPB - A

NRP: 5025211145

Analisis Aplikasi Android "Unscramble"

Unscramble adalah permainan tebak kata untuk satu pemain, di mana pengguna harus menebak kata asli dari huruf-huruf yang telah diacak. Aplikasi ini merupakan contoh implementasi arsitektur Android modern yang baik, karena mengadopsi komponen seperti ViewModel dan StateFlow untuk membangun aplikasi yang bersifat reaktif menggunakan Jetpack Compose.

Tampilan Aplikasi

Tampilan aplikasi Unscramble

Analisis Kode Program

Aplikasi Unscramble dirancang dengan mengikuti prinsip arsitektur modular, di mana data, logika bisnis, dan antarmuka pengguna dipisahkan dengan jelas. Tujuannya adalah agar kode mudah dikembangkan, diuji, dan dipelihara.


1. Sumber Data – WordsData.kt

File ini berperan sebagai sumber data utama permainan, menyimpan seluruh kata yang digunakan dan parameter penting lainnya.

  • MAX_NO_OF_WORDS: Menetapkan jumlah maksimum kata yang ditampilkan per sesi, yaitu 10.
  • SCORE_INCREASE: Menentukan nilai skor yang ditambahkan setiap kali pengguna menjawab benar, yaitu 20 poin.
  • allWords: Koleksi kata dalam bentuk Set yang digunakan untuk diacak. Penggunaan Set mencegah adanya kata ganda.
kotlin Copy Edit val allWords: Set = setOf( "animal", "auto", "anecdote", "alphabet", // dst. )

2. UI State – GameUiState.kt

Kelas data ini menyimpan semua informasi yang dibutuhkan UI pada satu waktu. Seluruh elemen UI dapat diperbarui berdasarkan satu objek state yang terstruktur.

kotlin Copy Edit data class GameUiState( val currentScrambledWord: String = "", val currentWordCount: Int = 1, val score: Int = 0, val isGuessedWordWrong: Boolean = false, val isGameOver: Boolean = false )

3. Logika dan Manajemen State – GameViewModel.kt

Seluruh logika permainan dikelola di dalam ViewModel, sehingga antarmuka pengguna hanya bertugas menampilkan data.

  • StateFlow: ViewModel menyimpan GameUiState di dalam MutableStateFlow, lalu mengeksposnya sebagai StateFlow yang hanya bisa dibaca dari luar.
  • Pengacakan Kata: Fungsi pickRandomWordAndShuffle() memilih kata acak yang belum digunakan dan mengacak hurufnya.
  • Validasi Jawaban: Fungsi checkUserGuess() memeriksa apakah tebakan pengguna cocok dengan kata asli dan memperbarui skor jika benar.
  • Data Flow Searah: Setiap aksi dari pengguna akan memicu pembaruan pada _uiState, yang kemudian direspons otomatis oleh UI.
kotlin Copy Edit class GameViewModel : ViewModel() { private val _uiState = MutableStateFlow(GameUiState()) val uiState: StateFlow = _uiState.asStateFlow() // ... }

4. Antarmuka Pengguna – GameScreen.kt

Tampilan aplikasi dibangun menggunakan fungsi-fungsi Composable dari Jetpack Compose.

  • Observasi State: Komponen GameScreen memantau perubahan state dengan collectAsState(), memastikan tampilan selalu sinkron dengan data.
  • Tata Letak: Disusun menggunakan GameLayout yang mencakup skor, kata acak, kolom input, serta tombol “Submit” dan “Skip”.
  • Dialog Skor Akhir: Saat permainan selesai, dialog akhir akan ditampilkan, memberi pilihan untuk bermain lagi atau keluar.

5. Aktivitas Utama – MainActivity.kt

MainActivity bertugas sebagai titik awal aplikasi. Di sini, tema diatur dan fungsi GameScreen dipanggil untuk menampilkan tampilan utama permainan.


Kesimpulan

Proyek Unscramble merupakan representasi yang baik dari praktik pengembangan aplikasi Android berbasis arsitektur modern. Dengan pemisahan tanggung jawab antara data, logika (melalui ViewModel), dan tampilan (melalui Compose), kode menjadi lebih bersih, mudah dirawat, dan modular. Penggunaan StateFlow memberikan alur data yang reaktif dan efisien, sehingga UI selalu ter-update sesuai dengan perubahan data terkini.

Video Demo



Source Code: https://github.com/Danar1111/Unscramble-App-Kotlin.git

Komentar

Postingan populer dari blog ini

Tugas 3 PPB-A Composable - Happy Birthday App

Tugas 2 PPB-A Dasar Jetpack Compose

Tugas 4 PPB-A Dice Roller Interaktif