Juego de la Oca

35
JUEGO DE LA OCA V.2 Máster Desarrollo Aplicaciones Web (especialidad JAVA) UNED 2014

Transcript of Juego de la Oca

Page 1: Juego de la Oca

JUEGO DE LA OCA V.2

Máster Desarrollo Aplicaciones Web (especialidad JAVA)UNED 2014

Page 2: Juego de la Oca

ORGANIZACIÓN

Page 3: Juego de la Oca

ORGANIZACIÓN GRUPO DE TRABAJO

La organización del trabajo en grupo se ha realizado a través de un Scrum Master y mediante la distribución de tareas semanales y diarias en base al avance y disponibilidad de cada uno de los miembros.

Para la gestión del trabajo, se ha utilizado un wiki, con url: http://62.204.199.127/JAVA_UNED/alef/wiki/JUEGOGRUPO

Dentro del wiki se ha distribuido la información de la siguiente manera: Juego de la Oca¶

Instrucciones Organización del Grupo¶

Diario de Tareas Diario de Reuniones de Grupo Equipo y Planificación

Manual y Análisis¶ Manual del usuario Análisis del Juego

Diseño¶ Diseño general del Juego

Calidad¶ Pruebas de Software Análisis de Errores Detectados

Page 4: Juego de la Oca

ORGANIZACIÓN GRUPO DE TRABAJO

El grupo ha participado en reuniones diarias con el Scrum, aportando ideas y soluciones para el desarrollo del juego.

Además, se ha realizado un cálculo de tiempo invertido por cada miembro del equipo para la planificación de cada una de las tareas.

Toda la planificación, resúmenes de las reuniones y la gestión de tareas se puede ver en wiki en el apartado: «Organización del Grupo»

