lunes, 19 de abril de 2010

Quaxx 1.0 disponible para descarga

En la siguiente dirección se puede descargar la primera versión del juego:

http://quaxx.googlecode.com/files/quaxx.tar.gz

miércoles, 7 de abril de 2010

Manual de usuario

Al iniciar el juego, aparecerá un tablero de 7x7 con dos fichas de cada tipo como indica la
siguiente figura:


En el juego intervendrán dos jugadores que irán moviendo alternativamente. Un jugador
moverá las fichas rojas y otro las azules.

Comienza el jugador rojo. En la barra de estado se irá indicando el jugador al que le toca
mover así como otra información interesante para los jugadores.
Para mover una ficha, se deberá hacer click sobre ella y sin soltar arrastrar hasta la casilla
donde queremos soltarla. Sólo se podrá mover una ficha a una casilla vacía.
Se pueden realizar dos tipos de movimientos:
  • Mover una ficha a distancia 1, es decir, a cualquier casilla adyacente horizontal, vertical o diagonal a la de la ficha seleccionada. En este caso, se añadirá una nueva ficha a la casilla destino y todas las fichas del oponente que estén adyacentes pasarán a ser del jugador que realizó el movimiento (cambian de color).
  • Mover una ficha a distancia 2, a cualquier casilla a distancia 2 horizontal, vertical o diagonal a la de la ficha seleccionada. En este caso, no se añadirá una nueva ficha sino que se moverá la ficha dejando la casilla origen vacía. Igualmente, todas las fichas del oponente que estén adyacentes (distancia 1) pasarán a ser del jugador (cambian de color).

El juego llegará a su fin en dos situaciones:
  • Cuando alguno de los jugadores se quede sin fichas.
  • Cuando ninguno de los dos jugadores pueda mover.
En el caso de que un jugador se quede sin fichas, el jugador contrario será el ganador mientras que en el caso de que ninguno de los dos jugadores pueda realizar un movimiento, el jugador que tenga mayor número de fichas sobre el tablero será el ganador.

El propio juego, avisará con un diálogo cuando se produzca alguna de estas dos situaciones e indicará el jugador que consiguió la victoria. Dicho diálogo, presentará dos opciones: Salir o Jugar de nuevo.

Nueva partida

Para crear una nueva partida bastará ir al menú Juego y hacer click en la opción Nuevo. El programa nos preguntará si estamos seguros de querer empezar una nueva partida. Bastará con confirmar que si y el tablero volverá a su posición inicial listo para comenzar una nueva partida.

NOTA: Al iniciar una nueva partida se perderá la partida anterior si no se ha guardado previamente.

Salir del juego

Para salir del juego se puede hacer click en el icono de cerrar de la ventana o bien
haciendo uso del menú Juego, opción Salir.

Guardar una partida

Si en un momento dado se desea guardar la partida actual, bastará con ir al menú Juego y hacer click sobre la opción Guardar. El juego pedirá al usuario que introduzca un nombre para la partida. El nombre de la partida deberá terminar en .dat Ejemplo: partida8enero.dat

Abrir una partida guardada

En cualquier momento, ya sea al iniciar el juego o durante una partida podremos cargar y continuar por otra partida que hayamos guardado previamente. Para ello, bastará con ir al menú Juego y seleccionar la opción Abrir. Se debe navegar por el sistema de ficheros del sistema operativo y seleccionar la partida guardada.

Opciones de juego

Se puede personalizar los colores de las fichas y el tipo de oponente. Para ello, basta con ir al menú Juego y seleccionar la opción Opciones.

Aparecerá entonces una ventana en la que se podrán elegir los colores para las fichas y el tipo de oponente. Una vez se hayan seleccionado los valores deseados, bastará con hacer click en aceptar y los cambios tendrán efecto.

Deshacer y rehacer movimientos

Una de las funcionalidades extra del juego consiste en la posibilidad de poder deshacer y rehacer movimientos a pesar de que esto disminuye en gran medida el nivel de dificultad del juego.

Para deshacer un movimiento realizado, bastará con ir al menú Movimientos y seleccionar la opción Anterior. Se podrá apreciar como el tablero vuelve a su estado anterior. En caso de arrepentirse de haber deshecho el movimiento se puede avanzar de nuevo haciendo uso de la opción Siguiente.

En el caso de partidas Humano-Humano los movimientos se desharán por cada jugador, es decir, al deshacer un movimiento se irá deshaciendo el último movimiento del jugador que movió mientras que en partidas tipo Humano-Ordenador se volverá atrás hasta la última vez que tiró el Humano ya que el Ordenador ya que si se deshiciera el movimiento del ordenador automáticamente se haría de nuevo el mismo movimiento y no tendría sentido, por tanto, en partidas tipo Humano-Ordenador normalmente se vuelve atrás 2 movimientos (a no ser que haya habido saltos de turno y que solo sea necesario volver 1 movimiento).

domingo, 4 de abril de 2010

Instalación en windows

La compilación en sistemas Windows necesita tener las librerías Qt para Windows y
Mingo instalado en el sistema. El proceso de compilación es idéntico que en Linux.

Como normalmente ocurre en Windows, se obvia la compilación y se aporta directamente
el ejecutable del juego junto con las librerías de Qt necesarias para su ejecución. No hace
falta instalación alguna. Simplemente doble click sobre ataxx.exe.

viernes, 2 de abril de 2010

Como compilar en Linux

Para compilar el programa hace falta tener al menos la versión 4.3.3 de las librerías Qt
instaladas en el sistema o de lo contrario no será posible compilar Quaxx.

Para la compilación basta ejecutar en consola los siguientes comandos:

$qmake –project

Esto genera un fichero .pro que dependerá del directorio en el que tenemos los archivos
almacenados. Normalmente en quaxx por lo que el archivo será quaxx.pro.

$qmake quaxx.pro

Por último:

$make
Si la compilación no devolvió ningún error, para lanzar quaxx bastará con ejecutar:

$./quaxx

Compilado y testado en Ubuntu 7.10 y 10.04

domingo, 28 de marzo de 2010

Histórico de modificaciones (Changelog)

07/12/2007 Tarde

  • Creacion de la ventana principal con el menu Juego y dos opciones dentro del menu: Nuevo y Salir (aun sin funcionalidad).

10/12/2007 Mañana (en practicas)

  • Creacion de la clase tablero que hereda de QWidget, matriz de 7x7 como representacion interna.
  • Sobrecarga del metodo paint que divide el tamaño del tablero en las casillas (6 rectas verticales, 6 horizontales)
  • Sobrecarga del evento MousePress que pinta un circulo en el centro de la casilla en la que se hizo click.
  • Uso de colores rojo y azul al pintar las fichas.
  • Creacion de una funcion que va alternando el turno de los jugadores y pinta la ficha del color correspondiente.

10/12/2007 Tarde

  • Sustitucion de las li­neas del tablero por una imagen png diseñada con GIMP.
  • Sustitucion de las circunferencias de las fichas por 2 imagenes png (una para cada ficha).
  • Mejorado el metodo MousePress para que solo se ejecuten sus acciones cuando la casilla seleccionada contenga una ficha del jugador al que le toca mover.
  • Sobrecarga del metodo MouseRelease comprobando si el evento se ha producido a distancia 1 o a distancia 2: Si es a distancia 1 se agrega en la matriz otra ficha mientras que si es a distancia 2 se pone a 0 la posicion correspondiente a la casilla actual en la matriz y se agrega otra ficha al tablero (como si la movieramos).
  • Creacion del metodo comprobarJugada que es llamado cada vez que se realiza un movimiento. Su mision es comprobar las fichas que rodean a la casilla donde se produjo el mouseRelease y ver si hay fichas del oponente para hacerlas nuestras.
  • Mejorado el metodo PaintEvent para que resalte con bordes amarillos la casilla de la ficha que se ha seleccionado para la jugada actual.
  • Agregado Abrir y Guardar al menu (aun sin funcionalidad).
  • Agregada funcionalidad del menu salir.
  • Agregada funcionalidad del menu abrir y guardar (usando funciones de C++).

11/12/2007 Mañana

  • Creada subclase MainWindow que hereda de QMainWindow para crear ahi todos los menus, barra de estado, slots, signals y dejar asi­ limpio el main.cpp
  • Implementacion del dialogo creditos mediante QMessageBox (mas rapido y sencillo). Idea del ejemplo Spreadsheat.
  • Ahora al abrir y guardar sale el dialogo para abirr y guardar archivos con la posibilidad de asignarles un nombre pudiendo abrir o guardar tantas partidas como se necesite. Ahora se usan funcionalidades de Qt como QFile y QStreamData.

