- Nama Game: [Nama Game]
- Anggota Kelompok:
- [Nadya Zafira - 5025231310]
- [Izzudin Ali Akbari - 5025231313]
- [Alya Rahmatillah Machmud - 5025231315]
- [Cholipah Noer Amanah - 5025231317]
- Tech Stack: [Python, StudioCode, Pygame library]
- Genre: Arcade, Endless Runner
- Gameplay/Rule: Pemain mengendalikan seekor burung yang bergerak maju secara otomatis dan jatuh karena gravitasi. Tujuannya adalah menjaga burung tetap di udara dengan mengetuk layar atau menekan tombol untuk membuatnya "mengepak" ke atas. Pemain harus menghindari tabrakan dengan rintangan (pipa) sambil mempertahankan posisi burung di dalam batas layar.
- Objective: Raih skor tertinggi dengan melewati pipa sebanyak-banyaknya tanpa menabraknya atau terjatuh.
- Single/Multi Player: Single Player
- Pembuatan Rintangan: Pipa yang dibuat secara acak dengan celah yang harus dilewati pemain.
- Sistem Penilaian: Skor meningkat dengan setiap pipa yang berhasil dilewati.
- Simulasi Fisika: Gravitasi dan mekanika mengepak menciptakan gerakan burung yang realistis.
- Layar Game Over: Menampilkan skor akhir dan menyediakan opsi untuk memulai kembali permainan.
- Implementasi: Permainan ini memiliki sistem yang menyimpan skor tertinggi pemain dalam sebuah berkas. Setiap kali permainan berakhir, sistem akan membandingkan skor saat ini dengan skor tertinggi yang tersimpan dan memperbaruinya jika skor baru lebih tinggi.
- Konsep OOP:
Encapsulation & File I/O
digunakan di sini. ClassScoreManager
menangani penyimpanan dan pemuatan skor tinggi, melindungi logika inti, dan memastikan desain modular. - Penerapan SOLID: Single Responsibility Principle (SRP):
ScoreManager
didedikasikan hanya untuk mengelola fungsi penyimpanan/pemuatan skor tinggi. - Design Pattern yang Digunakan:
- Code Snippet:
import json
class ScoreManager:
def __init__(self, file_path='highscore.json'):
self.file_path = file_path
self.high_score = self.load_high_score()
def load_high_score(self):
try:
with open(self.file_path, 'r') as file:
return json.load(file).get('high_score', 0)
except FileNotFoundError:
return 0
def save_high_score(self, score):
if score > self.high_score:
self.high_score = score
with open(self.file_path, 'w') as file:
json.dump({'high_score': self.high_score}, file)
- Jenis Achievement:
Pencapaian berdasarkan tonggak pencapaian (misalnya, "Pipa Pertama Lulus," "10 Pipa Lulus," "Nilai Tertinggi Tercapai").
- Penerapan Pencapaian 1: "Pipa Pertama Berhasil" - Diaktifkan saat pemain berhasil melewati pipa pertama mereka.
- Penerapan Pencapaian 2: "Nilai Tertinggi Tercapai" - Diaktifkan saat pemain mengalahkan skor tertinggi.
- Konsep OOP:
Inheritance & Polymorphism
. Pencapaian yang berbeda-beda diperoleh dari classAchievement
, yang memungkinkan masing-masing untuk menentukan kondisi yang unik untuk membuka kunci. - Penerapan SOLID: Open/Closed Principle (OCP). Sistem dapat diperluas dengan pencapaian baru tanpa mengubah logika pencapaian yang ada.
- Design Pattern yang Digunakan:
- Code Snippet:
class Achievement:
def __init__(self, name):
self.name = name
self.unlocked = False
def check_condition(self, *args, **kwargs):
raise NotImplementedError
class FirstPipeAchievement(Achievement):
def check_condition(self, pipes_passed):
if pipes_passed >= 1:
self.unlocked = True
class HighScoreAchievement(Achievement):
def __init__(self, high_score):
super().__init__('High Score Reached')
self.high_score = high_score
def check_condition(self, current_score):
if current_score > self.high_score:
self.unlocked = True
- Implementasi:
- Konsep OOP:
- Penerapan SOLID (Optional):
- Design Pattern yang Digunakan (Optional):
- Code Snippet:
[Code snippet here]
- Implementasi:
- Konsep OOP:
- Penerapan SOLID (Optional):
- Design Pattern yang Digunakan (Optional):
- Code Snippet:
[Code snippet here]
- Screenshot 1: [Deskripsi]
- Screenshot 2: [Deskripsi]
- Link Demo Video: [URL]
- [Langkah 1]
- [Langkah 2]
- [Langkah n]
- Kendala 1:
- Solusi:
- Kendala 2:
- Solusi:
- Kesimpulan:
- Pembelajaran: