[ Foro de Java ]

ejercicio_universidad

06-Jun-2018 20:13
Invitado (rafael.made)
0 Respuestas

1. Juego de cartas HAMATE
En esta práctica se pretende desarrollar el juego HAMATE. Se trata de un juego, usuariomaquina,
en el que ambos jugadores van situando sus cartas en un tablero cuadrado de 12 celdas
(3X4). Cada una de las cartas tiene las siguientes características:
? Figura de la carta.
? Valores de la carta: se utilizarán para el reto entre cartas.
o Valor_reto_vertical: número entero entre 1 y 7.
o Valor_ reto_horizontal: número entero entre 1 y 7.
? Color: Azul o Rojo. Las cartas son reversibles, el color indicará o simulará de qué lado
está la carta e identifica al jugador que la tiene en ese momento del juego.
Los jugadores, con 6 cartas cada uno, van colocando sus cartas en el tablero alternativamente
tratando de ganar las cartas del contrario, cambiándolas de color, y hasta completar el tablero.
Para ganar una carta deben situarse en uno de los cuatro lados de esta, reto_izquierda,
reto_derecha, reto_arriba o reto_abajo y superar el valor de la misma en dicho lado, por
ejemplo: si la carta que está en la celda posición (0, 1) tiene Valor_ reto_vertical 5 y la carta
que la reta se sitúa en la celda posición (1,1) tiene Valor_ reto_vertical 6, el reto se gana y la
carta de la celda (0, 1) cambia su color.
Al finalizar gana el jugador que tiene más cartas de su color en el tablero. El ganador acumula
tantos puntos como cartas tenga de su color. En el apartado 1.1 se describe más detalladamente.
Cuando un jugador quiere jugar introduce su DNI y el sistema comprueba si está dado de alta
(mostrando sus datos) o le solicita sus datos para darlo de alta. Se utilizará un Hashmap para
almacenar los datos de los jugadores del torneo, que será serializado al salir de cada ejecución:
a) Se guardan los datos de los jugadores del sistema, incluyendo partidas jugadas y
ganadas, y número puntos obtenidos por partida y en total.
b) Incluir la opción de crear una ficha de un jugador, dado su DNI. Esta opción crea un
fichero de texto con todos los datos del mismo (personales, partidas, puntos).
c) Incluir la opción de visualizar, en cualquier momento, el ranking de jugadores. Se
mostrará una tabla con los nombres de los jugadores ordenados por puntuación total.
2
Funcionamiento del juego:
1. Antes de jugar: El programa comienza asignando una mano de 6 cartas del mazo a cada uno
de los jugadores. Una vez que una carta sea asignada a uno de los jugadores, máquina o
usuario, se debe dar valor al color de ésta para indicar de qué lado está o quién la tiene.
2. Inicio del juego: A continuación, el jugador coloca la primera carta, en una de las celdas de
la matriz. En la siguiente imagen se ve cómo se puede representar la matriz:
0 1 2 3
0
1
2
3. Desarrollo del juego: La máquina y el usuario van colocando cartas en el tablero y
retándose, alternativamente y como se describe a continuación, hasta que el tablero esté
lleno. Una vez que se ha colocado una carta en el tablero, no se mueve de su posición, pero
puede cambiar de jugador (color) como resultado de un reto. Al finalizar, gana el juego el
jugador que tenga mayor número de cartas de su color.
¿Cómo se colocan las cartas en el tablero?
? En el turno de la máquina, esta debe situar una carta seleccionada aleatoriamente en una
posición (fila, columna), también aleatoria, del tablero (Modo básico). En el modo
avanzado, la máquina deberá, al menos1
, buscar una posición del tablero en la que puede
atacar y ganar o evitar perder su carta en caso de que no sea posible.
? En el turno del usuario, el usuario indica la celda (fila, columna), en la que quiere colocar
la carta y si reta a una de las cartas de la máquina situadas en el tablero. En caso de que
no haya ninguna carta a la que pueda retar y ganar, seleccionará una de las celdas libres
para situar su carta tratando de evitar perderla.
¿Cómo se resuelve un reto?
Durante su turno de jugada, un jugador puede retar a una de las cartas del tablero. Para ello
situará su carta en una celda contigua en el tablero a la carta a la que reta, es decir, situará
su carta a la izquierda, derecha, arriba o abajo de la misma. Para ganar el reto, la carta debe
ser del contrario y su valor para el reto (vertical para izquierda o derecha y horizontal para
arriba o abajo) correspondiente debe ser mayor que el valor en la otra carta. En caso de
ganar el reto, ganará la carta retada por lo que cambiará su color.
En el caso de que un jugador, llegado su turno, no tenga posibilidad de ganar ningún reto,
situará su carta en una de las celdas libres. En el caso de que todos los lados de la celda

