Inicio Apuntes FPApuntes DAMAcceso a Datos Una máquina tragaperritos canina con Python

Una máquina tragaperritos canina con Python

Esto solo es un ejercicio para practicar

Publicado por entreunosyceros
Publicado el: Última actualización:

Una vez más aquí …. Después de tanto tiempo … y en un rato libre que me encontré, voy a publicar un pequeño ejercicio que escribí el otro día en el curso que estoy haciendo. La idea original del proyecto era hacer un programa para jugar al piedra papel o tijera, cosa que también hice. Pero una vez terminado el ejercicio, pensé que hacer una máquina tragaperritos, podría hacerse con la misma lógica (aproximadamente). Entonces a eso me puse. Y como hacía tanto tiempo que no actualizaba esta web, pues que mejor excusa.

En este artículo exploraremos este proyecto desarrollado en Python, el cual que simula una máquina tragaperritos con una interfaz gráfica creada con tkinter y customtkinter (por que hay vida más allá de Flet). Como digo, la aplicación combina varias librerías como tkinter y customtkinter para el diseño de la interfaz, pygame para la gestión de sonidos y PIL para el manejo de imágenes. La integración de múltiples módulos y el uso de threading para animaciones hacen de este proyecto un excelente ejemplo para aprender y practicar algunas cosas de programación con Python, enfocadas sobre todo en el desarrollo de aplicaciones interactivas y visuales.

una máquina tragaperritos

Descripción general del proyecto

El código implementa una máquina tragaperritos que simula el comportamiento de una tragamonedas (o como se dice allí de donde yo vengo, tragaperras), pero con un toque un poco diferente que me hizo gracia. Algunas de las características principales son:

  • Interfaz gráfica personalizada: Se utiliza customtkinter para lograr un diseño oscuro y moderno, complementado con colores vibrantes y efectos de iluminación.
  • Animaciones y efectos visuales: Durante el giro de los rodillos se muestran efectos de luces y cambios de color que mejoran la experiencia de usuario.
  • Gestión de sonidos: Con pygame se reproducen distintos sonidos para eventos clave, como la acción de tirar, ganar o cuando ocurre un error.
  • Lógica de juego interactiva: El juego gestiona créditos, premios y efectos especiales, como giros gratis en función de la combinación de resultados obtenidos.

Estructura y diseño del código

El proyecto se organiza en torno a la clase MaquinaTragaperras, que encapsula toda la lógica de la aplicación. A continuación, se destacan algunos puntos clave del diseño:

  • Configuración inicial:
    Se configuran los modos de apariencia y la paleta de colores utilizando customtkinter, lo que asegura una experiencia de usuario coherente y atractiva.
  • Metodología modular:
    La clase contiene métodos dedicados a cada parte del juego, como:
    • pantalla_inicio(): Presenta la pantalla de inicio para ingresar el nombre y el crédito inicial del jugador.
    • pantalla_juego(): Crea la interfaz principal del juego, mostrando información relevante, rodillos y controles.
    • tirar(): Ejecuta la lógica para realizar una jugada, descontando créditos y actualizando la visualización.
    • animar_giro() y efectos_durante_giro(): Gestionan las animaciones y efectos visuales de los rodillos.
    • verificar_resultado(): Evalúa el resultado de cada giro y determina si se ha ganado o se obtiene un avance especial.
  • Uso de hilos (threading):
    Para evitar que la interfaz se bloquee durante las animaciones y el procesamiento de los sonidos, se utilizan hilos que permiten ejecutar tareas en paralelo. Esto asegura una experiencia fluida y receptiva.

El código de Tragaperritos

Tragaperritos funcionando

Importaciones, configuración y constantes de la máquina

import tkinter as tk
import customtkinter as ctk
import random
import time
import threading
from PIL import Image, ImageTk
import os
import pygame

# Configuración de customtkinter
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("dark-blue")

# Constantes de estilo
COLOR_FONDO = "#1a1a1a"
COLOR_ACENTO = "#FFD700"
COLOR_SECUNDARIO = "#C0C0C0"
COLOR_BOTON = "#E74C3C"
FUENTE_TITULO = ("Arial Black", 28, "bold")
FUENTE_TEXTO = ("Impact", 16)
FUENTE_NUMEROS = ("LCDMono", 20)
FUENTE_SIMBOLOS = ("Arial", 72, "bold")

.....

