Inicio Apuntes FPApuntes DAM Juego de tragaperras en Bash con frutas aleatorias

Juego de tragaperras en Bash con frutas aleatorias

Este juego de tragaperras en Bash es solo una simulación y no implica apuestas con dinero real.

Publicado por entreunosyceros

Una vez más aquí (después de casi un mes). Durante este tiempo he estado liado con una cosa y otra, y hoy vengo a dejar un pequeño artículo que alguien me ha propuesto hacer, y que me ha parecido un buen ejercicio para practicar Bash. La propuesta que me hizo esta persona fue la de crear un pequeño script con el que emular un juego de tragaperras en Bash.

Supongo que todo el mundo sabe que las tragaperras son uno de los juegos más populares en los casinos, y con este sencillo script, ahora cualquiera puede disfrutar de esa emoción desde la comodidad de la terminal en Linux (sin gastarse el dinero). Por eso, en las siguientes líneas vamos a ver un juego de tragaperras programado en Bash. El usuario dispondrá de 10 créditos para comenzar a jugar.

El código que vamos a ver a continuación es un script de Bash que simula una tragaperras con frutas. El objetivo del juego es obtener una combinación ganadora de tres frutas iguales en los carretes para ganar créditos. A continuación vamos a ver cómo funciona el código paso a paso:

Código de este juego de tragaperras en Bash

Combinación ganadora del juego de tragaperras en bash

Inicialización del juego

Al comienzo del código, se va a definir un array llamado frutas, que contiene diferentes nombres de frutas representados por emojis. Luego, se establece una puntuación inicial de 10 créditos y se inicializa la variable avances a 0.

Funciones del juego

El código incluye varias funciones que son utilizadas para diferentes propósitos durante el juego. Estas funciones son:

  • funcion_fruta_aleatoria(): Esta función elige una fruta aleatoria del array frutas y la devuelve.
  • funcion_generar_combinacion(): Genera una combinación aleatoria de tres frutas llamando a la función funcion_fruta_aleatoria(). Devuelve la combinación generada.
  • es_combinacion_ganadora(): Comprueba si una combinación de frutas es ganadora. Recibe una combinación como argumento y verifica si las tres frutas son iguales. Devuelve 0 si es ganadora y 1 si no lo es.
  • mostrar_menu(): Muestra el menú principal del juego, que incluye la puntuación disponible y las opciones para jugar o salir. Lee la opción seleccionada por el usuario y realiza la acción correspondiente.
avance
  • jugar_tragaperras(): Esta función es la más importante del juego. Genera una combinación aleatoria llamando a funcion_generar_combinacion(), la muestra en pantalla y luego verifica si es una combinación ganadora utilizando es_combinacion_ganadora(). Dependiendo del resultado, actualiza la puntuación del jugador y ofrece la opción de utilizar un «avance» si aparecen dos frutas iguales, para cambiar la fruta desigual de la combinación. Después muestra el resultado final y vuelve al menú principal.

Flujo del juego

Menú del juego

Después de definir las funciones, se llama a la función mostrar_menu() para iniciar el juego. El menú muestra la puntuación disponible y las opciones para jugar o salir. Si el jugador elige jugar y tiene créditos disponibles, se llama a la función jugar_tragaperras(). En caso contrario, se muestra un mensaje de que el jugador se ha quedado sin créditos y se finaliza el juego.

Dentro de jugar_tragaperras(), se genera una combinación aleatoria de frutas, se muestra en pantalla y se verifica si es ganadora. Si el jugador obtiene una combinación ganadora, se muestra un mensaje de felicitación y se suman tres créditos a la puntuación. En caso contrario, si la combinación obtenida tiene al menos dos frutas iguales, se ofrece la opción de utilizar un «avance» para cambiar la fruta diferente por otra aleatoria. Después de cada ronda, se muestra el resultado final y se vuelve al menú principal.

El código del juego tragaperras

!/bin/bash

# array frutas
frutas=("🍒cerezas🍒" "🍍piña🍍" "🍉sandía🍉" "🍎manzana🍎")

# Puntuación inicial del usuario
puntos=10
avances=0

