In this video I’ll show you how to build a basic blackjack game for Tkinter and Python.
We’ll use the code from a couple videos ago to create our deck. Then we’ll tweak it to add more cards for black jack.
Python Code: blackjack.py
(Github Code)
from tkinter import * import random from PIL import Image, ImageTk root = Tk() root.title('Codemy.com - Card Deck') root.iconbitmap('c:/gui/codemy.ico') root.geometry("1200x800") root.configure(background="green") # Resize Cards def resize_cards(card): # Open the image our_card_img = Image.open(card) # Resize The Image our_card_resize_image = our_card_img.resize((150, 218)) # output the card global our_card_image our_card_image = ImageTk.PhotoImage(our_card_resize_image) # Return that card return our_card_image # Shuffle The Cards def shuffle(): # Clear all the old cards from previous games dealer_label_1.config(image='') dealer_label_2.config(image='') dealer_label_3.config(image='') dealer_label_4.config(image='') dealer_label_5.config(image='') player_label_1.config(image='') player_label_2.config(image='') player_label_3.config(image='') player_label_4.config(image='') player_label_5.config(image='') # Define Our Deck suits = ["diamonds", "clubs", "hearts", "spades"] values = range(2, 15) # 11 = Jack, 12=Queen, 13=King, 14 = Ace global deck deck =[] for suit in suits: for value in values: deck.append(f'{value}_of_{suit}') # Create our players global dealer, player, dealer_spot, player_spot dealer = [] player = [] dealer_spot = 0 player_spot = 0 # Shuffle Two Cards for player and dealer dealer_hit() dealer_hit() player_hit() player_hit() # Put number of remaining cards in title bar root.title(f'Codemy.com - {len(deck)} Cards Left') def dealer_hit(): global dealer_spot if dealer_spot < 5: try: # Get the player Card dealer_card = random.choice(deck) # Remove Card From Deck deck.remove(dealer_card) # Append Card To Dealer List dealer.append(dealer_card) # Output Card To Screen global dealer_image1, dealer_image2, dealer_image3, dealer_image4, dealer_image5 if dealer_spot == 0: # Resize Card dealer_image1 = resize_cards(f'images/cards/{dealer_card}.png') # Output Card To Screen dealer_label_1.config(image=dealer_image1) # Increment our player spot counter dealer_spot += 1 elif dealer_spot == 1: # Resize Card dealer_image2 = resize_cards(f'images/cards/{dealer_card}.png') # Output Card To Screen dealer_label_2.config(image=dealer_image2) # Increment our player spot counter dealer_spot += 1 elif dealer_spot == 2: # Resize Card dealer_image3 = resize_cards(f'images/cards/{dealer_card}.png') # Output Card To Screen dealer_label_3.config(image=dealer_image3) # Increment our player spot counter dealer_spot += 1 elif dealer_spot == 3: # Resize Card dealer_image4 = resize_cards(f'images/cards/{dealer_card}.png') # Output Card To Screen dealer_label_4.config(image=dealer_image4) # Increment our player spot counter dealer_spot += 1 elif dealer_spot == 4: # Resize Card dealer_image5 = resize_cards(f'images/cards/{dealer_card}.png') # Output Card To Screen dealer_label_5.config(image=dealer_image5) # Increment our player spot counter dealer_spot += 1 # Put number of remaining cards in title bar root.title(f'Codemy.com - {len(deck)} Cards Left') except: root.title(f'Codemy.com - No Cards In Deck') def player_hit(): global player_spot if player_spot < 5: try: # Get the player Card player_card = random.choice(deck) # Remove Card From Deck deck.remove(player_card) # Append Card To Dealer List player.append(player_card) # Output Card To Screen global player_image1, player_image2, player_image3, player_image4, player_image5 if player_spot == 0: # Resize Card player_image1 = resize_cards(f'images/cards/{player_card}.png') # Output Card To Screen player_label_1.config(image=player_image1) # Increment our player spot counter player_spot += 1 elif player_spot == 1: # Resize Card player_image2 = resize_cards(f'images/cards/{player_card}.png') # Output Card To Screen player_label_2.config(image=player_image2) # Increment our player spot counter player_spot += 1 elif player_spot == 2: # Resize Card player_image3 = resize_cards(f'images/cards/{player_card}.png') # Output Card To Screen player_label_3.config(image=player_image3) # Increment our player spot counter player_spot += 1 elif player_spot == 3: # Resize Card player_image4 = resize_cards(f'images/cards/{player_card}.png') # Output Card To Screen player_label_4.config(image=player_image4) # Increment our player spot counter player_spot += 1 elif player_spot == 4: # Resize Card player_image5 = resize_cards(f'images/cards/{player_card}.png') # Output Card To Screen player_label_5.config(image=player_image5) # Increment our player spot counter player_spot += 1 # Put number of remaining cards in title bar root.title(f'Codemy.com - {len(deck)} Cards Left') except: root.title(f'Codemy.com - No Cards In Deck') # Deal Out Cards def deal_cards(): try: # Get the deler Card card = random.choice(deck) # Remove Card From Deck deck.remove(card) # Append Card To Dealer List dealer.append(card) # Output Card To Screen global dealer_image dealer_image = resize_cards(f'images/cards/{card}.png') dealer_label.config(image=dealer_image) #dealer_label.config(text=card) # Get the player Card card = random.choice(deck) # Remove Card From Deck deck.remove(card) # Append Card To Dealer List player.append(card) # Output Card To Screen global player_image player_image = resize_cards(f'images/cards/{card}.png') player_label.config(image=player_image) #player_label.config(text=card) # Put number of remaining cards in title bar root.title(f'Codemy.com - {len(deck)} Cards Left') except: root.title(f'Codemy.com - No Cards In Deck') my_frame = Frame(root, bg="green") my_frame.pack(pady=20) # Create Frames For Cards dealer_frame = LabelFrame(my_frame, text="Dealer", bd=0) dealer_frame.pack(padx=20, ipadx=20) player_frame = LabelFrame(my_frame, text="Player", bd=0) player_frame.pack(ipadx=20, pady=10) # Put Dealer cards in frames dealer_label_1 = Label(dealer_frame, text='') dealer_label_1.grid(row=0, column=0, pady=20, padx=20) dealer_label_2 = Label(dealer_frame, text='') dealer_label_2.grid(row=0, column=1, pady=20, padx=20) dealer_label_3 = Label(dealer_frame, text='') dealer_label_3.grid(row=0, column=2, pady=20, padx=20) dealer_label_4 = Label(dealer_frame, text='') dealer_label_4.grid(row=0, column=3, pady=20, padx=20) dealer_label_5 = Label(dealer_frame, text='') dealer_label_5.grid(row=0, column=4, pady=20, padx=20) # Put Player cards in frames player_label_1 = Label(player_frame, text='') player_label_1.grid(row=1, column=0, pady=20, padx=20) player_label_2 = Label(player_frame, text='') player_label_2.grid(row=1, column=1, pady=20, padx=20) player_label_3 = Label(player_frame, text='') player_label_3.grid(row=1, column=2, pady=20, padx=20) player_label_4 = Label(player_frame, text='') player_label_4.grid(row=1, column=3, pady=20, padx=20) player_label_5 = Label(player_frame, text='') player_label_5.grid(row=1, column=4, pady=20, padx=20) # Create Button Frame button_frame = Frame(root, bg="green") button_frame.pack(pady=20) # Create a couple buttons shuffle_button = Button(button_frame, text="Shuffle Deck", font=("Helvetica", 14), command=shuffle) shuffle_button.grid(row=0, column=0) card_button = Button(button_frame, text="Hit Me!", font=("Helvetica", 14), command=player_hit) card_button.grid(row=0, column=1, padx=10) stand_button = Button(button_frame, text="Stand!", font=("Helvetica", 14)) stand_button.grid(row=0, column=2) # Shuffle Deck On Start shuffle() root.mainloop()
Add comment