Marvin10

In AssignmentOne wird Marvin10 zur Lösung verwendet. Es handelt sich hier um ein Java-Programm, welches aus dem von Prof. Wolfgang Slany et al. entwickelten, ursprünglichen Java-Applet erstellt wurde. Der Roboter Marvin10 sammelt Diamanten in einem Labyrinth am Planeten Neptun (wir nennen ihn daher auch manchmal "Neptun" oder "Labyrinth").

Im Nachfolgenden findest du eine Anleitung zur Installation für Java sowie zum Ausführen des Java-Programms für die Betriebssysteme Windows, Linux und Mac OS.

Referenzen

Screenshot

labyrinth-screenshot.png
Marvin 10

Installation von Java

Hast du Java bereits installiert, kannst du dieses Kapitel überspringen.

Installation unter Windows und MacOS

Überprüfe unter folgendem LINK ob deine Java- Version aktuell ist. Ist sie nicht aktuell, so folge den Anweisungen auf der Seite und installiere die aktuelle Version.

Installation von Java unter Linux

Öffne ein Terminal und führe den Befehl java -version aus. Wird eine Version >= Java 1.7 angezeigt, kannst du dieses Kapitel überspringen.

Der Output sollte ungefähr so aussehen:

java version "1.7.0"
Java(TM) SE Runtime Environment (build XXXX)
XXXXXX

Erzeugt java -version nicht den gewünschten Output, musst du Java installieren. Unter Ubuntu geht das zum Beispiel mit
sudo apt-get install default-jre

Starten von Marvin10

Zuerst musst du unter allen Betriebssystemen das ZIP-File Marvin10.zip herunterladen und in einen Ordner nach Wahl entpacken. Dieses ZIP-File enthält sämtliche Komponenten, welche zum Start von Marvin10 notwendig sind. Bei manchen Betriebssystemen kann man ein Java-Archiv wie ein Programm starten, dann reicht ein Doppelklick auf JMarvin.jar aus, um das Programm zu starten. Falls nach einem Doppelklick nichts passiert (oder nicht direkt Marvin10 gestartet wird), enthält das ZIP-File auch Start-Scripts, die je nach Betriebssystem den korrekten Start für dich erledigen.

Windows Start-Script

Sollte ein Doppelklick auf JMarvin.jar das Programm nicht öffnen, versuch die Datei start.bat per Doppelklick zu starten. Falls es beim Starten auf diesem Weg ebenfalls Probleme gibt, steuere den Ordner per Kommandozeile an und probiere den Programmstart mit .\start.bat erneut.

Linux und MacOS Startscript

Ein Doppelklick auf start sollte genügen, um das Programm zu starten. Falls es dabei Probleme gibt, muss das Script unter Umständen zuvor ausführbar gemacht werden. Navigiere per Kommandozeile zum Ordner in dem sich Marvin befindet und führe folgenden Befehl aus:
chmod +x ./start

Dann sollte das Script, je nach Sicherheitseinstellungen des Systems, über den Dateimanager ausführbar sein. Lies ansonsten den Abschnitt "Andere Betriebssysteme", um das Programm direkt über die Kommandozeile zu starten oder steuere den Ordner per Kommandozeile an und versuche den Programmstart mit ./start erneut.

Unter Linux wird unter Umständen vom System ein Dialog (wie hier abgebildet) angezeigt, den du mit "Run" oder "Run in Terminal" bestätigen musst.

alertdialog.png
Unter Linux angezeigter Dialog

Andere Betriebssysteme

Auch wenn es dafür von uns *KEINEN SUPPORT* gibt, sollte es möglich sein das Programm auf jedem System mit installiertem Java auszuführen.

Navigiere per Terminal in den Ordner mit dem Marvin10 Programm und führe folgenden Befehl aus:
java -jar ./JMarvin.jar gui.TUGLabyrinth

Arbeiten mit Marvin10

Einführung

Marvin-10 kann am Anfang leider überhaupt nichts. Aber du kannst ihn mit Hilfe der Sensorregeln programmieren, die du im folgenden Bild siehst:
sensor_blank.png

Links in der Sensorregel beschreibst du einen Zustand und rechts gibst du dem Roboter Befehle, die er ausführen soll, wenn er in diesem Zustand ist. Verändere jetzt die erste Sensorregel zum Beispiel so:
sensor.png

Das machst du, indem du mit der linken Maustaste auf die Felder klickst, die du verändern willst. Die Sensorregel, die du oben siehst, sagt dem Roboter: "WENN du links und rechts eine Wand siehst, DANN gehe geradeaus". Durch drücken von "Neustart" fährt der Roboter los - allerdings nicht weit, denn Marvin-10 kennt erst diese eine Regel und er fährt immer nur so weit wie er sich auskennt. Du musst also Marvin-10 noch klüger machen. Verändere dazu die zweite, dritte und vierte Sensorregel, um ihm zum Beispiel zu sagen: "WENN nur links ein Weg ist, DANN drehe nach links".

Zur Übung kannst du Marvin die Anweisungen geben, alle Diamanten in einem einfachen Labyrinth einzusammeln (auch wenn dies kein Teil der Übung ist!). Vier Sensorregeln sollten reichen, damit der Roboter durch das einfache Labyrinth fährt und am Ende mit allen Diamanten herauskommt. Wenn du das geschafft hast, dann weißt du bereits wie die Programmierung funktioniert.

