Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:robot:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
api:documentation:robot:start [2022/04/15 09:02] Martin Pabstapi:documentation:robot:start [2022/04/15 11:35] (aktuell) – [Aufgabenstellungen für Schüler/innen vorbereiten] Martin Pabst
Zeile 45: Zeile 45:
  
 <script type="text/plain" title="Robot2.java"> <script type="text/plain" title="Robot2.java">
 +Robot r = new Robot(3, 2, """
 +1 1 1 1
 +y1     1r
 +2     2
 +B1mR111111m
 +""");
 +//y1     1r bedeutet: Umschalten zur Ziegelfarbe Gelb,
 +//dann einen Ziegel setzen, 5 leere Felder, wieder einen Ziegel,
 +//dann umschalten zur Ziegelfarbe rot.
 +</script>
 +
 +</div>
 +
 +</HTML>
 +
 +<WRAP center round info 60%>
 +Die Robot-Klasse besitzt einen Konstruktor, dem die Startposition des Roboters sowie eine initiale Vorbesetzung der Welt mit Ziegeln und Marken in Form eines Strings übergeben werden kann. Es bietet sich an, das String-Literal in Form eines [[https://docs.oracle.com/en/java/javase/15/text-blocks/index.html|Java Text-Blocks (drei ")]] zu schreiben. Der String hat folgenden Aufbau:
 +  * Jede Zeile steht für eine Reihe in der Welt (von West nach Ost). Die Zeilen werden durch einen Zeilenumbruch ("\n") abgeschlossen.
 +  * Ein Leerzeichen steht für ein leeres Quadrat in der Welt.
 +  * Der Unterstrich (_) steht für ein Quadrat mit einem Marker, aber keinem Ziegel.
 +  * Die Ziffern 1, 2, ..., 9, 0 stehen für 1, 2, ..., 10 Ziegel auf einem Feld.
 +  * Die gesetzten Marken sind standardmäßig gelb. Die Zeichen R, Y, G, B schalten die Markenfarbe um zu Rot, Gelb, Grün, Blau. Alle nachfolgenden Marken werden in der neuen Farbe gesetzt.
 +  * Die gesetzten Ziegel sind standardmäßig rot. Die Zeichen r, y, g, b schalten die Ziegelfarbe um zu Rot, Gelb, Grün, Blau. Alle nachfolgenden Ziegel werden in der neuen Farbe gesetzt.
 +</WRAP>
 +
 +===== Welt dynamisch vorbesetzen =====
 +<WRAP center round info 80%>
 +Natürlich kann man die Welt auch dynamisch (z.B. mit Blöcken auf zufälligen Positionen) vorbesetzen. Dazu dienen die Methoden ''setzeZiegel(x, y, farbe, anzahl)'' und ''setzeMarke(x, y, farbe)'' der Klasse ''RobotWorld''. \\ \\ 
 +**Bemerkung: ** Die Koordinaten ''x'' und ''y'' beginnen bei 1.
 +
 +</WRAP>
 +== Beispiel: ==
 +<HTML>
 +
 +<div class="java-online" style="height: 300px; width: 80%" data-java-online="{'withBottomPanel': false, 'id': 'robot_3'}">
 +
 +<script type="text/plain" title="Robot3.java">
 +new MyWorld();
 Robot r = new Robot(); Robot r = new Robot();
-while(r.nichtIstZiegel()){ + 
-   while(r.nichtIstWand()){ +class MyWorld extends RobotWorld { 
-      r.hinlegen(); +   MyWorld() { 
-      r.schritt();+      super(10, 10)
 +      for (int i = 0; i < 30; i++) { 
 +         setzeZiegel(Random.randint(1, 10), Random.randint(1, 10), 
 +            "rot", Random.randint(1, 2)); 
 +      }
    }    }
-   r.linksDrehen(); +} </script> 
-} + 
-for(int i = 0; i < 5; i++){ +</div> 
-   for(int j = 0ij++)+ 
-      r.hinlegen("grün");+</HTML> 
 + 
 +===== Aufgabenstellungen für Schüler/innen vorbereiten ===== 
 + 
 +Da das ''Robot''-Objekt Zugriff auf seine Welt hat, kann man die Vorbesetzung der Welt natürlich auch durch Erben von der Robot-Klasse erreichen. Dadurch ist im Hauptprogramm nurmehr eine einzige Zeile erforderlich, um den Roboter "startklar" zu machen. Diese Variante eignet sich daher besonders, um Schüler/innen vorbesetzte Welten zur Verfügung zu stellen: 
 + 
 + 
 +<HTML> 
 + 
 +<div class="java-online" style="height: 450px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'robot_4'}"> 
 + 
 +<script type="text/plain" title="Hauptprogramm.java"> 
 +MyRobot = new MyRobot(); 
 +// Ergänze hier ein Programm, das den Roboter alle Ziegel  
 +// aufheben lässt: 
 + 
 + 
 + </script> 
 +<script type="text/plain" title="Vorgabe.java"> 
 +class MyRobot extends Robot { 
 +   MyRobot() { 
 +      super(2, 3, 10, 10); 
 +      int speed = SystemTools.getSpeed(); 
 +      SystemTools.setSpeed(-1); 
 +      RobotWorld rw = getWelt(); 
 +      for (int i = 0; i < 30; i++) { 
 +         rw.setzeZiegel(Random.randint(1, 10), Random.randint(1, 10), 
 +            "rot", Random.randint(1, 2)); 
 +      } 
 +      SystemTools.setSpeed(speed); 
 +   } 
 +</script> 
 + 
 +</div> 
 + 
 +</HTML> 
 + 
 + 
 +=== Variante mit Anweisungen ohne Punktschreibweise === 
 +wenn die Schüler/innen ihr Programm innerhalb einer Methode des Roboters schreiben, können sie auf die Punktschreibweise verzichten. Eine Aufgabenstellung dazu könnte so aussehen: 
 + 
 +<HTML> 
 + 
 +<div class="java-online" style="height: 450pxwidth: 100%" data-java-online="{'withBottomPanel': true, 'id': 'robot_5'}"> 
 + 
 +<script type="text/plain" title="Hauptprogramm.java"> 
 +StaubsaugerRobot r = new StaubsaugerRobot(); 
 +r.start(); 
 + 
 +class StaubsaugerRobot extends MyRobot { 
 +   void start() { 
 + 
 +      // Schreibe hier ein Programm, das den Roboter alle Ziegel aufheben lässt: 
 + 
 +       
 + 
    }    }
-   r.schritt(); 
 } }
-</script>+ </script> 
 +<script type="text/plain" title="Vorgabe.java"> 
 +class MyRobot extends Robot { 
 +   MyRobot() { 
 +      super(2, 3, 10, 10); 
 +      int speed = SystemTools.getSpeed(); 
 +      SystemTools.setSpeed(-1); 
 +      RobotWorld rw = getWelt(); 
 +      for (int i = 0; i < 30; i++) { 
 +         rw.setzeZiegel(Random.randint(1, 10), Random.randint(1, 10), 
 +            "rot", Random.randint(1, 2)); 
 +      } 
 +      SystemTools.setSpeed(speed); 
 +   } 
 +</script>
  
 </div> </div>
Zeile 65: Zeile 176:
 </HTML> </HTML>
  
 +<WRAP center round tip 80%>
 +Natürlich könnte man den Aufruf von ''r.start()'' in Zeile 2 noch verbergen, indem man der Klasse ''MyRobot'' eine abstrakte Methode ''start'' hinzufügt und diese vom Konstruktor aus aufruft. Ich denke aber, dass dies den Schüler/innen in ihrem Lernprozess eher schadet, da dann der Ausführungsweg vom Programmstart aus für sie nur noch schwer durchschaubar ist.
 +</WRAP>
  
api/documentation/robot/start.1650006165.txt.gz · Zuletzt geändert: 2022/04/15 09:02 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki