import random # Definir los valores de las cartas CARD_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 } # Definir los palos de las cartas SUITS = ["", "", "", ""] class BlackjackPlugin: def __init__(self): self.active_games = {} # {usuario: {"cartas": [], "total": int}} def deal_card(self): """Reparte una carta aleatoria.""" card = random.choice(list(CARD_VALUES.keys())) suit = random.choice(SUITS) return f"{card}{suit}", CARD_VALUES[card] def calculate_total(self, cards): """Calcula el valor total de la mano.""" total = sum(value for _, value in cards) num_ases = sum(1 for card, value in cards if card.startswith("A")) # Ajustar Ases de 11 a 1 si es necesario while total > 21 and num_ases: total -= 10 # Cambiar un As de 11 a 1 num_ases -= 1 return total def bot_turn(self): """El bot juega automáticamente su turno después de que el jugador se planta.""" bot_cards = [] while self.calculate_total(bot_cards) < 17: # El bot se planta con 17 o más card, value = self.deal_card() bot_cards.append((card, value)) return bot_cards def run(self, sender, *args): """Controla el juego de Blackjack.""" if not args: return " Uso: `.blackjack start` para jugar, `.hit` para pedir carta, `.stand` para plantarte." command = args[0].lower() if command == "start": # Comenzar una nueva partida card1, value1 = self.deal_card() card2, value2 = self.deal_card() self.active_games[sender] = {"cartas": [(card1, value1), (card2, value2)]} total = self.calculate_total(self.active_games[sender]["cartas"]) if total == 21: self.active_games.pop(sender) # Eliminar partida return f" {sender} tiene **Blackjack** con {card1} {card2}! ¡Ganaste!" return f"🃏 {sender} ha comenzado una partida.\nCartas: {card1} {card2} (Total: {total})\nUsa `.hit` para pedir carta o `.stand` para plantarte." elif command == "hit": # Pedir una carta extra if sender not in self.active_games: return "️ No tienes una partida activa. Usa `.blackjack start` para comenzar." card, value = self.deal_card() self.active_games[sender]["cartas"].append((card, value)) total = self.calculate_total(self.active_games[sender]["cartas"]) if total > 21: self.active_games.pop(sender) # Eliminar partida return f" {sender} pidió {card} y ahora tiene {total}. ¡Te pasaste!" return f"🃏 {sender} pidió {card}. **Total:** {total}\nUsa `.hit` para otra carta o `.stand` para plantarte." elif command == "stand": # Plantarse y terminar la partida if sender not in self.active_games: return "️ No tienes una partida activa. Usa `.blackjack start` para comenzar." player_total = self.calculate_total(self.active_games[sender]["cartas"]) # 🃏 TURNO DEL BOT bot_cards = self.bot_turn() bot_total = self.calculate_total(bot_cards) # Determinar el resultado final if bot_total > 21: result = f" El bot se pasó con {bot_total}. ¡{sender} gana!" elif player_total > bot_total: result = f" {sender} gana con {player_total} contra {bot_total} del bot. ¡Felicidades!" elif player_total < bot_total: result = f" El bot gana con {bot_total} contra {player_total} de {sender}." else: result = f" Empate con {player_total}." # Borrar la partida una vez terminado self.active_games.pop(sender) return (f"🃏 {sender} se planta con {player_total}.\n\n" f" **Turno del bot...**\nCartas del bot: {', '.join(card for card, _ in bot_cards)} (Total: {bot_total})\n\n" f"{result}") else: return " Uso: `.blackjack start` para jugar, `.hit` para pedir carta, `.stand` para plantarte." def help(self): """Descripción del plugin para el comando .help""" return ("🃏 **Blackjack** - Juego de cartas\n" " Usa `.blackjack start` para comenzar.\n" " Luego `.hit` para pedir carta o `.stand` para plantarte.\n" " ¡Gana si consigues 21 o el bot se pasa!")