Я пытаюсь создать случайный уровень для моей глупой игры. Игра состоит из пары лазер / детектор вокруг квадратного поля возможных зеркал. Как это:
/*
LLLLLLLLLL
LmmmmmmmmL
LmmmmmmmmL
LmmmmmmmmL
LLLLLLLLLL
*/
Теперь у меня есть алгоритм, который довольно плохо генерирует уровень, полагаясь на случайное размещение и отклоняя плохие позиции. Это не очень быстро и не генерирует те поля, которые я хотел бы иметь. Пожалуйста, не стесняйтесь попробовать на http://cmouse.desteem.org/laser/
Любые предложения приветствуются.
Текущий алгоритм выглядит примерно так:
function createLevel:
for i=0 to mirrors:
mirrorLocation = pickRandomPosition
mirrorType = pickRandomType
if (verifyPosition(mirrorLocation, mirrorType)):
i = i - 1
next
else:
storeMirror(mirrorLocation, mirrorType)
В verifyPosition мы проверяем зеркало на предмет достижения лазером во всех четырех направлениях, в надежде избежать обнаружения необнаружимых зеркал. Это немного скучный код, поэтому я здесь его опускаю.