Aufgaben

Bau einer Burg

Karol hat einen alten Bauplan für eine große Burg gefunden. Leider ist er nicht mehr ganz vollständig. In dieser Aufgabe kannst du ihm Schritt für Schritt helfen, den Plan zu rekonstruieren und eine große Burg zu bauen. Ziel der Aufgabe ist es, trotz einem eher umfangreichen Bauprojekt, den Programmcode übersichtlich und verständlich zu gestalten. Damit dir dies gelingt, musst du zuerst einige Methoden zur Vorarbeit schreiben. Vergiss nicht dein Programm immer wieder zu speichern – besonders wenn du zwischenzeitlich ein Anderes öffnest. Die Weltgröße für dein Programm ist 15 x 15 x 10.

Autor der Aufgabe: P. Dippon, 2016
Lizenz: cc-by-sa-4.0

Schreibe eine Anweisung (Methode) SchrittBisWand mit der Karol bis zur Wand gerade aus läuft, egal wo er zuvor steht und eine Anweisung (Methode) Stapelaufheben bei der Karol alle Ziegel aufhebt, die unmittelbar vor ihm liegen.

Sieh dir den Code rechts an. Beantworte in deinem Heft die folgenden Fragen:

  • Was macht diese Anweisung?

  • Was bewirken „schnell“ und „langsam“?

Gib der Methode einen sinnvollen Namen und füge sie deinem Programm hinzu. Wenn du dir nicht sicher bist, kannst du sie in einem anderen Fenster einfach kurz testen.

Tipp: Du kannst ebenso in deinen Methoden aus a) „schnell“ und „langsam“ hinzufügen.

Karol dreht sich bei der Methode einmal um, geht einen Schritt und dreht sich dann wieder um. Insgesamt lässt die Anweisung also Karol einen Schritt rückwärts gehen. Ein guter Name wäre deswegen "Rückwärts"

Anweisung Rückwärts
  Schnell
  Linksdrehen
  Linksdrehen
  Schritt
  Rechtsdrehen
  Rechtsdrehen
  Langsam
*Anweisung

Schnell und Langsam bewirken, dass die Anweisungen dazwischen bei der Ausführung nicht angezeigt werden.

Kopiere den unteren Code für die Grundmauer der Burg in dein Programm. Du musst nur an der markierten Stelle den Namen aus Aufgabe b) eintragen, damit das Programm funktioniert. Probiere es aus!

Anweisung Bauplan
  wiederhole 4 mal
    SchrittBisWand
    //Hier muss der Name geändert werden!!
    abc
    abc
    MarkeSetzen
    LinksDrehen
  *wiederhole
*Anweisung

Anweisung Burgmauer
  wiederhole 16 mal
    Hinlegen
    Schritt
    Schnell
    wiederhole solange NichtIstMarke
      Hinlegen
      Schritt
    *wiederhole
    Langsam
    LinksDrehen
  *wiederhole
*Anweisung

LinksDrehen
Schritt
Schritt
RechtsDrehen
Bauplan
Burgmauer

Da in Teilaufgabe b) die Anweisung als "Rückwärts" genannt wurde, musst die Anweisung Bauplan diese Anweisung aufrufen:

Anweisung Bauplan
  wiederhole 4 mal
    SchrittBisWand
    Rückwärts
    Rückwärts
    MarkeSetzen
    LinksDrehen
  *wiederhole
*Anweisung

Probiere dein Programm aus. Das Ergebnis sollte dann wie folgt aussehen:

Robot Karol

Um weiter zu bauen soll Karol jetzt noch in die Ecke unten links gehen. Baue dazu eine Treppe von der Mauer hinunter in den Burghof und einen Ausgang aus der Burg hinaus.

Baue zunächst eine Treppe nach unten. Dein Code sollte ungefähr so aussehen:

Anweisung Treppe
  Schritt
  Schritt
  LinksDrehen
  Hinlegen
  Hinlegen
  Hinlegen
  Schritt
  Hinlegen
  Hinlegen
  Schritt
  Hinlegen
  Schritt
*Anweisung

Denk daran, dass du die Methode noch aufrufst. Füge dafür folgende Zeile in dein Programm ein.

Treppe

Nun muss Robot Karol noch einen Eingang in die Burg bauen und in die linke untere Ecke laufen. Füge also noch folgende Zeilen in dein Programm ein.

RechtsDrehen
wiederhole solange NichtIstZiegel
  Schritt