El resto del código necesario, ahora mismo la base de datos y el plugin que utilizo para dejar aquí el código de las aplicaciones, no me dejan pegarlo en este artículo. Por eso si quieres ver todo el código, te sugiero que te dirijas al repositorio en el que he colocado todo el código necesario de este proyecto.

Las dependencias

Todo el código que se acaba de ver, debe de ir todo junto dentro de un archivo que yo he llamado tragaperras.py. Además se puede crear el archivo requirements.txt, con el contenido:

customtkinter==5.2.0
pygame==2.5.0
Pillow==10.0.0

Cuando tengas los dos archivos creados, puedes instalar las dependencias necesarias (se recomienda dentro de un entorno virtual) escribiendo en la termina en la que estén los archivos del proyecto:

pip3 install -r requirements.txt

Después, para iniciar la aplicación bastaría con escribir:

python3 tragaperras.py

Estos comandos son los que yo utilizo en Linux. Si alguien utiliza Windows, es posible que los comandos varíen un poco.

Características y funcionalidades destacadas

Interfaz de usuario y estilo visual

La aplicación destaca por su cuidado en el diseño de la interfaz. Se han definido constantes para los colores y fuentes, garantizando una apariencia consistente:

  • Fondo oscuro y acentos en dorado: Realzan el ambiente de casino.
  • Efectos dinámicos en botones y bordes: Cambios de color y símbolos durante las animaciones que aportan dinamismo.

Gestión de sonidos

La integración de pygame permite reproducir distintos efectos sonoros:

  • Sonido de tirada: Se reproduce al iniciar el giro.
  • Sonido de ganar y error: Ayudan a enfatizar los resultados de cada jugada.
  • Sonido de avance: Se activa cuando se otorgan giros gratis en función de combinaciones específicas.

Animaciones y efectos en tiempo real

Gracias a la utilización de threading y el manejo cuidadoso de la interfaz mediante la función after de Tkinter, se logran animaciones que no bloquean la aplicación:

  • Efecto de iluminación: Cambios rápidos de color en los bordes de los rodillos.
  • Animación de rodillos: Simula el giro de una tragamonedas, haciendo uso de símbolos aleatorios y actualizando la pantalla en intervalos cortos.

Aquí quiero aclarar que hay uno de los emojis de perretes que se usan, que tiene como un fondo grisaceo (semitransparente) por lo que al hacer girar los rodillos (en Windows) se ve algo un poco raro en uno de los perros. Pero eso ya es cuestión de adaptar la imagen … a mi no me ha dado tiempo.

Lógica de juego y gestión de créditos

El juego simula una experiencia de casino donde el usuario introduce un nombre y una cantidad inicial de créditos. Por lo que durante el juego encontraremos:

  • Descuento de fichas por cada jugada.
  • Acumulación de un bote que aumenta con cada intento.
  • Comprobación de combinaciones ganadoras: Tres símbolos iguales otorgan el premio acumulado y la posibilidad de reiniciar el bote.

Explicación de funciones clave

Función pantalla_inicio()

Esta función se encarga de construir la pantalla de bienvenida, donde el usuario escribe su nombre y el número de monedas. Se emplea un diseño bastante limpio, y se añaden efectos decorativos, como luces y marcos.

Función tirar() y animar_giro()

La función tirar() verifica las condiciones del juego (como la disponibilidad de créditos) antes de iniciar la jugada. Luego, animar_giro() utiliza un bucle de animación para simular el giro de los rodillos, actualizando los símbolos en pantalla de manera aleatoria. Durante este proceso, se reproducen sonidos y se activan efectos de luz para aumentar la emoción del juego.

Función verificar_resultado()

Una vez finalizado el giro, esta función evalúa los símbolos mostrados. Si se cumple la condición de ganar (tres símbolos iguales), se actualizan los créditos del jugador y se activa un efecto visual especial. En otros casos, se notifica al usuario que intente de nuevo, e incluso se gestiona la posibilidad de giros gratis en caso de obtener combinaciones parciales.

Conclusiones

Esto nació como alternativa al programa del piedra, papel o tijera que hice el otro día. La lógica creo que se parece bastante, por eso me animé a hacerlo. Si eres un programador que busca inspiración para desarrollar interfaces gráficas complejas o deseas profundizar en la programación de juegos en Python, ¡explora, modifica y alomejor puedes aprender algo de este ejemplo! pues creo que este código se puede adaptar tanto a desarrolladores principiantes como a aquellos con cierta experiencia. O al menos esa era la idea …

Si te interesa ver todo el código o descargarlo junto con los archivos de audio, puedes hacerlo desde el repositorio en GitHub en el que 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.