11/12/2007 Tarde

  • Diseñadas 6 tipos de fichas en distintos colores (rojo, verde, azul, amarillo, blanco y negro) con GIMP. La idea es poder cambiar el color de la ficha desde algun menu.
  • Usados iconos obtenidos del paquete (nuoveXT 2.2) a un tamaño de 16x16 para todas las opciones del menu.
  • Agregada la opcion de Opciones en el menu Juego.
  • Implementado un cuadro de dialogo de opciones con la posibilidad de elegir color de la ficha y el tipo de jugador.
  • Implementado el sistema de signal, slot y connect para cambiar los colores de las fichas al pulsar el boton aceptar. Para ello se ha creado un metodo setFicha en tablero que se ejecuta al recibir una señal. Se envian dos señales una para cambiar la ficha del jugador 1 y otra la del jugador 2.

29/12/2007 Tarde

  • Agregada una funcion igual a compruebaJugada pero que en vez de cambiar las fichas del contricante a tuyas lo que hace es contarlas y devuelve la cuenta. (Pensada para usarla en un metodo que sea mover en el que el propio ordenador "pensara" un movimiento con cierta inteligencia).
  • Modificado el metodo mouseRelease. Ahora en vez de comprobar los movimientos validos a distancia 1 o distancia 2 con if (impedi­a los movimientos a distancia 2 con forma de L) ahora se hace con 4 (X e Y para distancia 1 y X e Y para 2) vectores de posiciones validas y comprobando si esta en alguna de ellas.
  • Reparado un bug en los metodos de abrir y guardar del tablero que ignoraba el turno del jugador al que le tocaba tirar y siempre se empezaba por el mismo. Ha sido reparado y ahora en el fichero de la partida tambien se guarda la informacion necesaria para saber a que jugador le tocaba tirar.
  • Agregados dos atributos enteros al tablero para identificar el color de la ficha de cada jugador ya que por la imagen solo no se podia saber que color era. Cuando se cambia el color de la ficha ademas de actualizar las QImage se actualizan estos atributos para consultarlos con el metodo getColorFicha cuando se llama al dialogo de opciones para colocar bien los indices de los QComboBox.
  • Implementada la funcion mover con la que el ordenador realiza un movimiento del turno actual.

30/12/2007 Tarde

  • Implementado el metodo puedeMover(jugador) que devuelve verdadero o falso segun si el jugador que se le pasa como parametro puede ejecutar un movimiento o no dadas las condiciones del tablero en ese momento.
  • Implementada signal ganador(int) que se envia cuando ninguno de los dos jugadores puede realizar un movimiento.
  • Implementado slot ganar(int) que se ejecuta cuando recibe la señal ganador del tablero y muestra una ventana diciendo quien fue el ganador.
  • Cambiado el planteamiento del juego en cuanto a jugadores. Consideraremos el primer jugador siempre humano y el oponente se podra elegir entre humano y computador. Para ello se han eliminado todas las referencias a metodos y objetos visuales del tipo de jugador 1 asi como la modificacion de todos los metodos necesarios.
  • Cuando se cambia el turno al jugador 2 (Oponente) se comprueba que tipo de jugador es. Si es de tipo Computador (entero 1) entonces se llama al metodo generarMovimiento que este vuelve a llamar a su vez al metodo cambiaturno al final (se produce recursividad pero nunca de profundidad mayor que 1) ya que al volver a cambiar el turno obligatoriamente es del jugador 1 y no se llama a generarMovimiento.

31/12/2007 Tarde

  • Implementado un sistema que mantiene siempre el numero de fichas de cada jugador mediante dos variables que se van incrementando y decrementando en cada movimiento. Se usaran para determinar cuando un jugador ha ganado.

01/01/2008 Tarde

  • Ahora el mensaje de has ganado aparece cuando o bien ninguno de los jugadores puede mover ya o uno de los jugadores ya no tiene fichas.
  • Mejorado el metodo compruebaJugada que ahora en vez de enviar la señal ganador(1) siempre hace comprobaciones de si un jugador se ha quedado sin fichas pues gana el otro o si los dos tienen fichas en el tablero pero ninguno puede ya realizar un movimiento entonces gana el que mayor fichas tenga sobre el tablero.
  • Mejorado el metodo ganar de mainwindow para que muestre un mensaje u otro segun el parametro jugador.
  • Mejorado el metodo ganar de mainWindow para que el mensaje sea un information message en vez de un about. Ahora aprecen dos botones Salir y Jugar de nuevo. La respuesta es guardada en una variable que con un switch se comprueba que respuesta devolvio el dialogo y se ejecuta close() o nuevo() dependiendo de la respuesta.
  • Modificado el metodo cambiaturno de tablero para que compruebe si el jugador al que le va a asignar el turno puede mover o no. Si no puede mover deja el turno al mismo jugador (requisito de la practica).

