Control de usuario
Patrocinadores
Estadísticas
Miembros:
334.520
Online:
656
Hilos:
1.380.409
Mensajes:
24.871.327
Stats

Índice de foros Off-Topic Miscelánea

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

¿Quieres hablar de algo que no tiene lugar en el resto de foros?

Moderadores: Thonolan, Campanilla

Teniente Dan
Avatar de usuario
Enamorado :P
 
Mensajes: 5146
Registrado: 28 Abr 2004
Ubicación: Alicante

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

Mensajepor Teniente Dan 04 Ene 2006 11:34

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) 205 veces
Me gusta mucho tener ideas contradictorias porque asi, aunque siempre estoy equivocado, siempre tengo la razón.

eTc_84
Avatar de usuario
Freedom Fighter
 
Mensajes: 26241
Registrado: 12 Feb 2005
Ubicación: Vigilando escondidos

Mensajepor eTc_84 04 Ene 2006 11:50

Atención, eTc_84 está baneado de toda la web, de modo que no podrá responder. Motivo del ban: 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 12: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
Avatar de usuario
Enamorado :P
 
Mensajes: 5146
Registrado: 28 Abr 2004
Ubicación: Alicante

Mensajepor Teniente Dan 04 Ene 2006 12:04

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
Avatar de usuario
Pues ná
 
Mensajes: 3439
Registrado: 03 Feb 2004

Mensajepor Sun tzu 04 Ene 2006 12:15

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
Avatar de usuario
Freedom Fighter
 
Mensajes: 26241
Registrado: 12 Feb 2005
Ubicación: Vigilando escondidos

Mensajepor eTc_84 04 Ene 2006 12:15

Atención, eTc_84 está baneado de toda la web, de modo que no podrá responder. Motivo del ban: 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
Avatar de usuario
Fly me to the moon
 
Mensajes: 2573
Registrado: 07 Jul 2003
Ubicación: 41.20N 2.03E Dial: 106.10

Mensajepor PakomeT 04 Ene 2006 12:31

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
Avatar de usuario
Freedom Fighter
 
Mensajes: 26241
Registrado: 12 Feb 2005
Ubicación: Vigilando escondidos

Mensajepor eTc_84 04 Ene 2006 12:40

Atención, eTc_84 está baneado de toda la web, de modo que no podrá responder. Motivo del ban: 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
Avatar de usuario
Ab absurdum
 
Staff
 
Mensajes: 10568
Registrado: 24 Jun 2004
Fotos: 2

Mensajepor Maestro Yoda 04 Ene 2006 12:59

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

zheo
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 8572
Registrado: 13 Abr 2004
Ubicación: Silent Hill

Mensajepor zheo 04 Ene 2006 13:15

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
Avatar de usuario
Freedom Fighter
 
Mensajes: 26241
Registrado: 12 Feb 2005
Ubicación: Vigilando escondidos

Mensajepor eTc_84 04 Ene 2006 13:30

Atención, eTc_84 está baneado de toda la web, de modo que no podrá responder. Motivo del ban: 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