Vous êtes sur la page 1sur 6

Práctica: Manejo de arrays

Ingeniería Técnica de Telecomunicación


Curso 2005/2006

23 de diciembre de 2005

Índice
1. Objetivos 1

2. El Tablero de Ajedrez (a entregar) 1


2.1. La clase Casilla 2
2.2. La clase Tablero 2
2.3. La clase Caballo 3

3. Diseño del problema 3

4. La clase PruebaTablero 4

5. Evaluación 5

6. Normas de entrega 5

1. Objetivos
Esta práctica tiene como objetivo repasar los conceptos relacionados con el
uso y operaciones con vectores y matrices en el lenguaje Java. En esta práctica
también se refuerzan los conocimientos de orientación a objetos trabajando con
matrices de objetos. Como objetivo secundario, se repasará la entrada de
argumentos a programas Java.

2. El Tablero de Ajedrez (a entregar)


Se pretende crear un tablero de ajedrez, por lo que será necesario trabajar con una
matriz de dos dimensiones sobre la cual se irán añadiendo casillas blancas y negras de
manera alternada. Las casillas de igual color no podrán aparecer juntas ni horizontal, ni
verticalmente. Al inicializar el tablero, se colocarán en él cuatro caballos en las posiciones
de inicio de partida, y se les solicitarán ciertos movimientos. Se trata de comprobar si
dichos movimientos son o no posibles, y en su caso, efectuarlos. Para lograr el
cumplimiento de la práctica se muestran a continuación las clases de ayuda que sirven
para completar la misma.
Práctica de manejo de Arrays

2.1. La clase Casilla


La clase casilla servirá para crear el tablero de ajedrez con las casillas de color
blanco o negro de forma alternada, su código (incompleto) es el siguiente:

public class Casilla {


static final char NEGRO = 'N';
static final char BLANCO = 'B';

private char color;


}

Una casilla deberá cumplir los siguientes requisitos:

 Consultar el color de una casilla.


 Cambiar el color de una casilla.
 Comparar una casilla con otra, teniendo en cuenta que dos casillas serán iguales
si su color coincide.

2.2. La clase Tablero


La clase Tablero es la clase principal que permite crear un tablero bien formado,
permitiendo solamente la ubicación de casillas con el color alternado y correcto. Un
tablero siempre será cuadrado, la dimensión del mismo será de 64 casillas.

El alumno deberá diseñar adecuadamente la clase Tablero, considerando lo siguiente:

 El constructor de la clase Tablero es el encargado de :

• Rellenar completamente el tablero con casillas de forma correcta, es decir,


con colores alternados de tal forma que la primera casilla del tablero
(posición (1,1)) sea siempre blanca.
• No deberá quedar ninguna celda de la matriz sin casilla asignada.
• Este método recibirá un único valor que será la dimensión del tablero, que
permite crear una matriz cuadrada.
• El número de caballos en el tablero será fijo. Tendremos cuatro caballos,
dos se colocarán en posiciones fijas, y los otros dos en posiciones
aleatorias. Los caballos en posiciones fijas son :
o Caballo 1 situado en (2,1)
o Caballo 2 situado en (7,1)
 Existirá un método moverCaballo(...) que tomará el número del caballo que se
desea mover y la posición de destino. Podrán indicarse números de Caballos y
posiciones no válidas. Se devolverá un valor indicando si el movimiento se ha
producido o no.
 Deberán deducirse los métodos necesarios para llevar a cabo todas estas tareas,
incluyendo los modificadores de acceso de dichos métodos. En todo momento
deberá respetarse el principio de encapsulamiento.

Ingeniería Técnica en Telecomunicación (Telemática y Sistemas) 2


Práctica de manejo de Arrays

2.3. La clase Caballo


El Caballo es un tipo de pieza cuyo movimiento se caracteriza de la siguiente forma:
• Su desplazamiento por el tablero no tiene límite de casillas (dentro de los
límites del tablero).
• Su movimiento consta de dos pasos, el primero es hacia una casilla vecina
con una trayectoria en sentido vertical u horizontal, y el segundo paso,
manteniendo la misma trayectoria, hacia una de las casillas vecinas en
forma de diagonal.
• Un Caballo puede saltarse piezas, por lo que su movimiento será factible si
la casilla destino se halla libre.

La creación de un caballo viene determinada por la posición dentro del Tablero (la
esquina superior izquierda se corresponde con la posición 1,1).
El método validarMoverCaballo de la clase Caballo sirve para desplazar la figura a
otra parte del tablero siempre y cuando la nueva posición sea correcta. Se realizarán las
comprobaciones oportunas antes de mover la pieza, y devolverá si la operación se ha
podido completar o no. En caso afirmativo, la posición del caballo reflejará dicho
movimiento. El caballo deberá interaccionar con el tablero para saber si su movimiento es
posible o no.
Deberá partirse del siguiente código para la clase Caballo, y no se podrán añadir
atributos a la clase:

