• Miércoles 6 de Noviembre de 2024, 19:42

Autor Tema:  Re: El movimiento del caballo en C++ (no me da bien) PLEASE  (Leído 795 veces)

Nuria

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: El movimiento del caballo en C++ (no me da bien) PLEASE
« en: Lunes 26 de Mayo de 2003, 22:25 »
0
Alguien me puede ayudar?
Tengo que entregar mañana dia 27 de Mayo el proyecto de C y no consigo resolverlo. Ya estoy desesperada.

Como ya puse anteriormente se trata de realizar un programilla que en un tablero 8 X 8 el usuario elija la casilla inicial y la casilla final, y el programa le tiene que decir los movimientos minimos que el caballo ha de hacer para llegar.

Llevo dos semanas intentando todo lo que se me ocurre y lo mejor que he conseguido es lo que hay en el archivo adjunto.

Alguien me puede ayudar a resolver lo que me queda? Aunque solo sea una orientación, please. Por tonteria que os parezca, si teneis una idea que me pueda ayudar os lo agradeceré mucho.

NOTA: Lo envio por escrito y por arxivo
GRACIAS a TODOS.

-------------------------------------------------------------------------------------
AQUI OS ENVIO EL NUEVO CODIGO QUE HE CONSEGUIDO HACER , PERO NO TENGO NADA MAS
-------------------------------------------------------------------------------------
**************************************************************************************************************************

