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.