4 usuarios conectados

Blackjack simplificado. Juego en Python

Comparte esto
Python
 
import random

def crear_baraja():
    palos = ["Corazones", "Diamantes", "Tréboles", "Picas"]
    rangos = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
    baraja = [(palo, rango) for palo in palos for rango in rangos]
    random.shuffle(baraja)
    return baraja

def calcular_valor_mano(mano):
    valor = 0
    ases = 0
    for carta in mano:
        rango = carta[1]
        if rango.isdigit():
            valor += int(rango)
        elif rango in ["J", "Q", "K"]:
            valor += 10
        elif rango == "A":
            ases += 1
            valor += 11
    while valor > 21 and ases > 0:
        valor -= 10
        ases -= 1
    return valor

def mostrar_mano(mano, ocultar_primera=False):
    cartas = []
    for i, carta in enumerate(mano):
        if ocultar_primera and i == 0:
            cartas.append("?")
        else:
            cartas.append(f"{carta[1]} de {carta[0]}")
    return ", ".join(cartas)

def jugar_blackjack():
    baraja = crear_baraja()
    mano_jugador = []
    mano_crupier = []

    # Repartir dos cartas a cada uno
    for _ in range(2):
        mano_jugador.append(baraja.pop())
        mano_crupier.append(baraja.pop())

    print("¡Bienvenido al Blackjack Simplificado!")
    print(f"Tu mano: {mostrar_mano(mano_jugador)}")
    print(f"Mano del crupier: ? , {mostrar_mano(mano_crupier[1:])}")

    while calcular_valor_mano(mano_jugador) < 21:
        accion = input("¿Pedir (p) o Plantarse (pl)? ").lower()
        if accion == 'p':
            carta = baraja.pop()
            mano_jugador.append(carta)
            print(f"Pediste: {carta[1]} de {carta[0]}")
            print(f"Tu mano: {mostrar_mano(mano_jugador)}")
            if calcular_valor_mano(mano_jugador) > 21:
                print("¡Te pasaste de 21! ¡Crupier gana!")
                return
        elif accion == 'pl':
            break
        else:
            print("¡Acción inválida! Introduce 'p' para pedir o 'pl' para plantarse.")

    if calcular_valor_mano(mano_jugador) <= 21:
        print(f"\nMano del crupier: {mostrar_mano(mano_crupier)}")
        while calcular_valor_mano(mano_crupier) < 17:
            carta = baraja.pop()
            mano_crupier.append(carta)
            print(f"El crupier pide: {carta[1]} de {carta[0]}")
            print(f"Mano del crupier: {mostrar_mano(mano_crupier)}")
            if calcular_valor_mano(mano_crupier) > 21:
                print("¡El crupier se pasó de 21! ¡Tú ganas!")
                return

        valor_jugador = calcular_valor_mano(mano_jugador)
        valor_crupier = calcular_valor_mano(mano_crupier)

        if valor_crupier > valor_jugador:
            print("¡Crupier gana!")
        elif valor_jugador > valor_crupier:
            print("¡Tú ganas!")
        else:
            print("¡Empate!")

if __name__ == "__main__":
    jugar_blackjack()

¿Cómo funciona el código?

  1. crear_baraja(): Crea una baraja estándar de 52 cartas (palos y rangos) y la mezcla aleatoriamente.
  2. calcular_valor_mano(mano): Calcula el valor total de una mano de cartas. Las cartas con figuras (J, Q, K) valen 10, los ases valen 11 o 1 (se ajusta si la mano supera 21), y las cartas numéricas valen su valor.
  3. mostrar_mano(mano, ocultar_primera=False): Formatea la mano de cartas para mostrarla al jugador. Opcionalmente, puede ocultar la primera carta (para la mano del crupier al inicio).
  4. jugar_blackjack(): La función principal del juego:
    • Crea y mezcla la baraja.
    • Reparte dos cartas al jugador y dos al crupier.
    • Muestra la mano del jugador y la primera carta oculta del crupier.
    • Permite al jugador elegir entre "Pedir" (tomar otra carta) o "Plantarse" (mantener su mano).
    • Si el jugador pide, se le da una carta y se verifica si se ha pasado de 21.
    • Si el jugador se planta o se pasa de 21, es el turno del crupier.
    • El crupier sigue pidiendo cartas hasta que su mano tenga un valor de 17 o más.
    • Se determina el ganador comparando los valores de las manos (sin pasarse de 21).

Cómo jugar:

  1. Guarda este código en un archivo con extensión .py (por ejemplo, blackjack.py).
  2. Abre una terminal o símbolo del sistema.
  3. Navega al directorio donde guardaste el archivo.
  4. Ejecuta el script con el comando: python blackjack.py
  5. Sigue las instrucciones para pedir ('p') o plantarte ('pl'). El objetivo es tener una mano con un valor lo más cercano posible a 21 sin pasarte, y vencer la mano del crupier.