PDA

Ver la versión completa : Sliding Puzzle 2x



davidgutierrez
26/11/2007, 23:44
Hola a todos, este es mi primer post con este nick aunque llevo leyendo este foro desde que la GP2x estaba recién salida al mercado, escribiendo algún post (muy) ocasional con mi otro nick. Lo que pasa es que ahora he decidido aportar algo a la comunidad que tantas cosas buenas me ha dado y creo que este cambio de nick es la mejor forma de reflejar ese cambio.

El juego os lo podéis descargar de SourceForge:
http://sourceforge.net/projects/slidingpuzzle2x/


Se trata de la versión informática de un juego de puzzle clásico al que solía jugar mucho cuando era pequeño. Como todos los puzzles, se trata de una imagen dividida en piezas que hay que ordenar para reconstruir la imagen original, con la peculiaridad de que las piezas no pueden reordenarse de cualquier forma, tan solo pueden deslizarse sobre un único hueco que hay en el tablero (es más fácil de ver jugando que contándolo con palabras). Si queréis más información sobre este tipo de puzzles, podeis visitar la Wikipedia:
http://en.wikipedia.org/wiki/Fifteen_puzzle


El juego está programado con Python + Pygame, que deberán estar instalados en el directorio raiz de la tarjeta SD. Aunque esta sea la primera versión que hago pública, se trata de la versión 0.4, ya que las versiones anteriores han sido "betas privadas". Se han resuelto las principales quejas que he recibido durante esta fase de beta privada, pero estoy abierto a todo tipo de críticas y sugerencias (siempre que sean constructivas). Eso sí, no seáis demasiado duros conmigo, que este es mi primer juego y me ha servico como ejercicio para aprender Python (posiblemente los próximos juegos saldrán mejor). Eso sí, le he puesto todas mis ganas y toda mi ilusión.

Los controles vienen definidos en el fichero readme.txt que acompaña la descarga, aunque he dejado habilitado el soporte del ratón, por lo que debería de funcionar con la pantalla tactil de las nuevas GP2x (si alguien puede probarlo y decirme que tal va, le estaría muy agradecido). Tengo la intención de añadir efectos de sonido e incluso música en versiones posteriores del juegos, pero de momento esas opciones se hayan deshabilitadas en el menú.


Si quereis añadir nuevas imágenes, teneis que hacer lo siguiente: en la carpeta "puzzles" se debe de crear una subcarpeta por cada "categoría" de puzzles (animales, paisajes, etc.). En el interior de esa subcarpeta deberemos de colocar las imágenes que queramos. Opcionalmente, podemos generar un archivo images.inf que contendrá la información sobre el autor de cada imagen que se mostrará mientras se está resolviendo el puzzle. Las imágenes deberían de ser de 300x300 pixeles (para la versión de PC) o de 120x120 pixeles (para la versión de GP2x), aunque si la imagen tiene otras dimensiones el juego se encargará de reescalarla.


Momentáneamente los textos están solo en inglés (para hacerlo más internacional), pero la idea es de ofrecer también una traducción al español en próximas versiones. Si alguien quiere colaborar con imágenes para futuras versiones, pues yo estoy abierto a todo... siempre y cuando estén bajo licencia Creative Commons, ¿eh? ;)


Bueno, pues ya me vais comentando a ver que os parece... espero que lo disfrutéis jugándolo tanto como yo he disfrutado haciéndolo.

--------------
PD: Cuando se activa el "modo ayuda" (pulsando SELECT, L o R), se resaltan aquellas piezas que estén bien colocadas en su sitio.

Jurk
26/11/2007, 23:52
Bienvenido!!

Gracias por llegar pisando fuerte, con un juego entre manos...

A ver si sigue asi la cosa, con mas releases para la comunidad!!

Rivroner
27/11/2007, 00:03
Bienvenidísimo colega ;)

enkonsierto
27/11/2007, 00:33
Tienes alguna pantalla? Cual era tu anterior nick?

Sr.Polilla
27/11/2007, 01:08
Me alegra ver que quedan sceners ocultos por ahí, espero que tus proyectos lleguena buen puerto.


PD: Si pones alguna imagen de tu juego mejor, que no puedo probar nada porque tengo la GP2X sin pilas ni sitck :( .

davidgutierrez
27/11/2007, 08:33
Mi antiguo nick era WORMSXP, pero ya te digo que aunque os leía casi a diario, era muy poco participativo. Espero que esto sirva como declaración de intenciones y que encuentre el tiempo suficiente para ir haciendo cositas poco a poco.

El tema de los screenshots es algo que se me olvidó por completo. Ahora mismo estoy en el trabajo y aquí no tengo la GP2x, pero acabo de colgar en la página del proyecto algunos screenshots sacados sobre Windows ( como me gusta Python para estas cosas ;) ). Lo único que debería de variar es el tamaño de las letras, que me he dado cuenta que varía de Windows a Ubuntu y de Ubuntu a GP2x.

No pongo aquí directamente los screenshots porque no sé si irá en contra de los "Términos de Servicio" de SourceForge, pero os pongo el enlace directo a la página que contiene los screenshots:

https://sourceforge.net/project/screenshots.php?group_id=210020

AOJ
27/11/2007, 09:40
Re-bienvenido WORMSXP/davidgutierrez :brindis:

Nos congratula que traigas un juego nuevo! :D

Tiene muy buena pinta, esta tarde en casa lo voy a probar, a ver si funciona con la táctil :)

juanvvc
27/11/2007, 10:17
No hace falta que lo instaléis en la consola, también funciona en un ordenador con Python y Pygame :)

El juego está correcto, te podías haber estirado un poco con musiquilla, imágenes mucho más grandes (¡el puzzle en sí ocupa solo la cuarta parte de la pantalla!) y algún efecto gráfico adicional. Si es que estoy de un exigente... :) No, en serio, como es un juego clásico tienes que hacerlo espectacular para que parezca nuevo. Como se hizo con Ruckman, por ejemplo.

Lo que me ha impresionado es lo ultra-ordenado que está el código. Excepto la gestión de eventos que es más espagueti, el resto es MVC aplicado a los videojuegos... Ahora, entre el diseño MVC y los update() a saco, para el próximo juego si quieres sacar más de un par de frames por segundo tendrás que adentrarte en el maravilloso mundo del control del reloj, los rectángulos sucios superpuestos y los update([rect]) :D

Jo, que criticón que estoy hoy.

davidgutierrez
27/11/2007, 10:39
Jejejeje. Toda crítica, mientras sea constructiva, es bien recibida. Bien, vamos por partes con las respuestas:

Lo de las imágenes que ocupen tan poco espacio es un poco a propósito, debido a que quería dejar espacio de sobra para poder poner el título y autor de cada imagen (ya sabes, por el tema de cumplir con las licencias Creative Commons y esas cosas). Si es una opinión general que la imagen es demasiado pequeña (la mayoría de mis testers jugaban en PC a 800x600), siempre puedo poner 2 modos de pantalla: el que está ahora mismo y otro en el que la imagen ocupe un mayor porcentaje de la pantalla.

Lo de la musiquita (y efectos de sonidos) tenía pensado añadirla más adelante, pero quería sacar una versión ya para empezar a recibir opiniones cuanto antes para ver que tenía que corregir para futuras versiones.

Respecto al tema de los efectos gráficos, pues no se me había ocurrido. Precisamente al ser un juego de este estilo, no creía que fuese necesario. ¿A qué tipo de efectos te refieres exactamente?


Gracias por el comentario sobre el código, aunque yo no considero que esté tan ordenado como dices. A lo mejor es que soy demasiado exigente conmigo mismo, pero tengo que reconocer que me daba un poco de "vergüenza" el que el código estuviese tan a la vista (sobre todo teniendo en cuenta que cuando programo en JAVA mi código suele ser algo más ordenado). Te doy toda la razón en el tema de gestión de eventos, supongo que al final me ha salido así debido a que he tenido que hacer añadidos "de última hora" que han hecho que el código sea algo más lioso.

Bueno, para próximas versiones me miraré el tema de los rectángulos superpuestos (supongo que se tratará de refrescar sólo las partes de la pantalla que se modifiquen en vez de refrescar la pantalla entera, ¿no?) e intentaré hacer una pequeña limpieza de código para hacerlo algo más claro.

juanvvc
27/11/2007, 19:13
Lo de las imágenes que ocupen tan poco espacio es un poco a propósito, debido a que quería dejar espacio de sobra para poder poner el título y autor de cada imagen (ya sabes, por el tema de cumplir con las licencias Creative Commons y esas cosas)

Y muy bien hecho que cumplas con la licencia, pero es que la información de la imagen ocupa el doble que la propia image...


Precisamente al ser un juego de este estilo, no creía que fuese necesario. ¿A qué tipo de efectos te refieres exactamente? (También sonidos)

Simplemente un "zzziiippp" cuando mueves una pieza estaría muy bien. Echa un vistazo a los otros juegos de la Gp2x que hay, que seguro encuentras algo de lo que sacar arte (¡pero respeta licencias!) Enigma viene muy completo en este sentido. Y en cuanto a efectos gráficos, no sé... ¿Menú con algo de movimiento? ¿fuegos artificiales cuando acabas el puzzle? ¿Bordes de las piezas que brillan cada 10 segundos? (estos dos últimos cortesía del solitario de Windows) Lo que se te ocurra. Ahora bien, ten cuidado con pasarte que en esta comunidad los juegos de la NES son los favoritos de muchos :D


Bueno, para próximas versiones me miraré el tema de los rectángulos superpuestos (supongo que se tratará de refrescar sólo las partes de la pantalla que se modifiquen en vez de refrescar la pantalla entera, ¿no?) e intentaré hacer una pequeña limpieza de código para hacerlo algo más claro.

Sí que son eso los rectángulos sucios: solo pintar la parte de la pantalla que ha cambiado. Y la superposición quiere decir que tengas cuidado cuando se suporponen, no pintes dos veces la misma área que entonces no arreglamos nada... Pero, oye, esto no es fácil y hay que tenerlo en cuenta desde la primera línea del bucle principal del juego. En muchos tipos de juego (como tu puzzle) la complicación extra en el desarrollo simplemente no vale la pena. La lista de siguientes pasos era un comentario, no una crítica: en tu juego pintar toda la pantalla es sencillo de programar y basta, así que es perfecto. Y el código me parece clarísimo excepto en la gestión de eventos, que tampoco es malo. Tan claro, tan estructurado y tan académico que creo que te has pasado: en juegos con más acción tantas clases y archivos resentirán la memoria y el procesador de la consola... También echo a faltar más comentarios.

¡Ánimos con el siguiente!

efegea
27/11/2007, 19:30
¿está en python? mooola jejeje

Es que el otro día estaba pensando que se usaba muy poco pygame, pero veo que me equivocaba :)

Yo es que estoy aprendiendo python. Ya he conseguido hacer un pequeño programa en C++ que ejecuta un script python en un hilo separado, y éste script python ejecuta a su vez otros scripts en python que se ejecutan en paralelo, concurrentemente, usando microhilos gracias a la implementacion Stackless de python. Esto permite que el programa en C++ siga funcionando mientras simultáneamente se ejecutan todos los scripts en python que quiera, sin que un script bloquee a otro script o al programa en C++. Además he conseguido que no use apenas CPU en vez de estar usando 100% de cpu, y he conseguido hacer una función para "dormir" procesos (time.sleep() no sirve en este caso)

¿Se nota que estoy feliz por haberlo conseguido? jejeje. Pienso publicar el código cuando disponga de tiempo.

Siento el offtopic..Y es una pena que no pueda probar tu juego pues vendí mi GP2X, porque tiene muy buena pinta. Y da la casualidad de que a mí el otro día se me ocurrió hacer un juego parecido al tuyo para ir aprendiendo python. Mi inspiración fue la fase de lava del Mario 64, que hay unas plataformas que son un puzzle de éste tipo, y por un juego que venía en mi antiguo 3650 que era así xD

jcom
28/11/2007, 00:43
Mmm, me ha gustado el juego. Yo jugaba a esos puzzles de pequeño, me resultaba algo frustrante y ahora podré resarcirme. Unos comentarios:

Te has dejado en los settings que la pantalla es de 800X600 y si no se cambia el juego no arranca en las GP2X
Aunque se puede quitar en la configuración, el puntero del ratón no pinta mucho
Estaría bien que en la pantalla de guardar/cargar, se pudiera ver qué slots están ocupados
Sí, funciona con la pantalla táctil :D. En los menús seleccionar una opción a veces es un poquito incómodo, pero en el puzzle no hay ningún problema

davidgutierrez
28/11/2007, 00:48
Y muy bien hecho que cumplas con la licencia, pero es que la información de la imagen ocupa el doble que la propia image...

