немножко наврал в уменьшении переменной "дистанция". на самом деле, это счётчик, который уменьшается после каждого изменения x/y. то есть код внутреннего цикла выглядит как
в принципе, лабиринты тоже будут получаться хорошие, только менее извилистые, т.е. меньше точек, в которых ответвляется корридор. можно попробовать оба вариантаКод:дистанция = 2+random(4); выбрать_напр: напр = random(4); switch (напр) { case 0: если (ХодилиВлево) goto выбрать_напр; for (;;) { если (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; дистанция=дистанция-1; если (дистанция == 0) break; // внутренний for (;;) } } break; // case // аналогично по остальным направлениям
ещё забыл вставить перед первым for (;команды A[x,y]=0, без которой начальный квадрат оказывается отрезан от остального лабиринта
ещё не забудь, что куча обращений типа A[x+1,y-2] на самом деле кишит остатками от деления на размер лабиринта (mod 64)
а насчёт начального квадрата, почему он кодируется кодом #80, а не #00?





команды A[x,y]=0, без которой начальный квадрат оказывается отрезан от остального лабиринта
Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
