4 poin oleh GN⁺ 2024-09-23 | 1 komentar | Bagikan ke WhatsApp
  • Flappy Bird, hanya C, tanpa Java/Kotlin, ukuran APK (armeabi-v7a +arm64-v8a) < 100 kilobyte

Riwayat:

  • Menemukan repositori rawdrawandroid pada 2021
  • Termotivasi untuk membuat game sederhana dengan ukuran APK sekecil mungkin
  • Memutuskan untuk membuat klon game Flappy Bird
  • Percobaan pertama dilakukan dengan C++ dan ImGui, tetapi gagal
    • Ukuran APK sekitar 1 megabita
    • Ada kemungkinan game mengalami crash
    • APK hanya menyertakan pustaka armeabi-v7a
    • Struktur proyek rumit dan tidak tertata rapi

Motivasi:

  • Pada 14 September 2024, melihat seseorang di kanal Discord Raylib yang membuat Flappy Bird dengan C#
  • Menjadi ingin menantang ide membuat APK Android dalam C dengan ukuran di bawah 100 kilobyte
  • Di masa sekarang, ketika ukuran APK bisa mencapai 500 megabita, menjaga ukuran tetap di bawah 100 kilobyte adalah hal yang sangat sulit
  • Pada akhirnya berhasil, tetapi tidak mudah

Implementasi:

  • Awalnya mengompilasi Hello World dalam C, memaketkan pustaka ke APK, lalu mengirimkannya ke perangkat melalui USB
  • Mulai mengeksplorasi resource game
  • Awalnya menggunakan suara berformat ogg, tetapi muncul masalah; kemudian beralih ke format mp3 dan mengompresnya
  • Mencoba menggunakan BASS untuk memutar suara, tetapi terlalu berat, sehingga mempelajari OpenSLES agar dapat membaca format MP3 tanpa masalah
  • Menggunakan gambar png, menemukan upng yang lebih ringan daripada stb_image, dan menyelesaikan masalah decoding
  • Rendering dengan OpenGL ES 2 + shader, memutar suara dengan OpenSLES, decoding png dengan upng, dan menggunakan Android Native Activity

Build:

  • Unduh Visual Studio 2022
    • Buka Visual Studio Installer
    • Klik "Edit"
    • Pilih pengembangan aplikasi klasik C++ dan pengembangan aplikasi mobile C++
  • Unduh Android Studio (memerlukan apktool, sdk, ndk)
    • Instal NDK 25.2.9519653 (versi yang lebih tinggi juga dapat digunakan)
  • Pengaturan proyek disetel ke "Debug ARM", tetapi perlu mengubah path di build.bat
  • Kompilasi dengan CTRL + B

Hak cipta:

  • Tidak mengklaim hak cipta. Hak atas game dan resource dimiliki oleh DotGEARS

Inspirasi:

  • rawdrawandroid
  • Flapper
  • Raylib
  • ImGui

Ringkasan GN⁺:

  • Proyek ini adalah upaya yang menantang untuk membuat game Flappy Bird untuk Android dalam bahasa C
  • Berhasil mengimplementasikan game sambil mempertahankan ukuran APK di bawah 100 kilobyte
  • Mengoptimalkan resource dengan berbagai teknologi seperti OpenGL ES 2, OpenSLES, dan upng
  • Proyek ini memberikan wawasan bagi software engineer tentang pengembangan game kecil yang efisien
  • Proyek serupa dengan fungsi sejenis antara lain Raylib dan rawdrawandroid

1 komentar

 
GN⁺ 2024-09-23
Komentar Hacker News
  • Andai ada filter "aplikasi di bawah 10MB" di app store

    • Aplikasi kecil lebih cepat dan lebih sedikit iklan atau pembayaran mikro
    • Aplikasi termometer 3MB terasa lebih memuaskan daripada aplikasi termometer 150MB
  • Berbagi pengalaman pernah menulis tinjauan literatur tentang mengapa orang memainkan Flappy Bird

  • Berbagi pengalaman menerbitkan proyek serupa dengan Nim pada 2020

  • Kodenya kurang dari 4k loc

    457 android_native_app_glue.c
    360 audio.c
    802 game.c
    201 init.c
    93 main.c
    39 mouse.c
    38 shaders.c
    229 texture.c
    1377 upng.c
    27 utils.c
    3623 total
    
  • Super Mario Bros berukuran 40KB

  • Mengira perlu Java glue code untuk membuat APK Android

  • Sangat keren melihat aplikasi Android di bawah 1MB

    • Bisa berjalan bahkan di HTC lama
    • Selamat
  • Rasanya seharusnya dinamai "Floppy Bird"

    • Bisa muat di disket floppy 3.5 inci
  • Menyegarkan dan menyenangkan melihat program/game/aplikasi yang "dibuat dengan penuh perhatian" alih-alih komponen pihak ketiga yang sudah membengkak

  • Penasaran apakah teknik menulis aplikasi C di Android menggunakan rawdrawandroid juga bisa dipakai oleh raylib (dan framework C lainnya)

    • Penasaran apakah lingkungan pengembangan C untuk Android di Android sendiri bisa digunakan lewat Termux