# Función para obtener una fruta aleatoria
funcion_fruta_aleatoria() {
    local indice=$((RANDOM % ${#frutas[@]}))
    echo "${frutas[$indice]}"
}

# Función para generar una combinación aleatoria
funcion_generar_combinacion() {
    combinacion=()

    for ((i=0; i<3; i++)); do
        fruta=$(funcion_fruta_aleatoria)
        combinacion+=("$fruta")
    done

    echo "${combinacion[*]}"
}

# Función para comprobar si la combinación es ganadora
es_combinacion_ganadora() {
    local combinacion=("$@")

    if [[ "${combinacion[0]}" == "${combinacion[1]}" && "${combinacion[0]}" == "${combinacion[2]}" ]]; then
        return 0
    else
        return 1
    fi
}

# Función para mostrar el menú y obtener la opción del usuario
mostrar_menu() {
    echo "-------------------------"
    echo "Crédito disponible: $puntos"
    echo "-------------------------"
    echo "1. Jugar a la tragaperras"
    echo "2. Salir"
    read -p "Selecciona una opción: " opcion

    case $opcion in
        1)
            if [[ $puntos -gt 0 ]]; then
                jugar_tragaperras
            else
                echo "------------------------------------------------"
                echo "Te has arruinado. Vuelve cuando tengas dinero!!!"
                echo "------------------------------------------------"
                exit 0
            fi
            ;;
        2)
            echo "-------------"
            echo "¡Hasta luego!"
            echo "-------------"
            exit 0
            ;;
        *)
            echo "---------------"
            echo "Opción inválida"
            echo "---------------"
            mostrar_menu
            ;;
    esac
}

# Función principal

jugar_tragaperras() {
    combinacion=($(funcion_generar_combinacion))
    clear
    echo "----------------------------------------------------------------------"
    echo "COMBINACIÓN GANADORA: ${combinacion[*]}"

    if [[ "${combinacion[0]}" == "${combinacion[1]}" && "${combinacion[0]}" == "${combinacion[2]}" ]]; then  
        echo "----------------------------------------------------------------------"
        echo "¡FELICIDADES!"
        echo "Has ganado tres créditos"
        echo "----------------------------------------------------------------------"
        puntos=$((puntos + 3))
    else
        if [[ "${combinacion[0]}" == "${combinacion[1]}" || "${combinacion[0]}" == "${combinacion[2]}" || "${combinacion[1]}" == "${combinacion[2]}" ]]; then
            echo "----------------------------------------------------------------------"
            echo "¡Hay frutas iguales en la combinación!"
            echo "¿Deseas utilizar un avance? (S/N)"
            read -r opcion_avance

            if [[ "$opcion_avance" == "S" || "$opcion_avance" == "s" ]]; then
                posicion_no_igual=-1

                if [[ "${combinacion[0]}" != "${combinacion[1]}" && "${combinacion[0]}" != "${combinacion[2]}" ]]; then
                    posicion_no_igual=0
                elif [[ "${combinacion[1]}" != "${combinacion[0]}" && "${combinacion[1]}" != "${combinacion[2]}" ]]; then
                    posicion_no_igual=1
                else
                    posicion_no_igual=2
                fi

                if [[ $posicion_no_igual != -1 ]]; then
                    fruta_nueva=$(funcion_fruta_aleatoria)
                    combinacion[$posicion_no_igual]=$fruta_nueva
                fi
                clear
                echo "----------------------------------------------------------------------"
                echo "COMBINACIÓN GANADORA: ${combinacion[*]}"

                if [[ "${combinacion[0]}" == "${combinacion[1]}" && "${combinacion[0]}" == "${combinacion[2]}" ]]; then  
                    echo "----------------------------------------------------------------------"
                    echo "¡FELICIDADES!"
                    echo "Has ganado tres créditos"
                    echo "----------------------------------------------------------------------"
                    puntos=$((puntos + 3))
                else
                    echo "----------------------------------------------------------------------"
                    echo "Lo siento, has perdido un crédito"
                    echo "----------------------------------------------------------------------"
                    puntos=$((puntos - 1))
                fi
            fi
        else
            echo "----------------------------------------------------------------------"
            echo "Lo siento, has perdido un crédito"
            echo "----------------------------------------------------------------------"
            puntos=$((puntos - 1))
        fi
    fi

    read -p "Presiona Intro para continuar..."
    clear
    mostrar_menu
}


# Llamada inicial al menú
clear
mostrar_menu

Diviértete y juega

¡Ahora que conoces cómo funciona el código de este juego de tragaperras en Bash, estás listo para disfrutarlo! Puedes ejecutar el script en tu terminal y seguir las instrucciones del menú para jugar. Gira los carretes, cruza los dedos y espera obtener una combinación ganadora. Recuerda que el objetivo del juego es divertirse y entretenerse.

Este código se puede encontrar disponible en el repositorio de GitHub en el que también he alojado este pequeño proyecto.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.