utsav507/python-projects

Black Jack Game doesnt run but no errors also

malteserssss opened this issue · 0 comments

import pygame
import random

Initialize Pygame

pygame.init()

Define colors

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 128, 0)

Set the screen dimensions

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

Create the screen

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Blackjack")

Set the font

font = pygame.font.Font(None, 36)

Define the ranks, suits, and values of the cards

ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
values = {'A': 11, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10, 'J': 10, 'Q': 10, 'K': 10}

Load card images

card_images = {}
for suit in suits:
for rank in ranks:
card_name = rank + ' of ' + suit
image_path = f"images/{card_name}.png"
card_images[card_name] = pygame.image.load(image_path)

class Card:
def init(self, rank, suit):
self.rank = rank
self.suit = suit

def __str__(self):
    return self.rank + ' of ' + self.suit

class Deck:
def init(self):
self.deck = []
for suit in suits:
for rank in ranks:
self.deck.append(Card(rank, suit))

def shuffle(self):
    random.shuffle(self.deck)

def deal(self):
    return self.deck.pop()

class Hand:
def init(self):
self.cards = []
self.value = 0
self.aces = 0

def add_card(self, card):
    self.cards.append(card)
    self.value += values[card.rank]
    if card.rank == 'A':
        self.aces += 1

def adjust_for_ace(self):
    while self.value > 21 and self.aces > 0:
        self.value -= 10
        self.aces -= 1

class Chips:
def init(self):
self.total = 100
self.bet = 0

def win_bet(self):
    self.total += self.bet

def lose_bet(self):
    self.total -= self.bet

class BlackjackGame:
def main(self):
pass

class BlackjackGame:
def draw_text(self, text, color, x, y):
text_surface = font.render(text, True, color)
screen.blit(text_surface, (x, y))

def draw_card(self, card, x, y):
    card_name = str(card)
    card_image = card_images[card_name]
    screen.blit(card_image, (x, y))

def draw_table(self):
    screen.fill(GREEN)

    # Draw player
    x = 50
    y = 200
    for card in self.dealer_hand.cards:
        self.draw_card(card, x, y)
        x += 100

    # Draw player's chips total
    self.draw_text("Chips: " + str(self.chips.total), WHITE, 50, 50)

    # Update the display
    pygame.display.flip()

def main(self):
    print("Welcome to Blackjack!")

    while True:
        self.deck.shuffle()

        self.player_hand = Hand()
        self.dealer_hand = Hand()

        self.player_hand.add_card(self.deck.deal())
        self.player_hand.add_card(self.deck.deal())
        self.dealer_hand.add_card(self.deck.deal())
        self.dealer_hand.add_card(self.deck.deal())

        # Take bets
        self.take_bet()

        # Show initial cards (one dealer card hidden)
        self.show_some()

        # Start the game
        self.playing = True

        # Player's turn
        self.hit_or_stand()

        # Show all cards (including dealer's)
        self.show_all()

        # Check if player busts
        if self.player_hand.value > 21:
            self.player_busts()
            if not self.play_again():
                break
            else:
                continue

        # Dealer's turn (automated)
        while self.dealer_hand.value < 17:
            self.hit(self.dealer_hand)

        # Show all cards
        self.show_all()

        # Check if dealer busts
        if self.dealer_hand.value > 21:
            self.dealer_busts()
        elif self.dealer_hand.value > self.player_hand.value:
            self.dealer_wins()
        elif self.dealer_hand.value < self.player_hand.value:
            self.player_wins()
        else:
            self.push()

        # Play again?
        if not self.play_again():
            break

# Create the game object
game = BlackjackGame()

# Start the game
game.main()