Tugas 11 PPB

Nama: Aaliyah Farah Adibah

NRP: 5025201070

Kelas: PPB I

ViewModel and State in Compose


Pada kali ini diminta untuk membuat sebuah aplikasi unscramble seperti tutorial berikut . 

Pertama, download starter pada link github berikut .


Selanjutnya, import project pada android studio.


Tambahkan dependecies pada module:app


Di paket ui, buat class/file Kotlin bernama GameViewModel. Perluas dari class ViewModel

Dalam paket ui, tambahkan class model untuk UI status yang disebut GameUiState. Jadikan class data dan tambahkan variabel untuk kata acak saat ini.


Di class GameViewModel, tambahkan properti _uiState berikut. Lalu, tambahkan properti pendukung ke uiState yang bernama _uiState. Beri nama properti uiState dan berjenis StateFlow<GameUiState>. Setel uiState ke _uiState.asStateFlow().

Membuat tampilan kata acak tanpa pola dengan tambahkan properti bernama currentWord dari jenis String untuk menyimpan kata acak saat ini di GameViewModel. Tambahkan metode bantuan untuk pilih kata acak dari daftar dan acaklah. Beri nama pickRandomWordAndShuffle() tanpa parameter input, lalu buat fungsi tersebut menampilkan String. Tambahkan properti berikut setelah properti currentWord agar berfungsi sebagai kumpulan yang dapat diubah untuk menyimpan kata yang telah digunakan dalam game. 

Tambahkan metode helper lain untuk mengacak kata saat ini yang disebut shuffleCurrentWord() yang menggunakan String dan menampilkan String yang diacak. Tambahkan fungsi bantuan untuk melakukan inisialisasi game yang disebut resetGame(). Gunakan fungsi ini nanti untuk memulai dan memulai ulang game. Pada fungsi ini, hapus semua kata dalam kumpulan usedWords, lakukan inisialisasi _uiState. Pilih kata baru untuk currentScrambledWord menggunakan pickRandomWordAndShuffle().

Selanjutnya, merancang Compose UI. Pada fungsi GameScreen, teruskan argumen kedua dari jenis GameViewModel dengan nilai default viewModel(). Pada fungsi GameScreen(), tambahkan variabel baru bernama gameUiState. Gunakan delegasi by dan panggil collectAsState() pada uiState.

Teruskan gameUiState.currentScrambledWord ke composable GameLayout(). Anda menambahkan argumen di langkah selanjutnya, jadi abaikan error untuk saat ini.

Tambahkan currentScrambledWord sebagai parameter lain ke fungsi composable GameLayout(). Perbarui fungsi composable GameLayout() untuk menampilkan currentScrambledWord. Tetapkan parameter text kolom teks pertama di kolom ke currentScrambledWord.

Di GameViewModel, tambahkan metode lain bernama checkUserGuess(). Pada fungsi checkUserGuess(), tambahkan blok if else untuk memverifikasi apakah tebakan pengguna sama dengan currentWord. Reset userGuess ke string yang kosong. Jika tebakan pengguna salah, tetapkan isGuessedWordWrong ke true. MutableStateFlow<T>. update() memperbarui MutableStateFlow.value menggunakan nilai yang ditentukan.

Di class GameUiState, tambahkan Boolean yang disebut isGuessedWordWrong dan lakukan inisialisasi ke false.

Selanjutnya, meneruskan callback peristiwa checkUserGuess() ke atas dari GameScreen ke ViewModel saat pengguna mengklik tombol Submit atau tombol selesai di keyboard. Teruskan data, gameUiState.isGuessedWordWrong dari ViewModel ke GameScreen untuk menetapkan error di kolom teks. Run aplikasi.

Lalu, membuat pembaruan skor dan jumlah katadan menangani putaran terakhir game. 

Berikut hasil dokumentasi setelah code di run.

Saat aplikasi pertama kali di jalankan.

Saat akan mengisi jawaban

Saat jawaban benar, skor bertambah dan lanjut ke kata selanjutnya

Saat jawaban salah

Saat game berakhir

Source code dapat diakses di: https://github.com/aaliyahfarah/PPB-Tugas-11/










Komentar