*wiederhole
Stapelaufheben
SchrittBisWand
RechtsDrehen
SchrittBisWand

Kopiere nun den Lückencode von unten. Mit dieser Anweisung soll Karol ein 3x3-Feld aufräumen. Dies wird benötigt, um später die Ecken der Mauer wieder abzubauen, um Platz für die Türme zu schaffen.

Ergänze die fehlenden Teile und teste die Methode. Die Skizze soll dir zeigen, wie Karol vorgeht.

Anweisung EckeLöschen
  wiederhole _ mal
    wiederhole _ mal
      Stapelaufheben
      ___
    *wiederhole
    LinksDrehen
  *wiederhole
  ___
  Schritt
  LinksDrehen
  ___
  RechtsDrehen
  Schritt
  LinksDrehen
*Anweisung

Ein Freund von dir hat sich für die Türme eine besondere Methode ausgedacht. Mit dieser kann Karol von einem 10 Blöcke hohen Turm „springen“. Dafür braucht er nur 2 freie Felder vor sich. Leider funktioniert die Methode nicht mehr ganz und verursacht Fehler.

Finde die drei Fehler, begründe im Heft wieso das Programm nicht funktioniert und verbessere diese.

Anweisung Sprung
  wiederhole 9 mal
    Hinlegen
  *wiederhole
  Schritt
  wiederhole 8 mal
    Hinlegen
  *wiedrehole
  wiederhole 9 mal
    Schritt
    LinksDrehen
    LinksDrehen
    Aufheben
    Aufheben
  *wiederhole

Das erste, das dir bei dem Code auffällt, wenn du ihn in dein Programm einfügst, ist dass das Ende der Anweisung *Anweisung fehlt.

Ebeneso ist deinem Freund ein kleiner Rechtschreibfehler unterlaufen, denn die zweite Wiederholung endet mit *wiedrehole statt *wiederhole

So läuft das Programm jetzt schonmal und du kannst es testen, aber leider bleibt es noch stehen mit der folgenden Fehlermeldung:

Fehler
[Abbruch](Zeile14) Vor Karol liegen keine Ziegel mehr zum Aufheben

Dies liegt daran, dass bei dem ersten Stapel 5 mal 2 Ziegel (also insgesamt 10) aufgehoben werden, aber nur 9 dortliegen. Du musst also vor dem letzten Aufheben noch überprüfen, ob noch ein Ziegel daliegt.

Insgesamt sieht der Code dann folgendermaßen aus:

Anweisung Sprung
  wiederhole 9 mal
    Hinlegen
  *wiederhole
  Schritt
  wiederhole 8 mal
    Hinlegen
  *wiederhole
  wiederhole 9 mal
    Schritt
    LinksDrehen
    LinksDrehen
    Aufheben
  wenn IstZiegel dann
    Aufheben
  *wenn
  *wiederhole
*Anweisung

Mit Hilfe der Methoden EckeLöschen und Sprung kannst du nun recht einfach Türme für die Burg bauen. Achte darauf, dass die Türme auch bei größeren Welten in den Ecken der Mauern landen sollen. Schreibe dazu eine Methode TurmBauen, bei der auf ein 3x3-Feld ein 10 Ziegel hoher Turm gebaut wird. Ergänze das Programm, sodass in allen vier Ecken der Mauer Türme entstehen.

Schreibe zunächst eine Methode TurmBauen, die einen 10 Ziegel hohen Turm baut. Wie dieser aussieht, kannst du selbst entscheiden. Hier sind zwei Beispiele:

Mögliche Türme

Anweisung TurmBauen
  wiederhole 10 mal
    wiederhole 4 mal
      wiederhole 2 mal
        Hinlegen
        Schritt
      *wiederhole
      LinksDrehen
    *wiederhole
  *wiederhole
  Schritt
  Schritt
*Anweisung

Türme Robot Karol

Anweisung TurmBauen
  Schritt
  LinksDrehen
  wiederhole 10 mal
    Schritt
    wiederhole 4 mal
      Hinlegen
      LinksDrehen
    *wiederhole
    Rückwärts
    Hinlegen
  *wiederhole
  RechtsDrehen
*Anweisung

Türme Robot Karol

Einbauen der Türme in das Programm

Ergänze dein Programm so, dass Karol die 4 Ecken der Burg abreist und die Türme baut. Denke daran, dass Karol am Ende des bisherigen Programms in der linken unteren Ecke steht, du musst also zuerst noch an die richtige Stelle laufen, um die Methode EckeLöschen verwenden zu können.

