PPB - Pertemuan 10 - Tugas 01
Nama: Hammuda Arsyad
NRP: 5025211146
Kelas: PPB G
Sourcecode: https://github.com/H-mD/cake-clicker-app
Membangun Aplikasi Dessert Clicker dengan Kotlin dan Jetpack Compose
Aplikasi mobile game sederhana sering menjadi pilihan yang tepat untuk mempelajari konsep-konsep dasar pengembangan Android. Salah satu contoh yang menarik adalah Dessert Clicker, sebuah aplikasi berbasis Kotlin yang menggunakan Jetpack Compose untuk antarmuka pengguna. Mari kita telusuri bagaimana aplikasi ini dibangun dan konsep-konsep apa saja yang diterapkan.
Gambaran Umum Aplikasi
Dessert Clicker adalah aplikasi game sederhana di mana pengguna dapat mengklik gambar makanan penutup untuk menghasilkan pendapatan. Setiap klik akan menambah jumlah dessert yang terjual dan pendapatan total. Uniknya, semakin banyak dessert yang terjual, semakin mahal harga dessert yang akan muncul berikutnya.
Fitur Utama
- Klik untuk bermain: Tap gambar dessert untuk menambah penjualan
- Sistem progresif: Dessert berubah dan harga naik seiring peningkatan penjualan
- Pelacakan statistik: Monitor total penjualan dan pendapatan
- Berbagi pencapaian: Bagikan hasil permainan melalui fitur share Android
- UI modern: Menggunakan Material Design 3 dengan dukungan dark/light theme
Arsitektur dan Struktur Kode
1. Model Data
Aplikasi menggunakan data class sederhana untuk merepresentasikan dessert:
data class Dessert(
val imageId: Int,
val price: Int,
val startProductionAmount: Int
)
Setiap dessert memiliki tiga properti:
imageId
: Resource ID untuk gambar dessertprice
: Harga yang diperoleh per klikstartProductionAmount
: Jumlah minimum penjualan untuk memunculkan dessert ini
2. Data Source
Class Datasource
menyediakan daftar dessert yang tersedia dalam permainan. Daftar ini diurutkan berdasarkan startProductionAmount
, dimulai dari cupcake (0 penjualan) hingga oreo (20.000 penjualan).
3. Activity Lifecycle
MainActivity menerapkan logging pada setiap tahap lifecycle Android:
onCreate()
- Inisialisasi aplikasionStart()
,onResume()
- Aplikasi menjadi visible dan activeonPause()
,onStop()
- Aplikasi berhenti atau tidak terlihatonDestroy()
- Aplikasi dihancurkan dari memori
Ini sangat berguna untuk debugging dan memahami bagaimana Android mengelola siklus hidup aplikasi.
Komponen UI dengan Jetpack Compose
1. State Management
Aplikasi menggunakan rememberSaveable
untuk menyimpan state yang persisten:
var revenue by rememberSaveable { mutableStateOf(0) }
var dessertsSold by rememberSaveable { mutableStateOf(0) }
State ini akan tetap tersimpan meskipun terjadi configuration changes (seperti rotasi layar).
2. Komponen UI Utama
DessertClickerApp: Komponen root yang mengelola state global dan koordinasi antar komponen.
DessertClickerScreen: Layar utama yang menampilkan:
- Background image bakery
- Gambar dessert yang dapat diklik
- Informasi transaksi (penjualan dan pendapatan)
TransactionInfo: Panel bawah yang menampilkan statistik permainan dengan styling Material Design.
3. App Bar dengan Fitur Share
App bar dilengkapi dengan tombol share yang memungkinkan pengguna membagikan pencapaian mereka melalui aplikasi lain di Android.
Logika Permainan
Algoritma Penentuan Dessert
Fungsi determineDessertToShow()
menentukan dessert mana yang harus ditampilkan berdasarkan jumlah penjualan:
fun determineDessertToShow(desserts: List<Dessert>, dessertsSold: Int): Dessert {
var dessertToShow = desserts.first()
for (dessert in desserts) {
if (dessertsSold >= dessert.startProductionAmount) {
dessertToShow = dessert
} else {
break
}
}
return dessertToShow
}
Algoritma ini bekerja dengan cara:
- Mulai dari dessert pertama sebagai default
- Iterasi melalui daftar dessert
- Jika penjualan sudah mencapai threshold, update dessert yang ditampilkan
- Berhenti ketika menemukan dessert yang belum bisa diakses
Sistem Progresif
Sistem ini menciptakan sense of progression yang membuat pemain tertarik untuk terus bermain. Dimulai dari cupcake seharga $5, pemain dapat berkembang hingga oreo seharga $6000.
Theming dan Design System
Material Design 3
Aplikasi mengimplementasikan Material Design 3 dengan:
- Color scheme yang konsisten untuk light dan dark theme
- Typography yang hierarkis dan mudah dibaca
- Spacing yang konsisten menggunakan dimension resources
Responsive Design
UI dirancang responsif dengan:
WindowInsets
untuk menangani notch dan navigation barContentScale.Crop
untuk memastikan gambar terlihat baik di berbagai ukuran layar- Padding yang konsisten menggunakan
dimensionResource
Pembelajaran dan Best Practices
1. State Management
Penggunaan rememberSaveable
menunjukkan pentingnya menyimpan state yang persisten dalam aplikasi Android.
2. Separation of Concerns
Kode terorganisir dengan baik:
- Model data terpisah dari UI
- Business logic (seperti
determineDessertToShow
) terpisah dari komponen UI - Theming dikelola dalam file terpisah
3. Error Handling
Aplikasi menangani kasus di mana sharing tidak tersedia dengan menampilkan Toast message.
4. Logging
Implementasi logging yang konsisten membantu dalam debugging dan monitoring aplikasi.
Comments
Post a Comment