CORRESPONDENCE 23: BLACK JACK MADDNESS

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

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top