Today I made Black Jack
class Card:
def __init__(self, s, r):
self.suit = s
self.rank = r
def __str__(self):
return f"{self.rank}{self.suit}"
This is the code for the cards
from player import Player
class Dealer(Player):
def printHand(self, round_num=0):
if round_num == 1:
print("Dealer's Hand:", self.hand[1])
else:
print("Dealer's Hand:", *self.hand)
This is the code for the Dealer
from card import Card
from random import shuffle
class Deck:
ranks = ["A","2","3","4","5","6","7","8","9","10","K","Q","J"]
suits = ["♠","♥","♦","♣"]
def __init__(self):
self.cards = []
for r in Deck.ranks:
for s in Deck.suits:
self.cards.append(Card(s,r))
def shuffle(self):
shuffle(self.cards)
def deal(self):
return self.cards.pop()
This is the code for the Deck
from deck import Deck
class Decks(Deck):
def __init__(self, numDecks):
self.cards = []
for i in range(numDecks):
d = Deck()
for card in d.cards:
self.cards.append(card)
This is the code for multiple decks
class Player:
def __init__(self):
self.money = 1000
self.hand = []
def getHand(self):
return self.hand
def recieveCard(self, card):
self.hand.append(card)
def printHand(self):
print("Current Hand:", *self.hand)
def clearHand(self):
self.hand = []
def getMoney(self):
return self.money
def setMoney(self, newMoney):
self.money = newMoney
This is the code for the Player
from deck import Deck
from decks import Decks
from player import Player
from dealer import Dealer
from time import sleep
values = dict(zip(Deck.ranks, [11, 2,3,4,5,6,7,8,9,10,10,10,10]))
def main():
deck = Decks(6)
deck.shuffle()
player = Player()
dealer = Dealer()
This is the code that shuffles
print(f"Welcome to BlackJack, you start off with ${player.money}")
print()
while True:
print(f"Current Money is: ${player.getMoney()}")
print()
bet = handle_bet(player)
player.setMoney(player.getMoney() - bet)
for i in range(2):
player.recieveCard(deck.deal())
dealer.recieveCard(deck.deal())
This is the code that gives cards
layer.printHand()
dealer.printHand(1)
player_hand_value = calculate_hand_value(player.getHand())
if player_hand_value == 21:
handle_blackjack(player, dealer, deck, bet)
player.clearHand()
dealer.clearHand()
if handle_continual_play():
continue
else:
return
while player_hand_value < 21:
next_move = input("(H)it or (S)tand: ")
if next_move.lower() == "s":
dealer_hand_value = handle_dealer(dealer.getHand(), dealer, deck)
if dealer_hand_value == 21:
sleep(0.5)
print("Black Jack, House Wins")
if player.getMoney() == 0:
print("Bankrupt! Better Luck Next Time")
return
This is the code that decides if you win or lose
elif dealer_hand_value > 21:
sleep(0.5)
print("Dealer Bust, Player Wins!")
player.setMoney(player.getMoney() + (bet * 2))
elif dealer_hand_value < player_hand_value:
sleep(0.5)
print("Player Wins!")
player.setMoney(player.getMoney() + (bet * 2))
elif dealer_hand_value > player_hand_value:
sleep(0.5)
print("House Wins")
if player.getMoney() == 0:
print("Bankrupt! Better Luck Next Time")
return
elif dealer_hand_value == player_hand_value:
sleep(0.5)
print("Push")
player.setMoney(player.getMoney() + bet)
player.clearHand()
dealer.clearHand()
if handle_continual_play():
break
else:
return
this is the code that gives the money
if next_move.lower() == "h":
player.recieveCard(deck.deal())
player.printHand()
player_hand_value = calculate_hand_value(player.getHand())
print(f"Hand's Value: {player_hand_value}")
if player_hand_value == 21:
handle_blackjack(player,dealer,deck,bet)
if player_hand_value > 21:
print("Bust! House Wins")
if player.getMoney() == 0:
print("Bankrupt! Better Luck Next Time")
return
if player_hand_value >= 21:
player.clearHand()
dealer.clearHand()
if handle_continual_play():
break
else:
return
def handle_bet(player):
while True:
bet = int(input("Please Enter Amount You'd Like To Bet: $"))
if bet > player.getMoney():
print("Bet greater than current amount of money is not allowed")
if bet <= 0:
print("Bet cannot be negative or zero")
else:
print()
return bet
These are the rules
ef calculate_hand_value(hand):
hand_value = 0
num_aces = 0
for card in hand:
if card.rank == "A":
num_aces += 1
hand_value += 11
else:
hand_value += values[card.rank]
while hand_value > 21 and num_aces > 0:
hand_value -= 10
num_aces -= 1
return hand_value
def handle_blackjack(player, dealer, deck, bet):
dealer_hand_value = handle_dealer(dealer.getHand(), dealer, deck)
if dealer_hand_value == 21:
sleep(0.5)
print("Push (Tie)")
player.setMoney(player.getMoney() + bet)
else:
sleep(0.5)
print("Black Jack!")
player.setMoney(player.getMoney() + (bet * 2))
these are the winning or losing or drawing texts
def handle_dealer(hand, dealer, deck):
sleep(0.5)
dealer.printHand()
hand_value = calculate_hand_value(hand)
while hand_value < 17:
dealer.recieveCard(deck.deal())
hand_value = calculate_hand_value(hand)
sleep(0.5)
dealer.printHand()
return hand_value
def handle_continual_play():
while True:
keep_playing = input("(Q)uit or (C)ontinue: ")
if keep_playing.lower() != "q" and keep_playing.lower() != "c":
print("Please enter q or c")
else:
if keep_playing.lower() == "q":
return False
if keep_playing.lower() == "c":
return True
main()
Theses are the controls
