Estoy haciendo un juego deshonesto y estoy usando una caminata aleatoria dentro de una cuadrícula para formar un sistema de 'cueva'. Sin embargo, la caminata aleatoria que he encontrado se atasca, en particular cuando el andador está cerca del borde de la cuadrícula y está rodeado de 'agujeros'.¿Cómo evitar que el algoritmo de aleatoriedad se "atasque"?
Este no es el código exacto que estoy usando en mi proyecto, no puedo acceder a mi código desde el trabajo. Sin embargo, reescribí una muestra del mismo algoritmo que estoy usando en casa.
Básicamente, tomé una cuadrícula de 20x20 de enteros y la llené con 1. Mientras camino pongo un 0 en cada paso que doy.
void walk(int grid[][20]){
int x = rand() % 10 + 9;
int y = rand() % 10 + 9;
int walk_count;
for(walk_count = rand() % 1000 + 500; walk_count >= 0; walk_count--){
switch(rand() % 4){
case 0: if(grid[x][y - 1] == 1 && y - 1 >= 1){ y--; grid[x][y] = 0;} break;
case 1: if(grid[x][y + 1] == 1 && y + 1 < 20){ y++; grid[x][y] = 0;} break;
case 2: if(grid[x - 1][y] == 1 && x - 1 >= 1){ x--; grid[x][y] = 0;} break;
case 3: if(grid[x + 1][y] == 1 && x + 1 < 20){ x++; grid[x][y] = 0;} break;
default: break;
}
}
}
intente una primera búsqueda en profundidad en su lugar y utilice reglas más complejas que si la celda adyacente no se ha visitado aún. –