Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problem with BlackJack
#1
Hey guys,

I'm new here so I'm not sure, what informations you need, but here you go:

As a project I want to program Black Jack as a game. The game works, but there's a problem with the question where it asks if you want to pull a card (It's in german, because im swiss sorry). The exact problem is, that the program should automatically stop, if the value of the player's cards or the value of the dealer's cards is more than 21 - but it doesn't.
from math import *
from random import *

Budget = 1000

while True:
    Einsatz = int(input("Wie viel bist du bereit zu setzen?\n"))
    if Einsatz > Budget:
        print("Du hast nicht genug Geld")
        Einsatz = 0
    else:
        Budget -= Einsatz
        break
print("Sie haben", Einsatz, "CHF gesetzt!")

J = 10
D = 10
K = 10
A = 11

AlleDecks = [2, 3, 4, 5, 6, 7, 8, 9, 10, J, D, K, A] * 24


def randomizer():
    global Auswahl
    Auswahl = randint(0, 311)  # Hier wird eine Zahl von 0-311 random ausgesucht


SpielerKarten = []  # Karten des Spielers zu Beginn des Spiels
DealerKarten = []  # Karten des Dealers zu Beginn des Spiels


def Spielanfang():
    for i in range(2):
        randomizer()
        Umwandlung = AlleDecks[Auswahl]
        SpielerKarten.append(Umwandlung)
    print("Karten des Spielers", SpielerKarten)
    print("Summe der Karten des Spielers:", sum(SpielerKarten))

def DealerAnfang():
    randomizer()
    Umwandlung = AlleDecks[Auswahl]
    DealerKarten.append(Umwandlung)
    print("Die Anfangskarte des Dealers:", DealerKarten)
    print("Summe der Karten des Dealers:", sum(DealerKarten))

def askIfSpielerZug():
    while True:
        Frage = str(input("Willst du ziehen?")).upper()
        if Frage == "JA":
            print("Summe der Karten des Dealers:", (sum(DealerKarten)))
            SpielerZug()
            DealerZug()
            return True
        elif Frage == "NEIN":
            print("Schlusssumme des Spielers:", sum(SpielerKarten))
            DealerZug()
            print("Die Dealerkarten des Dealers:", DealerKarten)
            print("Die Schlusssumme des Dealers:", sum(DealerKarten))
            return False
        else:
            print("Bitte antworte mit Ja oder Nein!")


def DealerZug():
    while sum(DealerKarten) < 17:
        randomizer()
        Umwandlung = AlleDecks[Auswahl]
        DealerKarten.append(Umwandlung)
    print("Summe der Karten des Dealers:", sum(DealerKarten))

Tc = 0  # Turncounter

def SpielerZug():
    global Tc  # Turncounter
    Tc = Tc + 1  # Turncounter
    randomizer()
    Umwandlung = AlleDecks[Auswahl]
    SpielerKarten.append(Umwandlung)
    DifferenzSpieler = 21 - sum(SpielerKarten)
    print("Spielerkarten nach", Tc, ". Zug:", SpielerKarten)
    print("Summe der Spielerkarten nach", Tc, ". Zug:", sum(SpielerKarten))
    print("Differenz zu 21 fuer den Spieler nach dem", Tc, ". Zug:", DifferenzSpieler)
    if askIfSpielerZug():
        SpielerZug()
    else:
        return

def Ablauf():
    global Einsatz
    global Budget
    if sum(SpielerKarten) > 21 and sum(DealerKarten) <= 21:
        print("Schlusssumme des Spielers:", sum(SpielerKarten))
        DealerZug()
        print("Die Dealerkarten des Dealers:", DealerKarten)
        print("Die Schlusssumme des Dealers:", sum(DealerKarten))
        print("Der Dealer hat gewonnen")
        Einsatz = 0
        return Budget
    elif sum(SpielerKarten) > 21 and (sum(DealerKarten) > 21):
        print("Unentschieden")
        Einsatz = 0
        return Budget
    elif sum(SpielerKarten) <= 21 and sum(DealerKarten) > 21:
        print("Der Spieler hat gewonnen!")
        if Einsatz <= 1000:
            Gewinn = Einsatz * 2
            print("Sie haben", Gewinn, "CHF gewonnen!")
            Budget += Gewinn
            Einsatz = 0
        elif Einsatz > 1000:
            Gewinn = Einsatz * 3
            print("Sie haben", Gewinn, "CHF gewonnen!")
            Budget += Gewinn
            Einsatz = 0
        return Budget
    elif sum(SpielerKarten) <= 21 and sum(DealerKarten) <= 21:
        if sum(DealerKarten) < sum(SpielerKarten):
            print("Der Spieler hat gewonnen!")
            if Einsatz <= 1000:
                Gewinn = Einsatz * 2
                print("Sie haben", Gewinn, "CHF gewonnen!")
                Budget += Gewinn
                Einsatz = 0
            elif Einsatz > 1000:
                Gewinn = Einsatz * 3
                print("Sie haben", Gewinn, "CHF gewonnen!")
                Budget += Gewinn
                Einsatz = 0
            return Budget
        elif sum(DealerKarten) > sum(SpielerKarten):
            print("Der Dealer hat gewonnen!")
            Einsatz = 0
            return Budget
        elif sum(SpielerKarten) == sum(DealerKarten):
            print("Unentschieden!")
            Budget += Einsatz
            Einsatz = 0
            return Budget

Spielanfang()
DealerAnfang()

if askIfSpielerZug():
    SpielerZug()

DifferenzSpieler = 21 - sum(SpielerKarten)
DifferenzDealer = 21 - sum(DealerKarten)

print("Differenz zu 21 für den Spieler:", DifferenzSpieler)
print("Differenz zu 21 für den Dealer:", DifferenzDealer)

Budget = Ablauf()
print("Dein Budget ist jetzt:", Budget, "CHF")
So my questions are:
--> Why does it not work?
--> How can I fix it?

As a next step I thought of importing Pictures of Black Jack cards (in pygame) and to show the pictures, when this card is pulled during the program.

--> Have you an idea how I should do it?
--> Have you some advices?


Thanks for your help!
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020