Uzman Üye
Merhaba arkadaşlar,
Bugün sizlerle klasik bir oyun olan Adam Asmaca'yı Python kullanarak nasıl yapabileceğimizi paylaşmak istiyorum.

- Rastgele Kelime Seçimi: Oyun, belirli bir kelime listesinden rastgele bir kelime seçer.
- Harf Tahminleri: Oyuncu, kelimenin harflerini tahmin eder ve doğru tahminler kelimenin uygun yerlerinde gösterilir.
- Yanlış Tahminler: Oyuncunun 5 yanlış tahmin hakkı vardır.
- Skor Tablosu: En iyi 5 skor kullanıcı adıyla birlikte kaydedilir ve gösterilir.
- Kullanıcı Kontrolü: Kullanıcı adı ve geçmiş kullanıcı adı kontrolü yapılır.
Nasıl Çalışır ?
Oyun, rastgele bir kelime seçerek başlar ve oyuncuya bu kelimeyi harf harf tahmin ettirir. Oyuncunun tahmin ettiği harfler doğruysa kelimede gösterilir, yanlışsa can kaybı yaşanır. Oyuncunun 5 can hakkı vardır ve bu haklar bitene kadar doğru kelimeyi tahmin etmeye çalışır.
Kelime Listesi
kelimeler = ["vantilatör", "adaptör", "kalem", "fare", "telefon", "kulaklık", "pervane", "merdane", "kestane"]
BÜTÜN KOD
Oyun, rastgele bir kelime seçerek başlar ve oyuncuya bu kelimeyi harf harf tahmin ettirir. Oyuncunun tahmin ettiği harfler doğruysa kelimede gösterilir, yanlışsa can kaybı yaşanır. Oyuncunun 5 can hakkı vardır ve bu haklar bitene kadar doğru kelimeyi tahmin etmeye çalışır.
Kelime Listesi
kelimeler = ["vantilatör", "adaptör", "kalem", "fare", "telefon", "kulaklık", "pervane", "merdane", "kestane"]
BÜTÜN KOD
Python:
import json
import os
import random
try:
from termcolor import cprint
except ImportError:
def cprint(*args, **kwargs):
print(*args)
kelimeler = ["vantilatör", "adaptör", "kalem", "fare", "telefon", "kulaklık", "pervane", "merdane", "kestane"]
def oyun_hazirlik():
"""Oyun için gerekli değişkenleri tanımlar"""
global secilen_kelime, gorunen_kelime, can
secilen_kelime = random.choice(kelimeler)
gorunen_kelime = ["-"] * len(secilen_kelime)
can = 5
def harf_al():
"""Kullanıcıdan bir harf alır, alana kadar gerekirse hata verir, birisi quit yazarsa programı kapatır"""
while True:
harf = input("Bir harf giriniz: ")
if harf.lower() == "quit":
cprint("Gidiyor gönlümün efendisi...", color="red", on_color="on_blue")
exit()
elif len(harf) == 1 and harf.isalpha() and harf not in gorunen_kelime:
return harf.lower()
else:
cprint("Hatalı Giriş", color="red", on_color="on_grey")
def oyun_dongusu():
"""Oyunun ana döngüsü, harf alır, tutarsa görünen karakterler listesi güncellenir,
tutmazsa can azaltılır, ve bu can bitene kadar ya da kelime bilinene kadar devam eder..."""
global gorunen_kelime, can
while can > 0 and secilen_kelime != "".join(gorunen_kelime):
cprint("Kelime: " + "".join(gorunen_kelime), color="cyan", attrs=["bold"])
cprint("Can : <" + "❤" * can + " " * (5 - can) + ">", color="cyan", attrs=["bold"])
girilen_harf = harf_al()
pozisyonlar = harf_kontrol(girilen_harf)
if pozisyonlar:
for p in pozisyonlar:
gorunen_kelime[p] = girilen_harf
else:
can -= 1
def harf_kontrol(girilen_harf):
"""Gelen harfin seçilen kelimede nerelerde olduğunu bulur"""
return [index for index, h in enumerate(secilen_kelime) if h == girilen_harf]
def skor_tablosunu_goster():
"""Skor tablosunu gösterir"""
veri = ayar_oku()
cprint("|Skor\t\tKullanıcı|", color="white", on_color="on_grey")
cprint("|------------------------|", color="white", on_color="on_grey")
for skor, kullanici in veri["skorlar"]:
cprint("|" + str(skor) + "\t\t" + kullanici + " " * (9 - len(kullanici)) + "|", color="white", on_color="on_grey")
cprint("|------------------------|", color="white", on_color="on_grey")
def skor_tablosunu_guncelle():
"""Skor tablosunu son kullanıcının ismiyle ve skoruyla günceller"""
veri = ayar_oku()
veri["skorlar"].append((can, veri["son_kullanan"]))
veri["skorlar"].sort(key=lambda skor_tuplei: skor_tuplei[0], reverse=True)
veri["skorlar"] = veri["skorlar"][:5]
ayar_yaz(veri)
def oyun_sonucu():
"""Oyun bittiğinde kazanıp kazanamadığımızı ekrana yazar."""
if can > 0:
cprint("Kazandınız", color="yellow", on_color="on_red")
skor_tablosunu_guncelle()
else:
cprint("Kaybettiniz", color="red", on_color="on_yellow")
skor_tablosunu_goster()
def dosya_kontrol_et_yoksa_olustur():
"""Ayar dosyası var mı kontrol eder, varsa sağlam mı diye bakar,
bozuk ya da olmayan durum için dosyayı öntanımlı değerlerle oluşturur"""
yaz = False
if os.path.exists("ayarlar.json"):
try:
ayar_oku()
except ValueError as e:
cprint("Hata: ValueError(" + ",".join(e.args) + ")", color="red", on_color="on_blue", attrs=["bold"])
os.remove("ayarlar.json")
yaz = True
else:
yaz = True
if yaz:
ayar_yaz({"skorlar": [], "son_kullanan": ""})
def ayar_oku():
"""Ayarlar dosyasını okur"""
with open("ayarlar.json") as f:
return json.load(f)
def ayar_yaz(veri):
"""Ayarlar dosyasına gönderilen veriyi yazar"""
with open("ayarlar.json", "w") as f:
json.dump(veri, f)
def kullanici_adini_guncelle():
"""Kullanıcıdan isim alıp ayarlara yazdırmaya gönderir"""
veri = ayar_oku()
veri["son_kullanan"] = input("Kullanıcı Adınız: ")
while not veri["son_kullanan"] or len(veri["son_kullanan"]) > 9:
veri["son_kullanan"] = input("Lütfen 9 karakter uzunluğunda bir isim girin: ")
ayar_yaz(veri)
def kullanici_kontrol():
"""Bir önce giriş yapan kullanıcı ismini gösterip kullanıcıya bu siz misiniz diye sorar"""
veri = ayar_oku()
print("Son giriş yapan: " + veri["son_kullanan"])
if not veri["son_kullanan"]:
kullanici_adini_guncelle()
elif input("Bu siz misiniz? (e/h) ").lower() == "h":
kullanici_adini_guncelle()
def main():
"""Programın ana döngüsü, oyunun çalışmasından yükümlü"""
tekrar_edecek_mi = True
dosya_kontrol_et_yoksa_olustur()
cprint("Merhaba, Adam Asmacaya hoşgeldiniz.", color="cyan", on_color="on_magenta", attrs=["bold"])
cprint("Yardım: Oyun sırasında quit diyerek çıkabilirsiniz", color="cyan", on_color="on_magenta", attrs=["bold"])
cprint("-" * 30, color="cyan", on_color="on_magenta", attrs=["bold"])
skor_tablosunu_goster()
kullanici_kontrol()
while tekrar_edecek_mi:
oyun_hazirlik()
oyun_dongusu()
oyun_sonucu()
if input("Devam? (e/h) ").lower() == "h":
tekrar_edecek_mi = False
cprint("Gidiyor gönlümün efendisi...", color="red", on_color="on_blue")
if __name__ == "__main__":
main()
Sizlere eğlenceli , tablo ile oyuncuların adını ve skorunu yazan Adam Asmaca oyunun yapımını göstermek istedim . İyi Forumlar 
Son düzenleme: