Neler yeni

Oyun Kodlama

📢 KralForum’a Hoş Geldiniz!

Sadece üyelere özel içeriklere erişmek ve topluluğumuzun bir parçası olmak için şimdi ücretsiz üye ol. 👉 Hemen aramıza katıl, sohbetlere dahil ol ve ayrıcalıkları keşfet!

Charizma

KFN Forum Sahibi
Katılım
10 Ağustos 2025
Mesajlar
1,686
Tepkime puanı
502
Puanları
200
Konum
BURSA
Burcum
♑ Oğlak
Konu Sahibi
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.

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.
Hadi başlayalım!

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?
  1. Bu kodu kopyalayıp bilgisayarınızda yilan_oyunu.py gibi bir isimle kaydedin.
  2. Terminali veya komut istemcisini açın, dosyanın olduğu dizine gidin.
  3. python yilan_oyunu.py komutunu çalıştırın.
  4. 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.
 

Zindan

Yeni Üye 🟢
Yeni Uye
Katılım
10 Ağustos 2025
Mesajlar
21
Tepkime puanı
31
Puanları
13
Emeğinize sağlık hocam, devamını bekliyoruz
 
Üst