Proje Detayları

Proje Hakkında

Bu projede, Python'da öğrendiğiniz temel kavramları kullanarak eğlenceli bir sayı tahmin oyunu yapacaksınız. Oyun, rastgele bir sayı seçer ve kullanıcıdan bu sayıyı tahmin etmesini ister.

Proje Özellikleri

  • Rastgele sayı üretimi: 1-100 arası rastgele sayı
  • Kullanıcı girişi: Tahmin alma ve doğrulama
  • Geri bildirim: "Daha büyük" veya "Daha küçük" ipuçları
  • Skor sistemi: Tahmin sayısını takip etme
  • Tekrar oynama: Oyunu yeniden başlatma seçeneği
Kullanacağımız Konular:
• Değişkenler ve veri tipleri
• Koşullu ifadeler (if-elif-else)
• While döngüsü
• Kullanıcı girişi (input)
• Random modülü
• Hata yönetimi

Adım 1: Temel Yapı

İlk olarak oyunun temel yapısını oluşturalım:

import random

def sayi_tahmin_oyunu():
    """Sayı tahmin oyunu ana fonksiyonu"""
    print("🎯 Sayı Tahmin Oyununa Hoş Geldiniz!")
    print("1 ile 100 arasında bir sayı tuttum.")
    print("Bakalım kaç tahminde bulabileceksiniz?\n")
    
    # Rastgele sayı üret
    gizli_sayi = random.randint(1, 100)
    tahmin_sayisi = 0
    max_tahmin = 10  # Maksimum tahmin hakkı
    
    print(f"💡 İpucu: {max_tahmin} tahmin hakkınız var!")
    print("-" * 40)
    
    return gizli_sayi, tahmin_sayisi, max_tahmin

# Oyunu başlat
gizli_sayi, tahmin_sayisi, max_tahmin = sayi_tahmin_oyunu()
print(f"🔍 Test için gizli sayı: {gizli_sayi}")  # Bu satırı gerçek oyunda kaldırın

Adım 2: Tahmin Alma ve Kontrol

Şimdi kullanıcıdan tahmin alacak ve kontrol edecek kodu yazalım:

def tahmin_al_ve_kontrol_et(gizli_sayi, tahmin_sayisi, max_tahmin):
    """Kullanıcıdan tahmin alır ve kontrol eder"""
    
    while tahmin_sayisi < max_tahmin:
        try:
            # Kullanıcıdan tahmin al
            kalan_haklar = max_tahmin - tahmin_sayisi
            tahmin = input(f"\n🎯 Tahmininiz (Kalan hak: {kalan_haklar}): ")
            
            # Sayı kontrolü
            tahmin = int(tahmin)
            
            # Geçerli aralık kontrolü
            if tahmin < 1 or tahmin > 100:
                print("⚠️ Lütfen 1 ile 100 arasında bir sayı girin!")
                continue
            
            tahmin_sayisi += 1
            
            # Tahmin kontrolü
            if tahmin == gizli_sayi:
                print(f"\n🎉 TEBRİKLER! {tahmin_sayisi} tahminde doğru sayıyı buldunuz!")
                print(f"🏆 Gizli sayı: {gizli_sayi}")
                return True, tahmin_sayisi
            
            elif tahmin < gizli_sayi:
                print(f"📈 Daha BÜYÜK bir sayı deneyin! (Tahmin: {tahmin})")
            
            else:
                print(f"📉 Daha KÜÇÜK bir sayı deneyin! (Tahmin: {tahmin})")
            
            # Kalan tahmin sayısı uyarısı
            kalan = max_tahmin - tahmin_sayisi
            if kalan > 0:
                print(f"💭 {kalan} tahmin hakkınız kaldı.")
            
        except ValueError:
            print("❌ Lütfen geçerli bir sayı girin!")
            continue
    
    # Tahmin hakkı bitti
    print(f"\n💔 Tahmin hakkınız bitti!")
    print(f"🔍 Gizli sayı: {gizli_sayi} idi.")
    return False, tahmin_sayisi

# Test için simülasyon
import random

def oyun_simulasyonu():
    """Oyun simülasyonu - otomatik tahminler"""
    gizli_sayi = random.randint(1, 100)
    tahmin_sayisi = 0
    max_tahmin = 10
    
    print(f"🎯 Simülasyon: Gizli sayı {gizli_sayi}")
    print("🤖 Bilgisayar tahmin ediyor...\n")
    
    # Binary search benzeri akıllı tahmin
    alt_sinir = 1
    ust_sinir = 100
    
    while tahmin_sayisi < max_tahmin:
        # Orta noktayı tahmin et
        tahmin = (alt_sinir + ust_sinir) // 2
        tahmin_sayisi += 1
        
        print(f"Tahmin {tahmin_sayisi}: {tahmin}")
        
        if tahmin == gizli_sayi:
            print(f"🎉 {tahmin_sayisi} tahminde buldu!")
            break
        elif tahmin < gizli_sayi:
            print("📈 Daha büyük")
            alt_sinir = tahmin + 1
        else:
            print("📉 Daha küçük")
            ust_sinir = tahmin - 1
        
        print(f"   Aralık: {alt_sinir}-{ust_sinir}")
        print()

oyun_simulasyonu()

Adım 3: Tam Oyun Kodu

Şimdi tüm parçaları birleştirip tam oyunu oluşturalım:

import random

class SayiTahminOyunu:
    """Sayı tahmin oyunu sınıfı"""
    
    def __init__(self):
        self.gizli_sayi = 0
        self.tahmin_sayisi = 0
        self.max_tahmin = 10
        self.oyun_bitti = False
        self.kazandi = False
        self.istatistikler = {
            'toplam_oyun': 0,
            'kazanilan_oyun': 0,
            'en_az_tahmin': float('inf'),
            'toplam_tahmin': 0
        }
    
    def yeni_oyun_baslat(self, zorluk="orta"):
        """Yeni oyun başlatır"""
        self.gizli_sayi = random.randint(1, 100)
        self.tahmin_sayisi = 0
        self.oyun_bitti = False
        self.kazandi = False
        
        # Zorluk seviyesi
        zorluk_seviyeleri = {
            "kolay": 15,
            "orta": 10,
            "zor": 7,
            "uzman": 5
        }
        
        self.max_tahmin = zorluk_seviyeleri.get(zorluk, 10)
        
        print("🎯" + "="*50)
        print("    SAYI TAHMİN OYUNU")
        print("="*52)
        print(f"📊 Zorluk: {zorluk.title()} ({self.max_tahmin} tahmin hakkı)")
        print("🎲 1 ile 100 arasında bir sayı tuttum.")
        print("🎯 Bakalım kaç tahminde bulabileceksiniz?")
        print("-"*52)
    
    def tahmin_al(self):
        """Kullanıcıdan tahmin alır"""
        while True:
            try:
                kalan_haklar = self.max_tahmin - self.tahmin_sayisi
                tahmin_str = input(f"\n🎯 Tahmininiz (Kalan: {kalan_haklar}): ")
                
                # Çıkış kontrolü
                if tahmin_str.lower() in ['q', 'quit', 'çık', 'exit']:
                    return None
                
                tahmin = int(tahmin_str)
                
                if 1 <= tahmin <= 100:
                    return tahmin
                else:
                    print("⚠️ Lütfen 1-100 arasında bir sayı girin!")
                    
            except ValueError:
                print("❌ Lütfen geçerli bir sayı girin!")
    
    def tahmin_kontrol_et(self, tahmin):
        """Tahmini kontrol eder"""
        self.tahmin_sayisi += 1
        
        if tahmin == self.gizli_sayi:
            self.kazandi = True
            self.oyun_bitti = True
            self._kazanma_mesaji()
            self._istatistik_guncelle(True)
            
        elif tahmin < self.gizli_sayi:
            fark = self.gizli_sayi - tahmin
            if fark <= 5:
                print(f"🔥 ÇOK YAKIN! Daha BÜYÜK bir sayı deneyin!")
            elif fark <= 15:
                print(f"📈 YAKIN! Daha BÜYÜK bir sayı deneyin!")
            else:
                print(f"📈 Daha BÜYÜK bir sayı deneyin!")
                
        else:
            fark = tahmin - self.gizli_sayi
            if fark <= 5:
                print(f"🔥 ÇOK YAKIN! Daha KÜÇÜK bir sayı deneyin!")
            elif fark <= 15:
                print(f"📉 YAKIN! Daha KÜÇÜK bir sayı deneyin!")
            else:
                print(f"📉 Daha KÜÇÜK bir sayı deneyin!")
        
        # Tahmin hakkı kontrolü
        if self.tahmin_sayisi >= self.max_tahmin and not self.kazandi:
            self.oyun_bitti = True
            self._kaybetme_mesaji()
            self._istatistik_guncelle(False)
        
        elif not self.oyun_bitti:
            kalan = self.max_tahmin - self.tahmin_sayisi
            if kalan <= 2:
                print(f"⚠️ DİKKAT! Sadece {kalan} tahmin hakkınız kaldı!")
            else:
                print(f"💭 {kalan} tahmin hakkınız kaldı.")
    
    def _kazanma_mesaji(self):
        """Kazanma mesajı gösterir"""
        print("\n" + "🎉"*20)
        print("    TEBRİKLER! KAZANDINIZ!")
        print("🎉"*20)
        print(f"🏆 Gizli sayı: {self.gizli_sayi}")
        print(f"📊 Tahmin sayısı: {self.tahmin_sayisi}")
        
        # Performans değerlendirmesi
        if self.tahmin_sayisi <= 3:
            print("🌟 MÜKEMMEL! Şanslısınız ya da çok zekisiniz!")
        elif self.tahmin_sayisi <= 5:
            print("⭐ ÇOK İYİ! Harika bir performans!")
        elif self.tahmin_sayisi <= 7:
            print("👍 İYİ! Güzel bir sonuç!")
        else:
            print("👌 BAŞARILI! Sonunda buldunuz!")
    
    def _kaybetme_mesaji(self):
        """Kaybetme mesajı gösterir"""
        print("\n" + "💔"*20)
        print("    OYUN BİTTİ!")
        print("💔"*20)
        print(f"🔍 Gizli sayı: {self.gizli_sayi} idi.")
        print(f"📊 Toplam tahmin: {self.tahmin_sayisi}")
        print("🎯 Bir dahaki sefere daha dikkatli olun!")
    
    def _istatistik_guncelle(self, kazandi):
        """İstatistikleri günceller"""
        self.istatistikler['toplam_oyun'] += 1
        self.istatistikler['toplam_tahmin'] += self.tahmin_sayisi
        
        if kazandi:
            self.istatistikler['kazanilan_oyun'] += 1
            if self.tahmin_sayisi < self.istatistikler['en_az_tahmin']:
                self.istatistikler['en_az_tahmin'] = self.tahmin_sayisi
    
    def istatistikleri_goster(self):
        """Oyun istatistiklerini gösterir"""
        stats = self.istatistikler
        if stats['toplam_oyun'] == 0:
            print("📊 Henüz oyun oynamamışsınız.")
            return
        
        kazanma_orani = (stats['kazanilan_oyun'] / stats['toplam_oyun']) * 100
        ortalama_tahmin = stats['toplam_tahmin'] / stats['toplam_oyun']
        
        print("\n📊" + "="*30)
        print("    OYUN İSTATİSTİKLERİ")
        print("="*32)
        print(f"🎮 Toplam oyun: {stats['toplam_oyun']}")
        print(f"🏆 Kazanılan: {stats['kazanilan_oyun']}")
        print(f"📈 Kazanma oranı: %{kazanma_orani:.1f}")
        print(f"🎯 Ortalama tahmin: {ortalama_tahmin:.1f}")
        if stats['en_az_tahmin'] != float('inf'):
            print(f"⭐ En az tahmin: {stats['en_az_tahmin']}")
        print("="*32)
    
    def oyun_dongusu(self):
        """Ana oyun döngüsü"""
        print("🎮 Sayı Tahmin Oyununa Hoş Geldiniz!")
        
        while True:
            # Zorluk seçimi
            print("\n🎚️ Zorluk seviyesi seçin:")
            print("1. Kolay (15 tahmin)")
            print("2. Orta (10 tahmin)")
            print("3. Zor (7 tahmin)")
            print("4. Uzman (5 tahmin)")
            print("5. İstatistikler")
            print("6. Çıkış")
            
            secim = input("\nSeçiminiz (1-6): ")
            
            if secim == "1":
                self.yeni_oyun_baslat("kolay")
            elif secim == "2":
                self.yeni_oyun_baslat("orta")
            elif secim == "3":
                self.yeni_oyun_baslat("zor")
            elif secim == "4":
                self.yeni_oyun_baslat("uzman")
            elif secim == "5":
                self.istatistikleri_goster()
                continue
            elif secim == "6":
                print("👋 Oyun için teşekkürler! Görüşmek üzere!")
                break
            else:
                print("❌ Geçersiz seçim! Lütfen 1-6 arası bir sayı girin.")
                continue
            
            # Oyun döngüsü
            while not self.oyun_bitti:
                tahmin = self.tahmin_al()
                
                if tahmin is None:  # Kullanıcı çıkmak istiyor
                    print("🚪 Oyundan çıkılıyor...")
                    self.oyun_bitti = True
                    break
                
                self.tahmin_kontrol_et(tahmin)
            
            # Tekrar oynama
            if self.oyun_bitti and tahmin is not None:
                while True:
                    tekrar = input("\n🔄 Tekrar oynamak ister misiniz? (e/h): ").lower()
                    if tekrar in ['e', 'evet', 'yes', 'y']:
                        break
                    elif tekrar in ['h', 'hayır', 'no', 'n']:
                        print("👋 Oyun için teşekkürler!")
                        return
                    else:
                        print("❌ Lütfen 'e' veya 'h' girin.")

# Oyunu başlat
if __name__ == "__main__":
    oyun = SayiTahminOyunu()
    
    # Demo için kısa bir oyun
    print("🎮 Demo Oyun:")
    oyun.yeni_oyun_baslat("kolay")
    
    # Otomatik demo tahminleri
    demo_tahminler = [50, 75, 62, 68, 65, 67]
    for tahmin in demo_tahminler:
        if not oyun.oyun_bitti:
            print(f"\n🤖 Demo tahmin: {tahmin}")
            oyun.tahmin_kontrol_et(tahmin)
        else:
            break
    
    oyun.istatistikleri_goster()

Adım 4: Gelişmiş Özellikler

Oyunumuzu daha da geliştirelim:

# Gelişmiş özellikler

def ipucu_sistemi(gizli_sayi, tahmin_sayisi):
    """İpucu sistemi - belirli tahmin sayısından sonra ipucu verir"""
    if tahmin_sayisi == 5:
        if gizli_sayi % 2 == 0:
            print("💡 İpucu: Sayı çifttir!")
        else:
            print("💡 İpucu: Sayı tektir!")
    
    elif tahmin_sayisi == 7:
        if gizli_sayi <= 25:
            print("💡 İpucu: Sayı 1-25 arasındadır!")
        elif gizli_sayi <= 50:
            print("💡 İpucu: Sayı 26-50 arasındadır!")
        elif gizli_sayi <= 75:
            print("💡 İpucu: Sayı 51-75 arasındadır!")
        else:
            print("💡 İpucu: Sayı 76-100 arasındadır!")

def tahmin_gecmisi_goster(tahminler):
    """Önceki tahminleri gösterir"""
    if tahminler:
        print(f"📝 Önceki tahminleriniz: {', '.join(map(str, tahminler))}")

def zorluk_ayarlayici(dogru_tahmin_sayisi):
    """Performansa göre zorluk ayarlar"""
    if dogru_tahmin_sayisi <= 3:
        return "Çok kolay geldi! Daha zor seviye deneyin."
    elif dogru_tahmin_sayisi <= 5:
        return "İyi performans! Bu seviye size uygun."
    elif dogru_tahmin_sayisi <= 8:
        return "Ortalama performans. Pratik yapın."
    else:
        return "Zor geldi. Daha kolay seviye deneyin."

# Gelişmiş oyun örneği
def gelismis_oyun_demo():
    """Gelişmiş özelliklerle demo oyun"""
    import random
    
    gizli_sayi = random.randint(1, 100)
    tahminler = []
    tahmin_sayisi = 0
    max_tahmin = 10
    
    print("🎯 Gelişmiş Sayı Tahmin Oyunu Demo")
    print(f"🔍 (Demo için gizli sayı: {gizli_sayi})")
    print("-" * 40)
    
    # Simüle edilmiş tahminler
    demo_tahminler = [50, 25, 75, 62, 68, 65, 67, 66]
    
    for tahmin in demo_tahminler:
        if tahmin_sayisi >= max_tahmin:
            break
            
        tahmin_sayisi += 1
        tahminler.append(tahmin)
        
        print(f"\nTahmin {tahmin_sayisi}: {tahmin}")
        
        if tahmin == gizli_sayi:
            print("🎉 DOĞRU! Oyun bitti!")
            break
        elif tahmin < gizli_sayi:
            print("📈 Daha büyük")
        else:
            print("📉 Daha küçük")
        
        # İpucu sistemi
        ipucu_sistemi(gizli_sayi, tahmin_sayisi)
        
        # Tahmin geçmişi
        if len(tahminler) > 1:
            tahmin_gecmisi_goster(tahminler[:-1])  # Son tahmin hariç
    
    # Performans değerlendirmesi
    if tahmin == gizli_sayi:
        print(f"\n🏆 {tahmin_sayisi} tahminde buldunuz!")
        print(f"💬 {zorluk_ayarlayici(tahmin_sayisi)}")
    else:
        print(f"\n💔 {max_tahmin} tahmin hakkınız bitti!")
        print(f"🔍 Gizli sayı {gizli_sayi} idi.")

gelismis_oyun_demo()

# Bonus: Çoklu oyuncu versiyonu
def coklu_oyuncu_demo():
    """Çoklu oyuncu demo"""
    import random
    
    print("\n" + "="*50)
    print("🎮 ÇOKLU OYUNCU MODU DEMO")
    print("="*50)
    
    gizli_sayi = random.randint(1, 100)
    oyuncular = ["Ali", "Ayşe", "Mehmet"]
    oyuncu_tahminleri = {oyuncu: [] for oyuncu in oyuncular}
    
    print(f"🔍 (Demo için gizli sayı: {gizli_sayi})")
    print(f"👥 Oyuncular: {', '.join(oyuncular)}")
    print("🎯 Kim daha az tahminde bulacak?")
    
    # Her oyuncu için rastgele tahminler
    for tur in range(1, 8):  # Maksimum 7 tur
        print(f"\n--- TUR {tur} ---")
        
        for oyuncu in oyuncular:
            if gizli_sayi in oyuncu_tahminleri[oyuncu]:
                continue  # Bu oyuncu zaten buldu
            
            # Rastgele ama akıllı tahmin
            if not oyuncu_tahminleri[oyuncu]:
                tahmin = random.randint(40, 60)  # İlk tahmin orta aralıkta
            else:
                # Önceki tahminlere göre akıllı tahmin
                son_tahmin = oyuncu_tahminleri[oyuncu][-1]
                if son_tahmin < gizli_sayi:
                    tahmin = random.randint(son_tahmin + 1, 100)
                else:
                    tahmin = random.randint(1, son_tahmin - 1)
            
            oyuncu_tahminleri[oyuncu].append(tahmin)
            
            print(f"  {oyuncu}: {tahmin}", end="")
            
            if tahmin == gizli_sayi:
                print(" 🎉 DOĞRU!")
                print(f"\n🏆 KAZANAN: {oyuncu}")
                print(f"📊 {len(oyuncu_tahminleri[oyuncu])} tahminde buldu!")
                
                # Tüm oyuncuların performansı
                print("\n📈 SONUÇLAR:")
                for p in oyuncular:
                    tahmin_sayisi = len(oyuncu_tahminleri[p])
                    if gizli_sayi in oyuncu_tahminleri[p]:
                        print(f"  {p}: {tahmin_sayisi} tahmin ✅")
                    else:
                        print(f"  {p}: {tahmin_sayisi} tahmin ❌")
                return
            
            elif tahmin < gizli_sayi:
                print(" 📈")
            else:
                print(" 📉")
    
    print(f"\n⏰ Zaman doldu! Gizli sayı {gizli_sayi} idi.")

coklu_oyuncu_demo()

🎯 Proje Özeti

Bu projede öğrendikleriniz:

  • ✅ Random modülü ile rastgele sayı üretimi
  • ✅ While döngüsü ile oyun döngüsü oluşturma
  • ✅ Try-except ile hata yönetimi
  • ✅ Koşullu ifadelerle karar verme
  • ✅ Fonksiyonlarla kod organizasyonu
  • ✅ Sınıflarla nesne yönelimli programlama
  • ✅ Kullanıcı girişi alma ve doğrulama
  • ✅ İstatistik takibi ve performans analizi
Geliştirme Önerileri:
• Grafik arayüz (tkinter) ekleme
• Veritabanı ile skor kaydetme
• Farklı oyun modları (matematik işlemleri, kelime tahmin)
• Ses efektleri ekleme
• Web versiyonu (Flask ile)