top of page

Üyelik Paketlerinde 25% İndirim İçin Kodun : "welcome"

Blackjack Oyunu


Hands-on Mentor Projects
Hands-on Mentor Projects

Blackjack Nedir?


Blackjack, bir deste veya daha fazla deste kart ile oynanan bir şans oyunudur. Oyunun amacı, kartların toplam değeri 21'e ulaşarak veya mümkün olduğunca 21'e yakın bir değer alarak krupiyeyi yenmektir. Blackjack, genellikle casinoların vazgeçilmez oyunlarından biridir ve hem eğlenceli hem de stratejik bir oyun olarak bilinir. Oyunun kökeni 18. yüzyıl Fransa'sına dayanır ve oradan tüm dünyaya yayılmıştır.


Proje Hedefleri ve Öğrenci Faydaları


Bu proje ile öğrenciler, temel Python bilgilerini kullanarak basit ve fonksiyonel programlar geliştirme becerilerini pekiştireceklerdir. Ayrıca, kart oyunları gibi popüler uygulamaların nasıl kodlandığını anlayarak, oyun simülasyonu ve algoritma geliştirme konularında deneyim kazanacaklardır.


Projenin Hedef Çıktıları


  • Temel Python yapıları ve kontrol akışlarını kullanarak bir oyun simülasyonu oluşturma.

  • Kullanıcıdan veri alma ve bu verileri işleyerek oyun akışını yönetme.

  • Fonksiyonlar yardımıyla daha modüler ve okunabilir kod yazma.


Projenin Adım Adım Görevleri


  1. Kart destesi oluşturma ve kartların değerlerini tanımlama.

  2. Oyuncu ve krupiye için başlangıç kartlarını dağıtma.

  3. Oyuncunun kart çekme işlemlerini yönetme.

  4. Krupiyenin kart çekme işlemlerini yönetme.

  5. Oyun sonuçlarını belirleme ve ekrana yazdırma.

  6. Fonksiyonlar kullanarak kodu daha modüler hale getirme.



Adım 1: Kart Destesi Oluşturma ve Başlangıç Ayarları

İlk adım olarak, kart destesi oluşturulacak ve oyunun başlangıç ayarları yapılacaktır.


import random

# Kart destesi oluşturma
kartlar = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11] * 4  # As: 11, Papaz/Kız/Vale: 10

# Oyun başlama durumu
oyun_bitti = False
oyuncu_el = []
krupiye_el = []

Bu kod parçası, oyun için gerekli olan kart destesini oluşturur ve oyunun başlangıç durumunu ayarlar. random modülü, kartların rastgele seçilmesi için kullanılır.



Adım 2: İlk Kartların Dağıtılması

İkinci adımda, oyuncu ve krupiyeye ilk kartlar dağıtılacaktır.


# İlk kartları dağıtma
oyuncu_el.append(random.choice(kartlar))  # Oyuncu için bir kart seç ve ekle
oyuncu_el.append(random.choice(kartlar))  # Oyuncu için ikinci kartı seç ve ekle
krupiye_el.append(random.choice(kartlar))  # Krupiye için bir kart seç ve ekle
krupiye_el.append(random.choice(kartlar))  # Krupiye için ikinci kartı seç ve ekle

print(f"Oyuncu'nun kartları: {oyuncu_el}, toplam: {sum(oyuncu_el)}")  # Oyuncunun kartlarını ve toplamını yazdır
print(f"Krupiye'nin kartları: [{krupiye_el[0]}, ?]")  # Krupiyenin kartlarından birini ve gizli olanı yazdır

# Oyuncu veya krupiyenin ilk iki kartının toplamı 21 ise oyunu kazandı
if sum(oyuncu_el) == 21:
    print("Blackjack! Oyuncu kazandı!")
    oyun_bitti = True
elif sum(krupiye_el) == 21:
    print("Blackjack! Krupiye kazandı!")
    oyun_bitti = True

Bu kod parçası, oyuncu ve krupiyeye başlangıç kartlarını dağıtır ve ilk durumu ekrana yazdırır. Ayrıca, oyuncu veya krupiyenin ilk iki kartının toplamı 21 olduğunda oyunu kazandığını belirtir.



Adım 3: Oyuncunun Kart Çekme İşlemleri

Üçüncü adımda, oyuncunun kart çekme işlemleri gerçekleştirilecektir.


