хорошо, попробую на русском (что не смогу перевести, оставлю на МЯ).
итак, лабиринт - массив A[64,64], причём он закольцован по краям, то есть двигаясь влево, выйдем с правой стороны, а двигаясь вниз - сверху. для упрощения, когда я буду писать A[x,y], будет подразумеваться A[x mod 64, y mod 64], (код, который отслеживает переполнения координат, там присутствует и довольно громоздкий)
итак,
Код:
fill(A, 255, 64*64); // все стенки
for x=0 to 2 do
for y=0 to 2 do
A[x,y] = #80; // не знаю, зачем
x=y=1
switch (random(4))
{
case 0: x=x+2; break;
case 1: x=x-2; break;
case 2: y=y+2; break;
case 3: y=y-2; break;
// изменения начальной позиции
// так как координаты закольцованы, начать можем даже снизу или справа
}
for (;;) // вечный цикл
{
ХодилиВлево=ХодилиВправо=ХодилиВверх=ХодилиВниз = нет;
пока не (ХодилиВлево и ХодилиВправо и ХодилиВверх и ХодилиВниз)
{
дистанция = 2+random(4);
выбрать_напр:
напр = random(4);
switch (напр) {
case 0:
если (ХодилиВлево) goto выбрать_напр;
for i=1 to дистанция
{
если (A[x-2,y]!=#FF или A[x-1,y]!=#FF или
A[x-2,y-1]!=#FF или A[x-1,y-1]!=#FF или
A[x-2,y+1]!=#FF или A[x-1,y+1]!=#FF)
{
ХодилиВлево = да;
goto выбрать_напр;
}
иначе
{
x=x-1; A[x,y] = 0;
}
}
break;
case 1:
если (ХодилиВправо) goto выбрать_напр;
for i=1 to дистанция
{
если (A[x+2,y]!=#FF или A[x+1,y]!=#FF или
A[x+2,y-1]!=#FF или A[x+1,y-1]!=#FF или
A[x+2,y+1]!=#FF или A[x+1,y+1]!=#FF)
{
ХодилиВправо = да;
goto выбрать_напр;
}
иначе
{
x=x+1; A[x,y] = 0;
}
}
break;
case 2:
если (ХодилиВверх) goto выбрать_напр;
for i=1 to дистанция
{
если (A[x,y-2]!=#FF или A[x,y-1]!=#FF или
A[x-1,y-2]!=#FF или A[x-1,y-1]!=#FF или
A[x+1,y-2]!=#FF или A[x+1,y-1]!=#FF)
{
ХодилиВверх = да;
goto выбрать_напр;
}
иначе
{
y=y-1; A[x,y] = 0;
}
}
break;
case 3:
если (ХодилиВниз) goto выбрать_напр;
for i=1 to дистанция
{
если (A[x,y+2]!=#FF или A[x,y+1]!=#FF или
A[x-1,y+2]!=#FF или A[x-1,y+1]!=#FF или
A[x+1,y+2]!=#FF или A[x+1,y-+]!=#FF)
{
ХодилиВниз = да;
goto выбрать_напр;
}
иначе
{
y=y+1; A[x,y] = 0;
}
}
break;
}
}
// ходили во все 4 стороны
do {
если ( (#5C78) >= #96 ) полный_стоп!
x = random(64);
y = random(64);
} while (A[x,y] != 0);
}
ну что, смогёт кто-нить накодить это для windows-графики, чтобы проверить?