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:18] – [Welt vorbesetzen] Martin Pabstapi:documentation:robot:start [2022/04/15 11:35] (aktuell) – [Aufgabenstellungen für Schüler/innen vorbereiten] Martin Pabst
Zeile 49: Zeile 49:
 y1     1r y1     1r
 2     2 2     2
-B1m111111 +B1mR111111m 
-""");</script>+"""); 
 +//y1     1r bedeutet: Umschalten zur Ziegelfarbe Gelb, 
 +//dann einen Ziegel setzen, 5 leere Felder, wieder einen Ziegel, 
 +//dann umschalten zur Ziegelfarbe rot. 
 +</script>
  
 </div> </div>
Zeile 66: Zeile 70:
 </WRAP> </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();
 +
 +class MyWorld extends RobotWorld {
 +   MyWorld() {
 +      super(10, 10);
 +      for (int i = 0; i < 30; i++) {
 +         setzeZiegel(Random.randint(1, 10), Random.randint(1, 10),
 +            "rot", Random.randint(1, 2));
 +      }
 +   }
 +} </script>
 +
 +</div>
 +
 +</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 r = 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: 450px; width: 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:
 +
 +      
 +
 +
 +   }
 +}
 + </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>
 +
 +<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.1650007117.txt.gz · Zuletzt geändert: 2022/04/15 09:18 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki