Hola! sean todos bienvenidos, me anime hacer este post para compartir con ustedes un proyecto que realice hace poco para una asignatura en mi universidad.
¿Cual era el proyecto?
El proyecto se basaba en realizar un Simulador de partidos de Futbol del mundial de Rusia 2018 utilizando el Lenguaje Python implementando Hilos y semaforos con interfaz grafica.
Desde hace como 1 año he programado en Python, pero solo programas sencillos en consola, esta vez necesitaba interfaz grafica y no tenia ni idea de como hacerlo, asi que comence a investigar.
Seleccionando herramientas para la GUI
Investigando me encontre con que lo mas usado para Python eran las librerias PyQt y PyGTK, entonces como tenia instalado Qt Designer ya que este viene de por defecto en la distribucion de Linux Manjaro KDE, comence a trabajar con esta libreria realizando ejemplos simples como cambiar grados centrigrados a fahrenheit y los mismos ejemplos los realice en PyGTK con una herramienta llamada Glade, ambos me gustaron pero sentia que no era lo que estaba buscando, hasta que me encontre con PyGame.
¿Que es PyGame?
Pygame es un conjunto de módulos del lenguaje Python que permiten la creación de videojuegos en dos dimensiones de una manera sencilla. Está orientado al manejo de sprites.
Gracias al lenguaje, se puede prototipar y desarrollar rápidamente. Esto se puede comprobar en las competiciones que se disputan online, donde es cada vez más usado. Los resultados pueden llegar a ser profesionales.
También puede utilizarse para crear otros programas multimedia o interfaces gráficas de usuario. Pygame está basado en la librería SDL 1.2, una alternativa más actual de SDL en Python podría ser Py-SDL2, que implementa varias mejoras respecto a Pygame.
Funciona como interfaz de las bibliotecas SDL.
con pygame realice un ejercicio sencillo del juego pong y ahi fue donde descrubi su potencial,
sin embargo, tenia solo 3 semanas para entregar el proyecto,no iba a tener tiempo de crear una interfaz desde cero y poder realizar el simulador con animaciones en los jugadores como quisiera. asi que decidi enfocarme en la parte central del proyecto (hacer funcionar el simulador) y luego ver que haria con la interfaz.
despues de un tiempo, como 1 semana aproxidamente, ya tenia listo la aplicacion funcionando aunque solo por consola, y luego navegando por github, me encontre con un desarrollador Chileno ( Pablo Pizarro ) que desarrollo una libreria para hacer menus con PyGame, la cual llamo PyGameMenu asi que encontre en ella una manera rapida de realizar la interfaz y unirla con el funcionamiento del simulador para culminar el proyecto, asi que me puse manos a la obra.
Breve explicacion de funcionamiento
Todo el juego se basa tomando la tabla siguiente como guía (porcentajes):
Pases:
Para trasladar el balón hacia el área contraria, los jugadores de un mismo equipo
realizan “pases” entre ellos y cuando están cerca de la portería contraria realizan un
disparo o “chute” (shoot) que tiene ciertas probabilidades de convertirse en gol,
dependiendo de la calidad de los delanteros del equipo y de la defensa del equipo
contrario. Recuerde que estos valores ya fueron tomados en cuenta para establecer el
“ranking internacional”, es decir, equipos con mayor jerarquía tienen mayores
posibilidades de anotar que los de menor jerarquía o “ranking bajo”.
Así, un equipo anotará gol cuando complete al menos 4 pases y un chute a gol.
Los equipos siempre buscan ser ofensivos y anotar goles, por lo que una
secuencia normal de pases es: portero ---> defensa ---> medio ---> delantero
Sin embargo, no todos los pases son exitosos, dependen de un factor de éxito que
se calcula de la siguiente forma:
Pase = Random(100) + (porcentaje_pases * 100)
Cuando el valor de Pase sea mayor o igual a 100 se considera un pase exitoso, de
lo contrario será un pase errado y el equipo contrario obtiene el balón, iniciando su propia
secuencia de pases hacia el arco contrario.
Goles:
Un chance de gol o “chute” se dará cada vez que un equipo con la posesión del
balón realice al menos 4 pases exitosos consecutivos. En ese caso, se prenderá una
condición de “chute” y se determinará si se anota gol de la siguiente forma:
Anotacion = Random(100) + (porcentaje_anotacion_equipo_A * 100) +
(porcentaje_encajar_gol_equipo_B * 100)
Si el total es mayor o igual a 150, se considera que el equipo A anotó un gol que
sube al marcador. Y ahora el equipo contrario obtiene el balón. Si el total es menor a
150 será un intento fallido (tiro fuera) y el equipo contrario obtiene el balón.
Capturas de Pantallas
Menu principal
Menu de juego
Partido en Transcurso
Conclusion
Al juego obviamente le faltan retoques y mejor implementacion de los pases y shoot para hacerlo un tanto mas realista, aunque para ser un juego que esta basado en funciones ramdon la verdad es que estoy contento con el resultado. Espero poder mejorarlo con el tiempo mediante vaya aprendiendo mas cosas.
Pueden ver el codigo fuente en el siguiente enlace . Cualquiera de ustedes puede colaborar con el desarrollo si asi lo desean, ya que tengo el proyecto de codigo abierto.
Mis Redes
Si te gusto el post, no olvides compartir y dejar puntos.[/align]