También se ha habilitado la herramienta DotProject y se han creado los usuarios para poder acceder a ella. (http://www.plantareasuned2014.com)

Page 5: Juego de la Oca

DOCUMENTACIÓN

Page 6: Juego de la Oca

MANUAL DE USUARIO

Se ha realizado un manual de usuario del Juego de la Oca con el objetivo de realizar un análisis breve de cómo se debe enfocar el juego y qué normas va a tener.

El Manual del Usuario está accesible a través de wiki en la siguiente dirección: http://62.204.199.127/JAVA_UNED/alef/wiki/MANUAL

Page 7: Juego de la Oca

MANUAL DE USUARIO

En el Manual de usuario se detallan entre muchos otros, aspectos como:

Cuántos jugadores pueden participar (de 2 a 6).

Cuántos dados va a tener el juego (1).

Cómo se reparte el orden de los jugadores (aleatorio).

Cómo se tira el dado (pulsando Enter).

Cuántas y qué tipo de casillas tiene el Juego (Oca, Puente, Dados, Calavera, etc.).

Qué pasa en cada tipo de Casilla si cae el jugador (se pierden turnos, se salta a otra casilla, se vuelve al inicio, etc.).

Qué ocurre cuando se intenta llegar a la casilla Final sin el número exacto en el dado (se llega solo con número exacto).

Cómo reacciona el Juego al llegar al final (mensaje de llegada y pregunta si se quiere volver a jugar).

Page 8: Juego de la Oca

ANÁLISIS DEL JUEGO

En el Análisis del Juego de la Oca se detallan los requerimientos que, desde un punto de vista técnico y de código, va a desarrollar la aplicación para su correcto funcionamiento.

El Análisis del juego está accesible a través de wiki en la siguiente dirección: http://62.204.199.127/JAVA_UNED/alef/wiki/ANALISIS

Page 9: Juego de la Oca

ANÁLISIS DEL JUEGO

Además, del análisis de requerimientos se detalla un diagrama de estados, en el que se representa el proceso que realiza la aplicación a lo largo de todo el juego.

Page 10: Juego de la Oca

ANÁLISIS DEL JUEGO

También se ha realizado un diagrama de caso-uso, que presenta la interacción del usuario (actor) con la aplicación (sistema).

Page 11: Juego de la Oca

ANÁLISIS DEL JUEGO En cuanto a los requerimientos, se detallan 20 requerimientos que debe cumplir la

aplicación para que funcione conforme se ha estipulado en el Manual del Usuario del Juego.

R.1.1. Se solicita y guarda el número de jugadores que van a participar en la partida. (Inicio partida) R.1.2. Se solicita y guarda el alias de cada jugador. (Inicio partida) R.1.3. Se asigna un color a cada jugador. (Inicio partida) R.1.4. Se inicializa el tablero con los jugadores indicados. (Inicio partida) R.1.5. El jugador activo puede realizar una jugada. R.1.6. Cuando un jugador activo está castigado (pierde turno), no realiza jugada y el turno pasa al siguiente jugador. R.1.7. Se controla la cantidad de turnos que debe permanecer castigado un jugador. Se informa al jugador en cada turno que no realiza

jugada. R.1.8. Cuando un jugador llega a una casilla de tipo “oca” (5, 9, 14, 18, 23, 27, 32, 36, 41, 45, 50, 54, 59) , se traslada a la siguiente

casilla de tipo “oca” y vuelve a realizar jugada. Se informa al jugador. R.1.9. Cuando un jugador llega a una casilla de tipo “puente” (6, 12), se traslada a la otra casilla de tipo “puente” y vuelve a realizar

jugada. Se informa al jugador. R.1.10. Cuando un jugador llega a una casilla de tipo “dado” (26, 53), se traslada a la otra casilla de tipo “dado” y vuelve a realizar

jugada. Se informa al jugador. R.1.11. Cuando un jugador llega a la casilla “laberinto” (42), se traslada a la casilla número 30 y pasa el turno al siguiente jugador. Se

informa al jugador. R.1.12. Cuando un jugador llega a la casilla “calavera” (58), se traslada a la casilla número 1 y pasa el turno al siguiente jugador. Se

informa al jugador. R.1.13. Cuando un jugador llega a la casilla “posada” (19) o a la casilla “pozo” (31), se le aplica un castigo de dos turnos y pasa el turno

al siguiente jugador. Se informa al jugador. R.1.14. Cuando un jugador llega a la casilla “cárcel” (52), se le aplica un castigo de tres turnos y pasa el turno al siguiente jugador. Se

informa al jugador. R.1.15. Cuando un jugador llega a la casilla “jardín de la oca” (63), ha ganado la partida. Se informa al jugador. Termina la partida. R.1.16. Cuando un jugador llega a una casilla no definida en los requerimientos del R.1.8 al R.1.15, pasa el turno al siguiente jugador. R.1.17. Cuando un jugador obtiene una puntuación en la tirada del dado que, sumada a su posición actual, resulte mayor que 63, el

jugador retrocede tantas casillas como sea dicho exceso. R.1.18. Cuando un jugador llega a la casilla “jardín de la oca” (63) como destino de la casilla "oca" situada en la posición 59, debe volver

a tirar, retrocediendo en el tablero. R.1.19. Se permite que varios jugadores se encuentren en la misma casilla. R.1.20. No se permite que 2 jugadores tiene el mismo color.

Page 12: Juego de la Oca

DISEÑO DEL JUEGO DE LA OCA V.2

Page 13: Juego de la Oca

DISEÑO DEL JUEGO DE LA OCA V.2

El Diseño del Juego trata de reflejar mediante un diagrama de clases el esquema de lo que va a ser el desarrollo del código.

El Diseño del Juego de la Oca V.2 se encuentra en wiki en la siguiente dirección: http://62.204.199.127/JAVA_UNED/alef/wiki/DISE%C3%91O2

Page 14: Juego de la Oca

DISEÑO DEL JUEGO DE LA OCA V.2 – DIAGRAMA DE CLASES

Page 15: Juego de la Oca

DISEÑO DEL JUEGO DE LA OCA V.2 – DIAGRAMA DE CLASES

Page 16: Juego de la Oca

DESARROLLO DEL CÓDIGO

Page 17: Juego de la Oca

DESARROLLO DEL CÓDIGO

El código elaborado para el juego contiene las siguientes clases, distribuidas en paquetes:

Paquete default Clase Driver

Paquete excepciones Clase Error

Paquete jugador Clase Color Clase Jugador

Paquete partida Clase Dado Clase Oca

Paquete tablero Clase Casilla Clase Tablero Clase TipoCasilla

Paquete test Clase Test

Page 18: Juego de la Oca

DESARROLLO DEL CÓDIGO - DRIVER

La clase Driver está incluida por defecto dentro del Paquete default y ejecuta el Juego de la Oca, creando un nuevo objeto Oca y usando los métodos creados para ello.

Se ha intentado que la clase Driver fuera lo más sencilla posible:

// importa todo el package es.uned2014.oca.partidaimport es.uned2014.oca.partida.*;

public class Driver {// Incio método mainpublic static void main( String[] args) {

// Crea objeto OcaOca oca = new Oca();

// Muestra el mensaje de bienvenidaoca.bienvenidoOca();

// Configura la partida para el juego de la ocaoca.configurarOca();

// Inicia la partidaoca.jugarOca();

// Fin de la partida, con opción a jugar de nuevo oca.finOca();

} // fin main

 } // fin clase Driver

