Ich habe versucht, eine Blackjack-Strategie zu entwickeln, während ich Python studiert und das Lernen gestärkt habe. Es gibt eine Strategie, die auf der Wahrscheinlichkeit einer Grundstrategie basiert, aber ich werde versuchen, sie einzuholen.
Ich werde so vorgehen
Blackjack ist ein beliebtes Tischspiel im Casino. Ich werde kurz die Regeln vorstellen.
--Verteilen Sie Karten zwischen Dealern und Spielern
Machen Sie einen Blackjack wie diesen.
--Verwenden Sie 6 Paar Spielkarten --BET-Funktion verfügbar (Der Betrag ist jedoch auf 100 USD festgelegt. Die Rendite wird als Belohnung für die Stärkung des Lernens verwendet.)
Der gesamte Code wird am Ende aufgelistet.
Generieren Sie eine Spielkarte. Hier wird definiert, wie die Punkte der speziellen Blackjack-Bildkarten gezählt werden. A ist auch etwas Besonderes, aber hier wird es als ein Punkt erzeugt. Die Punktzahl von A wird unter Berücksichtigung der Punktzahl anderer Hände in der Handklasse bestimmt.
class Card:
'''
Karte generieren
Zahlen: A, 2-10, J, Q, K.
Ruß: Spaten, Herz, Diamant, Keule
'''
SUITS = '♠♥♦♣'
RANKS = range(1, 14) #Normaler Rang
SYMBOLS = "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"
POINTS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] #Punkte für Black Jack
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
self.index = suit + self.SYMBOLS[rank - self.RANKS[0]]
self.point = self.POINTS[rank - self.RANKS[0]]
def __repr__(self):
return self.index
Definieren Sie "NUM_DECK = 6" und generieren Sie ein Deck mit 6 Kartensätzen. Das Mischen erfolgt gleichzeitig mit der Deckgenerierung.
class Deck:
'''
Deck mit gemischten Karten (Deck generieren)
'''
def __init__(self):
self.cards = [Card(suit, rank) \
for suit in Card.SUITS \
for rank in Card.RANKS]
if NUM_DECK > 1:
temp_cards = copy.deepcopy(self.cards)
for i in range(NUM_DECK - 1):
self.cards.extend(temp_cards)
random.shuffle(self.cards)
・ ・ ・ Abkürzung
Fügen Sie Ihrer Hand Karten hinzu und berechnen Sie Punkte. Das Urteil der weichen Hand (Hand einschließlich A) ist ebenfalls enthalten.
class Hand:
"""
Handklasse
"""
def __init__(self):
self.hand = []
self.is_soft_hand = False
def add_card(self, card):
#Der Vorgang des Hinzufügens einer Karte zu Ihrer Hand.
・ ・ ・ Abkürzung
def check_soft_hand(self):
#Überprüfen Sie, ob es sich um eine weiche Hand handelt (Hand einschließlich A).
・ ・ ・ Abkürzung
def sum_point(self):
#Berechnen Sie die Punkte in Ihrer Hand.
#Berechnen Sie für weiche Hände sowohl, wenn A 1 ist, als auch, wenn A 11 ist.
・ ・ ・ Abkürzung
def calc_final_point(self):
#Berechnen Sie Punkte im Wettbewerb mit dem Händler
#Gibt den Endpunkt nicht BUST zurück
・ ・ ・ Abkürzung
def is_bust(self):
#Bestimmen Sie, ob Ihre Hand BUST ist (mehr als 21)
・ ・ ・ Abkürzung
def deal(self, card):
#Verarbeitung zum Zeitpunkt des Geschäftsabschlusses
・ ・ ・ Abkürzung
def hit(self, card):
#Verarbeitung zum Zeitpunkt des Treffers
・ ・ ・ Abkürzung
Hier werden Auswahlmöglichkeiten wie Stand und Hit definiert. Wenn Sie nicht implementierte Aufteilung und Versicherung hinzufügen möchten, klicken Sie hier. Als Bonus habe ich einen automatischen Spielmodus hinzugefügt. Sie können mit der entsprechenden KI spielen, die später beschrieben wird.
class Player:
def __init__(self):
self.hand = Hand()
self.chip = Chip()
self.done = False #Flagge, die das Ende des Zuges des Spielers anzeigt
self.hit_flag = False #Flag, das angibt, ob der Spieler Treffer ausgewählt hat
self.is_human = False # True:Die Leute spielen, falsch:Automatisches Abspielen
def init_player(self):
#Initialisieren Sie Ihre Hand und jede Flagge
・ ・ ・ Abkürzung
def deal(self, card):
#Bearbeitung am Stand
・ ・ ・ Abkürzung
def hit(self, card):
#Verarbeitung zum Zeitpunkt des Treffers
・ ・ ・ Abkürzung
def stand(self):
#Bearbeitung am Stand
・ ・ ・ Abkürzung
def double_down(self, card):
#Verarbeitung zum Zeitpunkt des Double Down
・ ・ ・ Abkürzung
def surrender(self):
#Verarbeitung zum Zeitpunkt der Übergabe
・ ・ ・ Abkürzung
Es wäre vielleicht schön gewesen, mit der Spielerklasse zusammen zu sein. Ich dachte, ich brauche eine Methode, die nur für einen Händler gilt, aber ich hatte keine.
Austausch von Chips nach dem Spiel. Wenn Sie gewinnen, erhalten Sie den doppelten Betrag, den Sie setzen, und wenn Sie verlieren, verfällt der gesamte Betrag. Wenn es sich um ein Unentschieden handelt, wird die Wette unverändert an den Spieler zurückgegeben.
class Chip:
def __init__(self):
self.balance = INITIAL_CHIP
self.bet = 0
def bet_chip(self, bet):
self.balance -= bet
self.bet = bet
def pay_chip_win(self):
self.balance += self.bet * 2
def pay_chip_lose(self):
self.balance = self.balance
def pay_chip_push(self):
self.balance += self.bet
Enthält eine geeignete KI für das automatische Spielen. Bonuslevel. Es ist für einen Test vor der Stärkung des Lernens.
class AI:
・ ・ ・ Abkürzung
def select_random3(self, hand, n):
if hand < 11:
selection = 'h' # hit
elif hand == 11 and n == 2:
selection = 'd' # double down
elif hand == 16 and n == 2:
selection = 'r' # surrender
elif hand > 17:
selection = 's' # stand
else:
r = random.randint(0, 1)
if r > 0.5:
selection = 'h' # hit
else:
selection = 's' # stand
return selection
Dies ist die Hauptfunktion von Blackjack. Es kann schwierig sein zu sehen, da die anzeigebezogenen Methoden gemischt sind. Es gibt Raum für Verbesserungen. Die Funktion player_step wird auch in der Schrittfunktion des Fitnessstudios verwendet.
class Game:
def __init__(self):
self.game_mode = 0 # 0:Warten auf den Start, 1:Im Spiel, 2:Spiel ist aus
self.deck = Deck()
self.player = Player()
self.dealer = Dealer()
self.judgment = 0 # 1:Win, 0:zeichnen, -1:Verlieren
self.game_count = 0
self.start()
self.message_on = True #self.player.is_human # True:Zeigen Sie auf der Konsole die Meldung Falsch an:Zeigen Sie keine Nachrichten auf der Konsole an
def start(self):
#Mische das Deck, Spieler,Händler initialisieren
・ ・ ・ Abkürzung
def reset_game(self):
# Player,Händlerhand zurücksetzen
・ ・ ・ Abkürzung
def bet(self, bet):
#Spieler setzt
・ ・ ・ Abkürzung
def deal(self, n=2):
# Player,Karten an Händler austeilen
・ ・ ・ Abkürzung
def player_turn(self):
#Spieler ist an der Reihe. Geben Sie die Aktion über die Konsole ein oder entscheiden Sie automatisch mit der entsprechenden KI
・ ・ ・ Abkürzung
def player_step(self, action):
# Stand, Hit, Double down,Verarbeitung nach Übergabe
・ ・ ・ Abkürzung
def show_card(self):
#Zeigen Sie die Karte an. Die verdeckte Karte des Händlers wird als "?"
・ ・ ・ Abkürzung
def dealer_turn(self):
#Händler ist an der Reihe. Ziehe eine Karte, bis du 17 oder mehr Punkte hast
・ ・ ・ Abkürzung
def open_dealer(self):
#Öffnen Sie die verdeckte Karte des Händlers
・ ・ ・ Abkürzung
def judge(self):
#Urteil über Sieg oder Niederlage
・ ・ ・ Abkürzung
def pay_chip(self):
#Chip-Abrechnung
・ ・ ・ Abkürzung
def check_chip(self):
#Überprüfen Sie, ob der Besitz des Spielers unter dem Mindesteinsatz (Mindesteinsatzbetrag) liegt.
#Wenn es unten ist, beenden Sie das Spiel
・ ・ ・ Abkürzung
def show_judgement(self):
#Zeigen Sie das Ergebnis von Sieg oder Niederlage
・ ・ ・ Abkürzung
def ask_next_game(self):
#Fragen Sie, ob Sie das Spiel fortsetzen möchten
・ ・ ・ Abkürzung
def check_deck(self):
#Überprüfen Sie die verbleibende Anzahl von Karten und mischen Sie, wenn es nur wenige gibt
・ ・ ・ Abkürzung
Schreiben Sie die Verarbeitung entlang des Spielflusses in die Hauptfunktion. Wenn Sie dies tun, können Sie mit Blackjack spielen. Apropos, ・ NUM_DECK = 6 # Anzahl der Decks ・ INITIAL_CHIP = 1000 # Anfänglicher Chip ・ MINIMUM_BET = 100 # Mindesteinsatz Es wird gesagt.
def main():
game = Game()
game.start()
while game.game_mode == 1:
game.reset_game() #Verschiedene zurücksetzen
game.bet(bet=100) #Wette
game.deal() #Karten austeilen
game.player_turn() #Spieler an der Reihe
game.dealer_turn() #Händler ist an der Reihe
game.judge() #Urteil über Sieg oder Niederlage
game.pay_chip() #Abrechnung von Chips
game.check_chip() #Überprüfen Sie das Guthaben des Spielers
game.ask_next_game() #Fragen Sie, ob Sie das Spiel fortsetzen möchten
game.check_deck() #Überprüfen Sie die Anzahl der verbleibenden Karten
print("Beenden Sie BlackJack")
print(str(game.game_count) + "Ich habe die Spielzeiten gespielt")
return game.player.chip, game.game_count
Nach Hit (h) oder Stand (s) oder Double Down (d) oder Surrender (r):
Geben Sie Zeichen über die Tastatur ein, um die Spielerauswahl zu bestimmen.
$Ich wette 100
Der Rest$900
Spieler ist an der Reihe
Player : [♠A, ♦9] = [10, 20], soft card : True
Dealer : ♣6, ? = 6
Hit(h) or Stand(s) or Double down(d) or Surrender(r): s
Händler ist an der Reihe
Player : [♠A, ♦9] = 20
Dealer : [♣6, ♥K] = 16
Händler ist an der Reihe
Player : [♠A, ♦9] = 20
Dealer : [♣6, ♥K, ♥3] = 19
Spieler gewinnt
Ballbesitz-Chip des Spielers$1100
Wollen Sie fortfahren? y/n: y
Die Anzahl der verbleibenden Karten beträgt 307
$Ich wette 100
Der Rest$1000
Spieler ist an der Reihe
Player : [♠2, ♥K] = [12], soft card : False
Dealer : ♥3, ? = 3
Hit(h) or Stand(s) or Double down(d) or Surrender(r): h
Spieler ist an der Reihe
Player : [♠2, ♥K, ♥2] = [14], soft card : False
Dealer : ♥3, ? = 3
Hit(h) or Stand(s) or Double down(d) or Surrender(r): h
Spieler ist an der Reihe
Player : [♠2, ♥K, ♥2, ♠Q] = [24], soft card : False
Dealer : ♥3, ? = 3
Player BUST
Spieler verliert
Ballbesitz-Chip des Spielers$1000
Wollen Sie fortfahren? y/n: y
301 Karten übrig
$Ich wette 100
Der Rest$900
Spieler ist an der Reihe
Player : [♥7, ♥5] = [12], soft card : False
Dealer : ♠8, ? = 8
Hit(h) or Stand(s) or Double down(d) or Surrender(r): d
Spieler ist an der Reihe
Player : [♥7, ♥5, ♠8] = [20], soft card : False
Dealer : ♠8, ? = 8
Double Down wurde ausgewählt. Verdoppelte die Wette
Der Rest$800
Händler ist an der Reihe
Player : [♥7, ♥5, ♠8] = 20
Dealer : [♠8, ♥2] = 10
Händler ist an der Reihe
Player : [♥7, ♥5, ♠8] = 20
Dealer : [♠8, ♥2, ♣7] = 17
Spieler gewinnt
Ballbesitz-Chip des Spielers$1200
Wollen Sie fortfahren? y/n: n
295 Karten übrig
Beenden Sie BlackJack
Ich habe das Spiel 3 Mal gespielt
Bewahren Sie es für Ihre Unterlagen auf.
blackjack.py
import random
import copy
#Konstante
NUM_DECK = 6 #Anzahl der Decks
NUM_PLAYER = 1 #Anzahl der Spieler
INITIAL_CHIP = 1000 #Anfänglicher Chip
MINIMUM_BET = 100
class Card:
'''
Karte generieren
Zahlen: A, 2-10, J, Q, K.
Ruß: Spaten, Herz, Diamant, Keule
'''
SUITS = '♠♥♦♣'
RANKS = range(1, 14) #Normaler Rang
SYMBOLS = "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"
POINTS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] #Punkte für Black Jack
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
self.index = suit + self.SYMBOLS[rank - self.RANKS[0]]
self.point = self.POINTS[rank - self.RANKS[0]]
def __repr__(self):
return self.index
class Deck:
'''
Deck mit gemischten Karten (Deck generieren)
'''
def __init__(self):
self.cards = [Card(suit, rank) \
for suit in Card.SUITS \
for rank in Card.RANKS]
if NUM_DECK > 1:
temp_cards = copy.deepcopy(self.cards)
for i in range(NUM_DECK - 1):
self.cards.extend(temp_cards)
random.shuffle(self.cards)
def draw(self, n=1):
'''
Eine Funktion, die die angegebene Anzahl von Blättern vom Deck subtrahiert
'''
cards = self.cards[:n]
del self.cards[:n] #Lösche die gezogene Karte aus dem Stapel
return cards
def shuffle(self):
'''
Mische das Deck
'''
random.shuffle(self.cards)
return
def count_cards(self):
"""
Geben Sie die verbleibende Anzahl von Decks zurück
"""
count = len(self.cards)
return count
class Hand:
"""
Handklasse
"""
def __init__(self):
self.hand = []
self.is_soft_hand = False
def add_card(self, card):
self.hand.append(card)
def check_soft_hand(self):
"""
Überprüfen Sie, ob es sich um eine weiche Hand handelt (Hand einschließlich A).
"""
hand_list = []
for i in range(len(self.hand)):
hand_list.append(self.hand[i].point)
hand_list.sort() #Sortieren Sie Ihre Hand in aufsteigender Reihenfolge
if hand_list[0] == 1 and sum(hand_list[1:]) < 11: #Mit einer weichen Hand
self.is_soft_hand = True
else:
self.is_soft_hand = False
def sum_point(self):
"""
Gibt den Gesamtwert der Punkte zurück
"""
self.check_soft_hand()
hand_list = []
for i in range(len(self.hand)):
hand_list.append(self.hand[i].point)
hand_list.sort() #Sortieren Sie Ihre Hand in aufsteigender Reihenfolge
s1 = 0 #Anfangswert beim Zählen von A als 1
for i in range(len(self.hand)):
s1 += self.hand[i].point
if self.is_soft_hand == True: #Mit einer weichen Hand
s2 = 11 #Zähle das erste A als 11
for i in range(len(hand_list)-1):
s2 += hand_list[i+1]
s = [s1, s2]
else:
s = [s1]
return s
def calc_final_point(self):
"""
Gibt den Endpunkt nicht BUST zurück
"""
temp_point = self.sum_point()
if max(temp_point) > 22:
p = temp_point[0] #Wenn der mit den größeren Punkten BUST ist, der mit den kleineren Punkten
else:
p = max(temp_point)
return p
def is_bust(self):
"""
"""
if min(self.sum_point()) > 21: #Wenn der kleinere Punkt 21 überschreitet
return True
else:
return False
def deal(self, card):
"""
Fügen Sie die ausgegebene Karte Ihrer Hand hinzu
"""
for i in range(len(card)):
self.add_card(card[i])
def hit(self, card):
#Schlagen Sie einen nach dem anderen
if len(card) == 1:
self.add_card(card[0])
else:
print("Die Anzahl der Karten ist falsch")
class Player:
def __init__(self):
self.hand = Hand()
self.chip = Chip()
self.done = False #Flagge, die das Ende des Zuges des Spielers anzeigt
self.hit_flag = False #Flag, das angibt, ob der Spieler Treffer ausgewählt hat
self.is_human = True # True:Die Leute spielen, falsch:Automatisches Abspielen
def init_player(self):
self.hand = Hand()
self.done = False
self.hit_flag = False
def deal(self, card):
self.hand.deal(card)
def hit(self, card):
#Füge deiner Karte 1 Karte hinzu
self.hand.hit(card)
self.hit_flag = True
def stand(self):
#Ende der Runde
self.done = True
def double_down(self, card):
#Verdoppeln Sie den Einsatz und treffen Sie nur einmal, um den Zug zu beenden
self.chip.balance -= self.chip.bet
self.chip.bet = self.chip.bet * 2
self.hand.hit(card)
self.done = True #Machen Sie es sich zur Regel, dass Sie nach dem Double-Down nur einmal treffen können
def surrender(self):
#Halbieren Sie den Einsatz (geben Sie die Hälfte des Einsatzes zurück) und beenden Sie den Zug
# self.chip.balance += int(self.chip.bet / 2)
self.chip.bet = int(self.chip.bet / 2)
self.chip.balance += self.chip.bet
self.done = True
def insurance(self):
#Nicht implementiert
pass
def split(self):
#Nicht implementiert
pass
class Dealer:
def __init__(self):
self.hand = Hand()
def init_dealer(self):
self.hand = Hand()
def deal(self, card):
self.hand.deal(card)
def hit(self, card):
self.hand.hit(card)
class Chip:
def __init__(self):
self.balance = INITIAL_CHIP
self.bet = 0
def bet_chip(self, bet):
#Wenn Sie Chip hängen, reduzieren Sie von Hand
self.balance -= bet
self.bet = bet
def pay_chip_win(self):
#Wenn Sie gewinnen, erhalten Sie doppelt so viel wie BET
self.balance += self.bet * 2
def pay_chip_lose(self):
#Wenn Sie verlieren, verlieren Sie alle WETTEN
self.balance = self.balance
def pay_chip_push(self):
#Geben Sie beim Zeichnen den Betrag von BET zurück
self.balance += self.bet
class AI:
def select_random1(self):
r = random.randint(0, 1)
if r > 0.5:
selection = 'h' # hit
else:
selection = 's' # stand
return selection
def select_random2(self, hand):
if hand <= 11:
selection = 'h'
else:
r = random.randint(0, 1)
if r > 0.5:
selection = 'h' # hit
else:
selection = 's' # stand
return selection
def select_random3(self, hand, n):
if hand < 11:
selection = 'h' # hit
elif hand == 11 and n == 2:
selection = 'd' # double down
elif hand == 16 and n == 2:
selection = 'r' # surrender
elif hand > 17:
selection = 's' # stand
else:
r = random.randint(0, 1)
if r > 0.5:
selection = 'h' # hit
else:
selection = 's' # stand
return selection
class Game:
def __init__(self):
self.game_mode = 0 # 0:Warten auf den Start, 1:Im Spiel, 2:Spiel ist aus
self.deck = Deck()
self.player = Player()
self.dealer = Dealer()
self.judgment = 0
self.game_count = 0
self.start()
self.message_on = True #self.player.is_human # True:Zeigen Sie auf der Konsole die Meldung Falsch an:Zeigen Sie keine Nachrichten auf der Konsole an
def start(self):
self.deck.shuffle()
self.game_mode = 1
self.player = Player()
self.dealer = Dealer()
self.game_count = 0
def reset_game(self):
self.player.init_player()
self.dealer.init_dealer()
self.game_count += 1
def bet(self, bet):
self.player.chip.bet_chip(bet=bet)
if self.message_on:
print("$" + str(self.player.chip.bet) + "ich wette")
print("Der Rest$" + str(self.player.chip.balance))
#Karten austeilen
def deal(self, n=2):
'''
Karten austeilen
'''
card = self.deck.draw(n)
self.player.deal(card)
# print(self.player.hand.hand)
card = self.deck.draw(n)
self.dealer.deal(card)
# print(self.dealer.hand.hand)
self.judgment = 0 #Urteil über Sieg oder Niederlage
self.player.done = False
self.show_card()
#Spieler ist an der Reihe
def player_turn(self):
'''
Spieler an der Reihe
'''
if self.player.hand.calc_final_point() == 21: #Wenn die Summe 21 ist, ist der Händler sofort an der Reihe
self.player.done = True
while not self.player.done and not self.player.hand.is_bust():
if self.player.is_human is True:
action = input("Hit(h) or Stand(s) or Double down(d) or Surrender(r): ")
elif self.player.is_human is True and self.player.hit_flag:
action = input("Hit(h) or Stand(s): ") #Treffer für Treffer/nur stehen
else:
action = AI().select_random3(hand=self.player.hand.calc_final_point(), n=len(self.player.hand.hand))
self.player_step(action=action)
def player_step(self, action):
if action == 'h': # Hit
card = self.deck.draw(1)
self.player.hit(card)
self.show_card()
if self.player.hand.calc_final_point() == 21: #Keine Treffer mehr, wenn die Gesamtpunktzahl 21 erreicht
self.player.done = True
if self.player.hand.is_bust():
self.player.done = True
self.judgment = -1 #Wenn Spieler BUST, verlieren Sie sofort
if self.message_on:
print("Player BUST")
elif action == 's': # Stand
self.player.stand()
elif action == 'd' and self.player.hit_flag is False: # Double down.Ja, wenn Treffer nicht ausgewählt ist
card = self.deck.draw(1)
if self.player.chip.balance >= self.player.chip.bet: #Double Down ist möglich, wenn der Kontostand den Einsatzbetrag übersteigt
self.player.double_down(card)
self.show_card()
if self.message_on:
print("Double Down wurde ausgewählt. Verdoppelte die Wette")
print("Der Rest$" + str(self.player.chip.balance))
if self.player.hand.is_bust():
self.player.done = True
self.judgment = -1 #Wenn Spieler BUST, verlieren Sie sofort
if self.message_on:
print("Player BUST")
else: #Treffen Sie, wenn der Kontostand unter dem Einsatz liegt
print("Hit, weil es nicht genug Chips gibt")
self.player.hit(card)
self.show_card()
if self.player.hand.calc_final_point() == 21: #Keine Treffer mehr, wenn die Gesamtpunktzahl 21 erreicht
self.player.done = True
if self.player.hand.is_bust():
self.player.done = True
self.judgment = -1 #Wenn Spieler BUST, verlieren Sie sofort
if self.message_on:
print("Player BUST")
elif action == 'r' and self.player.hit_flag is False: # Surrender.Ja, wenn Treffer nicht ausgewählt ist
self.player.surrender()
self.judgment = -1 #Verloren, weil ich mich für Surrender entschieden habe
if self.message_on:
print("Übergabe ausgewählt")
else:
if self.message_on:
print("Wählen Sie die richtige Option")
def show_card(self):
'''
Spielerkarte anzeigen
'''
if self.message_on:
print("Spieler ist an der Reihe")
print("Player : " + str(self.player.hand.hand) + " = " +
str(self.player.hand.sum_point()) + ", soft card : " + str(self.player.hand.is_soft_hand))
print("Dealer : " + str(self.dealer.hand.hand[0].index) +
", ? = " + str(self.dealer.hand.hand[0].point))
else:
pass
def dealer_turn(self):
'''
Händler ist an der Reihe
'''
if self.judgment == -1:
return
self.open_dealer()
while self.dealer.hand.calc_final_point() < 17 and self.judgment == 0:
card = self.deck.draw(1)
self.dealer.hit(card)
self.open_dealer()
if self.dealer.hand.calc_final_point() > 21:
self.judgment = 1
if self.message_on:
print("Dealer BUST")
def open_dealer(self):
'''
Öffne eine Hole Card
'''
if self.message_on:
print("Händler ist an der Reihe")
print("Player : " + str(self.player.hand.hand) + " = " +
str(self.player.hand.calc_final_point()))
print("Dealer : " + str(self.dealer.hand.hand) + " = " +
str(self.dealer.hand.calc_final_point()))
else:
pass
def judge(self):
'''
Urteil über Sieg oder Niederlage
'''
if self.judgment == 0 and self.player.hand.calc_final_point() > \
self.dealer.hand.calc_final_point():
self.judgment = 1
elif self.judgment == 0 and self.player.hand.calc_final_point() < \
self.dealer.hand.calc_final_point():
self.judgment = -1
elif self.judgment == 0 and self.player.hand.calc_final_point() == \
self.dealer.hand.calc_final_point():
self.judgment = 0
if self.message_on:
self.show_judgement()
def pay_chip(self):
previous_chip = self.player.chip.balance
if self.judgment == 1: # Player win
self.player.chip.pay_chip_win()
elif self.judgment == -1: # Player lose
self.player.chip.pay_chip_lose()
elif self.judgment == 0: # Push
self.player.chip.pay_chip_push()
if self.message_on:
print("Ballbesitz-Chip des Spielers$" + str(self.player.chip.balance))
reward = self.player.chip.balance - previous_chip #In diesem Spiel verdiente Belohnungen
return reward
def check_chip(self):
if self.player.chip.balance < MINIMUM_BET:
self.game_mode = 2
if self.message_on:
print("Das Spiel endet, weil der Chip unter dem Mindesteinsatz liegt")
def show_judgement(self):
'''
Anzeige von Sieg oder Niederlage
'''
if self.message_on:
print("")
if self.judgment == 1:
print("Spieler gewinnt")
elif self.judgment == -1:
print("Spieler verliert")
elif self.judgment == 0:
print("zeichnen")
print("")
else:
pass
def ask_next_game(self):
'''
Fragen Sie, ob Sie das Spiel fortsetzen möchten
'''
if self.player.is_human == True:
while self.game_mode == 1:
player_input = input("Wollen Sie fortfahren? y/n: ")
if player_input == 'y':
break
elif player_input == 'n':
self.game_mode = 2
break
else:
print('y/Bitte geben Sie n ein')
else:
pass #Fahren Sie mit der automatischen Wiedergabe fort
print('Die Anzahl der verbleibenden Karten' + str(self.deck.count_cards()))
print("")
def check_deck(self):
'''
Überprüfen Sie die verbleibende Anzahl von Karten und mischen Sie, wenn es nur wenige gibt
'''
if self.deck.count_cards() < NUM_PLAYER * 10 + 5:
self.deck = Deck()
if self.message_on:
print("Das Deck wurde initialisiert")
print('Die Anzahl der verbleibenden Karten' + str(self.deck.count_cards()))
print("")
def main():
game = Game()
game.start()
while game.game_mode == 1:
game.reset_game() #Verschiedene zurücksetzen
game.bet(bet=100) #Wette
game.deal() #Karten austeilen
game.player_turn() #Spieler an der Reihe
game.dealer_turn() #Händler ist an der Reihe
game.judge() #Urteil über Sieg oder Niederlage
game.pay_chip() #Abrechnung von Chips
game.check_chip() #Überprüfen Sie das Guthaben des Spielers
game.ask_next_game() #Fragen Sie, ob Sie das Spiel fortsetzen möchten
game.check_deck() #Überprüfen Sie die Anzahl der verbleibenden Karten
print("Beenden Sie BlackJack")
print(str(game.game_count) + "Ich habe die Spielzeiten gespielt")
return game.player.chip, game.game_count
if __name__ == '__main__':
main()
Ich habe mit Python einen Blackjack gemacht. Ich habe auch versucht, Double Down und Surrender zu implementieren, um der Grundstrategie so nahe wie möglich zu kommen. Ich möchte eines Tages Split hinzufügen. Ich habe die BET-Funktion unter der Annahme hinzugefügt, dass ich lernen werde, aber obwohl ich kein Geld habe, verdoppelt sie sich usw. Es wurden viele Fehler gefunden und es war schwierig, sie zu beheben. (Bitte weisen Sie darauf hin, wenn es noch Fehler gibt)
Registrieren Sie als Nächstes den diesmal erstellten Blackjack als Ihre eigene Umgebung im Fitnessstudio von OpenAI. Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (② Registrieren Sie die Umgebung im Fitnessstudio)