Du hast dich sicher schon gefragt, wozu die anderen Schaltflächen der Sensorregeln da sind. Erinnere dich daran, dass jede Regel, die du machst, aus zwei Teilen besteht: Einem WENN-Teil auf der linken und einem DANN-Teil auf der rechten Seite.

Du kannst bestimmen:"WENN links und rechts Wände sind UND der Zustand des Roboters blau ist, DANN fahre geradeaus UND wechsle den Zustand auf rot." Diese Regel sieht so aus:

sensor_farbe.png

Außerdem kann der Roboter Zahlen auf den Boden schreiben und lesen. So kann er markieren, wo er schon war. Praktisch, hm? Die folgende Regel bedeutet: "WENN links und rechts Wände sind UND am Boden eine Null steht, DANN gehe geradeaus und schreibe eine Eins auf den Boden."

sensor_zahl.png

Expertenmodus: Regelsatz editieren

Im Expertenmodus Regelsatz editieren kannst du den Roboter auch neue Regeln beibringen! Du brauchst nicht auf die Knöpfe klicken, sondern du schreibst sie einfach hin. Dafür musst du wirklich kein Experte sein!

"WENN links und rechts Wände sind UND der Zustand des Roboters blau ist, DANN fahre geradeaus UND wechsle den Zustand auf rot."

Da der Satz aber ziemlich lange und für den Roboter schwer zu verstehen wäre, gibt es eine Abkürzung:

(fgf,blau,)->(,nach vorn,rot)

Dies würde heißen: WENN ('links Wand''vorne Gang''rechts Wand', Zustand blau, keine Bodenmarkierung ) DANN (keine Bodenmarkierung, gehe nach vorne, neuer Zustand rot)

In der folgenden Tabelle findest du alle Wörter, die der Roboter standardmäßig 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

Du kannst im Expertenmodus auch deine eigenen Zustände definieren, bis zu 30 Zeichen stehen dir zur Verfügung.

Wenn du möchtest, dass der Roboter eine deiner Regeln nicht benützt, dann macht er das auch nicht!. Du brauchst nur # vor die Regel setzen.

Durch Verwendung von // am Beginn einer Zeile kannst du Kommentare und Anmerkungen in den Code einfügen.

Es ist darauf zu achten, dass der Roboter Wert auf Groß- und Kleinschreibung legt: 'A' und 'a' werden beispielsweise unterschiedlich interpretiert.

Labyrinth editieren

Für das Erstellen eines Labyrinths werden Informationen über dessen Größe und Aussehen benötigt. Da das eine ganze Menge an Daten sind, reichen ein paar einfache Zeichen, wie bei „Regelsatz editieren“, nicht mehr aus. Mit XML kannst du Regeln erstellen, die von Computerprogrammen leicht verstanden werden können.Zuerst muss die Neptun Simulation einmal wissen, dass sie jetzt XML zu lesen bekommt und wie das Dokument aussehen soll. Anschließend muss der erste XML-TAG sein. 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>

Diese Angabe der Größe gibt auch die Anzahl der Zeichen vor. Im LabyrinthField==-Tag muss diese wie in ==Dimension angegeben durch FeldSymbole realisiert sein. Diese Information ist für Assignment 1 äußerst relevant, wenn du für die konkreten Marvin10-Beispiele selbst Felder erstellen willst, die deine Programme testen sollen. Konkret solltest du darauf achten, immer nur den Inhalt der ==Dimension==- und ==LabyrinthField==-Tags zu bearbeiten.

Die für dich relevanten Symbole sind:
  • Wand (W)
  • Leeres Feld (.)
  • Startpunkt (S)
  • Feldinhalte (0, 1)

Abgabe von Marvin10-Beispielen

Bei Beispielen mit Marvin10 geht es darum die richtige Menge von Regeln aufzustellen. Wenn du fertig bist, wähle "Expertenmodus" und "Regelsatz editieren". Kopiere den Text aus dem Textfeld und füge ihn auf der Abgabe in einem <verbatim> Block ein. Das sieht etwa so aus:

(fgf,,)->(,nach vorn,)
(ffg,,)->(,nach rechts,)
(gff,,)->(,nach links,)
(fff,,)->(,umdrehen,)

Fragen, Anregungen oder Probleme

Wähle eine der folgenden Varianten:

Source

https://github.com/prokls/labyrinth/tree/master
Topic attachments
I Attachment Action Size Date Who Comment
alertdialog.pngpng alertdialog.png manage 13.2 K 20 Sep 2016 - 11:47 ThorstenRuprechter Linux alert dialog
labyrinth-screenshot.pngpng labyrinth-screenshot.png manage 69.9 K 24 Sep 2014 - 10:49 UnknownUser Labyrinth Screenshot
marvin10.zipzip marvin10.zip manage 267.0 K 20 Sep 2016 - 12:08 ThorstenRuprechter Executable files for Marvin10
sensor.pngpng sensor.png manage 4.7 K 03 Oct 2016 - 19:43 ThorstenRuprechter Sensorregel
sensor_blank.pngpng sensor_blank.png manage 3.8 K 03 Oct 2016 - 19:43 ThorstenRuprechter Blanke sensorregel
sensor_farbe.pngpng sensor_farbe.png manage 4.7 K 03 Oct 2016 - 19:43 ThorstenRuprechter Sensorregel mit farbe
sensor_zahl.pngpng sensor_zahl.png manage 4.9 K 03 Oct 2016 - 19:43 ThorstenRuprechter Sensorregel mit Zahl
Topic revision: r4 - 31 Oct 2016, ChristopherImmervoll
 

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback