Bu proje için en başlangıç dostu ve eğlenceli yöntemlerden biri olan Python'un dahili turtle kütüphanesini kullanacağız. Bu kütüphane sayesinde ek bir kurulum yapmadan görsel bir oyun geliştirebiliriz.
Bu kodu dosyanın en sonuna ekleyin:
Nasıl Çalıştırılır?
Projenin Amacı
- Yılanı yön tuşlarıyla hareket ettirmek.
- Yılanın yemleri yiyerek büyümesini sağlamak.
- Yılan kenarlara veya kendi vücuduna çarptığında oyunu bitirmek.
Gerekli Olanlar
- Bilgisayarınızda Python'un kurulu olması yeterlidir.
Adım 1: Oyun Alanını (Ekranı) Kurmak
Önce oyunumuzun geçeceği pencereyi oluşturalım.
Python:
import turtle
import time
import random
delay = 0.1
# Ekran Kurulumu
screen = turtle.Screen()
screen.title("KralForum ile Yılan Oyunu")
screen.bgcolor("black")
screen.setup(width=600, height=600)
screen.tracer(0) # Ekran güncellemelerini kapatır, daha akıcı bir görüntü sağlar
- turtle: Grafiksel çizimler için ana kütüphanemiz.
- time: Yılanın hızını ayarlamak için kullanacağız.
- random: Yemleri rastgele yerlerde oluşturmak için.
- screen.tracer(0): Animasyonları manuel olarak güncellememizi sağlar. Bu, yılanın parçalarının tek tek hareket etmesi yerine bir bütün olarak akıcı hareket etmesini sağlar.
Adım 2: Yılanın Kafasını ve Yemi Oluşturmak
Şimdi ana karakterimiz olan yılanın kafasını ve ilk yemi ekrana yerleştirelim.
Python:
# Yılanın Kafası
head = turtle.Turtle()
head.speed(0)
head.shape("square")
head.color("white")
head.penup() # Çizim yapmayı durdurur
head.goto(0, 0)
head.direction = "stop"
# Yem
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100)
- turtle.Turtle(): Ekranda hareket eden bir nesne (kalem) oluşturur.
- penup(): Hareket ederken arkasında iz bırakmasını engeller.
- goto(x, y): Nesneyi belirtilen koordinatlara taşır.
Adım 3: Yılanın Hareket Fonksiyonlarını Yazmak
Yılanı klavye ile kontrol edebilmemiz için yön fonksiyonlarını ve klavye dinleyicilerini eklemeliyiz.
Python:
# Yılanın Vücut Parçaları (Kuyruk)
segments = []
# Fonksiyonlar
def go_up():
if head.direction != "down":
head.direction = "up"
def go_down():
if head.direction != "up":
head.direction = "down"
def go_left():
if head.direction != "right":
head.direction = "left"
def go_right():
if head.direction != "left":
head.direction = "right"
def move():
if head.direction == "up":
y = head.ycor()
head.sety(y + 20)
if head.direction == "down":
y = head.ycor()
head.sety(y - 20)
if head.direction == "left":
x = head.xcor()
head.setx(x - 20)
if head.direction == "right":
x = head.xcor()
head.setx(x + 20)
# Klavye Bağlantıları
screen.listen()
screen.onkeypress(go_up, "Up")
screen.onkeypress(go_down, "Down")
screen.onkeypress(go_left, "Left")
screen.onkeypress(go_right, "Right")
- Yön fonksiyonları, yılanın tam tersi yöne gitmesini engeller (örneğin yukarı giderken aniden aşağı gidemez).
- screen.listen(): Klavyeden gelen girdileri dinlemeye başlar.
- screen.onkeypress(): Belirtilen tuşa basıldığında hangi fonksiyonun çalışacağını belirler.
Adım 4: Ana Oyun Döngüsü
Oyunun kalbi burasıdır. Bu döngü, oyun kapanana kadar sürekli çalışır ve her adımda ekranı günceller, çarpışmaları kontrol eder ve yılanı hareket ettirir.Bu kodu dosyanın en sonuna ekleyin:
Python:
# Ana oyun döngüsü
while True:
screen.update() # Ekranı her döngüde yenile
# Kenarlara çarpma kontrolü
if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
time.sleep(1)
head.goto(0, 0)
head.direction = "stop"
# Kuyruğu temizle
for segment in segments:
segment.goto(1000, 1000) # Ekrran dışına taşı
segments.clear()
# Yem yeme kontrolü
if head.distance(food) < 20:
# Yemi rastgele bir yere taşı
x = random.randint(-280, 280)
y = random.randint(-280, 280)
food.goto(x, y)
# Yeni bir segment (kuyruk parçası) ekle
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("grey")
new_segment.penup()
segments.append(new_segment)
# Kuyruğun kafayı takip etmesi
# En sondaki segmentten başlayarak bir önündekinin pozisyonunu alır
for index in range(len(segments)-1, 0, -1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x, y)
# İlk segmentin (kafanın arkasındaki) kafanın pozisyonuna gitmesi
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x, y)
move()
# Vücuda çarpma kontrolü
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "stop"
for seg in segments:
seg.goto(1000, 1000)
segments.clear()
time.sleep(delay) # Her döngü arasında kısa bir bekleme (yılan hızı)
Kodun Tamamı ve Çalıştırma
Tüm adımları birleştirdiğimizde ortaya çıkan tam kod:
Python:
import turtle
import time
import random
delay = 0.1
# Skor
score = 0
high_score = 0
# Ekran Kurulumu
screen = turtle.Screen()
screen.title("KralForum ile Yılan Oyunu")
screen.bgcolor("black")
screen.setup(width=600, height=600)
screen.tracer(0)
# Yılanın Kafası
head = turtle.Turtle()
head.speed(0)
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "stop"
# Yem
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100)
segments = []
# Fonksiyonlar
def go_up():
if head.direction != "down":
head.direction = "up"
def go_down():
if head.direction != "up":
head.direction = "down"
def go_left():
if head.direction != "right":
head.direction = "left"
def go_right():
if head.direction != "left":
head.direction = "right"
def move():
if head.direction == "up":
y = head.ycor()
head.sety(y + 20)
if head.direction == "down":
y = head.ycor()
head.sety(y - 20)
if head.direction == "left":
x = head.xcor()
head.setx(x - 20)
if head.direction == "right":
x = head.xcor()
head.setx(x + 20)
# Klavye Bağlantıları
screen.listen()
screen.onkeypress(go_up, "Up")
screen.onkeypress(go_down, "Down")
screen.onkeypress(go_left, "Left")
screen.onkeypress(go_right, "Right")
# Ana oyun döngüsü
while True:
screen.update()
# Kenarlara çarpma kontrolü
if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
time.sleep(1)
head.goto(0, 0)
head.direction = "stop"
for segment in segments:
segment.goto(1000, 1000)
segments.clear()
# Yem yeme kontrolü
if head.distance(food) < 20:
x = random.randint(-280, 280)
y = random.randint(-280, 280)
food.goto(x, y)
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("grey")
new_segment.penup()
segments.append(new_segment)
# Kuyruğun kafayı takip etmesi
for index in range(len(segments)-1, 0, -1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x, y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x, y)
move()
# Vücuda çarpma kontrolü
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "stop"
for seg in segments:
seg.goto(1000, 1000)
segments.clear()
time.sleep(delay)
screen.mainloop()
Nasıl Çalıştırılır?
- Bu kodu kopyalayıp bilgisayarınızda yilan_oyunu.py gibi bir isimle kaydedin.
- Terminali veya komut istemcisini açın, dosyanın olduğu dizine gidin.
- python yilan_oyunu.py komutunu çalıştırın.
- Açılan pencerede yön tuşlarını kullanarak oynamaya başlayın!
Geliştirme Fikirleri
Bu temel oyunun üzerine birçok özellik ekleyebilirsiniz:- Skor Sistemi: Her yem yediğinde artan bir skor tablosu ekleyin.
- Artan Hız: Yılan uzadıkça delay değerini azaltarak oyunu hızlandırın.
- Oyun Bitti / Başla Ekranı: Daha profesyonel bir görünüm için.
- En Yüksek Skoru Kaydetme: En yüksek skoru bir dosyaya yazdırıp okutun.