La tarea va a consistir en modelar el movimiento de una reina de ajedrez por el tablero de dicho juego. Ilustración que muestra la posición inicial de las reinasIlustración que muestra el movimiento de la reina en el tablero del ajedrez
Imágenes obtenidas de la web: 123ajedrez.com (Enrique Moreno)
En la primera imagen puedes observar cuál es el posicionamiento inicial válido para las reinas dependiendo de su color.
En la segunda imagen puedes apreciar cuáles son los movimientos válidos para una reina: horizontalmente, verticalmente y en diagonal
En este repositorio GitHub hay un esqueleto de proyecto gradle que ya lleva incluidos todos los test necesarios que el programa debe pasar y las dependencias, entre ellas la de la librería entrada.
Para ello te pongo un diagrama de clases para el mismo y poco a poco te iré explicando los diferentes pasos a seguir:
- Lo primero que debes hacer es un fork de este repositorio.
- Clona tu repositorio remoto recién copiado en GitHub a un repositorio local que será donde irás realizando lo que a continuación se te pide. Modifica el archivo
README.md
para que incluya tu nombre en el apartado "Alumno". Realiza tu primer commit.
- Crea un enumerado llamado
Direccion
que contenga los literales:NORTE
,NORESTE
,ESTE
,SURESTE
,SUR
,SUROESTE
,OESTE
,NOROESTE
. Realiza un commit.
- Crea un enumerado llamado
Color
que contenga los literales:BLANCO
yNEGRO
. Los literales estarán parametrizados y a cada uno le pasaremos la representación en cadena de los mismos: Blanco o Negro. Realiza un commit. - Crea el atributo
cadenaAMostrar
(String). Realiza un commit. - Crea el constructor con la visibilidad adecuada, que almacenará en el atributo anterior la cadena que se le pase por parámetro. Realiza un commit.
- Crea el método
toString
que devolverá la representación en forma de cadena del literal. Realiza un commit.
- Crea la clase
Posicion
. Crea los atributosfila
(int) ycolumna
(char) con la visibilidad adecuada. Realiza un commit. - Crea los métodos
get
yset
para los atributos. Recuerda que para el métodoset
se debe tener en cuenta que los valores indicados sean correctos (las filas van del 1 al 8 -ambos inclusive- y las columnas de la 'a' a la 'h' -ambas inclusive-) y si no se lance una excepción del tipoIllegalArgumentException
con el mensaje adecuado. En caso de que la posición no sea la correcta no deben modificarse los atributos. Realiza un commit. - Crea un constructor para esta clase que acepte como parámetros la
fila
y lacolumna
y que los asigne a los atributos si son correctos. Si no son correctos debe lanzar una excepción del tipoIllegalArgumentException
con el mensaje adecuado. Para ello utiliza los métodosset
anteriormente creados. Realiza un commit. - Crea el constructor copia para esta clase. Realiza un commit.
- Crea los métodos
equals
yhashCode
para esta clase. Realiza un commit. - Crea el método
toString
que devolverá un String y será la representación de la fila y la columna de forma adecuada fila=valorFila, columna=valorColumna. Realiza un commit.
- Crea la clase
Reina
cuyos atributos serán uncolor
(del tipo enumeradoColor
) yposicion
(de la clasePosicion
), con la visibilidad adecuada. Realiza un commit. - Crea los métodos
get
yset
para cada atributo con la visibilidad adecuada. Los métodosset
siempre comprobarán la validez de los parámetros pasados y si no son correctos deberá lanzar la excepción adecuada con el mensaje adecuado. Realiza un commit. - Crea un constructor por defecto para esta clase que cree una reina blanca en la posición '1d'. Realiza un commit.
- Crea un constructor para la clase que acepte como parámetro el
color
y que creará una reina de dicho color cuya posición será '1d' si es blanca o '8d' si es negra. Realiza un commit. - Crea el método
mover
que acepte como parámetro unaDireccion
y la cantidad depasos
a mover en dicha dirección. Los pasos deben estar comprendidos entre 1 y 7 (ambos inclusive) y la dirección no puede ser nula o de lo contrario debe lanzar una excepción adecuada (NullPointerException
oIllegalArgumentException
) con el mensaje adecuado. Si no puede realizar dicho movimiento, debido a que la reina se sale del tablero, se debe lanzar una excepción del tipo OperationNotSupportedException con un mensaje adecuado y no modificará la posición de la reina. Realiza un commit. - Crea el método
toString
que devuelva unString
que será la representación de dicho objeto (color y posición). Realiza un commit.
- Crea la clase de utilidades
Consola
. Realiza un commit. - Crea el constructor para esta clase con su visibilidad adecuada, teniendo en cuenta que será una clase de utilidades que sólo contendrá métodos estáticos. Realiza un commit.
- Crea el método
mostrarMenu
que mostrará el menú con las opciones de nuestra aplicación: crear reina por defecto, crear reina eligiendo el color, mover y salir. Realiza un commit. - Crea el método
elegirOpcionMenu
que mostrará un mensaje para que elijamos una opción del menú anteriormente creado y nos pedirá que introduzcamos por teclado la opción hasta que ésta sea valida. Devolverá la opción elegida. Realiza un commit. - Crea el método
elegirOpcion
que nos pedirá que elijamos un color mientras éste no sea válido y dependiendo de la opción elegida devolverá un color u otro. Realiza un commit. - Crea el método
mostrarMenuDirecciones
que mostrará por consola un menú con las diferentes direcciones que podemos elegir. Realiza un commit. - Crea el método
elegirDireccion
que mostrará un mensaje indicando que elijamos una dirección del menú anteriormente creado y nos pedirá que introduzcamos por teclado la opción hasta que ésta sea valida. Devolverá la dirección elegida. Realiza un commit. - Crea el método
elegirPasos
que mostrará un mensaje indicando que elijamos el número de pasos a mover, nos lo pedirá y devolverá el número de pasos introducidos. Realiza un commit. - Crea el método
despedirse
que mostrará un mensaje de despedida de nuestra aplicación.
- Crea el atributo de clase
reina
. Realiza un commit. - Crea el método
ejecutarOpcion
que dependiendo de la opción pasada como parámetro, actuará en consecuencia. Realiza un commit. - Crea el método
crearReinaDefecto
que asignará al atributo de clase reina una nueva instancia de una reina creada con el constructor por defecto. Realiza un commit. - Crea el método
crearReinaColor
que asignará al atributo de clase reina una nueva instancia de una reina creada con el constructor al que le pasamos el color. Realiza un commit. - Crea el método
mover
que mostrará un menú con las posibles direcciones, nos preguntará por la dirección y la cantidad de pasos a mover y moverá la reina según esos parámetros. Realiza un commit. - Crea el método
mostrarReina
que nos mostrará la información de la reina si ésta está creada o de lo contrario nos informará de ello. - Crea el método
main
que será el método principal de nuestra aplicación y deberá iterar mostrando el menú principal, pidendo la opción y ejecutándola mientras no elijamos salir, en cuyo caso mostrará un mensaje de despedida y nuestra aplicación finalizará. Realiza un commit y realiza el push a tu repositorio remoto en GitHub.
- La indentación debe ser correcta en cada uno de los apartados.
- Los identificadores utilizados deben ser adecuados y descriptivos.
- Se debe utilizar la clase
Entrada
para realizar la entrada por teclado que se encuentra como dependencia de nuestro proyecto en la libreríaentrada
. - El programa debe pasar todas las pruebas que van en el esqueleto del proyecto y toda entrada del programa será validada, para evitar que el programa termine abruptamente debido a una excepción.
- La corrección ortográfica tanto en los comentarios como en los mensajes que se muestren al usuario.