lunes, 27 de octubre de 2014

Presentación

Mi nombre es Daniel Jiménez, graduado en Ingeniería Informática en la Universidad de Castilla-La Mancha (UCLM).

En éste blog, mi objetivo se centrará simplemente en dar a conocer todos y cada uno de mis proyectos personales, así como dar una visión global de mis dotes de programación en diferentes lenguajes y tecnologías con las que he ido experimentando desde que inicié mis estudios hasta incluso después de haberlos finalizado.

Podrá además encontrar en la sección de "Contacto" más información sobre mí, así como descargar mi CV en formato digital si así lo desea.



Saludos y espero que disfrute de su estancia en este website.



Daniel Jiménez.

AiMasterMind



Título: AiMasterMind
Versión: 1.0
Tipo: Juego
Idioma: Español
Año: 2014
Formato: .py
Tamaño: 37.9 KB
Servidor: Dropbox

Herramientas necesarias: Python & PyGame


MasterMind es un pequeño y sencillo juego de mesa que consiste en tratar de adivinar, en el menor número de intentos (a ser posible), una contraseña codificada por colores, recibiendo en cada intento una respuesta mediante fichas blancas y negras.

En lugar de limitarme a implementar el juego como tal, he tomado como base la idea general del juego y la he llevado más allá, dando la posibilidad de incrementar el tamaño de las contraseñas e incluso añadiendo un modo multijugador. Nació así AiMasterMind.

Mi idea no era que los jugadores humanos jugasen a MasterMind, sino que jugasen a desarrollar algoritmos más o menos complejos y los pusieran a prueba contra otros algoritmos creados por otras personas. Una buena forma de mejorar las dotes de optimización y uso de estructuras de datos básicas, así como de aprender o refrescar los conocimientos en Python.

La lista a continuación muestra las caracerísticas y posibilidades que incluye ésta implementación del juego:
  1. Capacidad para 1 o más jugadores IA.
  2. Configuración del tamaño de contraseña (nº de dígitos)
  3. Configuración del rango de valores que pueden tomar los dígitos.
  4. Dos modos de juego: Equilibrado y Aleatorio.
  5. Monitoreo y almacenamiento de estadísticas de los jugadores.
  6. Control de tiempos de ejecución, intentos y victorias.
  7. Posibilidad de realizar N partidas consecutivas. 


El juego está compuesto por los siguientes ficheros:

Lista de ficheros del proyecto.


main.py: código fuente principal del juego. Posee todas las funciones de configuración del mismo (tamaño de las contraseñas, configuración de los jugadores, modos de juego, etc) además de ser el encargado de dibujar en pantalla la interfaz.

Incluye los siguientes controles de teclado para manipular parte de la ejecución del juego sin tener que editar algunas variables:

Q: finaliza la aplicación.
R: resetea las estadísticas y reinicia el juego (como si acabase de iniciarse).
S: inicia la partida y se para cuando alguien gana.
A: igual que el anterior, pero finaliza cuando se ejecutan N partidas.
C: cambiar entre modo de juego Equilibrado y Aleatorio.
D: cambiar entre modo de visualización ASCII y Entero (solo la salida por pantalla).

Para agregar nuevos jugadores o eliminar otros tantos, primero hay que importar el fichero correspondiente a la IA (import ai_player_N) y luego agregarlos como en las siguientes líneas:

Código fuente de main.py: añadiendo nuevos jugadores.


aimastermind.py: incluye la clase AiMasterMind, que se encarga de implementar las reglas de juego así como funciones para mostrar las estadísticas de los jugadores y la partida. Es el núcleo mismo del juego.


ai_player_N.py: códigos fuente que implementan las IAs de cada jugador. Es necesario implementar tantos ficheros como jugadores quieran jugar, y luego añadirlos a la lista de jugadores en main.py como se ha mostrado previamente. Incluyen dos métodos a implementar:
  • generarSolucion(pass_len, digit_size): éste método es ejecutado cuando el gestor de juego solicita que el jugador i (el que posea el turno) dé una posible solución. El método debe retornar obligatoriamente un vector de tamaño pass_len con valores enteros cuyo máximo valor puede ser digit_size.
  • recibirRespuesta(respuesta, finalizado): éste método es invocado justo después de ser ejecutado el anterior y se encarga de recibir y capturar el vector de respuesta del gestor de juego. También permitirá a las IAs saber cuando ha finalizado una partida, que en ese caso, respuesta será una lista vacía y finalizado tomará el valor True. El vector de respuesta tiene el siguiente formato:

    [ 0 , 1 , 2 , 2 , 0 ]

    Su longitud es del mismo tamaño que el de la contraseña e indica, para cada dígito d, si la solución propuesta ha acertado, fallado o bien es erronea.

    Veámos ésto con un ejemplo:

    Supongamos que tenemos una contraseña como la siguiente: [1,2,4,1,5] y que nuestro algoritmo ha propuesto la solución [1,1,3,5,1]. El resultado que recibiríamos sería [0,1,2,1,2], donde 0 significa acierto, 1 es un semifallo (no hemos acertado pero el dígito está en otra posición) y 2 es un fallo completo (no existe ese dígito o bien hemos superado la cantidad existente en la solución, en el anterior ejemplo el tercer 1 de nuestra solución es un fallo de nivel 2 porque en la contraseña solo existen dos unos y el primero ya era un semifallo).

Resources: carpeta que contiene todos los recursos gráficos externos usados por el juego.


debug.bat: ejecutable por lotes usado para debuggear el programa y sus errores. Úsalo para probar tus algoritmos.


launcher.bat: ejecutable por lotes que lanza el juego y monitorea la ejecución almacenando los errores en un fichero error.log y las salidas del programa en game.log. Si se desean almacenar las estadísticas de las partidas realizadas, usad éste ejecutable.


En cuanto a los modos de juego existen por el momento solo dos:
  • EQUILIBRADO: modo de juego pensado para probar los algoritmos bajo las mismas circustancias de juego. Se genera una contraseña común a todos los jugadores, de forma que el algoritmo que logre descubrirla en un menor número de intentos gana. El orden de rotación parte del jugador 1 hasta el último.
  • ALEATORIO: similar al anterior, con la salvedad de que cada jugador tiene una contraseña diferente para descubrir (eso si, del mismo tamaño y con la misma variedad de dígitos). El orden de rotación se escoge aleatoriamente antes de comenzar la partida, reseteándose en cada juego. Aquella IA que descubra su contraseña en menos intentos gana el juego.


Ejemplo de simulación de enfrentamiento entre 7 IAs:



Para ese enfrentamiento se han usado contraseñas de longitud 1000, donde cada dígito puede tomar hasta 288 valores diferentes. El resultado final tras 100 partidas consecutivas fué una aplastante victoria de mi algoritmo BIS (Búsqueda Inteligente Selectiva), la cuál utiliza un sistema similar al divide y vencerás en otros algoritmos pero aplicado a éste problema.



Mínimos:
-SO Windows o Linux
-Python 2.7.x
-PyGame 1.9.x




Post creado con Forum Post Generator.

Tic-Tac-Toe



Título: Tic-Tac-Toe (Tres en Raya)
Versión: 1.0
Tipo: Juego
Idioma: English
Año: 2013
Formato: .py
Tamaño: 698 KB
Servidor: Dropbox

Herramientas necesarias: Python 2.7.x & PyGame 1.9.x


Durante la asignatura Artificial Intelligence for Videogames que realicé en la universidad, se me ocurrió llevar a cabo una pequeña puesta a prueba de las recien adquiridas técnicas de inteligencia artificial que aprendí para comprobar el comportamiento de diferentes algoritmos en problemas concretos. Nació así ésta versión del famoso juego Tic-Tac-Toe (Tres en Raya en castellano).

Su desarrollo se llevó a cabo usando Python y PyGame, por su comodidad a la hora de realizar estos pequeños proyectos. La aplicación es compatible con los sistemas Windows y Linux.

La implementación está dividida en 3 ficheros:

tic-tac-toe.py: es el fichero principal y el que se debe ejecutar. Carga todos los recursos gráficos a usar así como el bucle principal del juego para configurar una partida nueva.

game.py: este fichero es el encargado de "jugar". Carga los jugadores (ya sean humanos o IA), los turnos, etc.

aiplayer.py: este fichero tiene las funciones de inteligencia artificial para cada uno de los jugadores IA. Si se desea alterar el funcionamiento de un jugador, basta con modificar la función correspondiente al jugador deseado (tienen de nombre __cpuHard(), __cpuEasy(), __cpuMedium()). La otra función importante es makeMove(gameTable), que es la que se lanza cuando le toca a un jugador IA. Recomiendo no tocar esta última y solo editar las otras mencionadas.

En cuanto al juego en si, al iniciarlo aparecerá el menú principal, donde podemos escoger el modo de juego:


PvP: player vs. player. Perfecto para partidas humano contra humano. El jugador 1 será el de la izquierda y tendrá como ficha las rojas (cruces:X). El jugador 2 estará situado a la derecha y tendrá las fichas azules (circulos:O). El turno inicial será escogido aleatoriamente, indicándose con una franja verde en la zona superior:

PvC: player vs. computer. Partida humano contra máquina. El jugador humano siempre será el jugador 1 y la máquina el 2. El turno será escogido aleatoriamente y la dificultad de la máquina la decidirá el jugador antes de iniciar la partida.

CvC: computer vs. computer. Partida máquina contra máquina. Este modo permite analizar el comportamiento de una IA contra otra IA. Primero se seleccionará la dificultad de cada una y a continuación se lanzarán a la batalla. Comenzará el turno de manera aleatoria también.


Las IAs disponibles son representadas con avatares de robots. Cada una utiliza una función de inteligencia diferente:

Deep Blue: implementa una funciona aleatoria.

Blender: implementa una función heurística sencilla.
EDI: implementa una función heurística algo más compleja, pero no es imposible de vencer.






Mínimos:
Cualquier S.O. es válido si tiene:
-Python 2.7.x (32 bits)
-Librerías PyGame para Python 2.7.x (32bits)






Post creado con Forum Post Generator.

Buscaminas





Título: Buscaminas (Python)
Tipo: Juego
Idioma: Español
Formato: .py
Tamaño: 794 KB
Servidor: Dropbox

Herramientas necesarias: Python 2.7.x & Lib. PyGame for Python 2.7.x


El juego del Buscaminas fué el primer programa con el que me aventuré a iniciarme en Python, gracias a la facilidad de aprendizaje de éste lenguaje (idóneo para crear prototipos funcionales rápidamente).

El juego implementa todas las funcionalidades básicas que podemos encontrar en la versión de Windows (como hacer click derecho sobre una casilla y marcarla con una bandera), así como las reglas del juego típicas.

La interfaz gráfica, así como las funciones de dibujado en pantalla y la carga de recursos se ha llevado a cabo usando las librerías para juegos PyGame.

Es totalmente compatible con sistemas Windows y Linux.







Mínimos:
-SO Windows o Linux
-Python 2.7.x
-Librerías PyGame para Python 2.7.x





Post creado con Forum Post Generator.

Icon Loader



Título: Icon Loader
Versión: v0.2b "Retrocompatible"
Tipo: Editor de unidades flash
Idioma: Español | English
Año: 2011
Formato: .bat
Tamaño: 14,0 KB
Servidor: Dropbox



Icon Loader es un sencillo script ejecutable por lotes (BAT) para sistemas operativos Windows que permite configurar de forma rápida el icono de cualquier unidad extraible, como discos duros externos, pendrives, tarjetas SD, etc.; en resumidas cuentas cualquier unidad flash.

Su funcionamiento se centra en el fichero Autorun.ini que todos estos dispositivos pueden utilizar con el fin de personalizar su ejecución al conectarlos. Para editarlo, en lugar de dejar al usuario la complicada labor de aprender a programarlo, se hace uso de una ventana por consola con menús y sencillos comandos (explicados mediante la orden Help o escribiendo ? en el selector de opciones) con el que se automatiza toda esa labor.















Podrá encontrar más información en el siguiente enlace:
http://razorbreakrestringedzone.blogspot.com.es/2011/08/icon-loader-un-programilla-para-editar.html





Mínimos:
-Sistema Operativo Windows XP, Vista & 7.


Pando Analyzer



Título: Pando Analyzer
Versión: 1.0 
Tipo: Analizador web
Idioma: Español
Año: 2011
Formato: .jar
Tamaño: 217 KB
Servidor: Dropbox

Herramientas necesarias: WinRAR, Java y JRE.


Pando Analyzer apareció como mecanismo para chequear automáticamente el estado de los ficheros .pando (http://es.wikipedia.org/wiki/Pando_(programa)) que se alojaban en el servidor. Dicho estado era almacenado en un fichero similar a XML, del cuál se podía obtener valiosa información sobre el archivo compartido, entre ella el estado del fichero, su nombre o su tamaño.

El programa funcionaba pasándole el enlace Pando que se genereba tras subir un fichero. Éste obtenía el código del servidor y parseaba toda la información para mostrarla por pantalla.

La aplicación fué desarrollada en Java Swing, siendo compatible tanto en Windows como en Linux. Debido al cierre y la descontinuación de Pando, ésta aplicación también ha perdido su uso en la actualidad.



Mínimos:
-SO con la plataforma JAVA instalada.
-Java Runtime Environment (JRE) actualizada.
-Conexión a Internet.




Post creado con Forum Post Generator.

EroModel Catcher




Título: EroModel Catcher
Versión: 1.3.1
Tipo: Gestor de descargas
Idioma: Español
Año: 2012
Formato: .jar | .rar | .exe
Tamaño: 137 KB
Servidor: Dropbox



EroModel Catcher surgió de un reto entre unos amigos. La idea era crear un programa que fuese capaz de recorrer una página web, localizar una serie de recursos (en éste caso imágenes .jpg) y las descargase al disco duro. Para lograr ésto, la aplicación accede al servidor en cuestión, descarga el código HTML de la web parseando su contenido y enlazándolo en los menús y desplegables que trae consigo el programa.

La descarga de los recursos puede realizarse de forma completamente automática, o bien usando programas de terceros gracias a que es capaz de almacenar los enlaces directos a los mismos.

Está desarrollado en Java Swing y se distribuye usando un instalador basado en WinRAR (en Windows) o en su formato .jar para utilizarlo en otros sistemas Unix (solo testeado bajo Windows y Linux).







Mínimos:
-SO con la plataforma JAVA instalada
-Java Runtime Environment (JRE) actualizada
-Conexión a internet



Post creado con Forum Post Generator.