Klasik Yılan oyunu, programlamaya yeni başlayanlar ve orta seviye geliştiriciler için hem eğlenceli hem de öğretici bir projedir. Bu projede, Python’un standart kütüphanesi olan tkinter ile grafik arayüzü oluşturmayı, oyun döngüsü mantığını kurmayı ve temel bir yapay zeka algoritması olan BFS (Breadth-First Search – Genişlik Öncelikli Arama) ile yılanın kendi kendine hareket etmesini sağlamayı inceleyeceğiz.
🚀 Teknik Mimari ve Tasarım
Projenin temel amacı, karmaşık kütüphanelere ihtiyaç duymadan, Python’un standart yetenekleriyle hızlı ve akıcı bir oyun deneyimi sunmaktır.
1. Durum Yönetimi (State Management)
Oyunun tüm değişkenleri (yılanın gövde koordinatları, mevcut yön, skor, yemek konumu ve oyunun aktiflik durumu) tek bir Python sözlüğü (dict) içerisinde tutulmaktadır.
s = {
"body_x": [cx, cx - 1, cx - 2],
"body_y": [cy, cy, cy],
"dir": DIR_RIGHT,
"score": 0,
"alive": True,
"food_x": 0,
"food_y": 0,
# ...
}
Bu yaklaşım, oyunun durumunu fonksiyonlara parametre olarak geçmeyi kolaylaştırır ve kodun modülerliğini artırır.
2. Grafik Arayüzü ve Render Sistemi
Görüntüleme için tkinter.Canvas bileşeni kullanılmıştır. Oyun alanı, sabit boyutlu hücrelerden (cell = 20px) oluşan bir ızgara (grid) sistemi üzerine kuruludur. Her kare yenilemesinde (frame), kanvas temizlenir ve yılan ile yemek yeniden çizilir.
🕹️ Oyun Mantığı ve Mekanikler
Hareket ve Büyüme
Yılanın hareketi, baş kısmına yeni bir koordinat ekleyip kuyruk kısmından bir koordinat silme prensibine dayanır. Eğer yılan yemekle aynı koordinata gelmişse, kuyruk silme işlemi atlanır ve böylece yılan bir birim büyümüş olur.
Çarpışma Kontrolü
Oyun iki temel durumda sona erer:
- Duvar Çarpışması: Yılanın başı, belirlenen grid sınırlarının dışına çıktığında.
- Kendi Gövdesine Çarpma: Yılanın başı, gövdesini oluşturan koordinat listesindeki herhangi bir hücreyle çakıştığında.
🧠 Yapay Zeka: BFS ile Otomatik Mod
Bu projenin en dikkat çekici özelliği olan “Auto Mode”, yılanın yemeğe giden en kısa yolu bulmasını sağlayan BFS (Genişlik Öncelikli Arama) algoritmasını kullanır.
BFS Nasıl Çalışır?
BFS, başlangıç noktasından (yılanın başı) başlayarak tüm komşu hücreleri katman katman tarayan bir algoritmadır.
- Kuyruk Yapısı: Ziyaret edilecek hücreler bir
deque(çift uçlu kuyruk) içerisinde tutulur. - Engeller: Yılanın kendi gövdesi, algoritma tarafından “aşılamaz duvarlar” olarak tanımlanır.
- En Kısa Yol: Hedefe (yemeğe) ulaşan ilk yol, her zaman en kısa yoldur. Algoritma bu yolu bulduğunda, yılanın başının gitmesi gereken ilk yönü döndürür.
Bu sayede yılan, basit bir zekayla yemeğe yönelir ve engellerden kaçınmaya çalışır.
🛠️ Kod Yapısı ve Modülerlik
Proje iki ana dosyadan oluşmaktadır:
snake_game.py: Ana oyun döngüsü, render işlemleri ve temel oyun mekanikleri.snake_helpers.py: Klavye giriş yönetimi ve BFS tabanlı AI mantığı.
Kontroller:
- Ok Tuşları: Yön değiştirme.
- A Tuşu: Otomatik Modu (AI) açar/kapatır.
- R Tuşu: Oyun bittiğinde yeniden başlatır.
- Q Tuşu: Oyundan çıkar.
🏁 Sonuç
Bu proje; veri yapıları (listeler, sözlükler, setler), algoritma tasarımı (BFS) ve grafik kullanıcı arayüzü (GUI) geliştirme konularını bir araya getiren kompakt bir örnektir. Python ile oyun geliştirmenin temel mantığını kavramak için ideal bir başlangıç noktasıdır.
Ahmet Aksoy
Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.
Python Tkinter GameDevelopment BFS ArtificialIntelligence CodingTutorial PythonProjects