02/01/2008 Mañana

  • Implementado un metodo llamado guardaMovimiento que genera una representacion del tablero + el turno actual y la introduce en un QList. La idea es usarlo para deshacer o rehacer movimientos.
  • Agregados 2 nuevos slots a la clase tablero: anterior y siguiente. Asociadas las acciones de las opciones de menu anterior y siguiente a los slots del tablero.
  • Agregado un struct estado que representa el estado del tablero y el turno en un momento dado para irlo almacenando en la lista de estados y poder avanzar y retroceder por ella.

02/01/2008 Tarde

  • Terminada implementacion de metodos anterior y siguiente.
  • Agregados varios if de comprobacion para que el indice de la lista de movimentos no avance o retroceda mas de la cuenta y evitar el error.
  • Implementado dialogo de confirmacion de nueva partida.

03/01/2008 Mañana

  • Inicio de la documentacion: enunciado del problema.
  • Mejorado el algoritmo de generacion de movimientos.
  • Nueva funcionalidad: Agregado un metodo mover que es ahora al que se llama para generar un movimiento pero unicamente es una interfaz que llama a generaMovimiento. generaMovimiento ha sido convertido a private slots y se ha creado en mover un widget QTimer de un unico disparo que genera pasado 1 segundo una señal que esta conectada al slot generaMovimiento. Asi se simula 1 segundo de tiempo para simular que la maquina esta pensando.
  • Modificada la señal turnocambiado para que envie un QString. Ahora cada vez que se cambia de turno se emite una señal con un QString que esta conectada con el slot de showMessage del statusBar y asi va cambiando el mensaje del turno del jugador al que le toca tirar.
  • Modificados los metodos abrir y guardar para que tengan en cuenta tambien el tipo de jugador del oponente (humano u ordenador).
  • Modificado el evento mouserelease para que desactive el marco amarillo de la casilla seleccionada al soltar el boton del raton.
  • Terminado el manual de usuario y compilacion del programa.
  • Modificados los metodos abrir y guardar para que tengan en cuenta tambien los colores de las fichas.

07/01/2008 Mañana

  • Mejorados metodos anterior y siguiente para que si el oponente es el ordenador retroceda (o avance) hasta el ultimo movimiento humano que hubo.
  • Creacion de documentacion doxygen.
  • Terminada Modularidad, estructuras de datos y justificacion de la solucion en la documentacion.

08/01/2008 Tarde

  • Modificados el slot y signal de ganar y ganador para que acepte un QString. En vez de enviar el id del jugador se envia el string del color de su ficha para identificar mas facilmente el jugador que gano.
  • Modificada la señal cambiar turno para que en vez de que envie el id del jugador en el mensaje, envie el color actual del jugador. Asi se vera en la barra de estado Turno del jugador rojo en vez de turno del jugador 1.

09/01/2008 Tarde

  • Agregado un atributo llamado retrocesos en tablero que indica cuantos movimientos atras hemos realizado sin volver a hacerlos hacia delante. Se usa para que cuando se vuelve atras y se realiza un movimiento los movimientos de ahi­ hacia delante que habi­a guardados sean eliminados para que al pulsar siguiente no haya ningun movimiento ya que el curso de la partida ha cambiado.

07/04/2010 Tarde

  • Recuperación de una copia del proyecto para el curso Liberación de Proyectos de Software Libre
  • Creación del blog del proyecto
  • Liberación del proyecto

miércoles, 24 de marzo de 2010

Versión 1.0

Como inicio del proyecto, se partirá de la versión estable y funcional entregada para la asignatura NTP de Ing. Técnica en Informática de Sistemas.

Por el momento, el juego permite elegir los colores de las fichas y seleccionar el tipo de oponente (humano u ordenador.

lunes, 22 de marzo de 2010

Bienvenidos

Bienvenidos al blog en el que trataremos todo lo relacionado con Quaxx que he desarrollado.

Iré publicando todas las cuestiones relacionadas con el desarrollo del mismo de forma más o menos frecuente.