#include <stdio.h>
typedef int tauler[8][9];
void tauler_inici (tauler tauler1, int columna,int fila);
void tauler_matriu (tauler tauler1, int columna_ini, int fila_ini, int columna_fi, int fila_fi);
int mov (tauler tauler1, int columna, int fila);
void main()
{
char repetir='n';
do
{
tauler tauler1;
char error='n';
int columna_ini, fila_ini, columna_fi, fila_fi, moviments;
tauler_inici (tauler1, 8,;
printf ("nnDel tauler anterior diguens de quin punt a quin altre vols desplasar el caball.");
do
{
printf ("n- Columna inicial -> ");
scanf ("%d", &columna_ini);
printf ("- Fila inicial -> ");
scanf ("%d", &fila_ini);
printf ("- Columna final -> ");
scanf ("%d", &columna_fi);
printf ("- Fila final -> ");
scanf ("%d", &fila_fi);
if ((columna_ini>7)||(columna_ini<0)||(fila_ini>7)||(fila_ini<0)||(columna_fi>7)||(columna_fi<0)||(fila_fi>7)||(fila_fi<0))
{
printf ("nERROR:Entra posicions correctes del tauler!!!");
error='s';
}
}while (error=='s');
tauler_matriu (tauler1, columna_ini, fila_ini, columna_fi, fila_fi);
moviments = mov (tauler1, 8,;
printf ("nCalen %d moviments", moviments);
printf ("nVols repetir el programa? (s/n)");
scanf ("%s", &repetir);
}while (repetir=='s');
}
void tauler_inici (tauler tauler1, int columna,int fila)
{
int j, i;
printf ("nt __________________________________________________");
printf ("nt| |n");
for (i=0; i<fila; i++)
{
printf ("t| ");
for (j=0; j<columna; j++)
{
printf("[%d,%d] ", i, j);
}
printf (" |");
printf ("n");
}
printf ("t|__________________________________________________|n");
}
void mostrar_tauler (tauler tauler1, int columna,int fila)
{
int j, i;
printf ("nt __________________________________");
printf ("nt| |n");
for (i=0; i<fila; i++)
{
printf ("t| ");
for (j=0; j<columna; j++)
{
printf("[%d] ", tauler1[j]);
}
printf (" |");
printf ("n");
}
printf ("t|__________________________________|n");
}
void tauler_matriu (tauler tauler1, int columna_ini, int fila_ini, int columna_fi, int fila_fi)
{
int j, i;
tauler1[fila_ini][columna_ini]=1;
tauler1[fila_fi][columna_fi]=2;
for (i=0; i<8; i++)
{
for (j=0; j<8; j++)
{
if ((tauler1[j]!=1)&&(tauler1[j]!=2))
{
tauler1[j]=0;
}
}
}
mostrar_tauler (tauler1, 8, ;
}
int mov (tauler tauler1, int columna, int fila)
{
int j=0, i=0, a, b, aux_i, aux_j;
char llegado='n';
int cont=0;
int verif;
do
{
for (i=0; i<fila; i++)
{
for (j=0; j<columna; j++)
{
verif=0;
if (tauler1[j]==1)
{
if ((i+2>=0)&&(i+2<=7)&&(j+1>=0)&&(j+1<=7))
{
if (tauler1[i+2][j+1]!=2)
{
if ((tauler1[i+2][j+1]!=5)&&(tauler1[i+2][j+1]!=1))
{
tauler1[i+2][j+1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
verif=1;
llegado='s';
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-2>=0)&&(i-2<=7)&&(j-1>=0)&&(j-1<=7))
{
if (tauler1[i-2][j-1]!=2)
{
if ((tauler1[i-2][j-1]!=5)&&(tauler1[i-2][j-1]!=1))
{
tauler1[i-2][j-1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-2>=0)&&(i-2<=7)&&(j+1>=0)&&(j+1<=7))
{
if (tauler1[i-2][j+1]!=2)
{
if ((tauler1[i-2][j+1]!=5)&&(tauler1[i-2][j+1]!=1))
{
tauler1[i-2][j+1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i+2>=0)&&(i+2<=7)&&(j-1>=0)&&(j-1<=7))
{
if (tauler1[i+2][j-1]!=2)
{
if ((tauler1[i+2][j-1]!=5)&&(tauler1[i+2][j-1]!=1))
{
tauler1[i+2][j-1]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i+1>=0)&&(i+1<=7)&&(j+2>=0)&&(j+2<=7))
{
if (tauler1[i+1][j+2]!=2)
{
if ((tauler1[i+1][j+2]!=5)&&(tauler1[i+1][j+2]!=1))
{
tauler1[i+1][j+2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-1>=0)&&(i-1<=7)&&(j-2>=0)&&(j-2<=7))
{
if (tauler1[i-1][j-2]!=2)
{
if ((tauler1[i-1][j-2]!=5)&&(tauler1[i-1][j-2]!=1))
{
tauler1[i-1][j-2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i-1>=0)&&(i-1<=7)&&(j+2>=0)&&(j+2<=7))
{
if (tauler1[i-1][j+2]!=2)
{
if ((tauler1[i-1][j+2]!=5)&&(tauler1[i-1][j+2]!=1))
{
tauler1[i-1][j+2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if ((i+1>=0)&&(i+1<=7)&&(j-2>=0)&&(j-2<=7))
{
if (tauler1[i+1][j-2]!=2)
{
if ((tauler1[i+1][j-2]!=5)&&(tauler1[i+1][j-2]!=1))
{
tauler1[i+1][j-2]=1;
verif=1;
aux_i=i;
aux_j=j;
}
}
else
{
llegado='s';
verif=1;
aux_i=i;
aux_j=j;
j=8;
i=8;
}
}
if (verif==1)
{
cont++;
for (a=0; a<fila; a++)
{
for (b=0; b<columna; b++)
{
if (tauler1[a]<b>==5)
{
tauler1[a]<b>=0;
}
}
printf ("n");
}
tauler1[aux_i][aux_j]=5;
mostrar_tauler (tauler1, 8, ;
}
}
}
}
}while (llegado!='s');
return (cont);
}  
:flower:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
El movimiento del caballo en C++ (no me da bien) PLEASE UNA
« Respuesta #1 en: Martes 27 de Mayo de 2003, 18:47 »
0
Espero que no sea tarde.

Hay una técnica, aunque es una de las más sencillas, que te puede servir. Se trata de pintar con valores los casilleros.

La cosa es así, a la casilla del caballo le das un valor 0, a las casillas adyacentes, un 1, luego a esto lo rodeas de casillas con el valor 2 y así sucecivamente. Y con la casilla de final hacés lo mismo. Y cualquier obstáculo en el medio, le das un valor alto.

La idea de esto es que una vez que determines hacia donde se mueve (es decir, izquierda o derecha y arriba o abajo), el muñeco se desplace por los casilleros de menor valor.

Tal vez no sea uno de los mejores métodos, pero sirve y tal vez pueda ayudarte aunque sea a buscar una solución.

Altareum
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |