Panduan Lengkap Membuat Game Ular dengan Python

Membuat game klasik seperti Snake (Ular) adalah salah satu cara terbaik bagi pemula untuk memahami konsep dasar pemrograman game, terutama ketika menggunakan bahasa pemrograman yang populer seperti Python. Proyek ini tidak hanya mengajarkan logika dasar, tetapi juga pengenalan penting terhadap pustaka grafis.

Untuk proyek ini, pustaka yang paling umum digunakan adalah Pygame. Pygame menyediakan modul untuk grafis, suara, dan input pengguna yang sangat dibutuhkan dalam pengembangan game 2D sederhana.

Score: 5 Visualisasi sederhana game ular: kepala ular, beberapa segmen tubuh, dan makanan (apel merah).

Langkah 1: Persiapan Lingkungan Python dan Pygame

Sebelum menulis kode, pastikan Anda sudah menginstal Python di sistem Anda. Selanjutnya, kita perlu menginstal pustaka Pygame melalui terminal atau Command Prompt:

pip install pygame

Setelah instalasi berhasil, Anda siap memulai inisialisasi game.

Langkah 2: Inisialisasi Jendela Game

Setiap game Pygame memerlukan inisialisasi sistem dan pengaturan jendela tampilan. Ini adalah kode dasar untuk membuka jendela permainan:


import pygame
import sys

# Inisialisasi Pygame
pygame.init()

# Pengaturan Layar
LEBAR, TINGGI = 600, 400
LAYAR = pygame.display.set_mode((LEBAR, TINGGI))
pygame.display.set_caption('Game Ular Python')

# Warna
PUTIH = (255, 255, 255)
HITAM = (0, 0, 0)
HIJAU = (0, 200, 0)

# Loop Utama Game
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Mengisi layar dengan warna latar belakang
    LAYAR.fill(PUTIH)

    # Update Tampilan
    pygame.display.update()

Langkah 3: Mengelola Ular dan Makanan

Inti dari game ular adalah mengelola posisi segmen ular dan menentukan di mana makanan (apple) muncul. Ular bergerak berdasarkan arah yang ditentukan oleh input keyboard.

Struktur Data Ular

Ular biasanya direpresentasikan sebagai daftar (list) koordinat. Elemen pertama dalam daftar adalah kepala ular.

Logika Pergerakan

Setiap kali loop game berjalan, kita menambahkan segmen baru di posisi kepala saat ini (sesuai arah), dan menghapus segmen terakhir (ekor), sehingga menciptakan ilusi gerakan. Jika ular memakan makanan, kita tidak menghapus ekornya, sehingga ular bertambah panjang.

Tambahkan variabel untuk posisi ular, ukuran blok, dan arah awal:


UKURAN_BLOK = 20
KECEPATAN = 10 # FPS

# Inisialisasi Ular
ular_pos = [100, 50]
ular_tubuh = [[100, 50], [80, 50], [60, 50]]
arah = 'KANAN'
perubahan_arah = arah

# Inisialisasi Makanan (Koordinat harus kelipatan UKURAN_BLOK)
import random
def posisi_makanan_acak():
    x = random.randrange(0, LEBAR // UKURAN_BLOK) * UKURAN_BLOK
    y = random.randrange(0, TINGGI // UKURAN_BLOK) * UKURAN_BLOK
    return [x, y]

makanan_pos = posisi_makanan_acak()
makan = False
skor = 0

Langkah 4: Menangani Input Pengguna dan Menggambar

Di dalam while True loop, kita perlu menambahkan logika untuk membaca tombol panah (atau WASD) dan fungsi untuk menggambar ular serta makanan ke layar.


# --- Di dalam loop event handling ---
    for event in pygame.event.get():
        # ... (pygame.QUIT sama seperti sebelumnya)
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and arah != 'BAWAH':
                perubahan_arah = 'ATAS'
            elif event.key == pygame.K_DOWN and arah != 'ATAS':
                perubahan_arah = 'BAWAH'
            elif event.key == pygame.K_LEFT and arah != 'KANAN':
                perubahan_arah = 'KIRI'
            elif event.key == pygame.K_RIGHT and arah != 'KIRI':
                perubahan_arah = 'KANAN'

# --- Sebelum LAYAR.fill(PUTIH) ---
    
    # 1. Memperbarui Arah
    arah = perubahan_arah

    # 2. Menggerakkan Kepala Ular
    if arah == 'ATAS':
        ular_pos[1] -= UKURAN_BLOK
    elif arah == 'BAWAH':
        ular_pos[1] += UKURAN_BLOK
    elif arah == 'KIRI':
        ular_pos[0] -= UKURAN_BLOK
    elif arah == 'KANAN':
        ular_pos[0] += UKURAN_BLOK

    # 3. Menambahkan Segmen Kepala Baru
    ular_tubuh.insert(0, list(ular_pos))
    
    # 4. Cek Makan Makanan
    if ular_pos[0] == makanan_pos[0] and ular_pos[1] == makanan_pos[1]:
        skor += 1
        makan = True
        makanan_pos = posisi_makanan_acak()
    
    # 5. Menghapus Ekor (jika tidak makan)
    if not makan:
        ular_tubuh.pop()
    else:
        makan = False # Reset status makan

    # 6. Menggambar Elemen
    for posisi in ular_tubuh:
        pygame.draw.rect(LAYAR, HIJAU, (posisi[0], posisi[1], UKURAN_BLOK, UKURAN_BLOK))
    
    # Gambar Makanan (kotak merah)
    pygame.draw.rect(LAYAR, (255, 0, 0), (makanan_pos[0], makanan_pos[1], UKURAN_BLOK, UKURAN_BLOK))

    # Tampilkan Skor
    font = pygame.font.SysFont('times', 25)
    teks = font.render(f'Skor: {skor}', True, HITAM)
    LAYAR.blit(teks, [10, 10])

Langkah 5: Deteksi Tabrakan (Game Over)

Game berakhir jika ular menabrak dinding pembatas atau menabrak dirinya sendiri. Hal ini harus dicek setelah ular bergerak tetapi sebelum elemen digambar.


# --- Setelah langkah 5 dan sebelum langkah 6 (Menggambar) ---

# Cek Tabrakan Dinding
if ular_pos[0] < 0 or ular_pos[0] >= LEBAR or ular_pos[1] < 0 or ular_pos[1] >= TINGGI:
    print("Game Over! Tabrakan Dinding.")
    pygame.quit()
    sys.exit()

# Cek Tabrakan Diri Sendiri (Memeriksa dari segmen kedua ke belakang)
for segmen in ular_tubuh[1:]:
    if ular_pos[0] == segmen[0] and ular_pos[1] == segmen[1]:
        print("Game Over! Tabrakan Diri Sendiri.")
        pygame.quit()
        sys.exit()
            

Kesimpulan

Dengan menggabungkan inisialisasi Pygame, manajemen posisi ular sebagai daftar koordinat, dan logika deteksi tabrakan, Anda telah berhasil membuat fondasi kokoh untuk game ular Anda. Jangan lupa mengatur kecepatan loop menggunakan pygame.time.Clock().tick(KECEPATAN) di akhir loop utama untuk mengontrol laju permainan secara konsisten. Proyek ini membuka pintu untuk eksplorasi lebih lanjut, seperti penambahan level, variasi makanan, dan efek suara.