Proje Hakkında
Genel Bakış
Bu proje, Python (Flask) ile geliştirilmiş, dinamik boyutlu (3x3'ten 10x10'a kadar) bir Tic-Tac-Toe (XOX) oyunudur. Kullanıcı, oyun tahtasının boyutunu seçebilir ve isterse ilk hamleyi yapabilir. Oyun, hem masaüstü hem mobilde modern ve kullanıcı dostu bir arayüze sahiptir. İki farklı oyun modu bulunmaktadır: Tek oyunculu (AI ile) ve iki oyunculu (arkadaşınızla).
Nasıl Oynanır
- Oyun, klasik XOX (Tic-Tac-Toe) mantığıyla çalışır. Tahta boyutu 3x3'ten 10x10'a kadar seçilebilir.
- Oyun modunu belirleyebilirsiniz:
- Bilgisayara karşı (AI ile)
- İki kişilik mod
- İlk hamleyi kim yapacaksa seçebilirsiniz.
- Oyunu başlatmak için "Başla" butonuna tıklayın.
- Sıra geldiğinde tahtadaki boş hücreye tıklayarak hamle yapın.
- Satır, sütun veya çaprazda kazanan kombinasyonu yapmaya çalışın.
- Oyun berabere biterse veya biri kazanırsa sonucu görebilirsiniz.
- Yeniden oynamak için "Yeniden Oyna" butonuna basın.
Amaç
Amaç, yatay, dikey veya çapraz olarak aynı sembolü arka arkaya yerleştirmektir. Aynı sembolleri sırasıyla yerleştiren oyuncu oyunu kazanır.
Oyun Modları
Tek Oyunculu Mod
Bu modda, oyuncu yapay zeka (AI) ile karşılaşır. AI, tahta boyutuna göre farklı stratejiler kullanır.
İki Oyunculu Mod
Bu modda, iki oyuncu aynı cihaz üzerinden sırayla hamle yaparak oynar. Oyuncular X ve O sembollerini kullanır ve sırayla hamle yaparlar. Oyun, bir oyuncu kazandığında veya beraberlik durumunda sona erer.
Oyun Mantığı ve AI Stratejisi
Hamle Sıralaması ve Oyun Akışı
- Oyun, klasik XOX (Tic-Tac-Toe) mantığıyla çalışır. Tahta boyutu 3x3'ten 10x10'a kadar seçilebilir.
- Tek oyunculu modda oyuncu veya yapay zeka (AI), iki oyunculu modda ise oyuncular sırayla hamle yapar. Her hamlede bir hücreye X veya O yerleştirilir.
AI Hamle Sıralaması ve Stratejisi
Minimax (3x3 ve 4x4 için):- Kazanma Hamlesi: AI, kazanabileceği bir hamle varsa önce onu yapar.
- Bloklama: Rakip (kullanıcı) kazanacaksa, AI hemen o hamleyi engeller.
- Çatallama: AI, aynı anda iki kazanma yolu açabiliyorsa bu hamleyi tercih eder.
- Merkez: Tahta boyutu tekse (ör. 3x3), ilk hamlede merkeze oynar.
- Köşe ve Çapraz: Merkez doluysa köşe ve çaprazlara öncelik verir.
- Kenar: Diğer hamleler yoksa kenarlara oynar.
- Hamle Sıralaması: Hamleler, yukarıdaki önceliklere göre sıralanır ve en avantajlısı seçilir.
- İlk Hamle: Tahta boyutu tekse merkeze, çiftse merkez bölgeye (2x2) oynar.
- Kazanma ve Bloklama: AI, simülasyonlarda kazanma veya bloklama hamlelerini önceliklendirir.
- Çatallama ve Avantajlı Hatlar: Birden fazla kazanma yolu açan veya rakibin kazanmasını engelleyen hamleler önceliklidir.
- Merkez, Köşe, Kenar: Avantajlı hamle yoksa merkez, köşe ve kenar sıralamasıyla oynar.
- Simülasyonlar: AI, her olası hamle için binlerce hızlı oyun oynar ve en çok kazandıran hamleyi seçer.
Kazanma ve Engelleme Durumu
- Kazanma: Bir satır, sütun veya çaprazda aynı sembolden (X veya O) n tane olursa o oyuncu kazanır.
- Bloklama: AI, rakibin kazanmasına bir hamle kaldıysa mutlaka o hamleyi engeller.
- Erken Beraberlik: Eğer hiçbir satır, sütun veya çaprazda tek bir oyuncunun kazanma ihtimali kalmadıysa, oyun "Erken Beraberlik" olarak biter.
AI'nın Karar Verme Süreci
- AI, her hamlede önce kazanma ve bloklama ihtimalini kontrol eder.
- Sonra çatallama ve avantajlı hatları değerlendirir.
- Eğer avantajlı bir hamle yoksa, merkez, köşe ve kenar önceliğiyle oynar.
- Büyük tahtalarda, MCTS ile binlerce simülasyon yaparak en iyi hamleyi bulur.
Erken Beraberlik Algoritması
- Oyun sırasında, eğer hiçbir satır, sütun veya çaprazda tek bir oyuncunun kazanma ihtimali kalmadıysa, "erken beraberlik" durumu tespit edilir.
- Bu, özellikle büyük tahtalarda gereksiz hamleleri ve beklemeyi önler.
- Algoritma: Tüm satır, sütun ve çaprazlar kontrol edilir. Eğer bir satır/sütun/çaprazda sadece X ve boşlar veya sadece O ve boşlar varsa, oyun devam eder. Aksi halde, erken beraberlik ilan edilir.
Kullanıcı Deneyimi
- Responsive (mobil uyumlu) arayüz.
- Başlangıçta tahta boyutu ve ilk hamle seçimi.
- AI hamlesi sırasında "AI düşünüyor..." animasyonu.
- Kazanan, beraberlik ve erken beraberlik durumları için anlık bildirimler.
- Yeniden başlatma ve ana sayfaya dönme seçenekleri.
Kod Yapısı
- app.py: Flask backend, oyun mantığı, algoritmalar ve endpointler burada.
- templates/: HTML şablonları (index, game, contact, about).
- static/style.css: Tüm responsive ve modern arayüz stilleri burada.
Ekstra Teknik Detaylar
- AI'nın ilk hamlesi merkez veya köşe öncelikli.
- Çatallama ve bloklama stratejileriyle daha akıllı oyun.
- Her hamle sonrası kazanma ve beraberlik kontrolü optimize edildi.
- Session ile oyun durumu korunur, sayfa yenilense bile oyun devam eder.
Kaynaklar & Geliştirici
Geliştirici: Osman Demir
Web Sitem
|
GitHub
|
LinkedIn
Oyun Sonu Algoritmaları ve Uyarı Sistemi
Beraberlik Algoritması
- Normal Beraberlik: Tüm hücreler dolduğunda ve kimse kazanmadıysa oyun berabere biter.
- Erken Beraberlik: Satır, sütun veya çaprazlarda artık hiçbir oyuncunun kazanma ihtimali kalmadıysa oyun "Erken Beraberlik" olarak biter.
Galibiyet Algoritması
- Bir satır, sütun veya çaprazda aynı sembolden (X veya O) n tane olursa o oyuncu kazanır.
Yenilgi Algoritması
- Rakip yukarıdaki galibiyet koşulunu sağlarsa, oyuncu kaybeder.
Uyarı ve Bildirimler
- Oyun sonunda ekranda büyük ve odaklı bir şekilde "Kazandınız!", "AI Kazandı!", "Beraberlik!" veya "Erken Beraberlik!" mesajı gösterilir.
- Çıkış yaparken veya sekme kapatılamadığında kullanıcıya uyarı mesajı gösterilir:
"Tarayıcı güvenliği nedeniyle sekme kapatılamadı. Lütfen sekmeyi manuel olarak kapatın."