sábado, 24 de abril de 2010

Lavado de estómago

Después de un tiempo sin trabajar con el proyecto, debido a que no disponía de tiempo suficiente, he vuelto a trabajar con el proyecto para programar la versión 0.3, la cual tenía planeado empaquetar en un paquete .deb para cuando estuviese disponible la nueva versión de ubuntu, dentro de unos pocos días. Mis planes para esta nueva versión eran:
  • Sistema de mensajes flotantes en pantalla: Saldrían mensajes que flotarían durante un tiempo moviéndose en la pantalla, para indicar cosas como puntos al eliminar una pieza, que no se pueden realizar más movimientos, que se ha aumentado el multiplicador de puntos del juego, etc.
  • Dibujado de un fractal simple (Julia) como fondo del programa, para que así no fuese siempre ya todo negro y soso.
  • Generador de colores: Dividiendo la franja de colores en el formato HSV en n colores, se usarían para cuando no se especifique ningúna skin para las gemas del juego. Entonces en vez de dar error, dibujaría unas piezas simples de esos colores para que se diferencien. Así se podría jugar con 10, 20, 400 piezas diferentes sin problemas. (Salvo daltonismo, claro)
Todo ya está implementado, pero al implementar los mensajes, me dí cuenta de que el programa se estaba haciendo cada vez más y más desordenado y difícil de seguir, y que podría obtener una mejora enorme de cara al futuro cambiando todo el esquema interior del juego. Es decir, por el momento el juego va así:

Menú -> GemboyGame -> GameBoard
  • Menú controla diversas opciones de reglas que se le pasan a GemboyGame
  • GemboyGame controla la interfaz entera y carga el tablero
  • GameBoard se encarga de cargar la interfaz mínima del juego, con sus piezas y sus animaciones y de gestionar el juego.
Entonces, pensé que se podría crear una capa más, es decir, que GameBoard se dividiese en 2 clase: Motor y GameBoard.
Gameboard seguiría gestionando los eventos de ratón y la interfaz gráfica, pero todo el cálculo del tablero de juego, de los movimientos, las líneas y demás se quedaría en Motor, así separando el juego de la interfaz. Así, obtendríamos multitud de ventajas, como por ejemplo que no dependa el juego de pygame para la interfaz, y pueda ser realizado con GTK, QT, OpenGL...

Así que de momento la versión 0.3 va a esperar un poco más y no estará disponible cuando salga el Ubuntu nuevo.

viernes, 16 de abril de 2010

Objetivos para la versión 1.0

Hoy voy a explicar qué objetivos consideraría obligatorios para considerar que el juego haya llegado a su versión 1.0, aunque falte bastante tiempo para ello. También hay que decir que sólo es la funcionalidad mínima que se busca y que el juego obviamente tendrá mas opciones y funciones aparte de ello. Así que estos son los objetivos que por ahora se pretenden lograr:

1º) En lo referente a las imágenes de las piezas:
- Se podrán generar un número determinado de piezas a partir de unas plantillas, cambiándoles el color a éstas para que puedan haber juegos con 8, 10, 50 o 400 tipos de piezas diferentes sin tener que recurrir a 400 imágenes. El color se elegirá a partir de toda la gama de colores. Las piezas especiales tendrán su propia imagen.
2º) Respecto a los controles:
- Se podrá controlar el juego de diversas maneras:
- Mediante ratón: Haciendo click en una pieza y arrastrando a una dirección, o haciendo click en la pieza a intercambiar
- Mediante teclado: 4 teclas para mover un cursor en el tablero y una tecla para seleccionar una pieza
- Mediante joystick/gamepad/otro dispositivo: Igual que con el teclado

3º) En cuanto al multijugador:
- Se podrá jugar en el mismo ordenador varios jugadores, dibujando en pantalla varios tableros o uno sólo, dependiendo del modo de juego. Cada jugador controlará con teclado o ratón su tablero.

4º) En lo referente a guardar el estado de las partidas:
- Se podrá guardar la partida en cualquier momento y reanudarla pese a que se cierre el programa.
- Se guardarán repeticiones del juego.
- La implementación sería guardar en cada movimiento el movimiento realizado en un archivo.

5º) Niveles:
- El juego dispondrá de niveles, los cuales se aumentarán dependiendo del tipo de juego y a su vez se aumentará la dificultad, ya sea incluyendo más piezas negativas, menos tiempo para mover, etc.

6º) Tipos de piezas especiales:
- Habrá 2 dependiendo de su beneficio:
- Piezas positivas: Generan un beneficio al jugador. Se conseguirán mediante combos, aleatoriamente y/o a través de comodines.
- Explosiva: Al eliminarse se eliminan las piezas adyacentes
- Rayo: Al eliminarse se eliminan las piezas de la misma fila y columna
- Salvavidas: Eliminará todas las piezas negativas del tablero.
- Hipercubo: Sin color. Eliminará a todas las piezas del tablero con la que se empareje.
- Multicolor: Se puede juntar con cualquier pieza de otro color.
- Piezas negativas: Influyen negativamente en el juego entorpeciendo al jugador y causando la pérdida de la partida.
- Negra: No se puede combinar con ninguna pieza de ningun color. Sólo se elimina con una pieza positiva.
- Candado: Se aplica a una pieza de color y no permite mover a la pieza
- Movimientos: La pieza tiene un contador y produce un efecto (como perder la partida, quitar una vida, etc) al jugador si no la elimina antes de que llegue a 0.

7º) Modos de juego predefinidos:
- A parte de que el jugador pueda crear sus propios modos de juego cambiando todas las opciones, habrán unos predefinidos, que serán:
- Normal: Se juega hasta que no haya más movimientos en el tablero.
- Tiempo: Se juega hasta que se acabe el tiempo.
- Nerviosismo: Hay un límite de tiempo para los movimientos.
- Colección: Eliminar N gemas de uno o varios colores.
- Puzzle: Eliminar todas las piezas del tablero según un esquema inicial.
- Limpieza: Eliminar el mayor número de piezas posibles en un tiempo.

Y por el momento eso es todo. En cuanto a la interfaz, no hay objetivos claros aún, he pensado en fondos generados mediante fractales, más animaciones, y luego el tema del sonido y la música. Pero lo importante en cuanto a código es lo de arriba. También he pensado en incluir unos comodines que cambiarían el juego, pero no los veo tan básicos, aunque no se descarta su inclusión en versiones posteriores.

martes, 13 de abril de 2010

Versión 0.2 liberada

He aquí la versión 0.2 del juego. Los cambios realizados son:

- Iniciado soporte para cambiar idiomas, para ello cambiar la variable "languages" en el archivo de configuracion por "spa" para español o "eng" para inglés. En un futuro se incluirán muchos mas lenguajes
- Arreglado el efecto de parpadeo en la interfaz en el modo "Juego Rápido"
- Eliminado código redundante
- Arreglados varios bugs

Los enlaces de descarga están en sourceforge:

Para los que quieran probar el juego en GNU/Linux, necesitan descargar el código fuente y el paquete data y tener instaladas las librerías Python 2.6 y Pygame 1.9.1 y arrancar el juego desde el script "menu.py"