114 lines
4.6 KiB
Python
114 lines
4.6 KiB
Python
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!")
|
||
|