🚀 Kendi Uzay Savaşları Oyunumuzu Kodluyoruz!

Merhaba genç kodlayıcı! 👾 Bugün seninle birlikte bilgisayarımızın karşısına geçecek ve kendi uzay oyunumuzu baştan sona kodlayacağız. Bu oyunda bir uzay gemisini yönetecek, üzerimize düşen meteorları vuracak ve en yüksek puanı toplamaya çalışacağız.

Python ve Pygame Zero kullanarak yapacağımız bu harika oyunun kodlarını adım adım öğreneceğiz. Her şeyin nasıl çalıştığını anladıktan sonra, sayfanın en altındaki tüm kodları kopyalayıp kendi oyununu hemen çalıştırabilirsin. Hazırsan uzay maceramız başlasın! ✨


Bölüm 1: Sahneyi Hazırlamak ve Oyuncuları Tanıtmak 🎬

Tüm Dosyaları aşağıdaki linkten indirebilirsin…

Bir tiyatro oyunu düşün. Önce sahnenin büyüklüğüne karar veririz, sonra da oyuncuları sahneye davet ederiz. Kodlamada da aynı şeyi yapıyoruz!

Önce ekranımızın boyutunu belirliyoruz ve Actor (Aktör) diyerek oyunumuzdaki karakterleri (gemimizi, meteoru ve ateşi) yaratıyoruz. Ayrıca oyunun durumunu takip etmek için bazı değişkenlere ihtiyacımız var: Puanımız kaç? Ateş ettik mi? Oyun bitti mi?

Python

import random

WIDTH = 600
HEIGHT = 600

# Aktörler (Oyuncularımız)
gemi = Actor("gemi")
gemi.pos = (300, 550) # Geminin başlangıç yeri

meteor = Actor("meteor")
meteor.pos = (random.randint(50, 550), -50) # Meteor yukarıdan rastgele bir yerden düşsün

fire = Actor("fire")
fire.pos = (-100, -100) # Ateşi şimdilik ekran dışına saklıyoruz

background=Actor('background')

# Oyun Değişkenleri (Oyunun kurallarını tutan kutucuklar)
ates_var_mi = False
puan = 0
oyun_bitti = False

Bölüm 2: Karakterleri Ekranda Çizmek 🎨

Karakterleri tanımladık ama onları ekranda görmek için çizmemiz gerekiyor. Pygame Zero’da bunun için draw() (çiz) adında özel bir bölüm (fonksiyon) vardır. Oyun bitmediyse gemiyi ve meteoru çiziyoruz. Eğer oyun bittiyse, ekranı kırmızı yapıp kocaman bir OYUN BİTTİ yazısı çıkarıyoruz!

Python

def draw():
    screen.clear()
    background.draw() # Arka planı çiz
    
    if not oyun_bitti: # Eğer oyun bitmediyse bunları yap
        gemi.draw()
        meteor.draw()
        if ates_var_mi:
            fire.draw() # Eğer ateş edildiyse lazeri çiz

        # Puanı ekranın sol üst köşesine yazdır
        screen.draw.text(f"Puan: {puan}", (20, 20), fontsize=40, color="white")
    else:
        # Oyun bittiğinde burası çalışır
        screen.fill((200, 0, 0)) # Ekranı kırmızı yap
        screen.draw.text("OYUN BITTI", center=(300, 250), fontsize=80, color="white")
        screen.draw.text(f"Toplam Puan: {puan}", center=(300, 350), fontsize=50, color="yellow")
        screen.draw.text("Yeniden başlamak için 'R' tuşuna bas", center=(300, 450), fontsize=30, color="white")

Bölüm 3: Oyuna Hareket Katmak 🏃‍♂️

Sırada en eğlenceli kısım var: Hareket! update() (güncelle) fonksiyonu oyun çalıştığı sürece saniyede defalarca kez çalışır. Gemimizi sağ ve sol ok tuşlarıyla hareket ettireceğiz. Ayrıca meteorun sürekli aşağı doğru düşmesini sağlayacağız. Eğer meteor ekranın en altından dışarı çıkarsa, maalesef oyunu kaybederiz!

Python

def update():
    global ates_var_mi, puan, oyun_bitti # Oyunun her yerinden bu bilgilere ulaşmak için global diyoruz

    if oyun_bitti:
        if keyboard.r: # Eğer R tuşuna basılırsa oyunu sıfırla
            sifirla()
        return # Oyun bittiyse aşağıdaki kodları okuma, burada dur!

    # 1. Gemi Kontrolü (Sağ ve Sol ok tuşları)
    if keyboard.left and gemi.left > 0:
        gemi.x -= 5
    if keyboard.right and gemi.right < WIDTH:
        gemi.x += 5

    # 2. Meteor Hareketi ve Sınır Kontrolü
    meteor.y += 5 # Meteor her adımda 5 birim aşağı iner
    if meteor.top > HEIGHT: # Meteor alt çizgiyi geçerse
        oyun_bitti = True

Bölüm 4: Hedefi Vurmak ve Puan Kazanmak 🎯

Şimdi de Boşluk (Space) tuşuna basarak ateş edelim! Ateşimiz meteora değerse (buna colliderect yani çarpışma diyoruz), 10 puan kazanacağız ve gökyüzünden yeni bir meteor düşmeye başlayacak. Dikkat et, eğer meteor gemimize değerse oyun biter!

(Not: Bu kodlar Bölüm 3’teki update fonksiyonunun devamıdır.)

Python

    # 3. Ateş Etme
    if keyboard.space and not ates_var_mi:
        fire.pos = gemi.pos # Ateşin çıkış yeri geminin olduğu yerdir
        ates_var_mi = True

    if ates_var_mi:
        fire.y -= 12 # Lazer hızlıca yukarı gider
        if fire.bottom < 0:
            ates_var_mi = False # Ateş ekrandan çıkınca kaybolur

    # 4. Çarpışma: Ateş Meteora Değerse
    if fire.colliderect(meteor): # Vurduk!
        puan += 10 # Puan ekle
        meteor.pos = (random.randint(50, 550), -50) # Yeni meteor yolla
        fire.pos = (-100, -100) # Lazer kaybolsun
        ates_var_mi = False

    # 5. Çarpışma: Meteor Gemiye Değerse
    if gemi.colliderect(meteor): # Eyvah, çarptık!
        oyun_bitti = True

Bölüm 5: İkinci Bir Şans (Oyunu Sıfırlamak) 🔄

Oyun bittikten sonra tekrar oynamak isteyebiliriz. Bölüm 3’te eğer “R” tuşuna basarsak sifirla() adında bir kodun çalışacağını söylemiştik. İşte o kod burada! Puanı sıfırlar, gemiyi ve meteoru ilk yerlerine geri gönderir.

Python

def sifirla():
    """Oyunu başlangıç haline getirir"""
    global puan, oyun_bitti, ates_var_mi
    puan = 0
    oyun_bitti = False
    ates_var_mi = False
    gemi.pos = (300, 550)
    meteor.pos = (random.randint(50, 550), -50)

🚀 Bütün Kodlar Tek Bir Yerde!

İşte oyunumuzun tam hali! Bu kodları Python dosyana yapıştır, karakter resimlerini (gemi.png, meteor.png, fire.png, background.png) images adlı klasörün içine koymayı unutma ve oyunun tadını çıkar!

Python

import random

WIDTH = 600
HEIGHT = 600

# Aktörler
gemi = Actor("gemi")
gemi.pos = (300, 550)

meteor = Actor("meteor")
meteor.pos = (random.randint(50, 550), -50)

fire = Actor("fire")
fire.pos = (-100, -100)

background=Actor('background')

# Oyun Değişkenleri
ates_var_mi = False
puan = 0
oyun_bitti = False

def draw():
    screen.clear()
    background.draw()
    if not oyun_bitti:
        gemi.draw()
        meteor.draw()
        if ates_var_mi:
            fire.draw()

        # Puanı ekrana yazdır
        screen.draw.text(f"Puan: {puan}", (20, 20), fontsize=40, color="white")
    else:
        # Oyun bitti ekranı
        screen.fill((200, 0, 0)) # Ekranı kırmızı yap
        screen.draw.text("OYUN BITTI", center=(300, 250), fontsize=80, color="white")
        screen.draw.text(f"Toplam Puan: {puan}", center=(300, 350), fontsize=50, color="yellow")
        screen.draw.text("Yeniden başlamak için 'R' tuşuna bas", center=(300, 450), fontsize=30, color="white")

def update():
    global ates_var_mi, puan, oyun_bitti

    if oyun_bitti:
        if keyboard.r: # R tuşu ile oyunu sıfırla
            sifirla()
        return # Oyun bittiyse diğer hareketleri hesaplama

    # 1. Gemi Kontrolü
    if keyboard.left and gemi.left > 0:
        gemi.x -= 5
    if keyboard.right and gemi.right < WIDTH:
        gemi.x += 5

    # 2. Meteor Hareketi ve Sınır Kontrolü
    meteor.y += 5
    if meteor.top > HEIGHT: # Meteor alt çizgiyi geçerse
        oyun_bitti = True

    # 3. Ateş Etme
    if keyboard.space and not ates_var_mi:
        fire.pos = gemi.pos
        ates_var_mi = True

    if ates_var_mi:
        fire.y -= 12
        if fire.bottom < 0:
            ates_var_mi = False

    # 4. Çarpışma: Ateş Meteora Değerse
    if fire.colliderect(meteor):
        puan += 10 # Puan ekle
        meteor.pos = (random.randint(50, 550), -50)
        fire.pos = (-100, -100)
        ates_var_mi = False

    # 5. Çarpışma: Meteor Gemiye Değerse
    if gemi.colliderect(meteor):
        oyun_bitti = True

def sifirla():
    """Oyunu başlangıç haline getirir"""
    global puan, oyun_bitti, ates_var_mi
    puan = 0
    oyun_bitti = False
    ates_var_mi = False
    gemi.pos = (300, 550)
    meteor.pos = (random.randint(50, 550), -50)

Yorum yapın