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 dessert
  • price: Harga yang diperoleh per klik
  • startProductionAmount: 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 aplikasi
  • onStart(), onResume() - Aplikasi menjadi visible dan active
  • onPause(), onStop() - Aplikasi berhenti atau tidak terlihat
  • onDestroy() - 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:

  1. Mulai dari dessert pertama sebagai default
  2. Iterasi melalui daftar dessert
  3. Jika penjualan sudah mencapai threshold, update dessert yang ditampilkan
  4. 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 bar
  • ContentScale.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.

Dokumentasi






Comments

Popular posts from this blog

PPB - Pertemuan 04 - Tugas 01

PPB - Pertemuan 07 - Tugas 01

PPB - ETS