Ben haydut gibi bir oyun yapıyorum ve bir 'mağara' sistemi oluşturmak için bir ızgara içinde rastgele bir yürüyüş kullanıyorum. Bununla birlikte, geldiğim rastgele yürüyüş sıkışıyor - özellikle de yürüteç ızgara kenarına yakın ve 'delikler' ile çevriliyken.Rastgele Yürüyüş Algoritmasının 'sıkışmış' olmasını nasıl önleyebilirim?
Bu, projemde kullandığım kod değil, koduma işten erişemiyorum. Ancak, evde kullandığım aynı algoritmanın bir örneğini yazdım.
Esasen, 20x20'lik bir tamsayı ızgarası aldım ve 1'lerle doldurdum. Yürürken her adımda 0 atarım.
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;
}
}
}
Bunun yerine derinlikli bir ilk arama deneyin ve bitişik hücre henüz ziyaret edilmediğinden daha karmaşık kurallar kullanın. –