1 Opcionalmente, se podrá incorporar tanta inteligencia como se desee.
3
seleccionada estén ocupados, debe retar siempre a uno de los lados e intentar evitar perder
la carta, pudiendo retarse a sí mismo.
4. Fin del juego. El juego finaliza cuando todas las celdas del tablero estén ocupadas. Gana el
juego el jugador (color) que tiene más cartas en el tablero.
Para la implementación de la práctica se crearán los siguientes objetos:
1. Carta: tendrá los siguientes atributos:
? Figura de la carta.
? Valor_reto_vertical: número entero entre 1 y 7.
? Valor_ reto_horizontal: número entero entre 1 y 7.
? Color: Azul o Rojo.
2. Mazo de Cartas: ArrayList con todas las cartas. Será el mazo desde el que se repartirán
las cartas a los jugadores. El mazo de 110 cartas que utiliza el programa será generado
en cada ejecución, partiendo de las 110 imágenes que se facilitan y generando
aleatoriamente los valores izquierdo y derecho en cada una de ellas.
3. Jugador: tendrá los siguientes atributos:
? Mano: ArrayList de cartas. Almacenará las cartas del jugador en cada momento del
juego.
? Color: Azul o Rojo.
Esta clase tiene dos clases hijas:
3.1 JugadorMáquina:
? Modo de juego: Básico y Avanzado.
3.2 JugadorUsuario:
? Nombre.
? Apellidos.
? NIF
? Fecha de nacimiento
4. Tablero: Tiene los siguientes atributos:
? Tablero: Array o ArrayList de 12 cartas (3 filas y 4 columnas). Almacenará la
situación de la partida en cada momento del juego.
La aplicación tiene que hacer uso de la clase JugadorException para la utilización de
excepciones (se pueden añadir todos los mensajes de error que se consideren necesarios). Al
menos se tienen que controlar los siguientes errores:
• NIF incorrecto.
• Usuario mayor de edad.
• Para poder jugar hay que comprobar que se ha seleccionado una carta de la mano y
se ha indicado si se reta a izquierda o derecha.
4
Ejemplo de utilización: Si detectamos que un jugador ha introducido un NIF incorrecto,
ejecutaremos una sentencia como la siguiente:
throw new JugadorException(JugadorException.NIF_INCORRECTO);
public class JugadorException extends Exception {

public static final String NIF_INCORRECTO = "El NIF proporcionado es
incorrecto.";
public static final String EDAD_INCORRECTA = "El jugador debe ser mayor
de edad para poder jugar".
public static final String CARTA_NO_SELECCIONADA = "No se ha seleccionado
ninguna carta para jugar.";
public static final String RETO_INCORRECTO = "No se ha seleccionado la
dirección del reto".

public JugadorException() {
super("Se ha producido una excepción en la aplicación.");
}

public JugadorException (String txt) {
super(txt);
}
}
Una vez codificadas las clases de lógica de negocio hay que realizar una aplicación Swing de
forma que permita jugar a la aplicación. Junto a este enunciado se proporcionan imágenes para
crear todas las cartas de la baraja.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)