Mustafa Aferin
Özgün ve farklı içerikler üreten python, linux ve teknoloji haberleri okumayı seven birisi

14. Python ile blackjack oyunu yap.

```json { "title": "Python ile Blackjack Oyunu Geliştirme: Adım Adım Rehber", "content": "

Python ile Blackjack Oyunu Geliştirme: Adım Adım Rehber

nn

Blackjack, dünyanın en popüler casino oyunlarından biridir. Hem şansa hem de stratejiye dayalı olması, onu hem eğlenceli hem de heyecan verici kılar. Bu makalede, Python programlama dilini kullanarak basit bir Blackjack oyunu geliştireceğiz. Bu rehber, Python'a yeni başlayanlar için bile kolayca takip edilebilir olacak şekilde tasarlanmıştır.

nn

Gereksinimler

nn
    n
  • Python 3 (tercihen en son sürümü)
  • n
  • Temel Python bilgisi (değişkenler, döngüler, koşullu ifadeler, fonksiyonlar)
  • n
nn

Oyunun Temel Kuralları

nn

Blackjack'in temel amacı, eldeki kartların toplam değerinin 21'e en yakın, ancak 21'i geçmeyen bir değere ulaşmaktır. Oyuncular ve krupiye kart çekerler. Krupiyenin amacı da aynıdır: 21'e en yakın olmak. Kartların değerleri aşağıdaki gibidir:

nn
    n
  • 2-10 arasındaki kartlar, üzerlerindeki sayısal değere sahiptir.
  • n
  • Vale, Kız ve Papaz (J, Q, K) kartları 10 değerindedir.
  • n
  • As (A) kartı, duruma göre 1 veya 11 değerinde olabilir.
  • n
nn

Oyunun başında, oyuncu ve krupiye ikişer kart alır. Oyuncunun kartlarından biri kapalıdır. Oyuncu, kartlarının toplam değerine bakarak ya yeni kart çeker ('hit') ya da elindeki kartlarla yetinir ('stand'). 21'i aşarsa ('bust'), kaybeder. Krupiye, belirli bir değere (genellikle 17) ulaşana kadar kart çekmeye devam eder. Krupiye de 21'i aşarsa, oyuncu kazanır. Eğer krupiye 17 veya daha yüksek bir değere ulaşırsa, elindeki kartların değeri oyuncunun kartlarından yüksekse kazanır, düşükse kaybeder, eşitse ('push') oyuncu parasını geri alır.

nn

Adım 1: Kart Destesi Oluşturma

nn

İlk olarak, bir kart destesi oluşturmamız gerekiyor. Python'da bunu bir liste kullanarak yapabiliriz. Her kartı, değerini ve sembolünü içeren bir tuple olarak temsil edeceğiz.

nn
nimport randomnnsuits = ('Kupa', 'Karo', 'Maça', 'Sinek')nranks = ('İki', 'Üç', 'Dört', 'Beş', 'Altı', 'Yedi', 'Sekiz', 'Dokuz', 'On', 'Vale', 'Kız', 'Papaz', 'As')nvalues = {'İki':2, 'Üç':3, 'Dört':4, 'Beş':5, 'Altı':6, 'Yedi':7, 'Sekiz':8, 'Dokuz':9, 'On':10, 'Vale':10,n          'Kız':10, 'Papaz':10, 'As':11}nnclass Card:n    n    def __init__(self,suit,rank):n        self.suit = suitn        self.rank = rankn        self.value = values[rank]n    n    def __str__(self):n        return self.rank + ' ' + 'of' + ' ' + self.suitnnclass Deck:n    n    def __init__(self):n        self.deck = []  # Boş bir deste ile başlan        for suit in suits:n            for rank in ranks:n                self.deck.append(Card(suit,rank))n    n    def __str__(self):n        deck_comp = ''  # Boş bir string ile başlan        for card in self.deck:n            deck_comp += '\n '+card.__str__() # Her bir Card nesnesini stringe eklen        return 'The deck has:' + deck_compnn    def shuffle(self):n        random.shuffle(self.deck)n        n    def deal(self):n        single_card = self.deck.pop()n        return single_cardnnclass Hand:n    def __init__(self):n        self.cards = []  # Kartları tutmak için boş bir liste ile başlan        self.value = 0   # Başlangıç değeri sıfırn        self.aces = 0    # As sayısını takip etmek için bir özellik eklen    n    def add_card(self,card):n        self.cards.append(card)n        self.value += card.valuen        if card.rank == 'As':n            self.aces += 1  # As bulursak, ace eklen    n    def adjust_for_ace(self):n        while self.value > 21 and self.aces:n            self.value -= 10n            self.aces -= 1nnclass Chips:n    n    def __init__(self, total=100):n        self.total = total  # Bu, oyuncuya sağlanacak varsayılan değeri ayarlayabilirn        self.bet = 0n        n    def win_bet(self):n        self.total += self.betn    n    def lose_bet(self):n        self.total -= self.betn
nn

Adım 2: Oyun Fonksiyonlarını Tanımlama

nn

Şimdi, oyunun temel fonksiyonlarını tanımlayalım:

nn
    n
  • take_bet(): Oyuncudan bahis alacak.
  • n
  • hit(): Oyuncuya kart çektirecek.
  • n
  • stand(): Oyuncunun kart çekmeyi bırakmasını sağlayacak.
  • n
  • show_some(): Krupiyenin bir kartını gizleyerek, oyuncunun ve krupiyenin kartlarını gösterecek.
  • n
  • show_all(): Oyuncunun ve krupiyenin tüm kartlarını gösterecek.
  • n
  • player_busts(): Oyuncunun 21'i aşması durumunda ne olacağını belirleyecek.
  • n
  • player_wins(): Oyuncunun kazanması durumunda ne olacağını belirleyecek.
  • n
  • dealer_busts(): Krupiyenin 21'i aşması durumunda ne olacağını belirleyecek.
  • n
  • dealer_wins(): Krupiyenin kazanması durumunda ne olacağını belirleyecek.
  • n
  • push(): Beraberlik durumunda ne olacağını belirleyecek.
  • n
nn
ndef take_bet(chips):n    n    while True:n        try:n            chips.bet = int(input('Lütfen bahis miktarınızı girin: ')) # Oyuncudan bahis miktarını isten        except ValueError:n            print('Üzgünüm, bir tamsayı girmelisiniz!')n        else:n            if chips.bet > chips.total:n                print("Üzgünüm, bahsiniz bakiyenizi aşamaz! Bakiyeniz: {}".format(chips.total))n            else:n                breaknn# Kart çekme fonksiyonundef hit(deck,hand):n    n    hand.add_card(deck.deal())n    hand.adjust_for_ace()nn# Oyuncunun hit veya stand yapmasını sağlayan fonksiyonndef hit_or_stand(deck,hand):n    global playing  # Bu değişkeni kontrol etmek için global bir değişken kullanacağızn    n    while True:n        x = input("Vurmak mı yoksa durmak mı istersiniz? 'v' veya 'd' girin ")n        n        if x[0].lower() == 'v':n            hit(deck,hand)  # hit() fonksiyonunn        elif x[0].lower() == 'd':n            print("Oyuncu duruyor. Krupiye oynuyor.")n            playing = Falsenn        else:n            print("Üzgünüm, lütfen tekrar deneyin.")n            continuen        breaknn# Kartları gösterme fonksiyonlarındef show_some(player,dealer):n    print("\nKrupiyenin Eli:")n    print(" ")n    print('',dealer.cards[1])  n    print("\nOyuncunun Eli:", *player.cards, sep='\n ')nndef show_all(player,dealer):n    print("\nKrupiyenin Eli:", *dealer.cards, sep='\n ')n    print("Krupiyenin Eli =",dealer.value)n    print("\nOyuncunun Eli:", *player.cards, sep='\n ')n    print("Oyuncunun Eli =",player.value)nn# Oyun sonu senaryolarındef player_busts(player,dealer,chips):n    print("Oyuncu Patladı!")n    chips.lose_bet()nndef player_wins(player,dealer,chips):n    print("Oyuncu Kazandı!")n    chips.win_bet()nndef dealer_busts(player,dealer,chips):n    print("Krupiye Patladı! Oyuncu Kazandı!")n    chips.win_bet()n    ndef dealer_wins(player,dealer,chips):n    print("Krupiye Kazandı!")n    chips.lose_bet()n    ndef push(player,dealer):n    print("Krupiye ve oyuncu berabere! Berabere kaldı.")n
nn

Adım 3: Oyun Döngüsünü Oluşturma

nn

Şimdi, oyunun ana döngüsünü oluşturalım. Bu döngü, oyuncunun bahis yapmasını, kart çekmesini, krupiyenin oynamasını ve kazananı belirlemesini sağlayacak.

nn
n# Oyun oynama!nplaying = Truennwhile True:n    # Oyunun başlangıcında bir mesaj yazdırınn    print('Blackjack oynamaya hoş geldiniz! Krupiye 17'ye vuracak şekilde ayarlandı. As'lar 1 veya 11 olarak sayılır.')n    n    # Bir deste oluşturun ve karıştırınn    deck = Deck()n    deck.shuffle()n    n    # Oyuncuya ve krupiyeye ikişer kart dağıtınn    player_hand = Hand()n    player_hand.add_card(deck.deal())n    player_hand.add_card(deck.deal())n    n    dealer_hand = Hand()n    dealer_hand.add_card(deck.deal())n    dealer_hand.add_card(deck.deal())n    n    # Oyuncunun fişlerini ayarlayınn    player_chips = Chips()n    n    # Oyuncudan bahis miktarını isteyinn    take_bet(player_chips)n    n    # Kartları gösterin, ancak krupiyenin bir kartını gizli tutunn    show_some(player_hand,dealer_hand)n    n    while playing:  # hit_or_stand fonksiyonundan kontrol edilen playing değişkenini hatırlayınn        n        # Oyuncudan Vurmak veya Durmak isteyinn        hit_or_stand(deck,player_hand)n        n        # Kartları gösterin (ancak krupiyenin bir kartını gizli tutun)n        show_some(player_hand,dealer_hand)n        n        # Oyuncu 21'i aşarsa, oyuncu patlar ve oyunu bitirirn        if player_hand.value > 21:n            player_busts(player_hand,dealer_hand,player_chips)n            breaknn    # Oyuncu patlamadıysa, krupiye 17'ye ulaşana kadar oynayınn    if player_hand.value <= 21:n        n        while dealer_hand.value  21:n            dealer_busts(player_hand,dealer_hand,player_chips)nn        elif dealer_hand.value > player_hand.value:n            dealer_wins(player_hand,dealer_hand,player_chips)nn        elif dealer_hand.value < player_hand.value:n            player_wins(player_hand,dealer_hand,player_chips)nn        else:n            push(player_hand,dealer_hand)nn    # Oyuncuya kazançlarını/kayıplarını bildirinn    print("\nOyuncunun toplam fişleri ",player_chips.total)n    n    # Yeni bir oyun oynamak isteyip istemediğini sorunn    new_game = input("Başka bir el oynamak ister misiniz? 'e' veya 'h' girin ")n    n    if new_game[0].lower()=='e':n        playing=Truen        continuen    else:n        print("Oynadığınız için teşekkürler!")n        breakn
nn

Sonuç

nn

Bu makalede, Python kullanarak basit bir Blackjack oyunu geliştirdik. Bu rehber, Python'a yeni başlayanlar için bile kolayca takip edilebilir olacak şekilde tasarlandı. Bu kodu daha da geliştirebilir, farklı zorluk seviyeleri ekleyebilir veya grafik arayüzü ile daha kullanıcı dostu bir hale getirebilirsiniz. Unutmayın, programlama pratik yaparak öğrenilir!

nn

Ek Öneriler

nn
    n
  • Oyunun kurallarını daha karmaşık hale getirebilirsiniz (örneğin, 'split' veya 'double down' seçenekleri ekleyebilirsiniz).
  • n
  • Oyuncunun bahis miktarını takip etmek için bir sistem oluşturabilirsiniz.
  • n
  • Oyunu daha kullanıcı dostu hale getirmek için bir grafik arayüzü (GUI) kullanabilirsiniz (örneğin, Tkinter veya Pygame ile).
  • n
  • Oyuncunun istatistiklerini (kazanma oranı, kaybedilme oranı vb.) takip edebilirsiniz.
  • n
n", "tags": "python, blackjack, oyun geliştirme, programlama, casino oyunu, kodlama, adım adım, rehber, eğitim" } ```
Cevap bırakın

E-posta hesabınız yayımlanmayacak.