diff --git a/files/classes/blackjack.py b/files/classes/blackjack.py index ddd53d2c7..e52f4b49d 100644 --- a/files/classes/blackjack.py +++ b/files/classes/blackjack.py @@ -9,168 +9,143 @@ suits = ["♠️", "♥️", "♣️", "♦️"] def shuffle(x): - random.shuffle(x) - return x - - -def get_shuffled_deck(): - return shuffle([rank + suit for rank in ranks for suit in suits for _ in range(deck_count)]) + random.shuffle(x) + return x def deal_initial_cards(): - deck = get_shuffled_deck() - p1, d1, p2, d2, *rest_of_deck = deck - return [p1, p2], [d1, d2], rest_of_deck + deck = shuffle([rank + suit for rank in ranks for suit in suits for _ in range(deck_count)]) + p1, d1, p2, d2, *rest_of_deck = deck + return [p1, p2], [d1, d2], rest_of_deck def get_card_value(card): - rank = card[0] - return 0 if rank == "A" else min(ranks.index(rank) + 2, 10) + rank = card[0] + return 0 if rank == "A" else min(ranks.index(rank) + 2, 10) def get_hand_value(hand): - without_aces = sum(map(get_card_value, hand)) - ace_count = sum("A" in c for c in hand) - possibilities = [] + without_aces = sum(map(get_card_value, hand)) + ace_count = sum("A" in c for c in hand) + possibilities = [] - for i in range(ace_count + 1): - value = without_aces + (ace_count - i) + i * 11 - possibilities.append(-1 if value > 21 else value) + for i in range(ace_count + 1): + value = without_aces + (ace_count - i) + i * 11 + possibilities.append(-1 if value > 21 else value) - return max(possibilities) + return max(possibilities) def format_cards(hand): - return map(lambda x: "".join(x), hand) + return map(lambda x: "".join(x), hand) def format_all(player_hand, dealer_hand, deck, status, wager, kind): - formatted_player_hand = format_cards(player_hand) - formatted_dealer_hand = format_cards(dealer_hand) - formatted_deck = format_cards(deck) + formatted_player_hand = format_cards(player_hand) + formatted_dealer_hand = format_cards(dealer_hand) + formatted_deck = format_cards(deck) - return f'{"/".join(formatted_player_hand)}_{"/".join(formatted_dealer_hand)}_{"/".join(formatted_deck)}_{status}_{wager}_{kind}' + return f'{"/".join(formatted_player_hand)}_{"/".join(formatted_dealer_hand)}_{"/".join(formatted_deck)}_{status}_{wager}_{kind}' class Blackjack: - coins_command_word = "!blackjack" - marseybucks_command_word = "!blackjackmb" + coins_command_word = "!blackjack" + marseybucks_command_word = "!blackjackmb" - minimum_bet = 100 - maximum_bet = INFINITY + minimum_bet = 100 + maximum_bet = INFINITY - def __init__(self, g): - self.db = g.db + def __init__(self, g): + self.db = g.db - def check_for_blackjack_commands(self, in_text, from_user, from_comment): - for command_word in (self.coins_command_word, self.marseybucks_command_word): - currency_prop = "coins" if command_word == self.coins_command_word else "procoins" - currency_value = getattr(from_user, currency_prop, 0) + def check_for_blackjack_commands(self, in_text, from_user, from_comment): + for command_word in (self.coins_command_word, self.marseybucks_command_word): + currency_prop = "coins" if command_word == self.coins_command_word else "procoins" + currency_value = getattr(from_user, currency_prop, 0) - if command_word in in_text: - for word in in_text.split(): - if command_word in word: - try: - wager = word[len(command_word):] - wager_value = int(wager) - except: - break + if command_word in in_text: + for word in in_text.split(): + if command_word in word: + try: + wager = word[len(command_word):] + wager_value = int(wager) + except: break - if (wager_value < self.minimum_bet): - break - elif (wager_value > self.maximum_bet): - break - elif (wager_value <= currency_value): - setattr(from_user, currency_prop, - currency_value - wager_value) + if (wager_value < self.minimum_bet): break + elif (wager_value > self.maximum_bet): break + elif (wager_value <= currency_value): - if currency_prop == "coins": - from_user.winnings -= wager_value + setattr(from_user, currency_prop, currency_value - wager_value) - player_hand, dealer_hand, rest_of_deck = deal_initial_cards() - status = 'active' - player_value = get_hand_value(player_hand) - dealer_value = get_hand_value(dealer_hand) + player_hand, dealer_hand, rest_of_deck = deal_initial_cards() + status = 'active' + player_value = get_hand_value(player_hand) + dealer_value = get_hand_value(dealer_hand) - if player_value == 21 and dealer_value == 21: - status = 'push' - self.apply_game_result( - from_comment, wager, status, currency_prop) - elif player_value == 21: - status = 'blackjack' - self.apply_game_result( - from_comment, wager, status, currency_prop) - elif dealer_value == 21: - status = 'lost' - self.apply_game_result( - from_comment, wager, status, currency_prop) + if player_value == 21 and dealer_value == 21: + status = 'push' + self.apply_game_result(from_comment, wager, status, currency_prop) + elif player_value == 21: + status = 'blackjack' + self.apply_game_result(from_comment, wager, status, currency_prop) + elif dealer_value == 21: + status = 'lost' + self.apply_game_result(from_comment, wager, status, currency_prop) - from_comment.blackjack_result = format_all( - player_hand, dealer_hand, rest_of_deck, status, wager, currency_prop) + from_comment.blackjack_result = format_all(player_hand, dealer_hand, rest_of_deck, status, wager, currency_prop) - def player_hit(self, from_comment): - player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split( - "_") - player_hand = player_hand.split("/") - dealer_hand = dealer_hand.split("/") - deck = deck.split("/") - player_hand.append(deck.pop(0)) - player_value = get_hand_value(player_hand) + def player_hit(self, from_comment): + player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split("_") + player_hand = player_hand.split("/") + dealer_hand = dealer_hand.split("/") + deck = deck.split("/") + player_hand.append(deck.pop(0)) + player_value = get_hand_value(player_hand) - if player_value == -1: - status = 'bust' - self.apply_game_result(from_comment, wager, status, kind) + if player_value == -1: + status = 'bust' + self.apply_game_result(from_comment, wager, status, kind) - from_comment.blackjack_result = format_all( - player_hand, dealer_hand, deck, status, wager, kind) + from_comment.blackjack_result = format_all(player_hand, dealer_hand, deck, status, wager, kind) - if (player_value == 21): - self.player_stayed(from_comment) + if (player_value == 21): self.player_stayed(from_comment) - def player_stayed(self, from_comment): - player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split( - "_") - player_hand = player_hand.split("/") - player_value = get_hand_value(player_hand) - dealer_hand = dealer_hand.split("/") - dealer_value = get_hand_value(dealer_hand) - deck = deck.split("/") + def player_stayed(self, from_comment): + player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split("_") + player_hand = player_hand.split("/") + player_value = get_hand_value(player_hand) + dealer_hand = dealer_hand.split("/") + dealer_value = get_hand_value(dealer_hand) + deck = deck.split("/") - while dealer_value < 17 and dealer_value != -1: - next = deck.pop(0) - dealer_hand.append(next) - dealer_value = get_hand_value(dealer_hand) + while dealer_value < 17 and dealer_value != -1: + next = deck.pop(0) + dealer_hand.append(next) + dealer_value = get_hand_value(dealer_hand) - if player_value > dealer_value or dealer_value == -1: - status = 'won' - elif dealer_value > player_value: - status = 'lost' - else: - status = 'push' + if player_value > dealer_value or dealer_value == -1: status = 'won' + elif dealer_value > player_value: status = 'lost' + else: status = 'push' - from_comment.blackjack_result = format_all( - player_hand, dealer_hand, deck, status, wager, kind) + from_comment.blackjack_result = format_all(player_hand, dealer_hand, deck, status, wager, kind) - self.apply_game_result(from_comment, wager, status, kind) + self.apply_game_result(from_comment, wager, status, kind) - def apply_game_result(self, from_comment, wager, result, kind): - wager_value = int(wager) - user = from_comment.author - reward = -1 + def apply_game_result(self, from_comment, wager, result, kind): + wager_value = int(wager) + user = from_comment.author + reward = -1 - if result == 'push': - reward = 0 - elif result == 'won': - reward = wager_value - elif result == 'blackjack': - reward = floor(wager_value * 3/2) + if result == 'push': reward = 0 + elif result == 'won': reward = wager_value + elif result == 'blackjack': reward = floor(wager_value * 3/2) - if (reward > -1): - currency_value = int(getattr(user, kind, 0)) + if (reward > -1): + currency_value = int(getattr(user, kind, 0)) - setattr(user, kind, currency_value + wager_value + reward) + setattr(user, kind, currency_value + wager_value + reward) - user.winnings += reward + user.winnings += reward - self.db.add(user) - self.db.commit() \ No newline at end of file + self.db.add(user) + self.db.commit() \ No newline at end of file