Grimoire Weiss 39
Yetkin
Instagram keşfetimde bir çiftin sürekli kağıt kullanarak bu oyunu oynadığını görüyordum. Ama ne oynayacak bir arkadaşım ne de kağıdım vardı... Ben de Gemini'yi ikna edip oyunu kendi istediğim şekilde dijitale döktüm! Sistem sanırım kodlama olarak Base64 kullanıyor. Daha önce GPT ile benzer oyunlar yaptığımda, skor ve isimler TXT dosyasında düz yazı olarak görünüyordu; bu sefer daha farklı oldu. Kodlar tamamen yapay zeka çıktısıdır, umarım hoşunuza gider.
Kod:
import os
import random
import json
import base64
import sys
from pathlib import Path
# Belgeler klasörünün yolunu bulma ve dosya ayarları
DOCUMENTS_DIR = Path.home() / "Documents"
DOCUMENTS_DIR.mkdir(parents=True, exist_ok=True)
FILE_PATH = DOCUMENTS_DIR / "sayidata.txt"
def veri_yukle():
"""Dosyadan kullanıcı verilerini çözer ve yükler."""
if not FILE_PATH.exists():
return {}
try:
with open(FILE_PATH, 'r', encoding='utf-8') as f:
encoded_data = f.read()
if not encoded_data:
return {}
json_str = base64.b64decode(encoded_data).decode('utf-8')
return json.loads(json_str)
except Exception:
return {}
def veri_kaydet(veriler):
"""Kullanıcı verilerini Base64 ile şifreleyerek kaydeder."""
try:
json_str = json.dumps(veriler)
encoded_data = base64.b64encode(json_str.encode('utf-8')).decode('utf-8')
with open(FILE_PATH, 'w', encoding='utf-8') as f:
f.write(encoded_data)
except Exception as e:
print(f"\n[Hata] Veriler kaydedilemedi: {e}")
def kurallari_goster():
print("\n" + "="*50)
print("📜 SAYI BULMACA OYUNU KURALLARI 📜")
print("="*50)
print("- Her sayı tamamen rastgele oluşur ve kurala tabi değildir.")
print("- Zorluğu sen belirlersin: 4 ile 15 basamaklı sayılar seçebilirsin.")
print("- İpucu (Deneme) sayın, seçtiğin basamak sayısı + 1 kadardır (En fazla 10).")
print("\n🔍 TAHMİN İPUÇLARI:")
print(" [✅] Doğru Yerleşim : Rakam var ve yeri doğru. (Örn: 10_0)")
print(" [🔀] Yeri Yanlış : Rakam sayıda var ama başka basamakta.")
print(" [❌] Yanlış : Bu rakam hedef sayıda hiç yok.")
print("\n💡 PUANLAMA:")
print(" * Sayıyı doğru bilmek (Oyunu kazanmak) = 100 Puan")
print(" * Kullanılmayan her tahmin hakkı = Ekstra 10 Puan")
print(" * Her el sonrasında puanın otomatik kaydedilir.")
print("\n⚠️ DİKKAT: İpucu hakkın biterse oyunu kaybedersin.")
print("\n⌨️ KOMUTLAR:")
print(" /k veya /kurallar -> Bu kurallar menüsünü açar.")
print(" /q -> Oyundan güvenli şekilde çıkar.")
print("="*50 + "\n")
def girdi_kontrol(mesaj):
"""Kullanıcıdan girdi alır ve temel komutları kontrol eder."""
while True:
cevap = input(mesaj).strip().lower()
if cevap == '/q':
print("\nOyundan çıkılıyor... Hoşça kal!")
sys.exit()
elif cevap in ['/k', '/kural', '/kurallar']:
kurallari_goster()
else:
return cevap
def oyunu_baslat():
print("\n" + "*"*50)
print(" "*10 + "🎲 SAYI BULMACA OYUNUNA HOŞ GELDİN! 🎲" + " "*10)
print("*"*50)
veriler = veri_yukle()
isim = girdi_kontrol("Lütfen ismini gir (Çıkmak için /q): ").strip().title()
if isim in veriler:
toplam_skor = veriler[isim]
print(f"\nTekrar hoş geldin, {isim}! Önceki toplam skorun: {toplam_skor} Puan")
else:
toplam_skor = 0
print(f"\nMerhaba {isim}, yeni kaydın oluşturuldu!")
veriler[isim] = toplam_skor
veri_kaydet(veriler)
oturum_skoru = 0
while True:
print("\n" + "-"*40)
while True:
zorluk_str = girdi_kontrol("Zorluk seviyesini seç (4-15 arası bir basamak sayısı gir, kurallar için /k): ")
try:
zorluk = int(zorluk_str)
if 4 <= zorluk <= 15:
break
else:
print("Lütfen 4 ile 15 arasında bir zorluk belirle.")
except ValueError:
print("Lütfen geçerli bir sayı gir.")
max_ipucu = min(zorluk + 1, 10)
kalan_ipucu = max_ipucu
alt_sinir = 10**(zorluk - 1)
ust_sinir = (10**zorluk) - 1
hedef_sayi_str = str(random.randint(alt_sinir, ust_sinir))
print(f"\n🎯 {zorluk} basamaklı sayın oluşturuldu! Doğru tahmin için toplam {max_ipucu} hakkın var.")
el_kazanildi = False
while kalan_ipucu > 0:
tahmin_str = girdi_kontrol(f"\n[Kalan Hak: {kalan_ipucu}] Tahminin nedir? ")
# Normal Girdi Doğrulaması
if not tahmin_str.isdigit():
print("Lütfen sadece sayılardan oluşan bir tahmin gir!")
continue
if len(tahmin_str) != zorluk:
print(f"Dikkat! Hedef sayı {zorluk} basamaklı. (Sen {len(tahmin_str)} basamak girdin)")
continue
if tahmin_str == hedef_sayi_str:
el_kazanildi = True
break
else:
kalan_ipucu -= 1
hedef_listesi = list(hedef_sayi_str)
tahmin_listesi = list(tahmin_str)
maske = ["_"] * zorluk
yeri_yanlis = []
yanlis = []
# 1. Aşama: Doğru Yerleşim
for i in range(zorluk):
if tahmin_listesi[i] == hedef_listesi[i]:
maske[i] = tahmin_listesi[i]
hedef_listesi[i] = None
tahmin_listesi[i] = None
# 2. Aşama: Yeri Yanlış ve Tamamen Yanlış
for i in range(zorluk):
if tahmin_listesi[i] is not None:
if tahmin_listesi[i] in hedef_listesi:
yeri_yanlis.append(tahmin_listesi[i])
hedef_listesi[hedef_listesi.index(tahmin_listesi[i])] = None
else:
yanlis.append(tahmin_listesi[i])
maske_cikti = "".join(maske)
yeri_yanlis_tekil = list(set(yeri_yanlis))
yanlis_tekil = list(set(yanlis))
print("\nAnaliz Sonucu:")
print(f"✅ Doğru Yerleşim: {maske_cikti}")
if yeri_yanlis_tekil:
print(f"🔀 Yeri yanlış sayılar: {', '.join(sorted(yeri_yanlis_tekil))}")
if yanlis_tekil:
print(f"❌ Yanlış sayılar: {', '.join(sorted(yanlis_tekil))}")
# El Sonu Değerlendirmesi
if el_kazanildi:
kazanilan_puan = 100 + (kalan_ipucu * 10)
oturum_skoru += kazanilan_puan
toplam_skor += kazanilan_puan
veriler[isim] = toplam_skor
veri_kaydet(veriler)
print("\n" + "🌟"*15)
print(f"TEBRİKLER! Sayıyı tam on ikiden vurdun: {hedef_sayi_str}")
print(f"Kullanılmayan {kalan_ipucu} hak x 10 + 100 = Bu el {kazanilan_puan} Puan kazandın!")
print(f"Güncel Skorun: {toplam_skor} Puan")
print("🌟"*15)
else:
print("\n" + "💀"*15)
print(f"OYUN BİTTİ! Hakların tükendi. Tutulan sayı şuydu: {hedef_sayi_str}")
print(f"Bu oturumdaki başarın: {oturum_skoru} Puan")
print(f"Sistemdeki Toplam Skorun: {toplam_skor} Puan")
print("💀"*15)
# Çökme hissini engelleyen satır: Ekranın anında kapanmasını durdurur.
input("\n[Sistem] Ekranı kapatmak için Enter'a basın...")
break
if __name__ == "__main__":
oyunu_baslat()
Son düzenleme: