ayuda con ajedrez y movimiento de la reina (c++)

Cualquier tema que no tenga cabida en el resto de foros
Teniente Dan
Enamorado :P
5.162 mensajes
desde abr 2004
en Alicante

Hola a todos,

vereis estoy haciendo un programa en el cual necesito calcular los posibles movimientos de la reina de ajedrez desde una posicion inicial

estoy considerando que el tablero es una matriz de 8x8 pero el problema esta en q no soy capaz de encontrar alguna regla que me determine que una casilla es valida para que la reina se mueva ahi

no se si me explico

sino lo entendeis os dejo un pdf, es el ultimo ejercicio

a ver si a alguien se le ocurre como pq a mi no cawento

salu2
Adjuntos
p6.pdf.zip
(0 Bytes) 294 veces
Me gusta mucho tener ideas contradictorias porque asi, aunque siempre estoy equivocado, siempre tengo la razón.

eTc_84
Freedom Fighter
26.240 mensajes
desde feb 2005
en Vigilando escondidos

eTc_84 está baneado por "adiós"
Podrías hacer una manera... digamos con "ángulos", 0+Pi/4*n. Si la coordenada cumple eso, entonces es una solución posible.
//Borrada otra solución porque creo que era erronea.
Ultima edición por eTc_84 el 04 ene 2006 13:07, editado 1 vez
Imagen
1st RULE: You do not talk about FIGHT CLUB.
2nd RULE: You DO NOT talk about FIGHT CLUB.
3rd RULE: If someone says "stop" or goes limp, taps out the fight is over.
4th RULE: Only two guys to a fight.
5th RULE: One fight at a time.
6th RULE: No shirts, no shoes.
7th RULE: Fights will go on as long as they have to.
8th RULE: If this is your first night at FIGHT CLUB, you HAVE to fight.
Imagen
Hacerse viejo es una mierda, pero es mejor que la alternativa
Los pequeños y grandes lujos se han vuelto artículos de primera necesidad.
Sabed que vuestro pecado os alcanzará (Números 32:23).

Teniente Dan
Enamorado :P
5.162 mensajes
desde abr 2004
en Alicante

uff con angulos no se plantearlo y respecto a la otra solucion yo tengo ya tengo un procedimiento para comprobar las que las coordenadas sean coherentes al tablero

pero lo que falta es por ejemplo, la poscion inicial es h5 y que el algoritmo recorra la matriz y me diga esbriendo en la casilla una p
que me puedo mover a esa casilla

pero no encuentro la manera de diferenciar las casillas validas de las no validas
Me gusta mucho tener ideas contradictorias porque asi, aunque siempre estoy equivocado, siempre tengo la razón.

Sun tzu
Pues ná
3.441 mensajes
desde feb 2004

Yo hice algo parecido en Java y con alfiles; para comprobar si una casilla es valida supongo q sera conforme a los movimientos de la reina:
- Q este en la misma fila
- Q este en la misma columna
- Q se mueva en diagonal, para ello te copio la explicacion q puse en mi ejercicio:
/*los alfiles mueven en diagonal con lo que el valor absoluto de la resta de las coordenadas del origen y de la nueva posicion deben ser iguales*/

Y ahora lo pienso xq no se q coño queria decir cuando lo hice :Ð

eTc_84
Freedom Fighter
26.240 mensajes
desde feb 2005
en Vigilando escondidos

eTc_84 está baneado por "adiós"
Hay la manera chapucera, que sería coger las 8 casillas colindantes y llamar a la funcion para cada una hasta que se terminara el tablero.

P.ej.
AAA
AXA
AAA

X=Reina
La primera A está situada en la posición Xx-1, Xy-1, coges el (-1,-1) como desplazamiento.
desplaza(x,y,-1,-1)
y luego las otras 7 igual XD


funcion desplaza(int x,int y,int x_desp,int y_desp) {
x+=x_desp;
y+=y_desp;
if (dentroTablero(x,y)) {
escribir P en (x,y)
desplaza(x,y,x_desp,y_desp);
}
}

Si tienes que recorrer, ahora mismo no se me ocurre nada diferente de los ángulos.
Imagen
1st RULE: You do not talk about FIGHT CLUB.
2nd RULE: You DO NOT talk about FIGHT CLUB.
3rd RULE: If someone says "stop" or goes limp, taps out the fight is over.
4th RULE: Only two guys to a fight.
5th RULE: One fight at a time.
6th RULE: No shirts, no shoes.
7th RULE: Fights will go on as long as they have to.
8th RULE: If this is your first night at FIGHT CLUB, you HAVE to fight.
Imagen
Hacerse viejo es una mierda, pero es mejor que la alternativa
Los pequeños y grandes lujos se han vuelto artículos de primera necesidad.
Sabed que vuestro pecado os alcanzará (Números 32:23).

PakomeT
Eolianus Veteranus
4.184 mensajes
desde jul 2003
en 39.88N 32.89E

A mi se me ocurre otra forma, si lo que quieres es moverte 3 casillas en diagonal a la derecha, pues eso no es otra cosa que 3 casillas arriba + 3 casillas a la derecha, y vas a parar al mismo punto. Tambien es un poco chapuza, pero el destino es el mismo xD

eTc_84
Freedom Fighter
26.240 mensajes
desde feb 2005
en Vigilando escondidos

eTc_84 está baneado por "adiós"
Lo de los ángulos... XDXDXD
Si Xx-Ax o Xy-Ay son cero, válidas
Si no, miras si los valores que te han dado, el valor absoluto de su tangente es uno, si lo es son validos.
Si no, no son válidos XD
Imagen
1st RULE: You do not talk about FIGHT CLUB.
2nd RULE: You DO NOT talk about FIGHT CLUB.
3rd RULE: If someone says "stop" or goes limp, taps out the fight is over.
4th RULE: Only two guys to a fight.
5th RULE: One fight at a time.
6th RULE: No shirts, no shoes.
7th RULE: Fights will go on as long as they have to.
8th RULE: If this is your first night at FIGHT CLUB, you HAVE to fight.
Imagen
Hacerse viejo es una mierda, pero es mejor que la alternativa
Los pequeños y grandes lujos se han vuelto artículos de primera necesidad.
Sabed que vuestro pecado os alcanzará (Números 32:23).

Maestro Yoda
Ab absurdum

Staff
10.586 mensajes
y 2 fotos
desde jun 2004

Esto está tirao XD . Dame un ratito y te hago hasta la parte voluntaria.

zheo
MegaAdicto!!!
8.572 mensajes
desde abr 2004
en Silent Hill

Juer, ¿he llegado a leer ángulos?
Si que os gusta a algunos complicaros la vida :P :P

A ver, ¿conoces la posición inicial de la reina no? Supongamos que está en la posición [i,j]
Pues a partir de ahí, todas las casillas [i+1 ... 7, j] [0...i-1,j] son posiciones válidas. Ese es el movimiento horizontal. Ídem para el movimiento vertical para la j.

Por supuesto estoy suponiendo un tablero de 8x8, pero todo esto es aplicable a un tablero de cualquier tamaño.

Para las diagonales la cosa está en unir los dos movimientos con todas sus combinaciones, las casillas válidas serán
[i+1 ...7, j+1 ... 7]
[0...i-1, 0... j-1]
[i+1...7, 0 ... j-1]
[0 ... i-1, j+1 ... 7]

para hacer las 4 diagonales.

Lo único que has de hacer es una matriz de 8x8 y marcar esas casillas válidas, para luego imprimir cada casilla del tablero de forma correcta, o bien puedes calcularlo "on the fly" cuando pulses la opción de imprimir. Lo primero ocupa más memoria pero es más cómodo a la hora de imprimir (sólo tienes que recorrer la matriz e imprimir '-' o '?' según la casilla esté marcada o no) Pero tienes que acordarte de borrar la matriz de nuevo al mover la reina.

Y si quieres hacer la mayor burrada de tu vida, busca sobre algoritmos de búsqueda en espacios de estados, que es una rama de la intelligencia artificial, pero te aconsejo que NO te molestes tanto para una práctica así ;)
De hecho una BEE es la otra cosa que te recomendaba eTc_84,(lo de recorrer las casillas colindantes y todo eso) lo que pasa que sin seguir ninguna optimización (poda o heurística)

eTc_84
Freedom Fighter
26.240 mensajes
desde feb 2005
en Vigilando escondidos

eTc_84 está baneado por "adiós"
zheo escribió:Juer, ¿he llegado a leer ángulos?
Si que os gusta a algunos complicaros la vida :P :P

Fui yo [carcajad], era para el caso de las diagonales... ahora que lo pienso.. hay una forma más fácil.. si la resta Xx-Ax y Xy-Ay son iguales, y así eliminas ángulos y leches XD
De todas formas lo que yo explicaba sobre los ángulos era para saber si una posición [x,y] pertenecía a las posibles de la Reina, no para encontrarlas todas [oki]
Imagen
1st RULE: You do not talk about FIGHT CLUB.
2nd RULE: You DO NOT talk about FIGHT CLUB.
3rd RULE: If someone says "stop" or goes limp, taps out the fight is over.
4th RULE: Only two guys to a fight.
5th RULE: One fight at a time.
6th RULE: No shirts, no shoes.
7th RULE: Fights will go on as long as they have to.
8th RULE: If this is your first night at FIGHT CLUB, you HAVE to fight.
Imagen
Hacerse viejo es una mierda, pero es mejor que la alternativa
Los pequeños y grandes lujos se han vuelto artículos de primera necesidad.
Sabed que vuestro pecado os alcanzará (Números 32:23).

Siguiente

Volver a Miscelánea

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 1 invitado