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
_uiStatedi kelasGameViewModelmenggunakanMutableStateFlow.
uiState bernama _uiState dengan tipe StateFlow<GameUiState>.Menampilkan Kata Acak
- Tambahkan properti
currentWorddengan tipeStringuntuk 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
initke dalam kelasGameViewModeldan panggilresetGame().
Merancang Compose UI dan Mengirim Data
- Pada fungsi
GameScreen, teruskan argumen kedua berupaGameViewModeldengan nilai defaultviewModel().
gameUiState pada fungsi GameScreen dengan delegasi dan panggil collectAsState() pada uiState.- Teruskan
gameUiState.currentScrambledWordke dalamGameLayout.
- Tambahkan
currentScrambledWordsebagai parameter ke fungsiGameLayout.
- Perbarui fungsi
GameLayoutuntuk menampilkancurrentScrambledWord.
- Jalankan dan bangun aplikasi untuk melihat kata yang diacak ditampilkan.
Menampilkan Kata Tebakan
- Pada
GameLayout, aturonValueChangemenjadionUserGuessChangeddanonKeyboardDone()ke aksi keyboardonDone.
- Tambahkan argumen
onUserGuessChangeddanonKeyboardDoneke fungsiGameLayout.
kotlin@Composable fun GameLayout( currentScrambledWord: String, onUserGuessChanged: (String) -> Unit, onKeyboardDone: () -> Unit, modifier: Modifier = Modifier ) { }
- Pada
GameScreen, tambahkan lambda untukonUserGuessChangeddanonKeyboardDone.GameLayout( currentScrambledWord = gameUiState.currentScrambledWord, onUserGuessChanged = { gameViewModel.updateUserGuess(it) }, onKeyboardDone = { gameViewModel.checkUserGuess() } )
- Tambahkan metode
updateUserGuessdi dalamGameViewModeluntuk memperbarui tebakan pengguna.fun updateUserGuess(guessedWord: String) { userGuess = guessedWord }
- Tambahkan properti
userGuessdi dalamGameViewModel.import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue var userGuess by mutableStateOf("") private set
- Tambahkan parameter
userGuesske 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
GameLayoutdi dalamGameScreenuntuk menyertakanuserGuess.GameLayout( currentScrambledWord = gameUiState.currentScrambledWord, userGuess = gameViewModel.userGuess, onUserGuessChanged = { gameViewModel.updateUserGuess(it) }, onKeyboardDone = { gameViewModel.checkUserGuess() } )
Komentar
Posting Komentar