Last active
October 13, 2024 07:35
-
-
Save david-ohmg/9744ca361b9e2e1cac944ff993a67f87 to your computer and use it in GitHub Desktop.
Create standard 52 card deck of cards; shuffle; deal cards based on num players, max and min hand sizes; refresh and shuffle and re-deal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
DECK OF CARDS | |
DAVE CRANDELL 2024 | |
52-CARD DECK DEFINED AS DICT | |
IMAGES FROM https://tekeye.uk/playing_cards/svg-playing-cards | |
""" | |
class CardSuit: | |
SPADES = 'Spades' | |
CLUBS = 'Clubs' | |
DIAMONDS = 'Diamonds' | |
HEARTS = 'Hearts' | |
class CardVal: | |
A = 11, 'A' | |
K = 10, 'K' | |
Q = 10, 'Q' | |
J = 10, 'J' | |
TEN = 10, '10' | |
NINE = 9, '9' | |
EIGHT = 8, '8' | |
SEVEN = 7, '7' | |
SIX = 6, '6' | |
FIVE = 5, '5' | |
FOUR = 4, '4' | |
THREE = 3, '3' | |
TWO = 2, '2' | |
CARDS = [ | |
dict(suit=CardSuit.SPADES, value=CardVal.A, img='spades_ace.svg', slug='ace-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.K, img='spades_king.svg', slug='king-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.Q, img='spades_queen.svg', slug='queen-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.J, img='spades_jack.svg', slug='jack-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.TEN, img='spades_10.svg', slug='10-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.NINE, img='spades_9.svg', slug='9-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.EIGHT, img='spades_8.svg', slug='8-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.SEVEN, img='spades_7.svg', slug='7-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.SIX, img='spades_6.svg', slug='6-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.FIVE, img='spades_5.svg', slug='5-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.FOUR, img='spades_4.svg', slug='4-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.THREE, img='spades_3.svg', slug='3-of-spades'), | |
dict(suit=CardSuit.SPADES, value=CardVal.TWO, img='spades_2.svg', slug='2-of-spades'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.A, img='hearts_ace.svg', slug='ace-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.K, img='hearts_king.svg', slug='king-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.Q, img='hearts_queen.svg', slug='queen-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.J, img='hearts_jack.svg', slug='jack-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.TEN, img='hearts_10.svg', slug='10-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.NINE, img='hearts_9.svg', slug='9-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.EIGHT, img='hearts_8.svg', slug='8-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.SEVEN, img='hearts_7.svg', slug='7-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.SIX, img='hearts_6.svg', slug='6-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.FIVE, img='hearts_5.svg', slug='5-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.FOUR, img='hearts_4.svg', slug='4-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.THREE, img='hearts_3.svg', slug='3-of-hearts'), | |
dict(suit=CardSuit.HEARTS, value=CardVal.TWO, img='hearts_2.svg', slug='2-of-hearts'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.A, img='clubs_ace.svg', slug='ace-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.K, img='clubs_king.svg', slug='king-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.Q, img='clubs_queen.svg', slug='queen-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.J, img='clubs_jack.svg', slug='jack-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.TEN, img='clubs_10.svg', slug='10-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.NINE, img='clubs_9.svg', slug='9-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.EIGHT, img='clubs_8.svg', slug='8-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.SEVEN, img='clubs_7.svg', slug='7-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.SIX, img='clubs_6.svg', slug='6-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.FIVE, img='clubs_5.svg', slug='5-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.FOUR, img='clubs_4.svg', slug='4-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.THREE, img='clubs_3.svg', slug='3-of-clubs'), | |
dict(suit=CardSuit.CLUBS, value=CardVal.TWO, img='clubs_2.svg', slug='2-of-clubs'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.A, img='diamonds_ace.svg', slug='ace-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.K, img='diamonds_king.svg', slug='king-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.Q, img='diamonds_queen.svg', slug='queen-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.J, img='diamonds_jack.svg', slug='jack-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.TEN, img='diamonds_10.svg', slug='10-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.NINE, img='diamonds_9.svg', slug='9-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.EIGHT, img='diamonds_8.svg', slug='8-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.SEVEN, img='diamonds_7.svg', slug='7-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.SIX, img='diamonds_6.svg', slug='6-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.FIVE, img='diamonds_5.svg', slug='5-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.FOUR, img='diamonds_4.svg', slug='4-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.THREE, img='diamonds_3.svg', slug='3-of-diamonds'), | |
dict(suit=CardSuit.DIAMONDS, value=CardVal.TWO, img='diamonds_2.svg', slug='2-of-diamonds'), | |
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
import os | |
from .deck_of_cards import CARDS | |
class SimpleCardGame: | |
CARD_PATH = '/static/svg_playing_cards/' | |
def __init__(self, max_hand: int, min_hand: int, n_players: int): | |
self.max_hand = max_hand | |
self.min_hand = min_hand | |
self.n_players = n_players | |
self.cards = CARDS | |
@staticmethod | |
def get_card_val(card: dict) -> int: | |
return int(card['value'][0]) | |
@staticmethod | |
def get_card_face(card: dict) -> str: | |
return str(card['value'][1]) | |
def get_player_card_lists(self) -> list: | |
return [(n, []) for n in range(self.n_players)] | |
@staticmethod | |
def draw_card(n: int, deck: list) -> dict: | |
return deck[n + 1] if n < 52 else {} | |
def shuffle_deck(self) -> list: | |
deck = self.cards | |
random.shuffle(deck) | |
return deck | |
def deal_hand(self) -> tuple[list[dict], int, list[dict]]: | |
deck, card_lists, cards_dealt, i = self.shuffle_deck(), self.get_player_card_lists(), [], 0 | |
while i < self.max_hand * self.n_players: | |
for j in range(self.n_players): | |
card = deck[i] | |
card_lists[j][1].append(self.get_card_val(card)) | |
cards_dealt.append( | |
dict( | |
player=f'Player {j + 1}', | |
card_face=self.get_card_face(card), | |
card_val=self.get_card_val(card), | |
card_img=card['img'], | |
card_slug=card['slug'] | |
) | |
) | |
i += 1 | |
# print(card_lists) | |
return cards_dealt, i, card_lists | |
@staticmethod | |
def get_score(c_list: list) -> int: | |
score = 0 | |
for c in c_list: | |
score += c | |
return score | |
def get_winner(self, card_lists: list): | |
players = [(n, self.get_score(card_lists[n][1])) for n in range(self.n_players)] | |
players.sort(key=lambda x: x[1], reverse=True) | |
return players[0] if players[0][1] <= 21 else players[1] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment