Java - moviendo a la reina

 
Vista:
Imágen de perfil de FernandoCc

moviendo a la reina

Publicado por FernandoCc (3 intervenciones) el 30/04/2014 12:15:10
Hola a tod@s estoy intentando hacer un programa que simule los posibles movimientos de la reina en ajedrez. El tablero es 8x8. El usuario introduce las coordenadas de la reina, y partiendo de ahi hay que pintar en el tablero con un "*" los posibles movimientos de la reina. En las casillas por las cuales no se mueva la reina se escribe B o N (blanca o negra). Yo tengo pintado el tablero con los movimientos en horizontal de la reina, pero no consigo hacer los movimientos diagonales. Este es mi codigo:

***************************

public void pintarPosicionReina(int fila, int columna, Tablero t){



for(int i=1;i<9;i++){

for(int j=1;j<9;j++){

//para las filas impares ************************************************** *********
if(i%2!=0){
//la fila en la que este la reina estara toda en asterisco
if(i==fila){
System.out.print("*");
}else{
//la columna en la que este la reina toda en asterisco
if(j==columna)
System.out.print("*");

if(j!=columna){


if(j%2!=0)
System.out.print("B");

else
System.out.print("N");



}

}
//para las filas pares ************************************************** ***********
}else{
//la fila en la que este la reina estara toda en asterisco
if(i==fila){
System.out.print("*");


}else{
//la columna donde este la reina toda en asterisco
if(j==columna)
System.out.print("*");

if(j!=columna){


if(j%2!=0){
System.out.print("N");
}else{
System.out.print("B");
}
}

}

}


}
System.out.println();

}

}

************ fin **************

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

moviendo a la reina

Publicado por Tom (1831 intervenciones) el 30/04/2014 12:32:16
Para cualquier casilla:

- se calcula la diferencia en X (numero de escaques en horizontal) e Y (numero de escaques en vertical) con la que contiene a la reina, ignorando el signo (tomando el valor absoluto). Llámalos dX y dY

- si dX == dY la reina se puede mover a ese escaque.
- si dX == 0 ó dY == 0 la reina se puede mover a ese escaque.
- en cualquier otro caso, la reina no se puede mover ahí.

Si veis algún fallo en la lógica, comentadlo :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de FernandoCc

moviendo a la reina

Publicado por FernandoCc (3 intervenciones) el 30/04/2014 13:08:04
No entiendo muy bien tu logica, la salida que me piden seria esta:

para la fila 6 columna 3 seria así:

BN*NBNB*
NB*BNB*B
BN*NB*BN
*B*B*BNB
B***BNBN
********
B***BNBN
*B*B*BNB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

moviendo a la reina

Publicado por Tom (1831 intervenciones) el 30/04/2014 15:48:18
Joé ... si no es copia pega ...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* */
	public static void main(String args[]) {
		byte	tab[] = new byte[8 * (8 + 1)], color[] = {'B', 'N'};
		int	dx, dy;
 
		for(int f = 0, i = 0, t = 0; f < 8; f++, t ^= 1, i++) {
			for(int c = 0; c < 8; c++, i++, t ^= 1) {
				dx = Math.abs(c - (3 - 1));
				dy = Math.abs(f - (6 - 1));
 
				if(dx == dy || dx == 0 || dy == 0) {
					tab[i] = '*';
				} else {
					tab[i] = color[t];
				}
			}
			tab[i] = '\n';
		}
		System.out.print(new String(tab));
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de FernandoCc

moviendo a la reina

Publicado por FernandoCc (3 intervenciones) el 01/05/2014 00:37:32
Gracias, por mi mismo creo que no lo habría sacado en menos de 1 año.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar