python

Python: ejercicio de casino y ruleta – Tragamonedas

Hoy voy a mostrarte la solución a un ejercicio en Python. Se trata de simular un tragamonedas para poder jugar a casino o ruleta y realizar apuestas, girando la ruleta al azar y trabajando con elementos aleatorios de Python.

Descripción del ejercicio

El ejercicio en cuestión dice así:

Elabore una solución computacional en Python para simular el funcionamiento de un tragamonedas. La situación a simular es un usuario que utiliza este tragamonedas e ingresa con un monto inicial de 50000 pesos para apostar. El usuario puede seleccionar entre 2 juegos distintos dentro de este tragamonedas: casino o ruleta.

Este tragamonedas debe:

  • Permitir que cuando un usuario comience a usar el programa, se muestre el saldo actual del usuario, pueda seleccionar uno de los 2 juegos disponibles o salir del tragamonedas.
  • Cuando comienza un juego (cualquiera) muestra el dinero disponible del usuario en ese momento, una síntesis de las reglas del juego, las opciones para participar en ese juego en específico y la opción de volver a la pantalla de selección de juegos (siempre tiene que ser posible volver a esta pantalla desde la pantalla de apuestas de cada juego).
  • Recuerde que cuando se resuelve un juego, se tiene que volver a la pantalla inicial del juego en el que se está jugando en ese momento, para poder volver a apostar o salir al menú principal del tragamonedas.

La descripción de cada juego es la siguiente:

Casino

En este juego el usuario puede elegir cuánto dinero apostar inicialmente y luego elegir si girar la ruleta o modificar el monto a apostar.

Al girar la ruleta, se seleccionará al azar una de 5 alternativas previamente definidas y mostradas en pantalla entre: multiplicar la apuesta (x2), restar un porcentaje a la apuesta (50 %), ganar una cantidad fija (2000), perder una cantidad fija (2000) o perderlo todo.

La apuesta inicial no puede ser menor a 2000 pesos.

Ruleta

En ruleta se debe elegir el monto a apostar (mínimo 10000) y se puede apostar por:

  • Un número y un color: Si se aciertan ambos número y color, la apuesta se multiplica por 10, si no se pierde la apuesta.
  • Solo color: si se acierta el color, la apuesta se multiplica por 2, si no se pierde la apuesta
  • Solo paridad y si se acierta entre las opciones de número par o impar, se ganan 15000, si no se pierde la apuesta.

Se deben permitir elegir números del 1 al 20, entre los colores negro y rojo, y entre las paridades, par o impar. El resultado será dado por lo que sucede (generado al azar) y lo que se apostó.

Si es que el usuario no tiene fundos suficientes para jugar un juego en específico, esto debe indicarse al momento de intentar apostar en ese juego y volver a la pantalla de selección de juegos (0 menú principal del tragamonedas).

Cuando el usuario sale del tragamonedas, debe mostrar con cuánto dinero salió de la máquina (la cantidad de dinero que le queda).

Código Python

Ahora que te mostré la descripción del ejercicio te muestro el código. Está un poco desordenado porque el programa solicitaba estructuras if anidadas y ciertos parámetros.

"""
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me               /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
Creado por Parzibyte (https://parzibyte.me).
------------------------------------------------------------------------------------------------
            | IMPORTANTE |
Si vas a borrar este encabezado, considera:
Seguirme: https://parzibyte.me/blog/sigueme/
Y compartir mi blog con tus amigos
También tengo canal de YouTube: https://www.youtube.com/channel/UCroP4BTWjfM0CkGB6AFUoBg?sub_confirmation=1
Twitter: https://twitter.com/parzibyte
Facebook: https://facebook.com/parzibyte.fanpage
Instagram: https://instagram.com/parzibyte
Hacer una donación vía PayPal: https://paypal.me/LuisCabreraBenito
------------------------------------------------------------------------------------------------
"""
import random
APUESTA_MINIMA_CASINO = 2000
APUESTA_MINIMA_RULETA = 10000
CANTIDAD_FIJA_CASINO = 2000  # La cantidad fija que se pierde o gana
# Cantidad que se gana cuando se acierta entre par e impar
DINERO_GANADO_PARIDAD = 15000
menu_juegos = """1. Casino
2. Ruleta
3. Salir
Elige: """
sintesis_casino = f"""Casino: apuesta y gira la ruleta de las siguientes opciones:
Multiplicar la apuesta x 2
Restar 50 % a la apuesta
Ganar una cantidad fija {CANTIDAD_FIJA_CASINO}
Perder una cantidad fija {CANTIDAD_FIJA_CASINO}
Perder toda la apuesta"""
sintesis_ruleta = f"""Ruleta: se puede apostar por:
Número y color. Si aciertas ambos, la apuesta se multiplica por 10. Si no, se pierde la apuesta
Solo color: si se acierta el color, la apuesta se multiplica por 2. Si no, pierde la apuesta
Solo paridad: si se acierta entre las opciones de número par o impar, se ganan {DINERO_GANADO_PARIDAD} pesos. Si no, se pierde la apuesta
Los colores van del 1 al 20, colores son rojo y negro; paridades son par e impar"""
# Constantes para las opciones del casino
MULTIPLICAR_APUESTA = 1
RESTAR_PORCENTAJE_APUESTA = 2
GANAR_CANTIDAD_FIJA = 3
PERDER_CANTIDAD_FIJA = 4
PERDER_TODO = 5
COLOR_NEGRO = "Negro"
COLOR_ROJO = "Rojo"
IMPAR = "Impar"
PAR = "Par"