Page 19: Juego de la Oca

DESARROLLO DEL CÓDIGO - ERROR

La clase ClaseError hereda de la clase RuntimeExcepcion para tratar de manera controlada los errores que se produzcan en la aplicación.

El método constructor de la clase utiliza el método constructor de RuntimeException.

La clase ClaseError lanza un mensaje de error: «Se ha producido un error:»

Page 20: Juego de la Oca

DESARROLLO DEL CÓDIGO - COLOR

La clase Color está incluida en el paquete jugador y está basada en un enum con los colores de las fichas tradicionales que se asignan los jugadores durante la partida.

Los colores de los jugadores podrán ser: rojo, azul, amarillo, verde, naranja o violeta.

Page 21: Juego de la Oca

DESARROLLO DEL CÓDIGO - JUGADOR

La clase Jugador está en el paquete jugador y representa a cada participante del juego.

La clase tiene cuatro variables:

La variable «colorJugador», que asigna el color a los jugadores por la clase enum Color.

El String «aliasJugador», que representa el alias o nombre que el Jugador quiera insertar durante la partida.

Un valor entero «castigo», que indica si el jugador tiene penalización de turnos.

El valor booleano «tiraOtraVez» que indica si el jugador repite turno.

Page 22: Juego de la Oca

DESARROLLO DEL CÓDIGO - DADO

La clase Dado está en el paquete partida y su objetivo es generar un número entero aleatorio entre 1 y 6.

Contiene un método «tirarDado» que es el que genera el efecto del dado.

Page 23: Juego de la Oca

DESARROLLO DEL CÓDIGO - OCA

La clase Oca está dentro del paquete partida y contiene los métodos necesarios para jugar al Juego de la Oca desde el inicio hasta el fin del juego. Importa los paquetes jugador, tablero y excepciones.

La Clase Oca define las siguientes variables: La variable “númeroJugadores”, que establece el número de

jugadores que participan. La variable “tiradaJugador”, que establece la tirada del Jugador. La variable  arrayList”Jugador”, que obtiene los jugadores . La variable booleana “juegoTerminado”, para declarar el  fin del

juego. Un HashMap de Jugador y Casilla , que asocia el jugador a la casilla.

Page 24: Juego de la Oca

DESARROLLO DEL CÓDIGO - OCA

Además, en la clase Oca se definen los siguientes métodos:

Método bienvenidoOca,  que muestra el mensaje de bienvenida y pregunta al usuario si quiere jugar o no.

Método  configurarOca, que configura la partida en función del número de jugadores elegidos por el usuario.  Crea un TreeSet de jugadores que engloba el color asignado , el alias y el castigo que pueda tener.  Define también un orden aleatorio e inicializa el tablero.

Método  definirOrden, que asigna el orden de los jugadores a partir del TreeSet de jugadores. Crea un ArrayLIst”Jugador” en función del número de jugadores, y define un orden aleatorio.

Método jugarOca, da comienzo a la partida  y lo repite mientras no se finalice el juego, pasando el turno entre los jugadores, en el orden establecido en el ArrayList. También comprueba si el jugador no tiene castigo de turno y muestra el mensaje al usuario para que tire el dado.  Comprueba en qué casilla está el jugador y analiza la tirada.  Muestra a los jugadores los mensajes según la casilla en la que han caído.

Método finOca,  finaliza la partida mostrando el mensaje de despedida y da la opción al usuario de volver a jugar otra vez.

Método mensajeDespedida, muestra el mensaje de despedida.

Page 25: Juego de la Oca

DESARROLLO DEL CÓDIGO - CASILLA

La clase Casilla está en el paquete tablero y representa cada una de las casillas que forman el tablero de la oca.

