Modul Proyek 7: Game "Tangkap Koin"
Tujuan Pembelajaran:
Memahami sistem koordinat 2 Dimensi (Sumbu X dan Y).
Menggunakan Sprite (objek dinamis yang bisa bergerak di dalam game).
Menerapkan logika tabrakan (Collision Detection) antar objek.
Mengelola variabel bawaan sistem seperti Skor (Score) dan Game Over.
Bagian 1: Menyusun Logika di Mode Blocks
Buat proyek baru dengan nama "Tangkap Koin". Biarkan blok
on startdanforeverdi area kerja.Membuat Karakter Pemain & Koin (Sprites):
Buka menu Variables, buat dua variabel:
pemaindankoin.Buka menu Game (berwarna hijau tosca gelap). Tarik blok
create sprite at x:2 y:2.Buka menu Variables, tarik
set [pemain] to 0. Ganti angka0dengan blokcreate spritetadi. Letakkan di dalamon start.Ubah koordinatnya menjadi x: 2, y: 4 (ini akan meletakkan pemain di posisi tengah paling bawah).
Lakukan hal yang sama untuk
koin. Letakkanset [koin] to create sprite...di bawah pemain.Ubah koordinat koin menjadi x: [pick random 0 to 4] (ambil dari menu Math) dan y: 0. Ini membuat koin muncul di baris paling atas secara acak.
Mengatur Kontrol Pemain:
Buka menu Input, tarik
on button A pressed.Buka menu Game, tarik blok
[sprite] change x by 1ke dalamnya. Ubahspritemenjadi variabelpemain, dan ubah angkanya menjadi-1(tombol A bergerak ke kiri).Lakukan hal yang sama untuk tombol B, tetapi biarkan angkanya
1(tombol B bergerak ke kanan).
Membuat Animasi Koin Jatuh:
Di dalam blok
foreveryang sudah ada, tambahkan blok[sprite] change x by 1dari menu Game.Ubah
spritemenjadikoin, ubahxmenjadiy, dan angkanya tetap1. (Ini membuat koin turun 1 langkah).Tambahkan blok
pause 500 msdari menu Basic di bawahnya untuk mengatur kecepatan jatuh koin.
Logika Tabrakan & Skor:
Di bawah blok
pause, masukkan blokif - elsedari menu Logic.Untuk kondisinya, buka menu Game dan cari blok segienam
[sprite] touching [ ]. Masukkan ke sebelahif. Susun menjadi:if [pemain] touching [koin].Jika Menyentuh (Menangkap Koin): Buka menu Game, tarik blok
change score by 1ke dalam areaif. Lalu, kembalikan koin ke atas dengan menambahkan dua blokset [sprite] x to 0dari menu Game. Atur menjadi:koinsetyto0koinsetxtopick random 0 to 4
Jika Gagal Menangkap: Klik tombol (+) pada blok
ifuntuk memunculkanelse if. Tambahkan kondisi perbandingan matematika:if [koin] y = 4.Di dalam area tersebut, buka menu Game dan tarik blok
game over.
Uji coba di simulator: Gunakan tombol A dan B untuk menggerakkan titik di bawah. Tangkap titik yang jatuh dari atas. Jika terlewat dan titik menyentuh dasar layar, akan muncul tulisan "GAME OVER" beserta skor akhir.
Bagian 2: Membedah Kode Python-nya
Klik ke mode Python untuk melihat bagaimana game engine menerjemahkan instruksi visual tersebut:
pemain: game.LedSprite = None
koin: game.LedSprite = None
# 1. Fungsi Kontrol Gerakan
def on_button_pressed_a():
pemain.change(LedSpriteProperty.X, -1)
input.on_button_pressed(Button.A, on_button_pressed_a)
def on_button_pressed_b():
pemain.change(LedSpriteProperty.X, 1)
input.on_button_pressed(Button.B, on_button_pressed_b)
# 2. Pembuatan Objek (Sprites)
pemain = game.create_sprite(2, 4)
koin = game.create_sprite(randint(0, 4), 0)
# 3. Putaran Utama Game (Main Game Loop)
def on_forever():
koin.change(LedSpriteProperty.Y, 1)
basic.pause(500)
# Logika Tabrakan
if pemain.is_touching(koin):
game.add_score(1)
koin.set(LedSpriteProperty.Y, 0)
koin.set(LedSpriteProperty.X, randint(0, 4))
elif koin.get(LedSpriteProperty.Y) == 4:
game.game_over()
basic.forever(on_forever)
Analisis Kode Python untuk Pengembangan Game:
game.LedSprite-> Ini adalah definisi Tipe Data Khusus (Class). Berbeda dengan variabel biasa yang hanya menyimpan teks atau angka, Sprite menyimpan satu paket informasi sekaligus, yaitu koordinat X, koordinat Y, arah hadap, dan tingkat kecerahan lampu LED-nya.LedSpriteProperty.XdanY-> Dalam Python berbasis objek (OOP), kita mengakses properti dari sebuah objek menggunakan metode titik (dot notation). Saat kita memerintahkanpemain.change(LedSpriteProperty.X, -1), kita secara spesifik menyuruh program membongkar memori objekpemaindan mengubah sumbu X-nya saja.pemain.is_touching(koin)-> Fungsi bawaan engine game ini sangat membantu. Jika menulis dari nol, kita harus menggunakan rumus matematika logika yang panjang untuk mencocokkan koordinatX pemain == X koin and Y pemain == Y koin. Dengan library ini, logika tabrakan menjadi satu baris kode yang sangat mudah dibaca.game.game_over()-> Pemanggilan fungsi ini secara otomatis akan menghentikan seluruh program yang berjalan, membersihkan layar LED, dan menjalankan animasi penutup yang menampilkan total skor yang dikumpulkan oleh pemain.