Python ile BlackJack Oyunu
Bu örneğimizde, Python ile popüler bir kart oyunu olan Blackjack’in (21 oyunu) basit bir versiyonunu kodlayacağız.
Oyuncuların karşısında genellikle bir dağıtıcı (bu kodda bilgisayar) bulunur ve her turda oyuncunun amacı, dağıtıcının elinden daha yüksek bir puan elde etmektir, ancak 21’i aşmamaktır. Oyunun amacı, dağıtılan kartların toplamının 21’e olabildiğince yakın olmasını sağlamaktır, ancak bu sayıyı aşmamaktır. Her kartın belirli bir değeri vardır: sayı kartları kendi değerindedir (örneğin 2 için 2, 3 için 3 vb.), resimli kartlar (vale, kız ve papaz) 10 değerindedir ve as 1 veya 11 olarak kabul edilmektedir. Oyuncunun elinde sadece iki kart varsa ve bu kartların toplamı tam olarak 21 ise, bu duruma “Blackjack” denir kazanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
import random def kart_ver(): """Desteden rastgele bir kart döndürür.""" # Oyunda kullanılacak olan kartların listesi. kartlar = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] # Bu kartlar arasından rastgele bir kart seçilir. kart = random.choice(kartlar) # Seçilen kart geri döndürülür. return kart def puan_hesapla(kartlar): """Kartların listesini alır ve bu kartlardan hesaplanan puanı döndürür.""" # Eğer oyuncunun elindeki kartların toplamı 21 ise ve sadece 2 kartı varsa bu durum blackjacktir. if sum(kartlar) == 21 and len(kartlar) == 2: return 0 # Eğer oyuncunun elinde as (11 değerinde) varsa ve kartların toplamı 21'den büyükse, # as'ın değerini 1 olarak değiştir. if 11 in kartlar and sum(kartlar) > 21: kartlar.remove(11) kartlar.append(1) # Oyuncunun elindeki kartların toplam puanını geri döndür. return sum(kartlar) def karsilastir(oyuncu_puani, bilgisayar_puani): """Oyuncu ve bilgisayarın puanlarını karşılaştırarak sonucu belirler.""" # Eğer hem oyuncunun hem de bilgisayarın puanı 21'i geçerse, oyuncu kaybeder. if oyuncu_puani > 21 and bilgisayar_puani > 21: return "İkiniz de kaybettiniz." # Oyuncu ve bilgisayarın puanları eşitse, beraberlik ilan edilir. if oyuncu_puani == bilgisayar_puani: return "Berabere" # Eğer bilgisayarın puanı 0 (blackjack) ise, oyuncu kaybeder. elif bilgisayar_puani == 0: return "Kaybettiniz, rakibinizde Blackjack var!" # Eğer oyuncunun puanı 0 (blackjack) ise, oyuncu kazanır. elif oyuncu_puani == 0: return "Kazandınız, Blackjack!" # Eğer oyuncunun puanı 21'i geçerse, oyuncu kaybeder. elif oyuncu_puani > 21: return "Puanınız 21'i geçti. Kaybettiniz." # Eğer bilgisayarın puanı 21'i geçerse, oyuncu kazanır. elif bilgisayar_puani > 21: return "Rakibinizin puanı 21'i geçti. Kazandınız!" # Eğer oyuncunun puanı bilgisayardan büyükse, oyuncu kazanır. elif oyuncu_puani > bilgisayar_puani: return "Kazandınız!" else: return "Kaybettiniz." def oyun_oyna(): """Blackjack oyununu başlatır.""" # Oyuncunun ve bilgisayarın başlangıç kartları için boş listeler oluşturulur. oyuncu_kartlari = [] bilgisayar_kartlari = [] oyun_bitti = False # Hem oyuncuya hem de bilgisayara başlangıçta 2 kart verilir. for _ in range(2): oyuncu_kartlari.append(kart_ver()) bilgisayar_kartlari.append(kart_ver()) # Oyun bitene kadar bu döngü devam eder. while not oyun_bitti: oyuncu_puani = puan_hesapla(oyuncu_kartlari) bilgisayar_puani = puan_hesapla(bilgisayar_kartlari) print(f" Sizin kartlarınız: {oyuncu_kartlari}, şuanki puanınız: {oyuncu_puani}") print(f" Rakibinizin ilk kartı: {bilgisayar_kartlari[0]}") # Eğer oyuncunun veya bilgisayarın puanı 0 (blackjack) ise veya oyuncunun puanı 21'i geçerse, oyun sona erer. if oyuncu_puani == 0 or bilgisayar_puani == 0 or oyuncu_puani > 21: oyun_bitti = True else: # Oyuncuya yeni bir kart isteyip istemediği sorulur. kart_istemek = input("Yeni bir kart istiyor musunuz? 'e' veya 'h': ") if kart_istemek == "e": oyuncu_kartlari.append(kart_ver()) else: oyun_bitti = True # Bilgisayarın puanı 17'den küçükse veya 0 (blackjack) değilse yeni kart çeker. while bilgisayar_puani != 0 and bilgisayar_puani < 17: bilgisayar_kartlari.append(kart_ver()) bilgisayar_puani = puan_hesapla(bilgisayar_kartlari) print(f" Sizin son kartlarınız: {oyuncu_kartlari}, son puanınız: {oyuncu_puani}") print(f" Rakibinizin son kartları: {bilgisayar_kartlari}, son puanı: {bilgisayar_puani}") print(karsilastir(oyuncu_puani, bilgisayar_puani)) # Oyun başlatılıyor. while input("Blackjack oynamak ister misiniz? 'e' veya 'h': ") == "e": oyun_oyna() |
Yukarıdaki kodumuzda, popüler bir kart oyunu olan Blackjack’in basit bir versiyonunu oynamak için gereken fonksiyonlar ve işlemler bulunmaktadır. Adım adım yaptığımız işlemlerimizi açıklayalım:
kart_ver()
Fonksiyonu: Bu fonksiyonumuz, oyunda kullanılacak olan kartların listesinden rastgele bir kart seçerek geri döndürür. Özellikle, As kartı için 11 değerini, 10 değerli kartlar (10, Vale, Kız ve Papaz) için 10 değerini kullanır.puan_hesapla(kartlar)
Fonksiyonu: Bu fonksiyonumuz, oyuncunun elindeki kartları alır ve bu kartlara göre toplam puanını hesaplar. Eğer elde sadece iki kart varsa ve bu kartların toplamı 21 ise bu durum “Blackjack” olarak kabul edilir ve 0 puan olarak geri döndürülür. Eğer oyuncunun elinde bir As varsa ve kartların toplamı 21’i geçiyorsa, bu As’ın değeri 11’den 1’e düşürülür.karsilastir(oyuncu_puani, bilgisayar_puani)
Fonksiyonu: Oyuncunun ve bilgisayarın (rakip) puanlarını karşılaştırarak oyunun sonucunu belirleyen fonksiyondur.oyun_oyna()
Fonksiyonu: Asıl oyun döngüsünün gerçekleştiği fonksiyondur. Oyuncu ve bilgisayar başlangıçta ikişer kart alır. Daha sonra, oyuncunun puanı 21’i geçmediği ve “Blackjack” olmadığı sürece oyuncuya yeni bir kart isteyip istemediği sorulur. Oyuncu yeni bir kart istemiyorsa veya puanı 21’i geçerse, bilgisayarın sırası gelir. Bilgisayarın puanı 17’den azsa yeni kart çeker. Son olarak,karsilastir
fonksiyonu ile oyuncunun ve bilgisayarın puanları karşılaştırılır ve sonuç belirlenir.- Ana Döngü: Oyun, kullanıcının “e” tuşuna basarak oyunu yeniden başlatmasına izin veren bir döngü içerisindedir. Kullanıcı “h” tuşuna basarak oyunu sonlandırılır.
Kodu çalıştırmak için: Trinket