1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| import tkinter as tk import random import itertools import os from PIL import Image, ImageTk
def card_sort_key(card): rank_order = {'1': 13, '2': 14, '3': 1, '4': 2, '5': 3, '6': 4, '7': 5, '8': 6, '9': 7, '10': 8, '11': 9, '12': 10, '13': 11} return rank_order[card[0]]
class CardDealingApp: def __init__(self, master): self.master = master master.title("扑克牌发牌") self.canvas = tk.Canvas(master, width=500, height=600) self.canvas.pack()
self.deal_button = tk.Button(master, text="发牌", command=self.deal_cards) self.deal_button.pack()
self.sort_button = tk.Button(master, text="排序牌", command=self.sort_cards) self.sort_button.pack()
self.deck = self.create_deck() self.displayed_cards = []
current_script_path = os.path.realpath(__file__) current_script_directory = os.path.dirname(current_script_path) self.img_folder_path = os.path.join(current_script_directory, 'img')
def create_deck(self): suits = ['h', 'd', 'a', 's'] ranks = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13'] deck = list(itertools.product(ranks, suits)) random.shuffle(deck) print(deck) return deck
def deal_cards(self): self.deck = self.create_deck()
self.clear_cards()
rows = 3 cards_per_row = 13
for row in range(rows): for col in range(cards_per_row): if len(self.deck) > 0: card = self.deck.pop() self.display_card_image(card, row, col)
def sort_cards(self): rows = [self.displayed_cards[i:i + 13] for i in range(0, len(self.displayed_cards), 13)]
sorted_rows = [sorted(row, key=lambda item: card_sort_key(item[2])) for row in rows]
self.displayed_cards = [card for row in sorted_rows for card in row]
for _, image_id, _ in self.displayed_cards: self.canvas.delete(image_id) for row_index, row in enumerate(sorted_rows): for col_index, card_tuple in enumerate(row): _, _, card = card_tuple self.display_card_image(card, row_index, col_index)
def display_card_image(self, card, row, col): file_name = f"{card[1]}{card[0]}.jpg" image_path = os.path.join(self.img_folder_path, file_name) image = Image.open(image_path)
resized_image = image.resize((100, 150)) photo = ImageTk.PhotoImage(resized_image)
x_position = 10 + col * 30 y_position = 50 + row * 160
image_id = self.canvas.create_image(x_position, y_position, anchor=tk.NW, image=photo) self.displayed_cards.append((photo, image_id, card))
def clear_cards(self): for _, image_id, _ in self.displayed_cards: self.canvas.delete(image_id) self.displayed_cards.clear()
root = tk.Tk() app = CardDealingApp(root) root.mainloop()
|