Как сгенерировать уровень для лазерной игры в Javascript? - PullRequest
3 голосов
/ 25 июля 2011

Я пытаюсь создать случайный уровень для моей глупой игры. Игра состоит из пары лазер / детектор вокруг квадратного поля возможных зеркал. Как это:

/*

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 мы проверяем зеркало на предмет достижения лазером во всех четырех направлениях, в надежде избежать обнаружения необнаружимых зеркал. Это немного скучный код, поэтому я здесь его опускаю.

1 Ответ

2 голосов
/ 25 июля 2011

Один из способов убедиться, что он не пробует несколько полей более одного раза, - это перебрать поля и установить зеркало или нет, основываясь на некоторой вероятности.Вероятность поставить зеркало должна быть #mirros / #fields, так что ожидаемое количество зеркал в конце равно #mirrors.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...