def solicitar_dinero_apostar_casino(saldo):
    dinero_apostado = 0
    while dinero_apostado < APUESTA_MINIMA_CASINO or dinero_apostado > saldo:
        dinero_apostado = float(
            input(f"¿Cuánto apuestas? debe ser al menos {APUESTA_MINIMA_CASINO} pesos y no debe superar el saldo: "))
    return dinero_apostado


def solicitar_dinero_apostar_ruleta(saldo):
    dinero_apostado = 0
    while dinero_apostado < APUESTA_MINIMA_RULETA or dinero_apostado > saldo:
        dinero_apostado = float(
            input(f"¿Cuánto apuestas? debe ser al menos {APUESTA_MINIMA_RULETA} pesos y no debe superar el saldo: "))
    return dinero_apostado


def solicitar_numero():
    numero = 0
    while numero < 1 or numero > 20:
        numero = int(input("Elige un número entre 1 y 20: "))
    return numero


def main():
    # El saldo con el que inicia
    saldo_global = 50000
    eleccion = ""
    while eleccion != "3":
        eleccion = input(menu_juegos)
        if eleccion == "1":
            if saldo_global < APUESTA_MINIMA_CASINO:
                print(
                    f"Necesita contar con un saldo de al menos {APUESTA_MINIMA_CASINO} para jugar al casino")
                continue
            print(sintesis_casino)
            print(f"Dinero disponible: {saldo_global}")
            dinero_apostado = solicitar_dinero_apostar_casino(saldo_global)
            eleccion_casino = ""
            while eleccion_casino != "3":
                print(f"Dinero disponible: {saldo_global}")
                eleccion_casino = input("""1. Girar ruleta
2. Modificar monto apostado
3. Volver
Elige: """)
                if eleccion_casino == "1":
                    if saldo_global < APUESTA_MINIMA_CASINO:
                        print(
                            f"Necesita contar con un saldo de al menos {APUESTA_MINIMA_CASINO} para jugar al casino")
                        break
                    ruleta = [MULTIPLICAR_APUESTA, RESTAR_PORCENTAJE_APUESTA,
                              GANAR_CANTIDAD_FIJA, PERDER_CANTIDAD_FIJA, PERDER_TODO]
                    # Elegimos una opción aleatoria
                    indice_aleatorio = random.randint(0, len(ruleta)-1)
                    opcion = ruleta[indice_aleatorio]
                    if opcion == MULTIPLICAR_APUESTA:
                        print("La apuesta se multiplica por dos")
                        saldo_global += dinero_apostado
                    elif opcion == RESTAR_PORCENTAJE_APUESTA:
                        print("Se resta el 50 %")
                        saldo_global -= dinero_apostado / 2
                    elif opcion == GANAR_CANTIDAD_FIJA:
                        print(f"Se ganan {CANTIDAD_FIJA_CASINO} pesos")
                        saldo_global += CANTIDAD_FIJA_CASINO - dinero_apostado
                    elif opcion == PERDER_CANTIDAD_FIJA:
                        print(f"Se pierden {CANTIDAD_FIJA_CASINO} pesos")
                        saldo_global -= CANTIDAD_FIJA_CASINO
                    else:
                        print("Pierde todo lo apostado")
                        saldo_global -= dinero_apostado
                elif eleccion_casino == "2":
                    dinero_apostado = solicitar_dinero_apostar_casino(
                        saldo_global)
        elif eleccion == "2":
            print(f"Dinero disponible: {saldo_global}")
            colores = [COLOR_ROJO, COLOR_NEGRO]
            if saldo_global < APUESTA_MINIMA_RULETA:
                print(
                    f"Necesitas al menos {APUESTA_MINIMA_RULETA} pesos para jugar a la ruleta")
                continue
            print(sintesis_ruleta)
            dinero_apostado = solicitar_dinero_apostar_ruleta(saldo_global)
            eleccion_ruleta = ""
            while eleccion_ruleta != "4":

                print(f"Dinero disponible: {saldo_global}")
                eleccion_ruleta = input("""1. Número y color
2. Solo color (negro y rojo)
3. Paridad (par e impar)
4. Volver
Elige: """)
                if eleccion_ruleta == "1":
                    if saldo_global < APUESTA_MINIMA_RULETA:
                        print(
                            f"Necesitas al menos {APUESTA_MINIMA_RULETA} pesos para jugar a la ruleta")
                        break
                    numero_usuario = solicitar_numero()
                    color_eleccion_usuario = input(
                        "1. Rojo\n2. Negro\nElige: ")
                    if color_eleccion_usuario == "1":
                        color_usuario = COLOR_ROJO
                    else:
                        color_usuario = COLOR_NEGRO
                    # Elegir aleatoriamente
                    numero_aleatorio = random.randint(1, 20)
                    color_aleatorio = colores[random.randint(
                        0, len(colores)-1)]
                    print("Número obtenido: " + str(numero_aleatorio))
                    print("Color obtenido: " + str(color_aleatorio))
                    if numero_aleatorio == numero_usuario and color_aleatorio == color_usuario:
                        # El usuario acierta
                        print("Gana el dinero apostado multiplicado por 10")
                        saldo_global += dinero_apostado * 9
                    else:
                        print("Pierde lo apostado")
                        saldo_global -= dinero_apostado
                    pass
                elif eleccion_ruleta == "2":

                    if saldo_global < APUESTA_MINIMA_RULETA:
                        print(
                            f"Necesitas al menos {APUESTA_MINIMA_RULETA} pesos para jugar a la ruleta")
                        break
                    color_eleccion_usuario = input("1. Rojo\n2. Negro\nElige:")
                    if color_eleccion_usuario == "1":
                        color_usuario = COLOR_ROJO
                    else:
                        color_usuario = COLOR_NEGRO
                    color_aleatorio = colores[random.randint(
                        0, len(colores)-1)]
                    print("Color obtenido: " + color_aleatorio)
                    if color_usuario == color_aleatorio:
                        # Acierta
                        print("La apuesta se multiplica por 2")
                        saldo_global += dinero_apostado
                    else:
                        print("Pierde lo apostado")
                        saldo_global -= dinero_apostado
                elif eleccion_ruleta == "3":
                    if saldo_global < APUESTA_MINIMA_RULETA:
                        print(
                            f"Necesitas al menos {APUESTA_MINIMA_RULETA} pesos para jugar a la ruleta")
                        break
                    paridad_eleccion_usuario = input(
                        "1. Par\n2. Impar\nElige: ")
                    if paridad_eleccion_usuario == "1":
                        paridad_usuario = PAR
                    else:
                        paridad_usuario = IMPAR
                    numero_aleatorio = random.randint(1, 20)
                    print("Número obtenido: " + str(numero_aleatorio))
                    if numero_aleatorio % 2 == 0 and paridad_usuario == PAR:
                        print("El número es par")
                        print(f"Gana {DINERO_GANADO_PARIDAD} pesos")
                        saldo_global += DINERO_GANADO_PARIDAD - dinero_apostado
                    elif numero_aleatorio % 2 != 0 and paridad_usuario == IMPAR:
                        print("El número es impar")
                        print(f"Gana {DINERO_GANADO_PARIDAD} pesos")
                        saldo_global += DINERO_GANADO_PARIDAD - dinero_apostado
                    else:
                        saldo_global -= dinero_apostado
                        print("Pierde la apuesta")
    print(f"Saldo final: {saldo_global}")


main()

Al ejecutarlo, el juego funciona perfectamente:

Programación Python – Ejercicio de tragamonedas, ruleta y casino

Te dejo más ejercicios de programación en Python en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.