Ach ja, wenn dir der Roboter zu langsam ist, kannst du mit dem Schieber die Geschwindigkeit regeln. Du wirst sehen, der kann ganz schön herumflitzen!
Wenn du die Geschwindigkeit hingegen auf 0 setzt, dann darfst du bei jeder Bewegung auf den Schritt-Knopf klicken.
Dumm? Nein, ganz und gar nicht, denn so kannst du genau sehen, welche Regel der Roboter verwendet hat und diese sogar ändern!
(fgf,blau,)->(,nach vorn,rot)
das heißt soviel wie:
WENN ('links Wand''vorne Gang''rechts Wand' , Zustand blau , keine Bodenmarkierung ) DANN (keine Bodenmarkierung, gehen nach vorne, neuer Zustand rot)
Hier findest du alle Wörter, die der Rooter schon schon versteht:
Gelände | Zustände | Bodenmarkierungen | Bewegungsrichtungen |
---|---|---|---|
f -> Wand | grün | 0 | nach vorn |
g -> Gang | blau | 1 | nach rechts |
rot | 2 | nach links | |
gelb | 3 | umdrehen |
Was, das sind nicht genug Bodenmarkierungen und Zustände?
Erfinde einfach neue! Du kannst dafür bis zu 30 Zeichen verwenden.
Einen weiteren Vorteil bietet dir der Expertenmode: Wenn du möchtest, dass der Roboter eine von deinen Regeln nicht benützt, dann macht er das auch nicht!. Du brauchst nur // vor die Regel setzen.
Also so:
//(fgf,blau,)->(,nach vorn,rot)
Mehrere Regeln kannst du auch weglassen:
/* (fgf,grün,)->(0,nach vorn,blau)
(ffg,rot,1)->(2,nach rechts,gelb)
(fff,,3)->(,nach links,)
(ggg,,)->(,umdrehen,) */
Auf eines musst du noch aufpassen:
Für den Roboter sind 'A' und 'a' NICHT gleich!!!
(FGG,,)->(,nach vorn,) wird er daher nicht verstehen!
Zuerst muss die Neptun Simulation einmal wissen, dass sie jetzt XLM zu lesen bekommt und wie das Dokument aussehen soll.
      <?xml version="1.0" encoding="iso-8859-1"?>
      <!DOCTYPE LabyrinthLevel SYSTEM "LabyrinthLevel.dtd">
Jetzt sagen wir: "Wir wollen ein neues Level generieren, nimm alles was zwischen
<LabyrinthLevel> und </LabyrinthLevel> steht."
Achtung! Zwischen diese beiden "Blöcke" definieren wir alles andere!!
Das fertige Dokument sollte dann in etwa so aussehen:
      <?xml version="1.0" encoding="iso-8859-1"?>
      <!DOCTYPE LabyrinthLevel SYSTEM "LabyrinthLevel.dtd">
      <LabyrinthLevel>
           ...
            HIER stehen alle Infos, zur Gestaltung des Labyrinths!
           ...
      </LabyrinthLevel>
Name und Größe
Jedes Labyrinth hat einen Namen.
      <Name> Mein erstes Labyrinth </Name>
Die Größe deines Labyrinths gibts du so an:
      <Dimension>
            <width> 20 </width>
            <height> 20 </height>
      </Dimension>
Aussehen
Um das Aussehen festzulegen gibt es 3 Möglichkeiten:
      <Labyrinth>
Welches Symbol (1 Zeichen) in deinem gezeichneten Labyrinth steht für Startpunkt, Wand, Gang und Diamant sowie für die Bodenmarkierungen 0, 1, 2 und 3
            <StartSymbol> S </StartSymbol>
            <WallSymbol> W </WallSymbol>
            <WaySymbol> . </WaySymbol>
            <DiamondSymbol> D </DiamondSymbol>
            <ZeroSymbol> 0 </ZeroSymbol>
            <OneSymbol> 1 </OneSymbol>
            <TwoSymbol> 2 </TwoSymbol>
            <ThreeSymbol> 3 </ThreeSymbol>
Weitere Symbole können so definiert werden:
      <SymbolList>
            <Symbol>
                  <CharSymbol> a </CharSymbol>
                  <StringSymbol> Test String </StringSymbol>
            </Symbol>
            <Symbol>
                  <CharSymbol> b </CharSymbol>
                  <StringSymbol> 2. Test String </StringSymbol>
            </Symbol>
      </SymbolList>
Mögliche Werte für die Startrichtung des Roboters: "up", "down", "left", "right"
            <StartingDirection> UP </StartingDirection>
Zeichnen des Labyrinths:
Die Anzahl der Zeichen muss mit der angegebenen Größe übereinstimmen.
(Verwende die oben festgelegten Zeichen!)
            <LabyrinthField>
            WWWWWWWWWWWWWWWWWWWW
            W.....b...........WW
            W.WWWWWWWWWWWWWWW.WW
            W.WWWWWWWWWWWWWWW.WW
            W.WWWWWWWWWWWWWWW.WW
            W...WWWWWWWWWWWWW.WW
            WWW.WWWWWWWWWWWWW.WW
            WWW.a....D........WW
            WWW.WWWWWWWWWWWWW.WW
            WWW.WWWWWWWWWWWWW.WW
            WWW.WWWWWWWWWWWWW.WW
            WWW.WWWWWWWWWWWWW.WW
            WWW.WWWWWWWWWWWWW.WW
            W.................WW
            W.WWWWWWWWWWWWWWWWWW
            W.WWWWWWWWWWWWWWWWWW
            W.WWWWWWWWWWWWWWWWWW
            W.WWWWWWWWWWWWWWWWWW
            W.WWWWWWWWWWWWWWWWWW
            WSWWWWWWWWWWWWWWWWWW
            </LabyrinthField>
      </Labyrinth>
Zufalls Labyrinth:
      <Create>
Anzahl der Diamanten
            <Diamonds> 20 </Diamonds>
Maximale Anzahl an Wegzellen
            <WayCells> 150 </WayCells>
Minimale Länge eines Weges
            <MinWayLenght> 3 </MinWayLenght>
Maximale Länge eines Weges (Es wird aber nicht verhindert, dass der Weg in die gleiche Richtung weitergebaut wird!)
            <MaxWayLenght> 5 </MaxWayLenght>
Kurfen bauen: 1 steht für ja, 0 für nein
            <BuildAngles> 1 </BuildAngles>
Verzweigungen bauen: 1 steht für ja, 0 für nein
            <BuildTrees> 1 </BuildTrees>
Schleifen bauen: 0 für nein, Zahlenwert für die maximale Anzahl an Schleifen
            <BuildLoops> 3 </BuildLoops>
Plätze bauen: 1 steht für ja, 0 für nein
            <BuildPlaces> 0 </BuildPlaces>
      </Create>
Fixes Labyrinth mit Zufallsanteil:
Verwende einfach
      <Labyrinth>
      </Labyrinth>
und
      <Create>
      </Create>