# Oyuncu kart çekmeye devam etme
while not oyun_bitti and sum(oyuncu_el) < 21:  # Oyuncunun kartlarının toplamı 21'den küçükse ve oyun bitmediyse devam et
    karar = input("Kart çekmek ister misiniz? (e/h): ")  # Oyuncuya kart çekmek isteyip istemediğini sor
    if karar == 'e':  # Eğer evet derse
        oyuncu_el.append(random.choice(kartlar))  # Yeni bir kart çek ve oyuncuya ekle
        print(f"Oyuncu'nun yeni kartı: {oyuncu_el[-1]}")  # Oyuncunun yeni kartını yazdır
        print(f"Oyuncu'nun kartları: {oyuncu_el}, toplam: {sum(oyuncu_el)}")  # Oyuncunun tüm kartlarını ve toplamını yazdır
        if sum(oyuncu_el) == 21:  # Oyuncu toplamı 21 olursa
            print("Oyuncu 21 yaptı! Oyuncu kazandı!")
            oyun_bitti = True
        elif sum(oyuncu_el) > 21:  # Oyuncu toplamı 21'i geçerse
            print("Oyuncu battı! Krupiye kazandı.")
            oyun_bitti = True
    else:
        break  # Hayır derse döngüden çık

Bu kod parçası, oyuncunun kart çekme işlemlerini yönetir. Oyuncunun toplam kart değeri 21'i geçmediği sürece, oyuncu kart çekmeye devam edebilir. Oyuncu 21 yaparsa oyunu kazanır, 21'i geçerse kaybeder.



Adım 4: Krupiyenin Kart Çekme İşlemleri

Dördüncü adımda, krupiyenin kart çekme işlemleri gerçekleştirilecektir.


# Krupiye kart çekme
while not oyun_bitti and sum(krupiye_el) < 17:  # Krupiyenin kartlarının toplamı 17'den küçükse ve oyun bitmediyse devam et
    krupiye_el.append(random.choice(kartlar))  # Yeni bir kart çek ve krupiyeye ekle

print(f"Krupiye'nin kartları: {krupiye_el}, toplam: {sum(krupiye_el)}")  # Krupiyenin tüm kartlarını ve toplamını yazdır

Bu kod parçası, krupiyenin kart çekme işlemlerini yönetir. Krupiyenin toplam kart değeri 17'den küçükse, krupiye kart çekmeye devam eder.



Adım 5: Sonuçların Belirlenmesi

Beşinci adımda, oyunun sonuçları belirlenerek ekrana yazdırılacaktır.


# Sonuç belirleme
if not oyun_bitti:
    if sum(krupiye_el) > 21:
        print("Krupiye battı! Oyuncu kazandı.")
    elif sum(krupiye_el) == 21:
        print("Krupiye 21 yaptı! Krupiye kazandı.")
    elif sum(krupiye_el) > sum(oyuncu_el):
        print("Krupiye kazandı!")
    elif sum(krupiye_el) < sum(oyuncu_el):
        print("Oyuncu kazandı!")
    else:
        print("Berabere!")

Bu kod parçası, oyunun sonuçlarını belirler ve ekrana yazdırır. Krupiyenin toplam kart değeri 21'den büyükse kaybeder, 21 olursa kazanır, oyuncudan büyükse kazanır, küçükse kaybeder, eşitse berabere kalır.



Adım 6: Fonksiyonlarla Çözüm


Kart Çekme Fonksiyonu

Bu fonksiyon, desteden rastgele bir kart çekilmesini sağlar.


def kart_cek(destesi):
    """Desteden rastgele bir kart çeker."""
    return random.choice(destesi)

Kart çekme işlemi için desteden rastgele bir kart seçer ve döndürür. Bu fonksiyon, destedeki kartların rastgele seçilmesini sağlamak için kullanılır.



Kart Dağıtma Fonksiyonu

Bu fonksiyon, oyuncu ve krupiyeye iki kart dağıtır.


def kart_dagit():
    """Oyuncu ve krupiye için iki kart dağıtır."""
    return [kart_cek(kartlar), kart_cek(kartlar)]

Oyuncu ve krupiyeye başlangıçta iki kart verir. Bu fonksiyon, oyunun başlangıcında her iki tarafa da kart dağıtmak için kullanılır.



Kartları Gösterme Fonksiyonu

Bu fonksiyon, eldeki kartları gösterir. Krupiyenin kartlarından biri gizli olabilir.



python
def kartlari_goster(el, gizli=False):
    """Eldeki kartları gösterir. Krupiyenin kartlarından biri gizli olabilir."""
    if gizli:
        return f"[{el[0]}, ?]"
    return f"{el}, toplam: {sum(el)}"

Verilen eldeki kartları gösterir. Krupiyenin kartlarından biri gizli olabileceği için, gizli kartı "?" ile gösterir. Bu fonksiyon, oyun durumunu ekrana yazdırmak için kullanılır.



El Toplamını Hesaplama Fonksiyonu

Bu fonksiyon, eldeki kartların toplamını hesaplar.


def el_toplami(el):
    """Eldeki kartların toplamını hesaplar."""
    return sum(el)

Verilen eldeki kartların toplamını hesaplar ve döndürür. Bu fonksiyon, oyuncunun ve krupiyenin toplam kart değerlerini belirlemek için kullanılır.



Oyuncu Kart Çekme Fonksiyonu

Bu fonksiyon, oyuncunun yeni bir kart çekmesini sağlar.


def oyuncu_kart_cek(el, destesi):
    """Oyuncunun yeni bir kart çekmesini sağlar."""
    el.append(kart_cek(destesi))
    print(f"Oyuncu'nun yeni kartı: {el[-1]}")
    print(f"Oyuncu'nun kartları: {kartlari_goster(el)}")

Oyuncunun yeni bir kart çekmesini sağlar ve yeni kartı oyuncunun eline ekler. Bu fonksiyon, oyuncunun kart çekme işlemini yönetmek için kullanılır.



Krupiye Kart Çekme Fonksiyonu

Bu fonksiyon, krupiyenin kart çekme işlemini gerçekleştirir.


def krupiye_kart_cek(el, destesi):
    """Krupiyenin kart çekme işlemini gerçekleştirir."""
    while el_toplami(el) < 17:
        el.append(kart_cek(destesi))
    print(f"Krupiye'nin kartları: {kartlari_goster(el)}")

Krupiyenin kart çekme işlemini yönetir. Krupiyenin toplam kart değeri 17'den küçükse, krupiye kart çekmeye devam eder. Bu fonksiyon, krupiyenin oyun kurallarına uygun şekilde kart çekmesini sağlar.



Oyunu Başlatma Fonksiyonu

Bu fonksiyon, Blackjack oyununu başlatır ve oyunun akışını yönetir.


def oyunu_baslat():
    """Blackjack oyununu başlatır."""
    oyuncu_el = kart_dagit()
    krupiye_el = kart_dagit()

    print(f"Oyuncu'nun kartları: {kartlari_goster(oyuncu_el)}")
    print(f"Krupiye'nin kartları: {kartlari_goster(krupiye_el, gizli=True)}")

    # Oyuncu veya krupiyenin ilk iki kartının toplamı 21 ise oyunu kazandı
    if el_toplami(oyuncu_el) == 21:
        print("Blackjack! Oyuncu kazandı!")
        return
    elif el_toplami(krupiye_el) == 21:
        print("Blackjack! Krupiye kazandı!")
        return

    while el_toplami(oyuncu_el) < 21:
        karar = input("Kart çekmek ister misiniz? (e/h): ")
        if karar == 'e':
            oyuncu_kart_cek(oyuncu_el, kartlar)
            if el_toplami(oyuncu_el) == 21:
                print("Oyuncu 21 yaptı! Oyuncu kazandı!")
                return
            elif el_toplami(oyuncu_el) > 21:
                print("Oyuncu battı! Krupiye kazandı.")
                return
        else:
            break

    krupiye_kart_cek(krupiye_el, kartlar)

    if el_toplami(krupiye_el) > 21:
        print("Krupiye battı! Oyuncu kazandı.")
    elif el_toplami(krupiye_el) == 21:
        print("Krupiye 21 yaptı! Krupiye kazandı.")
    elif el_toplami(krupiye_el) > el_toplami(oyuncu_el):
        print("Krupiye kazandı!")
    elif el_toplami(krupiye_el) < el_toplami(oyuncu_el):
        print("Oyuncu kazandı!")
    else:
        print("Berabere!")

# Kart destesi oluşturma
kartlar = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11] * 4  # As: 11, Papaz/Kız/Vale: 10

oyunu_baslat()



Kullanılan Konular


  • Veri Tipleri: Bu projede, tamsayılar (kart değerleri) ve listeler (kart destesi, el kartları) kullanılmıştır.

  • Listeler: Kart destesi ve oyuncu/krupiye el kartları listeler şeklinde tutulmuştur.

  • Koşullu İfadeler: if-else yapıları, oyun sonuçlarını belirlemek ve oyuncu/krupiyenin kart çekme kararlarını işlemek için kullanılmıştır.

  • Fonksiyonlar: Fonksiyonlar, kodun modüler ve tekrar kullanılabilir olmasını sağlamıştır.

  • Döngüler: while döngüleri, oyuncu ve krupiyenin kart çekme işlemlerini yönetmek için kullanılmıştır.

  • Random Modülü: random.choice() fonksiyonu, kartların rastgele seçilmesini sağlamıştır.




 

Comments


Commenting has been turned off.
bottom of page