top of page

Tic-Tac-Toe Oyunu


Hands-on Mentor Projects
Hands-on Mentor Projects


Tic-Tac-Toe Nedir?

Tic-Tac-Toe, iki oyuncu arasında oynanan basit bir masa oyunudur. Oyuncular sırayla 3x3'lük bir tahtaya "X" veya "O" yerleştirirler. Amaç, yatay, dikey veya çapraz olarak üçlü bir sıra oluşturmaktır. Eğer tüm kareler dolduğunda hiçbir oyuncu üçlü sıra oluşturamamışsa, oyun berabere biter.


Proje Hedefleri ve Öğrenci Faydaları

Bu proje ile öğrenciler, temel Python bilgilerini kullanarak basit ve fonksiyonel programlar geliştirme becerilerini pekiştireceklerdir. Ayrıca, oyun simülasyonları ve kullanıcı etkileşimi konularında deneyim kazanacaklardır.



Projenin Hedef Çıktıları


  • Temel Python yapıları ve kontrol akışlarını kullanarak bir oyun simülasyonu oluşturma.

  • Kullanıcıdan veri alma ve bu verileri işleyerek oyun akışını yönetme.

  • Fonksiyonlar yardımıyla daha modüler ve okunabilir kod yazma.



Projenin Adım Adım Görevleri


  1. Tahta oluşturma ve başlangıç durumunu ayarlama.

  2. Tahtayı ekrana yazdırma.

  3. Kullanıcıdan hamle alma ve hamlenin geçerliliğini kontrol etme.

  4. Hamleyi tahtaya yerleştirme.

  5. Oyunun kazanıp kazanılmadığını veya berabere olup olmadığını kontrol etme.

  6. Oyunun sonucunu ekrana yazdırma.

  7. Fonksiyonlar kullanarak kodu daha modüler hale getirme.



Adım 1: Tahta Oluşturma ve Başlangıç Durumunu Ayarlama

İlk adım olarak, oyun tahtası oluşturulacak ve başlangıç durumu ayarlanacaktır.


# Tahta oluşturma ve başlangıç durumu
tahta = [[" " for _ in range(3)] for _ in range(3)]

Bu kod parçası, 3x3'lük bir oyun tahtası oluşturur ve tüm kareleri boş olarak ayarlar.


Adım 2: Tahtayı Ekrana Yazdırma

İkinci adımda, tahtanın mevcut durumu ekrana yazdırılacaktır.


# Tahtayı ekrana yazdırma
def tahta_yazdir(tahta):
    """Tahtayı ekrana yazdırır."""
    for satir in tahta:
        print("|".join(satir))
        print("-" * 5)

Bu fonksiyon, tahtanın mevcut durumunu ekrana yazdırır.


Adım 3: Kullanıcıdan Hamle Alma ve Hamlenin Geçerliliğini Kontrol Etme

Üçüncü adımda, kullanıcıdan bir hamle alınacak ve hamlenin geçerliliği kontrol edilecektir.


# Kullanıcıdan hamle alma ve hamlenin geçerliliğini kontrol etme
def hamle_al(oyuncu):
    """Kullanıcıdan geçerli bir hamle alır."""
    while True:
        hamle = input(f"Oyuncu {oyuncu}, hamlenizi girin (satır ve sütun arasında boşluk olacak şekilde): ").split()
        if len(hamle) != 2:
            print("Geçersiz giriş. Lütfen satır ve sütun arasında boşluk olacak şekilde girin.")
            continue
        satir, sutun = hamle
        if not (satir.isdigit() and sutun.isdigit()):
            print("Geçersiz giriş. Lütfen sayı girin.")
            continue
        satir, sutun = int(satir), int(sutun)
        if satir < 0 or satir > 2 or sutun < 0 or sutun > 2:
            print("Geçersiz giriş. Lütfen 0 ile 2 arasında bir sayı girin.")
            continue
        if tahta[satir][sutun] != " ":
            print("Bu kare zaten dolu. Başka bir kare seçin.")
            continue
        return satir, sutun

Bu fonksiyon, kullanıcıdan geçerli bir hamle alır ve döndürür.


