Slide 1 / 9

Bedah Kode Scratch

Proyek 23: Flappy Bird Clone - Physics, Obstacle, dan Score System

Materi ini membahas cara membangun game side-scrolling di Scratch dengan logika yang mudah diikuti dan bisa dipraktikkan langsung.

1. Project Overview

Tujuan utama proyek ini adalah memperkenalkan simulasi fisika, obstacle acak, collision detection, scoring system, dan pengelolaan state game.

Tujuan: Introduce physics simulation, random obstacles, collision detection, scoring system
Durasi: 3-4 jam (split 4 pertemuan)
Level: Intermediate
Prerequisite: Movement, events, basic variables

2. Learning Objectives

Fokus pembelajaran dibagi ke beberapa kemampuan inti yang saling terhubung.

[ ] Implement gravity & physics
[ ] Random obstacle generation
[ ] Collision detection
[ ] Variable scoring system
[ ] Game state management (play/game over)

3. Visual Design & Coordinate System

Scratch memakai sistem koordinat dengan titik tengah di layar. Burung akan bergerak pada zona terbang, lalu turun ke ground jika tidak dikendalikan.

Y = 180  # TOP
Y = 0    # CENTER
Y = -180 # BOTTOM / FLOOR

Higher Y = bird naik
Lower Y = bird turun
Collision at Y < -180 = floor hit

4. Gravity System

Burung jatuh otomatis karena velocity terus dipengaruhi gravitasi. Ini adalah inti dari simulasi fisika sederhana.

gravity = -0.5

Each frame:
velocity = velocity + gravity
y = y + velocity

Semakin lama tidak ditekan, velocity menjadi semakin negatif dan burung jatuh lebih cepat.

5. Jump / Flap

Saat pemain menekan SPACE atau klik sprite, velocity langsung diubah menjadi positif agar burung meloncat ke atas.

WHEN [SPACE] PRESSED
set velocity to 8
play sound [wing.mp3]

Setelah itu gravitasi akan menarik burung turun lagi secara bertahap.

6. Obstacle Generation

Pipa dibuat sebagai clone dan muncul dari sisi kanan layar secara berkala. Posisi vertikalnya diacak supaya setiap ronde terasa berbeda.

Clone pipe sprite every (2) seconds

Each clone:
x = 240
y = random(-80 to 80)
move left smoothly (-3 steps per frame)
delete clone when x < -50

7. Collision Detection & Scoring

Jika burung menyentuh pipa atau ground, game berakhir. Jika berhasil melewati pusat pipa, skor bertambah.

IF bird touching [pipe]
OR bird touching [ground]
OR bird.y < 0
THEN set game_over to [true]

WHEN bird passes pipe center (x = 0)
change score by (1)
play sound [ding.mp3]

8. Game State Management

Variabel game_over dipakai untuk memisahkan mode bermain dan mode kalah. Ini membantu game tetap rapi dan mudah dikembangkan.

if game_over = false:
    # mode bermain aktif
else:
    # tampilkan game over screen
    # tunggu restart