Tugas 10


 Nama : Muhamad Faiz Fernanda 

 Kelas  : PPB -A 

 NRP : 5025211186

Analisis Kode Aplikasi Android "Unscramble"

 

Unscramble adalah permainan tebak kata untuk pemain tunggal, di mana pemain diminta untuk menebak kata asli dari kumpulan huruf yang telah diacak. Aplikasi ini menjadi contoh yang tepat dalam menerapkan komponen-komponen arsitektur Android modern, seperti ViewModel dan StateFlow, yang digunakan untuk membangun aplikasi reaktif berbasis Jetpack Compose.


Tampilan Aplikasi



Analisis Kode Sumber Aplikasi

Aplikasi Unscramble dirancang menggunakan pendekatan arsitektur modern dengan prinsip pemisahan tanggung jawab—memisahkan antara data, logika bisnis, dan tampilan. Tujuan utamanya adalah menghasilkan kode yang rapi, modular, dan mudah untuk dikembangkan atau diuji.


1. Sumber Data – WordsData.kt

File ini berfungsi sebagai pusat data utama untuk permainan (single source of truth). Semua kata yang digunakan dalam permainan serta parameter dasar permainan didefinisikan di sini.

  • MAX_NO_OF_WORDS: Menentukan jumlah maksimal kata dalam satu sesi permainan, yaitu 10 kata.

  • SCORE_INCREASE: Menetapkan poin yang diberikan untuk setiap jawaban benar, yaitu 20 poin.

  • allWords: Koleksi Set yang menyimpan daftar kata yang akan diacak. Penggunaan Set memastikan tidak ada kata yang muncul lebih dari sekali.

Contoh:


val allWords: Set = setOf( "animal", "auto", "anecdote", "alphabet", // dst. )

2. State UI – GameUiState.kt

Kelas data ini mewakili seluruh informasi yang dibutuhkan UI dalam satu waktu. Pendekatan ini memudahkan manajemen state karena semua elemen UI dikelompokkan ke dalam satu objek state.


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 Pengelola State – GameViewModel.kt

File ini merupakan pusat pengolahan logika permainan. Semua logika bisnis ditempatkan di ViewModel, sehingga UI tidak langsung menangani perhitungan atau pemrosesan data.

  • StateFlow: Menggunakan MutableStateFlow untuk menyimpan dan mengelola state dari GameUiState. Data ini diekspos ke UI melalui StateFlow yang bersifat read-only dari luar.

  • Pengacakan Kata: Fungsi pickRandomWordAndShuffle() mengambil kata acak dari daftar, memastikan tidak ada pengulangan, lalu mengacak hurufnya untuk ditampilkan ke pemain.

  • Validasi Jawaban: Fungsi checkUserGuess() membandingkan tebakan pemain dengan jawaban yang benar. Bila cocok, skor ditambah. Jika salah, state diperbarui agar UI menampilkan kesalahan.

  • Alur Satu Arah: Semua interaksi dari UI seperti menebak atau melewati kata akan memicu fungsi di ViewModel, yang kemudian memperbarui state. Perubahan ini secara otomatis direspons oleh UI.

Contoh:


class GameViewModel : ViewModel() { private val _uiState = MutableStateFlow(GameUiState()) val uiState: StateFlow = _uiState.asStateFlow() // ... }

4. Antarmuka Pengguna – GameScreen.kt

Seluruh tampilan aplikasi dibangun menggunakan fungsi-fungsi Composable dari Jetpack Compose.

  • Observasi State: Composable GameScreen mengamati perubahan state melalui collectAsState(). Ini memastikan UI akan selalu diperbarui ketika data berubah.

  • Tata Letak: Layout utama dikelola melalui GameLayout, yang mencakup area skor, kata acak, input teks untuk jawaban, dan tombol submit serta skip.

  • Dialog Skor Akhir: Ketika permainan selesai (state isGameOver bernilai true), akan muncul dialog akhir yang menampilkan skor dan memberikan opsi untuk mengulang atau keluar.


5. Main Activity – MainActivity.kt

Sebagai titik awal aplikasi, MainActivity berfungsi untuk mengatur tema dan menampilkan layar utama permainan. Fungsinya cukup sederhana: menjadi wadah bagi composable GameScreen.


Kesimpulan

Proyek Unscramble menunjukkan penerapan praktik terbaik dalam pengembangan aplikasi Android dengan pendekatan modern. Dengan memisahkan antara data, logika (melalui ViewModel), dan UI (melalui Compose), kode menjadi lebih modular, mudah diuji, serta lebih terstruktur. Penggunaan StateFlow menjadikan proses manajemen state reaktif dan efisien, memastikan bahwa tampilan aplikasi selalu selaras dengan data aktual.


Vidio Demo



Komentar

Postingan populer dari blog ini

Tugas 9

Tugas 7 PPB A

Tugas 1 PPB A