Simplemente un "zzziiippp" cuando mueves una pieza estaría muy bien. Echa un vistazo a los otros juegos de la Gp2x que hay, que seguro encuentras algo de lo que sacar arte (¡pero respeta licencias!) Enigma viene muy completo en este sentido. Y en cuanto a efectos gráficos, no sé... ¿Menú con algo de movimiento? ¿fuegos artificiales cuando acabas el puzzle? ¿Bordes de las piezas que brillan cada 10 segundos? (estos dos últimos cortesía del solitario de Windows) Lo que se te ocurra. Ahora bien, ten cuidado con pasarte que en esta comunidad los juegos de la NES son los favoritos de muchos :D

Tomo nota de tus sugerencias, ya pensaré algo para la próxima versión e intentaré darle un mejor acabado y por supuesto, veré la forma de solucionar el que la imagen sea tan pequeña. Respecto al tema de los rectángulos sucios me interesaría algo más de información al respecto, ya que si bien quizás para este juego no merezca demasiado la pena, quiero aprender a utilizarlo (y creo que esta es la ocasión perfecta) para en el futuro poder hacer juegos de acción y no tener problemas con este tema.

De todas formas, haciendo un repaso rápido al código (solo he tenido tiempo de mirar el sistema de menús) me he dado cuenta de que realmente hacía muchas más actualizaciones de pantalla de las que son estrictamente necesarias y supongo que la "parte del puzzle" será aún peor en ese aspecto, por lo que cabe esperar mejorías en ese sentido en futuras versiones.



Y el código me parece clarísimo excepto en la gestión de eventos, que tampoco es malo. Tan claro, tan estructurado y tan académico que creo que te has pasado: en juegos con más acción tantas clases y archivos resentirán la memoria y el procesador de la consola... También echo a faltar más comentarios.


Bueno, el tema de la carencia de comentarios ha sido un poco por las prisas por sacar algo, pero es algo que definitivamente quiero incluir en cuanto tenga tiempo. Lo del tema de la gestión de eventos no se me ocurre como mejorarlo, ¿sabes de algún juego con el código fuente disponible que sea "un buen ejemplo de como tratar los eventos?

Y bueno, me alegro de que mi código te parezca bien estructurado, la verdad es que intento ser lo más ordenado posible. De hecho, esta tarde se me ha ocurrido como reordenar parte del código que no me terminaba de gustar como quedaba... espero que la eficiencia no se resienta demasiado por el tema de una programación tan estructurada, pero si se llega a ese caso (sea en este juego o en otro posterior) siempre estaremos a tiempo de optimizar... o de usar otro lenguaje más eficiente como C++ ;)



Ya he conseguido hacer un pequeño programa en C++ que ejecuta un script python en un hilo separado, y éste script python ejecuta a su vez otros scripts en python que se ejecutan en paralelo, concurrentemente, usando microhilos gracias a la implementacion Stackless de python.

Un avance muy muy interesante, nos mantendrás informados, ¿no? Supongo que la parte más difícil será la comunicación y sincronización entre los scripts Python y el código C++ que se ejecuta concurrentemente. Será interesante ver los avances que haces en este campo.


Siento el offtopic..Y es una pena que no pueda probar tu juego pues vendí mi GP2X, porque tiene muy buena pinta. Y da la casualidad de que a mí el otro día se me ocurrió hacer un juego parecido al tuyo para ir aprendiendo python. Mi inspiración fue la fase de lava del Mario 64, que hay unas plataformas que son un puzzle de éste tipo, y por un juego que venía en mi antiguo 3650 que era así xD

No sientas el offtopic, que al menos a mi la información me ha parecido interesante. Respecto a lo de probar mi juego, siempre lo puedes probarlo en PC (ese fue el motivo principal que me movió a usar Python). Y hablando de inspiración... a mi me llegó jugando al Resident Evil 4, que un momento del juego tienes que resolver un puzzle de este tipo. Entonces empecé a darle vueltas a ver como podría crearlo e intentar darle una vuelta más de tuerca (aunque aún me queda mucho por mejorar).