Adım 4: Hamleyi Tahtaya Yerleştirme

Dördüncü adımda, kullanıcı hamlesi tahtaya yerleştirilecektir.


# Hamleyi tahtaya yerleştirme
def hamle_yerles(taha, satir, sutun, oyuncu):
    """Hamleyi tahtaya yerleştirir."""
    tahta[satir][sutun] = oyuncu

Bu fonksiyon, kullanıcı hamlesini tahtaya yerleştirir.


Adım 5: Oyunun Kazanıp Kazanılmadığını veya Berabere Olup Olmadığını Kontrol Etme

Beşinci adımda, oyunun kazanıp kazanılmadığı veya berabere olup olmadığı kontrol edilecektir.


# Oyunun kazanıp kazanılmadığını veya berabere olup olmadığını kontrol etme
def kazanan_kontrol(tahta, oyuncu):
    """Oyunun kazanıp kazanılmadığını veya berabere olup olmadığını kontrol eder."""
    # Satırları kontrol etme
    for satir in tahta:
        if all([h == oyuncu for h in satir]):
            return True

    # Sütunları kontrol etme
    for sutun in range(3):
        if all([tahta[satir][sutun] == oyuncu for satir in range(3)]):
            return True

    # Çaprazları kontrol etme
    if all([tahta[i][i] == oyuncu for i in range(3)]) or all([tahta[i][2 - i] == oyuncu for i in range(3)]):
        return True

    return False

def berabere_kontrol(tahta):
    """Oyunun berabere olup olmadığını kontrol eder."""
    for satir in tahta:
        if " " in satir:
            return False
    return True

Bu fonksiyonlar, oyunun kazanıp kazanılmadığını veya berabere olup olmadığını kontrol eder.



Adım 6: Oyunun Sonucunu Ekrana Yazdırma

Altıncı adımda, oyunun sonucu ekrana yazdırılacaktır.


# Oyunun sonucunu ekrana yazdırma
def oyun_sonu(tahta, oyuncu):
    """Oyunun sonucunu ekrana yazdırır."""
    if kazanan_kontrol(tahta, oyuncu):
        print(f"Oyuncu {oyuncu} kazandı!")
        return True
    if berabere_kontrol(tahta):
        print("Oyun berabere!")
        return True
    return False

Bu fonksiyon, oyunun sonucunu ekrana yazdırır.



Adım 7: Fonksiyonlarla Çözüm


Oyunu Başlatma Fonksiyonu

Bu fonksiyon, Tic-Tac-Toe oyununu başlatır ve oyunun akışını yönetir.


def oyunu_baslat():
    """Tic-Tac-Toe oyununu başlatır."""
    tahta = [[" " for _ in range(3)] for _ in range(3)]
    oyuncu = "X"

    while True:
        tahta_yazdir(tahta)
        satir, sutun = hamle_al(oyuncu)
        hamle_yerles(tahta, satir, sutun, oyuncu)

        if oyun_sonu(tahta, oyuncu):
            tahta_yazdir(tahta)
            break

        oyuncu = "O" if oyuncu == "X" else "X"

# Oyunu başlatma
oyunu_baslat()

Bu fonksiyon, Tic-Tac-Toe oyununu başlatır ve oyunun akışını yönetir. Oyuncu hamlelerini alır, hamleleri tahtaya yerleştirir ve oyunun sonucunu kontrol eder.



Kullanılan Konular

  • Veri Tipleri: Bu projede, listeler (tahta) ve stringler (oyuncu hamlesi) kullanılmıştır.

  • Listeler: Oyun tahtası ve hamleler listeler şeklinde tutulmuştur.

  • Koşullu İfadeler: if-else yapıları, kullanıcı hamlelerini kontrol etmek ve oyunun sonucunu belirlemek için kullanılmıştır.

  • Fonksiyonlar: Fonksiyonlar, kodun modüler ve tekrar kullanılabilir olmasını sağlamıştır.

  • Döngüler: while döngüleri, oyunun akışını yönetmek ve kullanıcı hamlelerini almak için kullanılmıştır.


 


bottom of page