Rechtsdrehen
Schritt
Rechtsdrehen
Schritt

wiederhole 4 mal
  SchrittBisWand
  Rückwärts
  LinksDrehen
  EckeLöschen
  TurmBauen
  Sprung
  LinksDrehen
  LinksDrehen
*wiederhole

Teste den Burgbau auch für größere Welten. Funktioniert alles, oder musst du noch nachbessern?

Wie viele Dinge musst du mindestens ändern, wenn du andere gleich hohe Türme bauen möchtest?

Nenne mindestens zwei Gründe, warum man mit vielen eigenen Methoden arbeiten sollte. Schau dir das bisherige Programm noch einmal genau an: Kannst du alles was darin geschieht nachvollziehen, oder sind dir bestimmte Stellen unklar? Formuliere konkrete Fragen zum Programmablauf in deinem Heft und kläre diese dann mit deinem Sitznachbarn (oder schreibe hier einen Kommentar :-) ).

Wenn du dein Programm wie in den Musterlösungen der vorherigen Teilaufgaben geschrieben hast, sollte es auch auf größeren Welten funktionieren.

Andere Türme

Für andere Türme musst du nur die TurmBauen-Methode ändern, oder eine neue Anweisung Turm2Bauen erstellen und in deinem Programm die Zeile mit dem Aufruf von TurmBauen zu Turm2Bauen ändern. In deinem Programm musst du also nur eine Zeile ändern und eine neue Anweisung schreiben.

Vorteil von eigenen Methoden

Eigene Methoden helfen dabei das Programm besser zu strukturieren. Zum Beispiel lässt sich folgender Programmteil leicht verstehen, weil die Methoden passende Namen haben und man nicht erst den Programmcode von den einzelnen Methoden angucken muss:

Bauplan
Burgmauer
ZinnenBauen
Treppe

Ein weiterer Vorteil ist, dass du Programmteile mehrmals verwenden kannst, wie SchrittBisWand, die an vielen Stellen im Programm verwendet wird und so nur einmal geschrieben werden muss

Noch ein Vorteil von eigenen Methoden ist, dass man Teile leicht austauschen kann, wie du bei dem Turmbau gesehen hast. Erstellst du eine Anweisung TurmBauen und eine Turm2Bauen, dann musst du in deinem Programm nur eine Zeile ändern um andere Türme zu haben.

Zum Abschluss, soll die Burg noch möglichst schön gestaltet werden. Du könntest zum Beispiel Zinnen auf den Mauern verteilen, oder das Burginnere pflastern. Füge noch mindestens zwei verschönernde Elemente zu deiner Burg hinzu.

Zinnen

Zinnen kannst du z.B. folgendermaßen hinzufügen

Anweisung Zinnen
  wiederhole 4 mal
    Hinlegen
    Schritt
    Schritt
    wiederhole solange NichtIstMarke
      Hinlegen
      Schritt
      wenn NichtIstMarke dann
        Schritt
      *wenn
    *wiederhole
    LinksDrehen
  *wiederhole
*Anweisung

Diese Methode kannst du in deinem Programm nach der Burgmauer und vor der Treppe aufrufen.

...
Burgmauer
Zinnen
Treppe
...

Burg mit Zinnen Robot Karol

Bett im Burginneren

Hierfür musst du die Welt größer machen, z.B. 20x20

Anweisung BettBauen
  wiederhole 2 mal
    wiederhole 3 mal
      Hinlegen
    *wiederhole
    wiederhole 3 mal
      RechtsDrehen
      Schritt
      LinksDrehen
      Hinlegen
    *wiederhole
    RechtsDrehen
    Schritt
    LinksDrehen
    wiederhole 4 mal
      Hinlegen
    *wiederhole
    Linksdrehen
    wiederhole 4 mal
    Schritt
    *wiederhole
    Rechtsdrehen
    Rückwärts
  *wiederhole
*Anweisung

Füge in deinem Programm noch folgende Zeilen hinzu:

Linksdrehen
Schritt
Schritt
Rechtsdrehen
Schritt
Schritt
Schritt
Linksdrehen
wiederhole solange NichtIstZiegel
  Schritt
*wiederhole
Rückwärts
BettBauen

Burg mit Bett Robot Karol

Deine eigene Idee

Was war deine Idee? Kopier den Code in die Kommentare!

Kommentieren Kommentare