3 Stimmen

Wie generiert man einen Level für ein Laserspiel in Javascript?

Ich versuche, einen zufälligen Level für mein dummes Spiel zu generieren. Das Spiel besteht darin, Laser/Detektor-Paare um ein quadratisches Feld mit möglichen Spiegeln zu platzieren. Etwa so:

/*

LLLLLLLLLL
LmmmmmmmmL
LmmmmmmmmL
LmmmmmmmmL
LLLLLLLLLL

*/

Jetzt habe ich einen Algorithmus, der ein Level generiert, und zwar ziemlich schlecht, indem er sich auf eine zufällige Platzierung verlässt und schlechte Positionen ablehnt. Das ist nicht sehr schnell und erzeugt nicht wirklich die Art von Feldern, die ich haben möchte. Sie können ihn gerne ausprobieren unter http://cmouse.desteem.org/laser/

Alle Vorschläge sind willkommen.

Der aktuelle Algorithmus sieht in etwa so aus:

function createLevel:
  for i=0 to mirrors:
    mirrorLocation = pickRandomPosition
    mirrorType = pickRandomType

    if (verifyPosition(mirrorLocation, mirrorType)):
       i = i - 1
       next
    else:
       storeMirror(mirrorLocation, mirrorType)

In verifyPosition testen wir den Spiegel so, dass er einen Laser in allen vier Richtungen erreicht, in der Hoffnung, unerkennbare Spiegel zu vermeiden. Das ist etwas langweiliger Code, deshalb lasse ich ihn hier weg.

2voto

Petar Ivanov Punkte 89412

Eine Möglichkeit, um sicherzustellen, dass nicht mehrere Felder mehr als einmal versucht werden, besteht darin, über die Felder zu iterieren und einen Spiegel zu setzen oder nicht, basierend auf einer bestimmten Wahrscheinlichkeit. Die Wahrscheinlichkeit, einen Spiegel zu setzen, sollte #mirros / #fields sein, so dass die erwartete Anzahl von Spiegeln am Ende #mirrors ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X