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.