Я генерирую лабиринт следующим способом:
1)выбираю точку старта в самом низу.
2)От него запускаю
цикл
3)Иду вперёд случайное число вперёд.
4)Затем выбираю,также случайно,вправо или лево двигаться далее.
5)двигаюсь случайное число раз вправо или лево
6)когда я дохожу в самый вверх массива,то выхожу из главного
цикла
Затем генерирую препятствия.То есть простой цикл:если цикл попадает на путь,то препятствие не генерируется,иначе- случайно генерирую препятствие.Теперь сама суть:нужно сгенерировать сокровище не в самом начале и не в конце.Но главное чтобы до него был путь!
Генерация пути:
klet(ys, xs) = 0 'клетка старта
Dim UpCount As Integer
Do
For i = 1 To Int(2 * Rnd() + 1) 'идём вперёд
If y1 = 0 Then
klet(0, x1) = 2 'клетка финиша
yf = 0
xf = x1
Exit Do
End If
y1 -= 1
klet(y1, x1) = 1
Next
If Int(4 * Rnd() + 1) = 1 Then 'идём вправо
UpCount = Int(((x1 - 1) + 1) * Rnd())
For i = 1 To UpCount
If x1 - 1 >= 0 Then x1 -= 1
klet(y1, x1) = 1
Next
Else 'идём влево
UpCount = Int(((8 - x1 + 1) + 1) * Rnd())
For i = 1 To UpCount
If x1 + 1 <= Count Then x1 += 1
klet(y1, x1) = 1
Next
End If
Loop
Генерация препятствий:
For i = 0 To Count
For j = 0 To Count
If ((Rnd() * 9) > 4) And klet(i, j) <> 1 And klet(i, j) <> 2 And klet(i, j) <> 3 Then klet(i, j) = 5
Next
Next