Site Admin
Mesajlar: 5
Kayıt: Sal Eki 07, 2025 6:14 pm
Site Admin
PYTHON İLE OYUN YAPMA REHBERİ (Pygame)

Mesaj gönderen ocalocal »

PYTHON İLE OYUN YAPMA REHBERİ (TAM VE DETAYLI KILAVUZ)
1. GİRİŞ

Python, basit sözdizimi ve geniş kütüphane desteği sayesinde oyun geliştirme dünyasına giriş için en uygun dillerden biridir. Profesyonel 3D oyunlar üretmek için C++ veya C# gibi diller tercih edilse de, Python özellikle 2D oyunlar, prototipler ve bağımsız (indie) projeler için mükemmel bir seçimdir. Bu rehberde sıfırdan başlayarak kendi oyununu yazabilecek seviyeye kadar tüm temel bilgileri adım adım bulacaksın.

2. GEREKLİ ORTAM VE KURULUM

Başlamadan önce sisteminde aşağıdaki yazılımların kurulu olması gerekir:

Python 3.x: https://www.python.org/downloads/
adresinden en son sürümü indirip kur.

Kod Editörü: Visual Studio Code, PyCharm, Sublime Text veya Thonny önerilir.

Oyun Kütüphanesi: pygame en yaygın kullanılan 2D oyun kütüphanesidir. Terminal veya Komut Satırında şu komutu çalıştır:

Kod: Tümünü seç

pip install pygame
3. OYUN PROGRAMLAMASININ TEMEL MANTIĞI

Tüm oyunlar aynı çekirdek yapıyı kullanır. Bu yapıyı anlamak, karmaşık projelerde bile yolunu kaybetmemen için en önemli adımdır.

Bir oyunun temeli beş ana bölümden oluşur:

Başlatma: Oyun penceresi ve ayarlar yüklenir.

Girdi Yönetimi: Klavye, fare veya joystick gibi kullanıcı girdileri alınır.

Oyun Mantığı (Güncelleme): Nesnelerin hareketi, çarpışmalar, skor ve oyun kuralları hesaplanır.

Çizim (Render): Oyundaki görseller ekrana çizilir.

Döngü: Yukarıdaki üç adım saniyede onlarca kez tekrar edilir (genellikle 30 veya 60 FPS).

Bu döngüye "Game Loop" adı verilir. Oyun kapanana kadar sürekli çalışır.

4. İLK BASİT OYUN: TOP HAREKETİ

Aşağıdaki örnek, oyun döngüsünün nasıl çalıştığını anlamak için yazabileceğin en basit oyunlardan biridir.

Kod: Tümünü seç

import pygame
import sys

# Pygame başlat
pygame.init()

# Pencere oluştur
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Top Oyunu")

# Renkler
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# Top özellikleri
x, y = 100, 100
radius = 30
speed_x, speed_y = 4, 4

# FPS kontrolü
clock = pygame.time.Clock()

# Oyun döngüsü
while True:
    # Olayları kontrol et
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Topu hareket ettir
    x += speed_x
    y += speed_y

    # Kenarlara çarpınca yön değiştir
    if x - radius < 0 or x + radius > WIDTH:
        speed_x = -speed_x
    if y - radius < 0 or y + radius > HEIGHT:
        speed_y = -speed_y

    # Ekranı temizle
    screen.fill(WHITE)

    # Topu çiz
    pygame.draw.circle(screen, RED, (x, y), radius)

    # Ekranı güncelle
    pygame.display.flip()
    clock.tick(60)  # FPS: 60 kare/saniye

Bu kodu çalıştırdığında ekranda sağa-sola çarpan kırmızı bir top göreceksin. Bu örnek temel oyun döngüsünü ve nesne hareketini öğretir.

5. NESNELERİ VE GİRDİLERİ YÖNETMEK

Bir sonraki adım, klavye veya fare girdilerini kullanarak nesneleri kontrol etmektir. Aşağıdaki örnekte bir karakteri ok tuşları ile hareket ettiriyoruz.

Kod: Tümünü seç

import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Karakter Kontrolü")

WHITE = (255, 255, 255)
BLUE = (0, 0, 255)

player_x = 400
player_y = 300
speed = 5