La clase Casilla tiene dos variables:

La variable posición, que es un valor entero que representa la posición de la Casilla en el tablero

La variable TipoCasilla, que es un enum que está definido en una clase.

La clase Casilla asigna un valor entero como posición y recoge el tipo de casilla en función de ese valor, comprobando si está entre 1 y 63. Si no es así, se lanza un error.

Page 26: Juego de la Oca

DESARROLLO DEL CÓDIGO -TABLERO

La clase Tablero está en el paquete tablero y representa el conjunto de casillas necesarias para jugar a la Oca.

Su única variable es un conjunto ArrayList de Casillas que define 63 casillas.

Contiene el método “analizarTirada” donde se calcula la casilla destino, y se comprueba si se trata de la casilla final, en cuyo caso se ganaría la partida y se finalizaría. En caso de no ser la casilla final, se analiza la casilla y se ejecuta su método correspondiente.

Page 27: Juego de la Oca

DESARROLLO DEL CÓDIGO -TABLERO

Además, contiene los métodos necesarios para describir las acciones que después se llevarán a cabo en la partida del juego:

Método accionesOca, para la casilla Oca. Método accionesPuente, para la casilla Puente. Método accionesDados, para la casilla Dados. Método accionesTurnos, para la casilla Posada, Pozo y Cárcel. Método accionesLaberinto, para la casilla Laberinto. Método accionesCalavera, para la casilla Calavera. Método accionesNormal, para el resto de casillas.

Page 28: Juego de la Oca

DESARROLLO DEL CÓDIGO - TIPOCASILLA

La clase TipoCasilla está en el paquete tablero y es una enumeración de los posibles tipos de casillas que hay en el Juego.

Utiliza «enum» y crea las casillas: normal, oca, puente, dados, posada, pozo, cárcel, laberinto y calavera.

Page 29: Juego de la Oca

DESARROLLO DEL CÓDIGO - TEST

La clase Test está situada en el paquete Test y se configura para realizar las pruebas unitarias a través de Junit en diversos métodos del juego.

Se realizan pruebas en los siguientes métodos: Método constructor JugadorCastigo Método JugadorAlias Método GetColor Método SetColor Método GetAliasJugador Método SetAliasJugador Método GetCastigo Método SetCastigo Método GetTiraOtraVez Método SettiraOtraVez Método tesHashCode Método Equals Método CompareTo

Page 30: Juego de la Oca

PRUEBAS UNITARIAS Y DE INTEGRACIÓN

Page 31: Juego de la Oca

PRUEBAS JUNIT

Se han realizado pruebas unitarias sobre las clases Jugador, Casilla y Tablero, con los siguientes criterios:

Sobre constructores: Se han realizado pruebas unitarias que comprueben los tipos de

parámetros que recibe, así como las precondiciones que tengan estos parámetros. Por ejemplo:

@Test(expected=ClaseError.class)public void testCasilla() {

// Se crea una Casilla de prueba con valor no válido para la variable posición:

Casilla c = new Casilla (0);}

Page 32: Juego de la Oca

PRUEBAS JUNIT

Sobre getters y setters: Sólo se han realizado pruebas unitarias en aquellos casos en los que se

realice alguna comprobación lógica.

Sobre equals, compareTo, hashCode: Sobre los métodos que ordenan colecciones de java, se ha hecho una

prueba con dos instancias que se consideran iguales y dos instancias que se consideran diferentes.

Se ha comprobado que estos métodos devuelven los valores esperados.  Sobre resto de métodos:

Se han realizado pruebas en las que se compara el resultado esperado (expected) y el resultado obtenido por los métodos.

Se ha simulado que un jugador llegue a casillas de todos los tipos, para comprobar que el resultado es el esperado.

Asimismo, se ha comprobado que la casilla final funciona según los requerimientos.

 

Page 33: Juego de la Oca

PRUEBAS JUNIT

Se puede consultar más información sobre las pruebas realizadas y el listado de errores en el siguiente enlace:

http://62.204.199.127/JAVA_UNED/alef/wiki/JUEGOGRUPO

 

Page 34: Juego de la Oca

MIEMBROS DEL GRUPO DE TRABAJO

Luis Oliva Cristina Morales Symon Oevering Miguel García Marta Estalayo

Tutor: Carlos Sánchez

Page 35: Juego de la Oca

FIN