Python ile Adam Asmaca Oyunu

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Uzman Üye
Katılım
10 Nis 2021
Mesajlar
291
Çözümler
3
Tepki puanı
65
Ödüller
3
5 HİZMET YILI
Merhaba arkadaşlar,

Bugün sizlerle klasik bir oyun olan Adam Asmaca'yı Python kullanarak nasıl yapabileceğimizi paylaşmak istiyorum.


:özellik:

  • 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

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:
Onaylı Üye
Katılım
21 Haz 2024
Mesajlar
47
Tepki puanı
2
Yaş
30
1 HİZMET YILI
sen kodladıysan güzel olmuş eline sağlık
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst