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.
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.