Que dice jaja es un peazo de código jeje
Para que no repitiera el camino, y digo camino sin salida fue hacer una especie de backup del trayecto XD
Primero hice una for para contar todos los números 2 que hay. después hice un par de tablas con esa cantidad, una para x y una para y.
luego un contador y y le fue grabando a cada vuelta el valor de la posición actual.
Bien...eso solo se activa cuando el punto se encuentra con números 1, o sea ya explorado.
Entonces en ese momento empieza una cuenta atrás del contador y voy imprimiendo lo que había guardado en backupx y backupy
Funciona de perfectamente y es capaz de hacer el personaje volver por todo el camino.
Para marcar ese camino lo relleno con ceros, o sea que se vuelve hasta la primera intercesión hasta encontrar un 2 nuevamente y lo rellena el camino sin salida con ceros para no meterse mas por ahí XDD
hay unos bugcitos jaja
Pero bueno, no soy tan bueno con los punteros jaja
Pero hace el apaño.
Bueno lo pongo aquí:
No se compara con el vuestro pero llego al final.
tampoco le hice que se rompiera el bucle así que si me lo vaes a echar como fallo arreglad vosotros jajaja
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <time.h>
# define udir mapa[y-1][x]
# define ldir mapa[y][x-1]
# define rdir mapa[y][x+1]
# define ddir mapa[y+1][x]
# define po mapa[y][x]
using namespace std;
const int TAMY = 29;
const int TAMX = 29;
int contapasos = 0;
void mostrar(char mapa[TAMY][TAMX]){
system ("cls");
for(int y=0;y<29;y++)
{
for(int x=0;x<29;x++)
{
printf("%c",mapa[y][x]);
//Sleep(5);
}
printf("\n");
//Sleep(5);
}
}
int rand4 (){
srand(time(NULL));
int n = (0 + rand() % 4);
return n;
}
void go_up ( char mapa[TAMY][TAMX], int &x , int &y ){
po = '1';
y--;
po = 'X';
}
void go_le ( char mapa[TAMY][TAMX], int &x , int &y ){
po = '1';
x--;
po = 'X';
}
void go_ri ( char mapa[TAMY][TAMX], int &x , int &y ){
po = '1';
x++;
po = 'X';
}
void go_do ( char mapa[TAMY][TAMX], int &x , int &y ){
po = '1';
y++;
po = 'X';
}
int main (){
//variables iniciales
int pasos = 0;
bool nodir = true;
bool fin = true;
int x = 1; //posicion x inicial
int y = 1; //posicion y inicial
int rand;
char mapa[TAMY][TAMX]={
//0123456789012345678901234567
"000000000000000000000000000",//0
"020222222222222222222222220",//1
"020200000000000000000000020",//2
"020222222222222200000000020",//3
"020200000000000000000000020",//4
"020222222222222200022222220",//5
"020000000000000200020000020",//6
"020222222222200200000000020",//7
"020200000000200222222222020",//8
"020222222200200000000002020",//9
"020000000200222222222222020",//10
"022222220200000000000000020",//11
"020000020200222222222222220",//12
"020000022200200000000000000",//13
"000000000000200222222222220",//14
"022222222222200200000000020",//15
"020000000000000222222202020",//16
"020000000000000200000202020",//17
"022222222222222200000202020",//18
"000000000000000000000202220",//19
"022222222222222222222200000",//20
"020000000000000000000000000",//21
"02222222222222222222222FIN0",//22
"000000000000000000000000000" //23
};
//obtenr cantidad maxima de pasos pocibles.
for ( int fory = 0; fory <= TAMY; fory++ ){
for ( int forx = 0; forx <= TAMX; forx++ ){
if ( mapa[fory][forx] == '2' )
pasos++;
}
}
int xbackup[pasos];
int ybackup[pasos];
while ( fin ){
while ( udir == '1' || ldir == '1' || rdir == '1' || ddir == '1' ){
if ( udir == '2' || ldir == '2' || rdir == '2' || ddir == '2' ){
break;
}
contapasos--;
mapa[y][x]='0';
x = xbackup[contapasos];
y = ybackup[contapasos];
mapa[y][x]='X';
mostrar( mapa );
Sleep ( 100 );
}
contapasos++;
xbackup[contapasos]= x;
ybackup[contapasos]= y;
if( udir == '2' || ldir == '2' || rdir == '2' || ddir == '2' ){
do{
rand = rand4();
if ( udir == '2' && ldir != '2' && rdir != '2' && ddir != '2' ){
go_up( mapa, x, y );
break;
}
else if ( udir != '2' && ldir == '2' && rdir != '2' && ddir != '2' ){
go_le( mapa, x, y );
break;
}
else if ( udir != '2' && ldir != '2' && rdir == '2' && ddir != '2' ){
go_ri( mapa, x, y );
break;
}
else if ( udir != '2' && ldir != '2' && rdir != '2' && ddir == '2' ){
go_do( mapa, x, y );
break;
}
else if ( rand == 0 ){
if ( udir == '0' || udir == '1' ){
nodir = true;
break;
}
else {
go_up( mapa, x, y );
nodir = false;
}
}
else if ( rand == 1 ){
if ( ldir == '0' || ldir == '1' ){
nodir = true;
break;
}
else {
go_le( mapa, x, y );
nodir = false;
}
}
else if ( rand == 2 ){
if ( rdir == '0' || rdir == '1' ){
nodir = true;
break;
}
else {
go_ri( mapa, x, y );
nodir = false;
}
}
else if ( rand == 3 ){
if ( ddir == '0' || ddir == '1' ){
nodir = true;
break;
}
else {
go_do( mapa, x, y );
nodir = false;
}
}
}while( nodir );//FIN DOWHILE
}//FIN IF
mostrar( mapa );
Sleep ( 100 );
}//FIN DEL LOOP
}
Otra cosa, que me gusta ver la x andando por el mapa jaja
Asi puedo analizar lo que va haciendo XD
As veces se queda un rato parado en una intercesión, eso lo hace hasta que obtiene un numero aleatorio correcto.
Podía mejorarlo pero bua lo dejo así que soy mu vaguito XD
Como dije no es como el vuestro pero me sirve.
Saludos a todos, me lo paso bomba con esos códigos
Como diga que no anda os grabo un video jajaj
Otra cosa que tengo problemas es con la declaracion de las tablas.
No se por que demonios tengo que poner un numero mayor que lo que voy usar.
creo que es por los ceros, a lo mejor si sustituyo los 0 po X o otra cosa.
Creo que es así por que creo que termina la tabla con char( 0 ) no?
Si saben por que, pasa eso me gustaría saber si declaro char tabla[10]
no le puedo meter de 0 a 9 por que me dice no sequela de fpermisive los webos.
Me parece que en el caso de char la ultima letra es 0 no es ¿así?
La cosa es que veo vuestro código funcionar y el mio pues no anda.
es raro pero me esta pasando pffff