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
• 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ınAdı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)
• Grafik arayüz (tkinter) ekleme
• Veritabanı ile skor kaydetme
• Farklı oyun modları (matematik işlemleri, kelime tahmin)
• Ses efektleri ekleme
• Web versiyonu (Flask ile)