Kembali

Modul Proyek 7: Game


Modul Proyek 7: Game "Tangkap Koin"

Tujuan Pembelajaran:

  1. Memahami sistem koordinat 2 Dimensi (Sumbu X dan Y).

  2. Menggunakan Sprite (objek dinamis yang bisa bergerak di dalam game).

  3. Menerapkan logika tabrakan (Collision Detection) antar objek.

  4. Mengelola variabel bawaan sistem seperti Skor (Score) dan Game Over.


Bagian 1: Menyusun Logika di Mode Blocks

  1. Buat proyek baru dengan nama "Tangkap Koin". Biarkan blok on start dan forever di area kerja.

  2. Membuat Karakter Pemain & Koin (Sprites):

    • Buka menu Variables, buat dua variabel: pemain dan koin.

    • 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 angka 0 dengan blok create sprite tadi. Letakkan di dalam on start.

    • Ubah koordinatnya menjadi x: 2, y: 4 (ini akan meletakkan pemain di posisi tengah paling bawah).

    • Lakukan hal yang sama untuk koin. Letakkan set [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.

  3. Mengatur Kontrol Pemain:

    • Buka menu Input, tarik on button A pressed.

    • Buka menu Game, tarik blok [sprite] change x by 1 ke dalamnya. Ubah sprite menjadi variabel pemain, 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).

  4. Membuat Animasi Koin Jatuh:

    • Di dalam blok forever yang sudah ada, tambahkan blok [sprite] change x by 1 dari menu Game.

    • Ubah sprite menjadi koin, ubah x menjadi y, dan angkanya tetap 1. (Ini membuat koin turun 1 langkah).

    • Tambahkan blok pause 500 ms dari menu Basic di bawahnya untuk mengatur kecepatan jatuh koin.

  5. Logika Tabrakan & Skor:

    • Di bawah blok pause, masukkan blok if - else dari menu Logic.

    • Untuk kondisinya, buka menu Game dan cari blok segienam [sprite] touching [ ]. Masukkan ke sebelah if. Susun menjadi: if [pemain] touching [koin].

    • Jika Menyentuh (Menangkap Koin): Buka menu Game, tarik blok change score by 1 ke dalam area if. Lalu, kembalikan koin ke atas dengan menambahkan dua blok set [sprite] x to 0 dari menu Game. Atur menjadi:

      • koin set y to 0

      • koin set x to pick random 0 to 4

    • Jika Gagal Menangkap: Klik tombol (+) pada blok if untuk memunculkan else 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.X dan Y -> Dalam Python berbasis objek (OOP), kita mengakses properti dari sebuah objek menggunakan metode titik (dot notation). Saat kita memerintahkan pemain.change(LedSpriteProperty.X, -1), kita secara spesifik menyuruh program membongkar memori objek pemain dan 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 koordinat X 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.

Sudah selesai memahami materi ini?
πŸš€ Mulai Uji Pemahaman Anda