Tugas pertemuan 11
Heru Dwi Kurniawan
5025211055
Pemrograman Perangkat Bergerak B
Game Unscramble
File Kode Awal
WordsData.kt
File ini berisi daftar kata yang digunakan dalam permainan, beserta konstanta untuk jumlah maksimum kata per permainan dan poin skor untuk setiap kata yang benar.
MainActivity.kt
File ini memuat sebagian besar kode yang dihasilkan dari template. Anda menampilkan komposabel GameScreen
dalam blok setContent{}
.
GameScreen.kt
Semua fungsi komposabel UI didefinisikan di sini. Panduan untuk beberapa fungsi komposabel diberikan di bawah ini.
GameStatus
Fungsi komposabel ini menampilkan skor permainan di bagian bawah layar. Skor saat ini di-hardcode menjadi 0.
GameLayout
Fungsi komposabel ini menampilkan elemen utama permainan, termasuk kata yang diacak, petunjuk permainan, dan kolom teks untuk menerima tebakan pengguna.
GameScreen
Komposabel ini mencakup GameStatus
, GameLayout
, judul permainan, jumlah kata, serta tombol Submit dan Skip.
FinalScoreDialog
Fungsi komposabel ini menampilkan dialog yang memberikan opsi kepada pengguna untuk bermain lagi atau keluar dari permainan. Anda akan mengimplementasikan logika untuk menampilkan dialog ini di akhir permainan.
Menambahkan ViewModel
- Buka
build.gradle.kts (Module :app)
, gulir ke blok dependensi, dan tambahkan dependensi ViewModel berikut.
ui
, buat file Kotlin bernama GameViewModel
sebagai subclass dari ViewModel
.GameUiState
di paket ui
untuk merepresentasikan status UI permainan dengan variabel currentScrambledWord
.StateFlow
- Tambahkan properti
_uiState
di kelasGameViewModel
menggunakanMutableStateFlow
.
uiState
bernama _uiState
dengan tipe StateFlow<GameUiState>
.Menampilkan Kata Acak
- Tambahkan properti
currentWord
dengan tipeString
untuk menyimpan kata yang sedang diacak
pickRandomWordAndShuffle()
untuk memilih kata secara acak dari daftar dan mengacaknya.- Tambahkan properti untuk menyimpan kata yang telah digunakan dalam permainan.
- Tambahkan metode
shuffleCurrentWord()
untuk mengacak kata saat ini.
- Tambahkan fungsi
resetGame()
untuk menginisialisasi permainan
- Tambahkan blok
init
ke dalam kelasGameViewModel
dan panggilresetGame()
.
Merancang Compose UI dan Mengirim Data
- Pada fungsi
GameScreen
, teruskan argumen kedua berupaGameViewModel
dengan nilai defaultviewModel()
.
gameUiState
pada fungsi GameScreen
dengan delegasi dan panggil collectAsState()
pada uiState
.- Teruskan
gameUiState.currentScrambledWord
ke dalamGameLayout
.
- Tambahkan
currentScrambledWord
sebagai parameter ke fungsiGameLayout
.
- Perbarui fungsi
GameLayout
untuk menampilkancurrentScrambledWord
.
- Jalankan dan bangun aplikasi untuk melihat kata yang diacak ditampilkan.
Menampilkan Kata Tebakan
- Pada
GameLayout
, aturonValueChange
menjadionUserGuessChanged
danonKeyboardDone()
ke aksi keyboardonDone
.
- Tambahkan argumen
onUserGuessChanged
danonKeyboardDone
ke fungsiGameLayout
.
kotlin@Composable fun GameLayout( currentScrambledWord: String, onUserGuessChanged: (String) -> Unit, onKeyboardDone: () -> Unit, modifier: Modifier = Modifier ) { }
- Pada
GameScreen
, tambahkan lambda untukonUserGuessChanged
danonKeyboardDone
.GameLayout( currentScrambledWord = gameUiState.currentScrambledWord, onUserGuessChanged = { gameViewModel.updateUserGuess(it) }, onKeyboardDone = { gameViewModel.checkUserGuess() } )
- Tambahkan metode
updateUserGuess
di dalamGameViewModel
untuk memperbarui tebakan pengguna.fun updateUserGuess(guessedWord: String) { userGuess = guessedWord }
- Tambahkan properti
userGuess
di dalamGameViewModel
.import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue var userGuess by mutableStateOf("") private set
- Tambahkan parameter
userGuess
ke fungsiGameLayout
.fun GameLayout( currentScrambledWord: String, userGuess: String, onUserGuessChanged: (String) -> Unit, onKeyboardDone: () -> Unit, modifier: Modifier = Modifier ) { Column( verticalArrangement = Arrangement.spacedBy(24.dp) ) { OutlinedTextField( value = userGuess, //... ) } }
- Perbarui panggilan fungsi
GameLayout
di dalamGameScreen
untuk menyertakanuserGuess
.GameLayout( currentScrambledWord = gameUiState.currentScrambledWord, userGuess = gameViewModel.userGuess, onUserGuessChanged = { gameViewModel.updateUserGuess(it) }, onKeyboardDone = { gameViewModel.checkUserGuess() } )
Komentar
Posting Komentar