Tugas 8 PPB - Aplikasi Unscramble
Nama : I Gusti Ngurah Ervan Juli Ardana NRP : 5025211205 Kelas : Pemrograman Perangkat Bergerak B Tahun : 2024
Pada pertemuan kelas Pemrograman Perangkat Bergerak B kali ini, kami diperkenalkan dengan view model dan state pada android studio. Pada pertemuan ini, saya akan akan membuat sebuah aplikasi bernama Unscramble app.
Aplikasi Unscramble
Deskripsi Aplikasi
"Unscramble app" adalah aplikasi yang dirancang untuk membantu pengguna dalam mengurai atau mengubah urutan huruf acak menjadi kata atau frasa yang bermakna
Implementasi kode
Buat sebuah project dengan empty activity pada Android Studio.
Ubahlah kelas MainActivity.kt agar menjadi sebagai berikut :
package com.example.unscramble
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
setContent {
UnscrambleTheme {
Surface(
modifier = Modifier.fillMaxSize(),
) {
GameScreen()
}
}
}
}
}
Secara Keseluruhan, MainActivity.kt mengatur dan menampilkan antarmuka pengguna aplikasi dengan tema yang konsisten, memanfaatkan fitur-fitur penuh dari perangkat Android modern, dan menginisialisasi layar permainan utama menggunakan Jetpack Compose.
Buatlah 1 fungsi GameScreen.kt pada folder ui. isi dari GameScreen.kt tersebut dapat dilihat langsung dalam repositori yang saya cantumkan dibawah. Pada intinya, Fungsi utama GameScreen yaitu mengatur tampilan permainan dengan berbagai komponen UI yang diperlukan.
Menambahkan View Model sebagai GameViewModel.kt. pada intinya, GameViewModel bertanggung jawab untuk mengelola data permainan dan menyediakan metode untuk memproses data tersebut. berikut merupakan beberapa fungsi yang ada didalamnya
resetGame()
Fungsi ini mengatur ulang permainan dengan membersihkan kata-kata yang telah digunakan (usedWords.clear()) dan mengatur GameUiState baru dengan kata acak yang diacak (currentScrambledWord).
fun resetGame() {
usedWords.clear()
_uiState.value = GameUiState(currentScrambledWord = pickRandomWordAndShuffle())
}
updateUserGuess()
Fungsi ini memperbarui tebakan pengguna (userGuess) dengan nilai yang diberikan sebagai parameter (guessedWord).
fun updateUserGuess(guessedWord: String){
userGuess = guessedWord
}
checkUserGuess()
Fungsi ini memeriksa apakah tebakan pengguna cocok dengan kata yang sebenarnya (currentWord). Jika cocok, skor diperbarui dan state permainan diperbarui untuk putaran berikutnya. Jika tidak cocok, state diperbarui untuk menunjukkan bahwa tebakan salah. Setelah itu, tebakan pengguna direset.
fun checkUserGuess() {
if (userGuess.equals(currentWord, ignoreCase = true)) {
// User's guess is correct, increase the score
// and call updateGameState() to prepare the game for next round
val updatedScore = _uiState.value.score.plus(SCORE_INCREASE)
updateGameState(updatedScore)
} else {
// User's guess is wrong, show an error
_uiState.update { currentState ->
currentState.copy(isGuessedWordWrong = true)
}
}
// Reset user guess
updateUserGuess("")
}
skipWord()
Fungsi ini digunakan untuk melewati kata saat ini tanpa memperbarui skor. State permainan diperbarui untuk putaran berikutnya, dan tebakan pengguna direset.
fun skipWord() {
updateGameState(_uiState.value.score)
// Reset user guess
updateUserGuess("")
}
updateGameState()
Fungsi ini memperbarui state permainan berdasarkan skor yang diperbarui dan jumlah kata yang digunakan. Jika jumlah kata mencapai maksimum (MAX_NO_OF_WORDS), permainan diakhiri dan isGameOver diatur ke true. Jika tidak, kata acak baru dipilih dan permainan dilanjutkan.
private fun updateGameState(updatedScore: Int) {
if (usedWords.size == MAX_NO_OF_WORDS){
_uiState.update { currentState ->
currentState.copy(
isGuessedWordWrong = false,
score = updatedScore,
isGameOver = true
)
}
} else{
_uiState.update { currentState ->
currentState.copy(
isGuessedWordWrong = false,
currentScrambledWord = pickRandomWordAndShuffle(),
currentWordCount = currentState.currentWordCount.inc(),
score = updatedScore
)
}
}
}
shuffleCurrentWord()
Fungsi ini mengacak karakter dalam kata yang diberikan sampai kata yang diacak berbeda dari kata aslinya.
private fun shuffleCurrentWord(word: String): String {
val tempWord = word.toCharArray()
// Scramble the word
tempWord.shuffle()
while (String(tempWord) == word) {
tempWord.shuffle()
}
return String(tempWord)
}
pickRandomWordAndShuffle()
Fungsi ini memilih kata acak dari daftar allWords dan memastikan kata tersebut belum pernah digunakan sebelumnya. Setelah dipilih, kata tersebut diacak menggunakan shuffleCurrentWord dan ditambahkan ke set usedWords.
private fun pickRandomWordAndShuffle(): String {
// Continue picking up a new random word until you get one that hasn't been used before
currentWord = allWords.random()
return if (usedWords.contains(currentWord)) {
pickRandomWordAndShuffle()
} else {
usedWords.add(currentWord)
shuffleCurrentWord(currentWord)
}
}
}
Menambahkan StateFlow sebagai GameUIState. Secara keseluruhan Kelas GameUiState adalah sebuah data class yang merepresentasikan state dari UI permainan dalam aplikasi unscramble
Membuat package baru dan sekaligus menambahkan WordsData.kt. Secara keseluruhan, s ini berisi daftar kata yang digunakan dalam permainan, konstanta yang menentukan jumlah maksimum kata per permainan, dan jumlah poin yang diberikan kepada pemain untuk setiap kata yang benar.
Dokumentasi Hasil Berikut merupakan dokumentasi hasil dari aplikasi unscramble yang telah saya buat:
Komentar
Posting Komentar