clock = pygame.time.Clock()

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= speed
    if keys[pygame.K_RIGHT]:
        player_x += speed
    if keys[pygame.K_UP]:
        player_y -= speed
    if keys[pygame.K_DOWN]:
        player_y += speed

    screen.fill(WHITE)
    pygame.draw.rect(screen, BLUE, (player_x, player_y, 50, 50))
    pygame.display.flip()
    clock.tick(60)
Bu örnekle birlikte artık oyuncunun kontrolünü sağlamış oluyorsun.

6. ÇARPIŞMA ALGILAMA

Çarpışma oyunların temel yapı taşlarından biridir. İki nesne çarpıştığında bir olay tetiklenir. Örneğin:

Kod: Tümünü seç

player_rect = pygame.Rect(player_x, player_y, 50, 50)
enemy_rect = pygame.Rect(200, 200, 50, 50)

if player_rect.colliderect(enemy_rect):
    print("Çarpışma gerçekleşti!")
Bu yöntem, karakter ile düşman, mermi ile hedef veya top ile duvar gibi çarpışmaları algılamak için kullanılır.

7. SKOR VE METİN YAZDIRMA

Oyuna skor eklemek için yazı render etmemiz gerekir. Pygame içinde yazı yazdırmak için pygame.font kullanılır.

Kod: Tümünü seç

font = pygame.font.SysFont("Arial", 36)
score = 0

text = font.render(f"Skor: {score}", True, (0, 0, 0))
screen.blit(text, (20, 20))

Bu kod, sol üst köşeye skor yazısını çizer. Skor değiştiğinde render fonksiyonunu yeniden çağırarak güncelleyebilirsin.

8. SES VE MÜZİK EKLEME

Pygame ile ses eklemek oldukça kolaydır:

Kod: Tümünü seç

pygame.mixer.init()
pygame.mixer.music.load("music.mp3")
pygame.mixer.music.play(-1)  # Sonsuz döngü

# Efekt sesi
jump_sound = pygame.mixer.Sound("jump.wav")
jump_sound.play()

Bu sayede oyun atmosferi daha canlı hale gelir.

9. OYUN SAHNELERİ VE MENÜLER

Gerçek oyunlarda menü, oyun, duraklatma ve bitiş ekranları gibi farklı sahneler olur. Bunu uygulamak için farklı durumlar (state) tanımlanır.

Kod: Tümünü seç

state = "menu"

if state == "menu":
    # Menü ekranı kodu
elif state == "game":
    # Oyun ekranı kodu
elif state == "gameover":
    # Bitiş ekranı kodu

Bu yapı, büyük projelerde düzeni korumak için çok önemlidir.

10. KODUNU MODÜLER HALE GETİRMEK

Küçük projelerde tüm kod tek dosyada olabilir, ancak oyun büyüdükçe kodu modüllere ayırmak şarttır. Örneğin:

main.py → ana döngü

player.py → karakter sınıfı

enemy.py → düşman sınıfı

utils.py → yardımcı fonksiyonlar

settings.py → sabitler ve ayarlar

Bu yapı projeyi okunabilir ve sürdürülebilir kılar.

11. GELİŞMİŞ KONU BAŞLIKLARI (İLERİ SEVİYE)

Sprite sınıfı ile nesne yönetimi (pygame.sprite.Sprite)

Kamera takibi ve kaydırma sistemleri

Çizim optimizasyonu (dirty rectangles, double buffering)

Oyun kayıt sistemi (save/load)

Yapay zeka ve yol bulma algoritmaları

Ağa bağlı çok oyunculu sistemler (socket, websockets)

Fizik motorları (pymunk gibi kütüphanelerle)

12. SONUÇ VE ÖNERİLER

Python ile oyun yapmak, özellikle başlangıç ve orta seviye geliştiriciler için mükemmel bir eğitim alanıdır. Önerilen çalışma sırası şöyledir:

Basit nesne hareketi ile başlayın.

Girdi ve çarpışma kontrollerini öğrenin.

Puan ve skor sistemleri ekleyin.

Menü, sahne geçişleri ve ses desteği ekleyerek projenizi büyütün.

Modüler kodlama ve nesne yönelimli programlama ile kodunuzu profesyonelleştirin.

İlk birkaç projede amaç mükemmel bir oyun yapmak değil, oyun mantığını tamamen kavramaktır. Temelleri oturttuktan sonra daha gelişmiş oyunlara geçmek çok daha kolay olacaktır.