public class Caballo {


private int posX;
private int posY;

public boolean validarMoverCaballo(....


}

3. Diseño del problema


A continuación proponemos un diseño del problema (sin especificar tipos de datos
ni modificadores), deberá respetarse la nomenclatura tanto de los atributos como de los
métodos que aparecen reflejados en el diagrama de clases (Figura 1).

Figura 1: Diagrama de Clases

Ingeniería Técnica en Telecomunicación (Telemática y Sistemas) 3


Práctica de manejo de Arrays

Se podrán añadir métodos adicionales para evitar redundancia en el código, pero en


ningún caso se podrá eliminar o añadir atributos a las clases o modificar la funcionalidad
de los métodos requeridos.

4. La clase PruebaTablero
Esta clase se encargará de recoger los argumentos para poder crear el Tablero
adecuadamente. Tras crearlo, probará varios movimientos de Caballos, en dichas
pruebas se incluirán movimientos de Caballos inexistentes, así como casillas de destino
que se salgan de los límites del tablero.

public class PruebaTablero {

public static void main(String[] args) {


if (args.length != 2) {
System.out.println("(1)Uso: java PruebaTablero
<dimension> <num caballos>");
}
else {
int dimension = Integer.parseInt(args[0]);
int nCaballos = Integer.parseInt(args[1]);
Tablero tablero = new Tablero(dimension, nCaballos);
tablero.mostrar();
if ( tablero.moverCaballo(0, 3, 3)) {
System.out.println("(1)Movimiento correcto ");
tablero.mostrar();
} else {
System.out.println("(1)Movimiento incorrecto ");
}
if ( tablero.moverCaballo(1, 5, 5)) {
System.out.println("(1)Movimiento correcto ");
tablero.mostrar();
} else {
System.out.println("(1)Movimiento incorrecto ");
}

}
}
}

Si se desea un tablero de 8x8 y con 4 caballos, la llamada sería:

java PruebaTablero 8 4

Y la salida por pantalla sería de la forma:

(2)Rellenando tablero ........ hecho.


(2)Colocando caballos: 1 2 3 4 hecho.
(2)El tablero es:

Ingeniería Técnica en Telecomunicación (Telemática y Sistemas) 4


Práctica de manejo de Arrays

(2) B (N) B N B N (B) N


(2) N B N B N (B) N B
(2) B N B N B N B N
(2) N B N B N B N B
(2) B N B N B N B N
(2) N B N B N B N B
(2) B (N) B N B N B N
(2) N B N B N B N B
(2)Los caballos estan en:
(3)Caballo en (2, 1)
(3)Caballo en (7, 1)
(3)Caballo en (2, 7)
(3)Caballo en (6, 2)

Primer movimiento

(2)Tratando de mover Caballo...


(3) Voy a mover caballo desde (2, 1) a la posicion (3, 3).
(3)Calculando los 8 posibles saltos y comprobando coincidencias
(3)Salto 1 (4 , 2 ) No Coincide
(3)Salto 2 (4 , 0 ) No Coincide
(3)Salto 3 (0 , 2 ) No Coincide
(3)Salto 4 (0 , 0 ) No Coincide
(3)Salto 5 (3 , 3 ) Coincide, Salto Posible

(3) Resultado: salto factible!.


(1)Movimiento correcto
(2)El tablero es:
(2) B N B N B N (B) N
(2) N B N B N (B) N B
(2) B N (B) N B N B N
(2) N B N B N B N B
(2) B N B N B N B N
(2) N B N B N B N B
(2) B (N) B N B N B N
(2) N B N B N B N B
(2)Los caballos estan en:
(3)Caballo en (3, 3)
(3)Caballo en (7, 1)
(3)Caballo en (2, 7)
(3)Caballo en (6, 2)

Segundo movimiento

(2)Tratando de mover Caballo...


(3) Voy a mover caballo desde (7, 1) a la posicion (5, 5).
(3)Calculando los 8 posibles saltos y comprobando coincidencias
(3)Salto 1 (9 , 2 ) No Coincide
(3)Salto 2 (9 , 0 ) No Coincide
(3)Salto 3 (5 , 2 ) No Coincide
(3)Salto 4 (5 , 0 ) No Coincide
(3)Salto 5 (8 , 3 ) No Coincide

Ingeniería Técnica en Telecomunicación (Telemática y Sistemas) 5


Práctica de manejo de Arrays

(3)Salto 6 (8 , -1 ) No Coincide
(3)Salto 7 (6 , 3 ) No Coincide
(3)Salto 8 (6 , -1 ) No Coincide
(3) Posicion incorrecta, imposible mover.
(1)Movimiento incorrecto

(1) Mensajes generados por la clase PruebaTablero


(2) Mensajes generados por la clase Tablero
(3) Mensajes generados por la clase Caballo

5. Evaluación
La entrega de esta práctica es individual. Para evaluar esta práctica se observarán los
siguientes criterios:

 Los programas entregados deberán resolver los problemas propuestos en los


enunciados.
 El diseño realizado deberá estar en concordancia con la orientación a objetos.
 Se deberá respetar el principio de encapsulamiento, especialmente en las clases
Tablero y Caballo.
 La matriz que almacena las casillas deberá tener el tamaño adecuado, nunca más
que el estrictamente necesario.
 Los archivos Java entregados deberán compilar correctamente.
 Se indicará en el tag @author el nombre del alumno.
 Los programas deberán incluir comentarios y comentarios javadoc.

6. Normas de entrega
Se entregará un fichero cuyo nombre obligatoriamente será p10-niu.zip, que contendrá los
ficheros Tablero.java, Casilla.java y Caballo.java. Este fichero deberá entregarse
utilizando la aplicación de Aula Global.

La fecha límite de entrega es el 23 de Enero del 2006.

Ingeniería Técnica en Telecomunicación (Telemática y Sistemas) 6

Vous aimerez peut-être aussi