Slide 1 / 9

Bedah Kode Pygame

Proyek 1: Catch the Apple — Logika Dasar Mini-Game 2D

1. Persiapan dan Setup

Menginisialisasi pustaka Pygame dan mengatur kanvas (layar) tempat game berjalan.

import pygame, random, sys

pygame.init() # Menyalakan mesin Pygame
window = pygame.display.set_mode((500, 600)) # Kanvas 500x600 px
pygame.display.set_caption("Catch the Apple")
clock = pygame.time.Clock() # Pengatur stabilitas waktu

2. Instansiasi Objek Game (Aktor)

Membuat wujud nyata objek (keranjang dan apel) menggunakan cetak biru pygame.Rect.

# Format: Rect(Posisi X, Posisi Y, Lebar, Tinggi)
player = pygame.Rect(200, 500, 100, 20) # Keranjang

# X diacak, Y diletakkan di -50 (luar layar atas)
apple = pygame.Rect(random.randint(0, 450), -50, 30, 30) 
score = 0

3. Detak Jantung Game (The Game Loop)

Loop tanpa batas yang menahan agar program tidak tertutup, dan mendengarkan event user.

running = True
while running:
    for event in pygame.event.get():
        # Jika tombol silang (X) di pojok jendela ditekan
        if event.type == pygame.QUIT:
            running = False

4. Kontrol dan Batas Layar

Membaca tekanan keyboard (kiri/kanan) dan memberlakukan dinding virtual (*screen boundary*).

keys = pygame.key.get_pressed()

# Syarat gerak kiri: sisi kiri belum menabrak batas 0
if keys[pygame.K_LEFT] and player.left > 0:
    player.x -= 7

# Syarat gerak kanan: sisi kanan belum menabrak batas 500
if keys[pygame.K_RIGHT] and player.right < 500:
    player.x += 7

5. Logika Apel Jatuh & Lewat

Menerapkan simulasi gaya jatuh (gravitasi) dan penalti jika apel terlewat.

apple.y += 5 # Apel turun terus-menerus sebesar 5px

if apple.y > 600: # Jika apel jatuh melewati batas bawah layar
    apple.y = -50 # Kembalikan ke atas layar
    apple.x = random.randint(0, 450) # Acak posisi horizontalnya
    score -= 1 # Hukuman pengurangan skor

6. Deteksi Tabrakan (Menangkap Apel)

Mengevaluasi intersepsi (perpotongan) antara koordinat keranjang dan koordinat apel.

# Fungsi otomatis pendeteksi tabrakan kotak
if player.colliderect(apple):
    score += 10
    apple.y = -50 # Reset vertikal
    apple.x = random.randint(0, 450) # Reset horizontal

7. Menggambar ke Layar (Rendering)

Prosedur visualisasi yang dilakukan berurutan (dari latar belakang hingga objek paling depan).

window.fill((30, 30, 30)) # 1. Bersihkan layar agar tidak membekas
pygame.draw.rect(window, (0, 150, 255), player) # 2. Gambar Player
pygame.draw.rect(window, (255, 50, 50), apple)  # 3. Gambar Apel

# Merender Surface untuk Teks Skor
font = pygame.font.SysFont(None, 36)
score_text = font.render(f"Skor: {score}", True, (255, 255, 255))
window.blit(score_text, (10, 10)) # Tempel teks di pojok kiri atas

8. Penutup Frame

Tahap final dalam satu siklus iterasi frame, dan prosedur mematikan mesin game.

    pygame.display.update() # Munculkan gambar ke monitor pemain
    clock.tick(60) # Batasi eksekusi loop maksimal 60 kali sedetik

# Dieksekusi hanya jika loop 'while' sudah selesai (user keluar)
pygame.quit()
sys.exit()