Mmm, me ha gustado el juego. Yo jugaba a esos puzzles de pequeño, me resultaba algo frustrante y ahora podré resarcirme. Unos comentarios:
Te has dejado en los settings que la pantalla es de 800X600 y si no se cambia el juego no arranca en las GP2X
Aunque se puede quitar en la configuración, el puntero del ratón no pinta mucho
Estaría bien que en la pantalla de guardar/cargar, se pudiera ver qué slots están ocupados
Sí, funciona con la pantalla táctil :D. En los menús seleccionar una opción a veces es un poquito incómodo, pero en el puzzle no hay ningún problemaLo del setting a 800x600 es porque te has bajado la descarga "para PC", que como todavía no he solucionado el tema de cambiar las resoluciones desde dentro del juego y en caso de que falle la configuración actual cambiarla automáticamente a 320x240, pues he puesto 2 archivos diferentes para descargar: uno para PC y otro para GP2x. Lo del puntero del ratón pasa exactamente lo mismo, en la versión de PC viene habilitado por defecto mientras que en la de GP2x viene deshabilitado.

Al cargar la partida, los slots no utilizados aparecen como deshabilitados. Tienes razón en que tal vez debería de señalar de manera diferente los slots ocupados a la hora de guardar... y mostrar un mensaje de "si quieres sobreescribir la partida guardada" (me lo anoto para la próxima versión). Son las típicas cosas que son obvias, pero no caes en ellas hasta que alguien te lo dice.

Lo de la pantalla táctil es algo que no puedo probar. ¿A qué te refieres con qué en los menús es un poco incómodo? ¿Es porque no sabes muy bien donde pinchar (en PC se soluciona porque al mover el ratón la opción "seleccionada" se pone en amarillo)? ¿Se solucionaría poniendo un rectángulo de color alrededor de cada opción para saber "donde hay que pinchar"?

----------------------------------------------
EDIT:
juanvvc, he estado haciendo algunas pruebas sobre el tema de los rectángulos sucios usando una clase wrapper que guarda en una lista los rectángulos que debe de actualizar cuando se llame a display.update, de tal forma que únicamente actualice esos rectángulos y no la pantalla entera. De esta forma, el único cambio que tengo que hacer en mi código es llamar a "data.display.display.update()" en vez de a "pygame.display.update()" para aprovecharme de esta técnica. Aún tengo que terminar de pulir algunos detallitos, pero en las primeras pruebas parece que funciona y que no va a ser tan costoso de implementar como me estaba temiendo. Ya iré comentando los avances en este frente.

jcom
29/11/2007, 01:37
Lo del setting a 800x600 es porque te has bajado la descarga "para PC",


Jo, qué ollas soy.



Lo de la pantalla táctil es algo que no puedo probar. ¿A qué te refieres con qué en los menús es un poco incómodo? ¿Es porque no sabes muy bien donde pinchar (en PC se soluciona porque al mover el ratón la opción "seleccionada" se pone en amarillo)? ¿Se solucionaría poniendo un rectángulo de color alrededor de cada opción para saber "donde hay que pinchar"?


Me refiero a que a veces no responde cuando pulsas. A lo mejor lo de los recuadros (mientras no quede demasiado feo) ayuda, pero como te digo no es algo especialmente grave. No sé hasta qué punto es problema software o hardware.

davidgutierrez
29/11/2007, 08:23
Me refiero a que a veces no responde cuando pulsas. A lo mejor lo de los recuadros (mientras no quede demasiado feo) ayuda, pero como te digo no es algo especialmente grave. No sé hasta qué punto es problema software o hardware.

En el ordenador con el ratón no he tenido ese problema que dices, pero claro... ni la GP2x tiene la potencia de un ordenador ni una pantalla táctil es lo mismo que un ratón. Lo malo es que no tengo la GP2x con pantalla táctil para poder probarlo, pero (como comentaba en post anteriores) sí que he detectado que la pantalla se refrescaba "más veces de las estrictamente necesarias", lo que podría provocar que se perdiese algún evento.

Es un tema en el que estoy trabajando, pero por lo menos hasta el fin de semana no creo que tenga tiempo suficiente como para sacar una nueva versión (y testearla lo suficiente como para considerarla estable). Si en la nueva versión te sigue pasando lo mismo, pues habrá que empezar a mirar a ver qué es lo que falla. Supongo que tema de hardware no será, porque en ese caso también te fallaría en el juego y no solo en los menús, pero bueno... a ver si llega alguien más y me confirma que le pasa lo mismo y así descartamos por completo que sea un tema de hardware.

SilentSei
29/11/2007, 10:22
Rebienvenido. Ojalá toda la gente que viene/vuelve lo hiciera así. Probaré el game esta tarde :brindis: