Robot Karol: Aufräumen (rundherum): Unterschied zwischen den Versionen

Aus MINT.lentner.net
Zur Navigation springen Zur Suche springen
 
(47 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
[[Robot Karol | >>> zurück zur Übersicht von Robot Karol]]
 
[[Robot Karol | >>> zurück zur Übersicht von Robot Karol]]
  
 +
===Version 1: Aufräumen rundherum===
  
 
===Version 1: Aufräumen rundherum===
 
 
[[Datei: karolraeum1.png |thumb|links|800px|Rundherum Aufräumen]]
 
[[Datei: karolraeum1.png |thumb|links|800px|Rundherum Aufräumen]]
  
 
Beim Bauen der Schwimmbäder haben wir schon gesehen: Wir wollen, dass '''unser Roboter Karol ja möglichst intelligent wird'''. Er sollte im Kapitel 1 (Version 3) sich auf unterschiedliche Raumgrößen selber einstellen können und entscheiden, wie er sich an die neuen Umstände richtig anpasst.  
 
Beim Bauen der Schwimmbäder haben wir schon gesehen: Wir wollen, dass '''unser Roboter Karol ja möglichst intelligent wird'''. Er sollte im Kapitel 1 (Version 3) sich auf unterschiedliche Raumgrößen selber einstellen können und entscheiden, wie er sich an die neuen Umstände richtig anpasst.  
  
Im wirklichen Leben (denken wir an das '''autonome Fahren''') kommen noch viel mehr Unwägbarkeiten dazwischen. Ein anderes Auto fährt uns in die Parade! '''Unerwartete Hindernisse stehen im Weg ...'''
+
Im wirklichen Leben (denken wir an das '''autonome Fahren''') kommen noch viel mehr Unwägbarkeiten dazwischen. Ein anderes Auto fährt uns in die Parade! '''Unerwartete Hindernisse stehen im Weg ...''' (Karol soll trotzdem sein Schwimmbad bauen!)
  
Karol soll trotzdem sein Schwimmbad bauen. Lassen wir für's Erste mal Ziegelsteine im Weg liegen. Dann kann Karol ja ''nicht einfach draufziegeln''! Wir erwarten, dass Karol die Hindernisse zuerst aus dem Weg räumt und dann erst zu bauen beginnt. Das Bewegen in einer schlampigen Welt, in der wir uns bewegen können und aufräumen müssen, können wir in folgendem Code organisieren. Das ist schon fast sowas, wie '''eine Programmbibliothek'''.
+
'''Lassen wir für's Erste mal Ziegelsteine im Weg liegen:''' Dann kann Karol ja ''nicht einfach draufziegeln''! Wir erwarten, dass Karol die Hindernisse zuerst aus dem Weg räumt und dann erst zu bauen beginnt. Das Bewegen in einer schlampigen Welt, in der wir uns bewegen können und aufräumen müssen, können wir in folgendem - unten angegebenen - Code organisieren. Das ist schon fast sowas, wie '''eine Programmbibliothek'''.
  
Karol kennt jetzt: ''GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum''
+
Karol kennt dann: ''GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum''
  
 
5 neue Befehle, die Karol versteht. Wir werden für eine bestimmte Aufgabe nicht immer alle Befehle benutzen, aber laden sie trotzdem immer als unseren Sprachschatz mit herein. Im Hauptprogramm können wir dann einfach immer benutzen, was grade anfällt:
 
5 neue Befehle, die Karol versteht. Wir werden für eine bestimmte Aufgabe nicht immer alle Befehle benutzen, aber laden sie trotzdem immer als unseren Sprachschatz mit herein. Im Hauptprogramm können wir dann einfach immer benutzen, was grade anfällt:
  
'''Tipp:''' Standardmäßig lädt das Programm '''Aufräumen_1.kdp''' auch die Welt '''Aufräumen_1.kdw''' ins Programm. Da liegen nur einzelne Ziegel herum. Karol wird damit fertig. Aber probier' mal '''Aufräumen_1a.kdw''' ins Programm zu laden (Welt >>> Öffne Welt). Da liegen ganze Müllstapel rum. Aber auch damit wird Karol fertig! Jetzt geht's ans's Bauen! :-)
+
'''Tipp:''' Standardmäßig lädt das Programm '''Aufräumen_1.kdp''' auch die Welt '''Aufräumen_1.kdw''' ins Programm. Da liegen nur einzelne Ziegel herum. Karol wird damit fertig. Aber probier' mal '''Aufräumen_1a.kdw''' ins Programm zu laden (Welt >>> Öffne Welt). Da liegen ganze Müllstapel rum. Aber auch damit wird Karol fertig!  
 +
 
 
<br style="clear:left; ">
 
<br style="clear:left; ">
  
Zeile 25: Zeile 25:
 
  Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung<br>
 
  Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung<br>
 
  RäumeRundherum
 
  RäumeRundherum
 +
 +
Jetzt geht's ans's Bauen! :-)
  
 
<br style="clear:left; ">
 
<br style="clear:left; ">
  
===Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - endlich gebaut===
+
===Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - ein Schwimmbad gebaut===
  
[[Datei: karolbad1.png |thumb|links|250px|Einfach nur alle Handgriffe kopieren]]
+
[[Datei: karolraeum2.png |thumb|links|250px|Erst Aufräumen - <br>dann Schwimmbad bauen!]]
  
Im Programmierfenster links kannst Du Karol Anweisungen geben. Bist Du schnell im Schreiben, dann kannst Du einfach '''Schritt''' schreiben, '''LinksDrehen''', u.s.w. und ein Knopfdruck auf den ''Playbutton'' startet Karol. Karol baut jetzt für Dich nach Deinen Anweisungen. Du kannst auch mit der ''rechten Maustaste'' Befehle auswählen und einfügen, ohne sie zu schreiben.
+
Ihr seht - alles fast identisch zu Version 1: Es sind '''nur zwei zusätzliche Anweisungen nötig''' und unser Karol kann jetzt schon:<br>''GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum, ZiegleBisZurWand, ZiegleRundherum''
  
Jetzt kannst Du immer wieder ''starten'' und Karol bei der ''selbstständigen Arbeit'' zusehen.
+
<br style="clear:left; ">
  
Mit den '''Short-Cuts <Strg>+<X>, <Strg>+<C> und <Strg>+<V>''' kannst Du ganze Textblöcke einfach kopieren und sparst Dir viel Schreibarbeit.
+
Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
 +
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
 +
Anweisung Räume solange IstZiegel tue Aufheben *solange *Anweisung
 +
Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung
 +
Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung
 +
Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung
 +
Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung<br>
 +
RäumeRundherum
 +
wiederhole 2 mal ZiegleRundHerum *wiederhole
  
'''Tipp:''' Probier' mal, den ganzen Textblock des Programms unten nochmal 5x zu kopieren, dann baut Karol ein '''5 Reihen hohes Schwimmbad'''!
+
'''Aber:''' Ist es nicht unrealistisch, dass Karol all die Steine tragen kann? Eventuell bekommst Du sogar Fehlermeldungen, dass er das nicht kann. Das kannst Du unter ''"Einstellungen >>> Karol"'' einstellen: "Ob er beliebig viel tragen kann" oder "ob er eine Maximalzahl an Ziegeln hat, jenseits derer ihn das Schmalz verlässt"! Also ...
  
'''Aber:''' Du sagst ja Deinem Lehrling auch nicht 100x '''"Gehe einen Schritt!"''' (eher sagst Du genervt, ''"Das hab ich Dir doch schon 100x gesagt"''. Sondern Du sagst, '''"Gehe 100 Schritte!"''' Kann man Karol auch sagen, dass er etwas 100x machen soll?
+
In der nächsten Version legen wir die Ziegel '''einfach links''' ab, dann muss er lediglich '''einen''' Ziegel immer schleppen. Das wird er ja wohl können! ...
  
 
<br style="clear:left; ">
 
<br style="clear:left; ">
  
//Westseite
+
===Version 3: Aufräumen und Bauen - Nicht schleppen sondern Steine links ablegen ===
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
LinksDrehen
 
//Südseite
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
LinksDrehen
 
//Ostseite
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
LinksDrehen
 
//Nordseite
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
Hinlegen
 
Schritt
 
LinksDrehen
 
  
<br style="clear:left; ">
+
[[Datei: karolraeum3.png |thumb|links|250px|Erst Aufräumen - <br>dann Schwimmbad bauen!]]
  
===Version 2: Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten===
+
Man sieht schön, wie praktisch übersichtliche Bibliotheken sind!
[[Datei: karolbad2.png |thumb|links|250px|Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten]]
 
[[Datei: karolbad3.png |thumb|links|250px|Wie kann ich Karol lernen, dass er sich an die Raumgröße anpasst?]]
 
  
Sieh' Dir mal das Programm unten genau an! Es hat dieselbe Wirkung, wie der ''"irre"'' Befehlstext oben. Ist er nicht 10x einfacher zu verstehen, 10x übersichtlicher? Du kannst offensichtlich auch Befehle hintereinander schreiben statt nur immer untereinander. Dadurch werden auch Sinn-zusammenhängende ''"Codeschnipsel"'' leichter erkennbar.
+
Wir brauchen nur '''einmal''' in der Anweisung '''Räume''' den Befehl ''Aufheben'' durch die Passage ''Aufheben und links ablegen'' ersetzen. Alles Andere bleibt gleich, denn jede andere Tätigkeit benutzt ja unseren Befehl '''Räume''' (oder andere Anweisungen, die selber wiederum '''Räume''' nutzen). Würden wir das Aufheben in allen Anweisungen immer wieder '''im Orginal''' nutzen, müssten wir das '''Aufheben an jeder Stelle ausbessern!''' Das wäre nicht nur unübersichtlich und mühsam. Man würde auch ganz oft etwas vergessen und der Code würde Schritt für Schritt uneinheitlich und fehlerträchtig werden.
 
 
Außerdem musst Du '''nur eine Zahl ändern''', wenn Karol die Strecke nicht 4x sondern vielleicht 10x oder 200x gehen und ziegeln soll.  
 
 
 
'''Aber:''' Karol geht immer stur 4x nach vorne, Kann also nur 5x5 Schwimmbäder bauen. Wenn man aber vorher nicht weiß, wie groß das Grundstück des Kunden ist, sollte man sagen können: Gehe und ziegle sooft wie nötig - also bis zur gegenüber liegenden Wand ...!!!
 
  
 
<br style="clear:left; ">
 
<br style="clear:left; ">
  
  wiederhole 4 mal
+
  Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
  Hinlegen Schritt
+
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung<br>
  Hinlegen Schritt
+
Anweisung Räume
  Hinlegen Schritt
+
    //Aufheben und links ablegen
  Hinlegen Schritt
+
    solange IstZiegel tue Aufheben LinksDrehen Hinlegen RechtsDrehen *solange
  LinksDrehen
+
*Anweisung<br>
  *wiederhole
+
Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung
 +
Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung
 +
Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung
 +
Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung<br>
 +
RäumeRundherum
 +
  wiederhole 2 mal ZiegleRundHerum *wiederhole
  
<br style="clear:left; ">
+
Klappt hervorragend mit der Welt ''Aufräumen_3.kdw''.
  
===Version 3: Wiederholungen an veränderte Bedingungen anpassen + Mit Anweisungen Karol zur Selbstständigkeit erziehen===
+
'''Aber:''' Probiert mal Version 3 mit der Welt ''Aufräumen_2.kdw''! '''Wenn am 2. Platz einer Wand ein Ziegel liegt, dann steht Karol beim Aufheben genau im Eck und legt den Ziegel links daneben ab. Links daneben ist aber in dem Fall ebenfalls am Rand! Beim Bauen ist dann der Bauplatz nicht sauber und Karol ziegelt über den Müll drüber!!!'''
[[Datei: karolbad4.png |thumb|links|800px|Mit Wiederholungen alles einfacher, flexibler und übersichtlicher gestalten]]
 
  
Karol kann mit Bedingungen die Umgebung abfragen. Zum Beispiel gibt es die Bedingung '''IstWand'''. Schreibt man diesen Ausdruck im Programmtext, dann schaut Karol, ob vor ihm eine Wand ist. Die Bedingung '''NichtIstWand''' schaut, ob vor ihm '''keine Wand''' - also frei ist.
+
In der nächsten Version heilen wir den Fehler dadurch, dass wir im Eck den Ziegel einfach daneben ablegen, dann passt alles!
  
 
<br style="clear:left; ">
 
<br style="clear:left; ">
  
Die Wiederholung:  
+
===Version 4: Aufräumen und Bauen - Nicht schleppen sondern Steine links ablegen - diesmal immer richtig===
  
solange NichtIstWand tue
+
[[Datei: karolraeum4.png |thumb|links|250px|Erst Aufräumen - <br>dann Schwimmbad bauen!]]
    Schritt
 
*solange
 
  
wiederholt dann den Befehl '''Schritt''', solange vor ihm frei ist! - Bingo! :-)
+
Diesmal legt sich Karol beim Aufräumen die Steine nicht in den zukünftigen Weg! Wieder nur ein chirurgischer Eingriff an einer Stelle!
  
'''Nicht alles immer wieder sagen - Anweisungen definieren:'''<br>
+
'''Aber:''' Woher weiß Karol im Eck, dass hinter ihm Wand ist? Dazu müsste er sich '''jedesmal''' umdrehen und schauen, ob dort eine Wand hinter ihm ist! Erstens kommt das ständig vor. Wir erstellen diesmal also eine eigene Bedingung ''"istImRückenWand"'', um das immer wieder abzufragen. Zweitens aber '''zappelt er an jeder Stelle, weil er ständig sich umdreht, und schaut, ob nicht da Wand ist!''' Man kann für solche Fälle den Befehl '''schnell''' benutzen. Dann unterdrückt das Programm das ständige Anzeigen jeder Bewegung (nur um etwas anzuschauen). Am Ende der Bedingung stellen wir wieder auf '''langsam''' und jede Bewegung wird wieder angezeigt.
Man sollte Karol nicht immer wieder anschaffen müssen, was es heißt, bis zur Wand zu gehen. Wir lernen ihm '''einmal''', wie das geht, '''bis zur Wand zu gehen''', wir erstellen sozusagen '''einen eigenen neuen Befehl''':
 
  
Anweisung GeheBisZurWand
+
<br style="clear:left; ">
  solange NichtIstWand tue
 
    Schritt
 
  *solange
 
*Anweisung
 
  
Und schon weiß Karol, was es heißt: '''GeheBisZurWand'''. Ab da kann man den neuen Befehl benutzen, um Karol immer neue Befehlte zu erteilen.
+
Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
 
+
  Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung<br>
  Anweisung GeheRundherum
+
Bedingung IstImRückenWand
  wiederhole 4 mal
+
  schnell
    GeheBisZurWand LinksDrehen
+
  LinksDrehen LinksDrehen
  *wiederhole
+
  wenn IstWand dann wahr sonst falsch *wenn
*Anweisung
+
  LinksDrehen LinksDrehen
 
+
  langsam
Am Ende müssen wir Karol nur noch sagen: GeheRundherum
+
*Bedingung<br>
 
+
  Anweisung Räume
'''Das komplette Programm lautet dann:'''
+
  solange IstZiegel tue
 
+
      wenn IstImRückenWand dann
  Anweisung GeheBisZurWand
+
        //Legt den Ziegel am Platz daneben ab
  solange NichtIstWand tue
+
        Aufheben LinksDrehen Schritt RechtsDrehen Hinlegen RechtsDrehen Schritt LinksDrehen
    Schritt
+
      sonst
  *solange
+
        Aufheben LinksDrehen Hinlegen RechtsDrehen
 +
      *wenn
 +
  *solange
 
  *Anweisung<br>
 
  *Anweisung<br>
  Anweisung GeheRundherum
+
  Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung
  wiederhole 4 mal
+
Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung
    GeheBisZurWand LinksDrehen
+
Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung
  *wiederhole
+
  Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung<br>
  *Anweisung<br>
+
  RäumeRundherum
  GeheRundherum
+
wiederhole 2 mal ZiegleRundHerum *wiederhole
  
'''Aber:''' Karol baut ja noch nix ...
+
Perfekt!
 
 
'''Aber:''' Karol muss ja nur noch einen Stein ablegen, bevor er in der Anweisung GehBisZurWand weitergeht ...
 
  
 
<br style="clear:left; ">
 
<br style="clear:left; ">
 
===Version 4: Ein beliebig hohes Schwimmbad in einem beliebig großen Raum bauen (lassen)...===
 
[[Datei: karolbad5.png |thumb|links|250px|Bingo]]
 
 
 
 
<br style="clear:left; ">
 
 
Anweisung ZiegleBisZurWand
 
  solange NichtIstWand tue
 
      Hinlegen Schritt
 
  *solange
 
*Anweisung<br>
 
Anweisung ZiegleRundherum
 
  wiederhole 4 mal
 
      ZiegleBisZurWand LinksDrehen
 
  *wiederhole
 
*Anweisung<br>
 
//Hauptprogramm
 
wiederhole 5 mal
 
    ZiegleRundherum
 
*wiederhole
 

Aktuelle Version vom 3. Mai 2021, 08:55 Uhr

>>> zurück zur Übersicht von Robot Karol

Version 1: Aufräumen rundherum

Rundherum Aufräumen

Beim Bauen der Schwimmbäder haben wir schon gesehen: Wir wollen, dass unser Roboter Karol ja möglichst intelligent wird. Er sollte im Kapitel 1 (Version 3) sich auf unterschiedliche Raumgrößen selber einstellen können und entscheiden, wie er sich an die neuen Umstände richtig anpasst.

Im wirklichen Leben (denken wir an das autonome Fahren) kommen noch viel mehr Unwägbarkeiten dazwischen. Ein anderes Auto fährt uns in die Parade! Unerwartete Hindernisse stehen im Weg ... (Karol soll trotzdem sein Schwimmbad bauen!)

Lassen wir für's Erste mal Ziegelsteine im Weg liegen: Dann kann Karol ja nicht einfach draufziegeln! Wir erwarten, dass Karol die Hindernisse zuerst aus dem Weg räumt und dann erst zu bauen beginnt. Das Bewegen in einer schlampigen Welt, in der wir uns bewegen können und aufräumen müssen, können wir in folgendem - unten angegebenen - Code organisieren. Das ist schon fast sowas, wie eine Programmbibliothek.

Karol kennt dann: GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum

5 neue Befehle, die Karol versteht. Wir werden für eine bestimmte Aufgabe nicht immer alle Befehle benutzen, aber laden sie trotzdem immer als unseren Sprachschatz mit herein. Im Hauptprogramm können wir dann einfach immer benutzen, was grade anfällt:

Tipp: Standardmäßig lädt das Programm Aufräumen_1.kdp auch die Welt Aufräumen_1.kdw ins Programm. Da liegen nur einzelne Ziegel herum. Karol wird damit fertig. Aber probier' mal Aufräumen_1a.kdw ins Programm zu laden (Welt >>> Öffne Welt). Da liegen ganze Müllstapel rum. Aber auch damit wird Karol fertig!


Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
Anweisung Räume solange IstZiegel tue Aufheben *solange *Anweisung
Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung
Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung
RäumeRundherum

Jetzt geht's ans's Bauen! :-)


Version 2: Jetzt wird - nach eventuellem Aufräumen vorher - ein Schwimmbad gebaut

Erst Aufräumen -
dann Schwimmbad bauen!

Ihr seht - alles fast identisch zu Version 1: Es sind nur zwei zusätzliche Anweisungen nötig und unser Karol kann jetzt schon:
GeheBisZurWand, GeheRundHerum, Räume, RäumeBisZurWand, RäumeRundHerum, ZiegleBisZurWand, ZiegleRundherum


Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
Anweisung Räume solange IstZiegel tue Aufheben *solange *Anweisung
Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung
Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung
Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung
Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung
RäumeRundherum wiederhole 2 mal ZiegleRundHerum *wiederhole

Aber: Ist es nicht unrealistisch, dass Karol all die Steine tragen kann? Eventuell bekommst Du sogar Fehlermeldungen, dass er das nicht kann. Das kannst Du unter "Einstellungen >>> Karol" einstellen: "Ob er beliebig viel tragen kann" oder "ob er eine Maximalzahl an Ziegeln hat, jenseits derer ihn das Schmalz verlässt"! Also ...

In der nächsten Version legen wir die Ziegel einfach links ab, dann muss er lediglich einen Ziegel immer schleppen. Das wird er ja wohl können! ...


Version 3: Aufräumen und Bauen - Nicht schleppen sondern Steine links ablegen

Erst Aufräumen -
dann Schwimmbad bauen!

Man sieht schön, wie praktisch übersichtliche Bibliotheken sind!

Wir brauchen nur einmal in der Anweisung Räume den Befehl Aufheben durch die Passage Aufheben und links ablegen ersetzen. Alles Andere bleibt gleich, denn jede andere Tätigkeit benutzt ja unseren Befehl Räume (oder andere Anweisungen, die selber wiederum Räume nutzen). Würden wir das Aufheben in allen Anweisungen immer wieder im Orginal nutzen, müssten wir das Aufheben an jeder Stelle ausbessern! Das wäre nicht nur unübersichtlich und mühsam. Man würde auch ganz oft etwas vergessen und der Code würde Schritt für Schritt uneinheitlich und fehlerträchtig werden.


Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
Anweisung Räume //Aufheben und links ablegen solange IstZiegel tue Aufheben LinksDrehen Hinlegen RechtsDrehen *solange *Anweisung
Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung
RäumeRundherum wiederhole 2 mal ZiegleRundHerum *wiederhole

Klappt hervorragend mit der Welt Aufräumen_3.kdw.

Aber: Probiert mal Version 3 mit der Welt Aufräumen_2.kdw! Wenn am 2. Platz einer Wand ein Ziegel liegt, dann steht Karol beim Aufheben genau im Eck und legt den Ziegel links daneben ab. Links daneben ist aber in dem Fall ebenfalls am Rand! Beim Bauen ist dann der Bauplatz nicht sauber und Karol ziegelt über den Müll drüber!!!

In der nächsten Version heilen wir den Fehler dadurch, dass wir im Eck den Ziegel einfach daneben ablegen, dann passt alles!


Version 4: Aufräumen und Bauen - Nicht schleppen sondern Steine links ablegen - diesmal immer richtig

Erst Aufräumen -
dann Schwimmbad bauen!

Diesmal legt sich Karol beim Aufräumen die Steine nicht in den zukünftigen Weg! Wieder nur ein chirurgischer Eingriff an einer Stelle!

Aber: Woher weiß Karol im Eck, dass hinter ihm Wand ist? Dazu müsste er sich jedesmal umdrehen und schauen, ob dort eine Wand hinter ihm ist! Erstens kommt das ständig vor. Wir erstellen diesmal also eine eigene Bedingung "istImRückenWand", um das immer wieder abzufragen. Zweitens aber zappelt er an jeder Stelle, weil er ständig sich umdreht, und schaut, ob nicht da Wand ist! Man kann für solche Fälle den Befehl schnell benutzen. Dann unterdrückt das Programm das ständige Anzeigen jeder Bewegung (nur um etwas anzuschauen). Am Ende der Bedingung stellen wir wieder auf langsam und jede Bewegung wird wieder angezeigt.


Anweisung GeheBisZurWand solange NichtIstWand tue Schritt *solange *Anweisung
Anweisung GeheRundHerum wiederhole 4 mal GeheBisZurWand LinksDrehen *wiederhole *Anweisung
Bedingung IstImRückenWand schnell LinksDrehen LinksDrehen wenn IstWand dann wahr sonst falsch *wenn LinksDrehen LinksDrehen langsam *Bedingung
Anweisung Räume solange IstZiegel tue wenn IstImRückenWand dann //Legt den Ziegel am Platz daneben ab Aufheben LinksDrehen Schritt RechtsDrehen Hinlegen RechtsDrehen Schritt LinksDrehen sonst Aufheben LinksDrehen Hinlegen RechtsDrehen *wenn *solange *Anweisung
Anweisung RäumeBisZurWand solange NichtIstWand tue Räume Schritt *solange *Anweisung Anweisung RäumeRundHerum wiederhole 4 mal RäumeBisZurWand LinksDrehen *wiederhole *Anweisung Anweisung ZiegleBisZurWand solange NichtIstWand tue Hinlegen Schritt *solange *Anweisung Anweisung ZiegleRundherum wiederhole 4 mal ZiegleBisZurWand LinksDrehen *wiederhole *Anweisung
RäumeRundherum wiederhole 2 mal ZiegleRundHerum *wiederhole

Perfekt!