Skip to content

Teknis Pengembangan

Halaman ini bertujuan untuk memberikan gambaran umum tentang pengembangan proyek, termasuk bagaimana proses pengembangan dilakukan, pembagian tugas antar anggota, branch-branch yang digunakan, struktur arsitektur proyek, dan teknologi yang digunakan.


Gambaran Umum

Pembagian Tugas Anggota Kelompok

  1. Ikhsan Satriadi (241511080)

    Bertugas mengelola Game State dan mengembangkan Game Manager serta Main Driver/Game Loop utama permainan. Ikhsan juga bertanggung jawab atas pembuatan dokumentasi web proyek, merancang struktur data untuk node level, dan mengimplementasikan mekanisme parsing berkas level dari format JSON ke dalam struktur data tersebut.

  2. Muhamad Syahid (241511081)

    Fokus pada pengembangan logika entity, khususnya untuk player, serta menangani aspek fisika (physics) yang berlaku pada setiap entitas dalam game. Syahid juga mengembangkan logika untuk berbagai rintangan (obstacles) dan melakukan manajemen data level menggunakan struktur data doubly linked list.

  3. Hisyam Khaeru Umam (241511078)

    Bertanggung jawab atas pembuatan stage dan desain level/map permainan secara keseluruhan. Hisyam juga mengerjakan aspek visual untuk karakter player, manajemen audio dan sound effects (SFX), serta pembuatan berkas-berkas level dalam format JSON.

  4. Helga Athifa Hidayat (241511077)

    Mengembangkan berbagai antarmuka pengguna (UI), termasuk menu interface dan game interface yang interaktif. Helga juga bertugas melakukan manajemen assets grafis yang digunakan dalam permainan dan merancang antarmuka untuk sistem leaderboard.

  5. Hanifidin Ibrahim (241511076)

    Bertugas mengelola dan menampilkan statistik permainan (Game Stats) kepada pemain. Hanifidin juga merancang tampilan visual untuk rintangan (visual obstacle) dan mengimplementasikan fungsionalitas sistem leaderboard dengan menggunakan struktur data singly linked list.

Pembagian Branch

Branch program

  • main: Menyimpan versi stabil dari program.
  • feat/game-state: Berisi pengembangan state game, seperti menu state, stage state.
  • feat/ui: Berisi pengembangan dan implementasi elemen UI, seperti teks dan HUD game.
  • feat/main-menu: Berisi implementasi logika menu utama / start menu.
  • feat/entity-and-physics: Mengembangkan logika entity (player) dan modul fisika.
  • feat/tile-system: Mengimplementasikan sistem tile untuk level design.
  • feat/game-stat: Berisi pengembangan fitur terkait statistik game, seperti skor dan waktu bermain. Juga mengelola leaderboard.
  • feat/coins-and-other-obstacles: Mengembangkan fitur koin dan rintangan dalam permainan.
  • feat/Audio_SFX: Berisi pengembangan fitur audio dan efek suara (SFX) dalam permainan.
  • feat/parsing-level-json: Mengimplementasikan mekanisme parsing berkas level dari format JSON ke dalam struktur data yang digunakan dalam permainan.
  • feat/linked-list-map: Berisi pengembangan struktur data doubly linked list untuk manajemen level dalam permainan.
  • integration: Branch untuk mengintegrasikan semua fitur yang telah dikembangkan ke dalam branch main.

Branch dokumentasi

  • docs: Branch khusus untuk dokumentasi proyek.
  • gh-pages: Branch untuk memublikasi dokumentasi menggunakan GitHub Pages.

Cara Kerja Pengembangan

  • Setiap fitur baru dikembangkan di branch terpisah untuk menjaga kebersihan branch main.
  • Setelah fitur selesai dan diuji, branch tersebut akan di-merge ke integration melalui pull request. Setelah itu, branch integration akan diuji dan di-merge ke main.
  • Komunikasi dilakukan secara rutin (melalui WhatsApp group, GitHub atau Trello) untuk memastikan semua anggota tetap sinkron.

Arsitektur

State Pattern untuk Lifecycle Game

Logika siklus game ini dikelola melalui state pattern. Modul game_state bertindak sebagai antarmuka abstrak yang mengatur alur permainan melalui state konkrit, seperti menu_state, stage0_state, dan leadrboard_state. Dalam modul ini, fungsi-fungsi seperti inisialisasi (init()), pembaruan (update()), dan rendering (render()) didefinisikan sebagai kontrak yang harus diimplementasikan oleh state konkrit. State konkrit seperti menu_state, stage0_state, dan leadrboard_state masing-masing mengimplementasikan logika spesifik untuk menu utama, tahap pertama permainan, dan tahap lanjutan. Disediakan juga fungsi untuk berpindah state (change_game_state). Dengan pemisahan ini, setiap state dapat dikembangkan dan dimodifikasi secara independen tanpa memengaruhi alur logika state lainnya.

Definisi dan implementasi game state dapat dilihat pada:

Tile System untuk Map, Obstacle, dan Collision

Tile system digunakan untuk mendesain map, rintangan, dan mendukung deteksi tabrakan (collision). Sistem ini memanfaatkan array 2D untuk merepresentasikan tata letak level secara grid, di mana setiap elemen array menunjukkan jenis tile, seperti platform, rintangan, atau ruang kosong.

Implementasi dan penggunaan level dan tile system dapat dilihat pada:

Level Modular dengan JSON

Level permainan didefinisikan dalam format JSON, yang memungkinkan desainer untuk membuat dan mengedit level dengan mudah tanpa perlu mengubah kode sumber. Modul level_parser bertanggung jawab untuk membaca berkas JSON, mem-parsing data, dan mengonversinya menjadi struktur data yang digunakan dalam permainan. Ini memungkinkan fleksibilitas dalam desain level dan memudahkan penambahan atau perubahan level di masa depan. Implementasi level dan parsing berkas JSON dapat dilihat pada:

Entity System untuk Player dan Objek dinamis lainnya

Entity system dikelola melalui modul entity, yang menangani semua objek dinamis seperti player dan enemy. Setiap entitas memiliki atribut seperti transformasi posisi yang dikelola melalui modul transform dan mengikuti aturan fisika yang ditentukan oleh modul physics.

Desain ini memastikan modularitas, memudahkan penambahan fitur baru, dan mendukung pengembangan yang efisien dengan pemisahan tanggung jawab yang jelas di setiap modul.

Implementasi entity, player dan modul pendukungnya dapat dilihat pada:


Teknologi yang Digunakan

  • Bahasa Pemrograman:
    • C Programing Language (GCC v14.2.0)
  • Library:

  • Build Tools:

    • GNU Make untuk otomatisasi proses build.
    • GCC (MSYS2) untuk kompilasi source code.
  • Version Control System:
    • Git untuk pengelolaan kode dan kolaborasi.
  • Dokumentasi:
  • Code Editor: