Mustafa Aferin
Özgün ve farklı içerikler üreten python, linux ve teknoloji haberleri okumayı seven birisi

17. Pygame ile Sonsuz Koşu Oyunu Yapımı: Adım Adım Rehber

17. Pygame ile Sonsuz Koşu Oyunu Yapımı: Adım Adım Rehber

Bu makalede, Python'ın güçlü oyun geliştirme kütüphanesi Pygame kullanarak nasıl sonsuz koşu oyunu oluşturacağınızı adım adım göstereceğiz. Sonsuz koşu oyunları, oyuncunun sürekli olarak koştuğu ve engellerden kaçınmaya çalıştığı popüler bir türdür. Bu rehber, Pygame'e yeni başlayanlar için bile kolayca takip edilebilir ve oyun geliştirme becerilerinizi geliştirmenize yardımcı olacaktır.

Gereksinimler

  • Python (3.x önerilir)
  • Pygame kütüphanesi

Pygame'i yüklemek için aşağıdaki komutu kullanabilirsiniz:

pip install pygame

Oyunun Temel Yapısı

Oyunumuzun temel yapısı şu şekilde olacaktır:

  1. Oyun Penceresi Oluşturma: Oyunun görüntüleneceği pencereyi oluşturacağız.
  2. Oyuncu Karakteri: Oyuncuyu temsil eden bir sprite oluşturacağız ve hareketlerini kontrol edeceğiz.
  3. Engeller: Oyuncunun üzerinden atlaması veya kaçması gereken engeller oluşturacağız.
  4. Arka Plan: Sürekli hareket eden bir arka plan oluşturarak sonsuz koşu hissi vereceğiz.
  5. Skor: Oyuncunun ne kadar süre hayatta kaldığını gösteren bir skor sistemi ekleyeceğiz.
  6. Çarpışma Tespiti: Oyuncunun engellere çarpıp çarpmadığını kontrol edeceğiz.
  7. Oyun Döngüsü: Oyunu sürekli olarak güncelleyecek bir döngü oluşturacağız.

Adım 1: Oyun Penceresi Oluşturma

İlk adım olarak, oyun penceresini oluşturmamız gerekiyor. Aşağıdaki kodu kullanarak bir pencere oluşturabiliriz:


import pygame
import random

# Pygame'i başlat
pygame.init()

# Pencere boyutları
width = 800
height = 600

# Pencere oluştur
screen = pygame.display.set_mode((width, height))

# Pencere başlığı
pygame.display.set_caption("Sonsuz Koşu Oyunu")

# Oyun döngüsü
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Ekranı temizle
    screen.fill((255, 255, 255)) # Beyaz arka plan

    # Ekranı güncelle
    pygame.display.flip()

# Pygame'i kapat
pygame.quit()

Bu kod, Pygame'i başlatır, 800x600 boyutlarında bir pencere oluşturur ve pencere başlığını "Sonsuz Koşu Oyunu" olarak ayarlar. Oyun döngüsü, pencere kapatılana kadar çalışmaya devam eder. Her döngüde ekran temizlenir ve güncellenir.

Adım 2: Oyuncu Karakteri Oluşturma

Şimdi oyuncu karakterini oluşturmamız gerekiyor. Oyuncuyu temsil eden bir sprite oluşturacağız ve hareketlerini kontrol edeceğiz. Aşağıdaki kodu kullanarak bir oyuncu karakteri oluşturabiliriz:


class Player(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface([32, 32])
        self.image.fill((0, 0, 255)) # Mavi oyuncu
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.y_velocity = 0
        self.gravity = 1
        self.jump_force = -20

    def update(self):
        # Yerçekimi uygula
        self.y_velocity += self.gravity
        self.rect.y += self.y_velocity

        # Zemine çarpma kontrolü
        if self.rect.bottom > height:
            self.rect.bottom = height
            self.y_velocity = 0

    def jump(self):
        # Sadece zemindeyken zıpla
        if self.rect.bottom == height:
            self.y_velocity = self.jump_force

Bu kod, `Player` adında bir sınıf oluşturur. Bu sınıf, oyuncuyu temsil eden bir sprite'dır. `__init__` metodu, oyuncunun başlangıç konumunu ve görünümünü ayarlar. `update` metodu, yerçekimini uygular ve oyuncunun zemine çarpmasını kontrol eder. `jump` metodu, oyuncunun zıplamasını sağlar.

Adım 3: Engeller Oluşturma

Engeller, oyuncunun üzerinden atlaması veya kaçması gereken nesnelerdir. Aşağıdaki kodu kullanarak engeller oluşturabiliriz:


class Obstacle(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface([32, 64])
        self.image.fill((255, 0, 0)) # Kırmızı engel
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y - 32 # Zemine oturtmak için
        self.speed = -5

    def update(self):
        self.rect.x += self.speed

        # Ekranın dışına çıkınca yok et
        if self.rect.right < 0:
            self.kill()

Bu kod, `Obstacle` adında bir sınıf oluşturur. Bu sınıf, engelleri temsil eden bir sprite'dır. `__init__` metodu, engelin başlangıç konumunu ve görünümünü ayarlar. `update` metodu, engelin sola doğru hareket etmesini sağlar ve ekranın dışına çıktığında yok eder.

Adım 4: Arka Plan Oluşturma

Sonsuz koşu hissi vermek için sürekli hareket eden bir arka plan oluşturmamız gerekiyor. Aşağıdaki kodu kullanarak bir arka plan oluşturabiliriz:


class Background(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.image.load("background.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = -2

    def update(self):
        self.rect.x += self.speed

        # Arka plan tekrarı
        if self.rect.right < 0:
            self.rect.x = width

Bu kod, `Background` adında bir sınıf oluşturur. Bu sınıf, arka planı temsil eden bir sprite'dır. `__init__` metodu, arka plan resmini yükler ve başlangıç konumunu ayarlar. `update` metodu, arka planın sola doğru hareket etmesini sağlar ve ekranın dışına çıktığında tekrar başa dönmesini sağlar. (background.png dosyasını projenize eklemeyi unutmayın!)

Adım 5: Skor Sistemi Ekleme

Oyuncunun ne kadar süre hayatta kaldığını gösteren bir skor sistemi ekleyelim. Aşağıdaki kodu kullanarak bir skor sistemi oluşturabiliriz:


font = pygame.font.Font(None, 36)
score = 0

def draw_score(screen, score):
    text = font.render("Skor: " + str(score), True, (0, 0, 0))
    screen.blit(text, (10, 10))

Bu kod, bir font oluşturur ve `draw_score` adında bir fonksiyon tanımlar. Bu fonksiyon, skoru ekrana yazdırır.

Adım 6: Çarpışma Tespiti Ekleme

Oyuncunun engellere çarpıp çarpmadığını kontrol etmemiz gerekiyor. Aşağıdaki kodu kullanarak çarpışma tespiti ekleyebiliriz:


def check_collision(player, obstacles):
    return pygame.sprite.spritecollideany(player, obstacles)

Bu kod, `check_collision` adında bir fonksiyon tanımlar. Bu fonksiyon, oyuncunun engellere çarpıp çarpmadığını kontrol eder.

Adım 7: Oyun Döngüsünü Tamamlama

Şimdi tüm parçaları bir araya getirerek oyun döngüsünü tamamlayalım. Aşağıdaki kodu oyun döngüsüne ekleyin:


# Sprite grupları
all_sprites = pygame.sprite.Group()
obstacles = pygame.sprite.Group()

# Oyuncu oluştur
player = Player(50, height - 32)
all_sprites.add(player)

# Arka plan oluştur
background1 = Background(0, 0)
background2 = Background(width, 0)
all_sprites.add(background1, background2)

# Engel oluşturma zamanlayıcısı
obstacle_timer = 0
obstacle_interval = 1500 # Milisaniye

# Oyun döngüsü
running = True
game_over = False
clock = pygame.time.Clock()

while running:
    clock.tick(60) # Saniyede 60 kare

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and not game_over:
                player.jump()

    if not game_over:
        # Engel oluşturma
        obstacle_timer += clock.get_time()
        if obstacle_timer > obstacle_interval:
            obstacle_timer = 0
            obstacle = Obstacle(width, height)
            obstacles.add(obstacle)
            all_sprites.add(obstacle)

        # Arka planı güncelle
        background1.update()
        background2.update()

        # Oyuncuyu güncelle
        player.update()

        # Engelleri güncelle
        for obstacle in obstacles:
            obstacle.update()

        # Çarpışma kontrolü
        if check_collision(player, obstacles):
            game_over = True

        # Skoru güncelle
        score += 1

    # Ekranı temizle
    screen.fill((255, 255, 255))

    # Tüm sprite'ları çiz
    all_sprites.draw(screen)

    # Skoru çiz
    draw_score(screen, score)

    # Oyun bittiyse mesaj göster
    if game_over:
        game_over_text = font.render("Oyun Bitti! Skor: " + str(score), True, (0, 0, 0))
        screen.blit(game_over_text, (width // 2 - 100, height // 2 - 18))

    # Ekranı güncelle
    pygame.display.flip()

# Pygame'i kapat
pygame.quit()

Bu kod, sprite gruplarını oluşturur, oyuncuyu, arka planı ve engelleri oluşturur, oyun döngüsünü başlatır ve oyunun tüm mantığını uygular. Oyun bittiğinde, ekranda bir "Oyun Bitti!" mesajı gösterilir.

Sonuç

Bu makalede, Pygame kullanarak nasıl sonsuz koşu oyunu oluşturacağınızı adım adım gösterdik. Bu rehber, Pygame'e yeni başlayanlar için bile kolayca takip edilebilir ve oyun geliştirme becerilerinizi geliştirmenize yardımcı olacaktır. Bu temel oyunu daha da geliştirmek için farklı engeller, güçlendirmeler, farklı karakterler ve daha karmaşık oyun mekanikleri ekleyebilirsiniz. İyi eğlenceler!

Cevap bırakın

E-posta hesabınız yayımlanmayacak.