Die vorliegenden Materialien wurden von Daniel Hoherz und André Tempel erstellt. Sollten andere Editoren die Materialien erstellt haben, werden diese explizit genannt.
Es ist ein warmer Sommertag und du möchtest unbedingt mit befreundeten Personen ins neu eröffnete Schwimmbad „SmartWave Aquapark“ gehen. In dem Schwimmbad sind viele Smart Devices und auch Roboter integriert, welche in verschiedenen Aspekten des alltäglichen Betriebs und der Wartung unterstützen.
Da du dich sowieso für Programmierung interessierst, fällt dir ein Schild am Eingang auf, auf dem ein Ferienjob als Programmierer für die verschiedenen Geräte gesucht wird. Die zur Programmierung der Geräte genutzte Programmiersprache ist Scratch3.
Mit Scratch3 lassen sich Programme schreiben. Du kannst es unter diesem Link aufrufen und direkt in deinem Browser nutzen (was wir aber jetzt nicht machen werden!).
Ähnliche wie in OpenRoberta Lab lassen sich auch hier die Blöcke in den mittleren Bereich ziehen und aneinderkleben. Durch das Ausführen des Programms wird die Figur oben rechts in Aktion gebracht.
Mache dich mit der Programmoberfläche vertraut. Klicke die einzelnen Bereiche an und untersuche, was man auswählen und einstellen kann. Zum Beispiel kannst du die Sprache auf Deutsch stellen. Die Beschriftung an der obigen Skizze ist eine erste Orientierung.
Schreib ein erstes Programm, indem du den Roboter „Service1“ so programmierst, dass dieser beim Drücken einer Taste immer ein kleines Stück nach rechts und beim Drücken einer anderen Taste nach links geht. Der Block mit der grünen Flagge startet ein Programm.
Halte dich an die Vorgehensweise in Open Roberta, indem du nur einen Startblock nutzt. Hilfreiche Blöcke sind:
Setze nun auch entsprechend die Bewegung nach oben und unten um.
Speichere dein Projekt unter einem sinnvollen Namen ab.
Setze deine Lösung aus c) mit Hilfe der folgenden Blöcke, anstelle der „ändere x bzw. y um…“-Blöcke um:
Dir wird wahrscheinlich aufgefallen sein, dass unser Serviceroboter immer nach rechts schaut. Das sieht natürlich nicht gut aus, wenn er nach links gehen soll. Um dieses Problem zu beheben, schauen wir uns den Bereich Kostüme ein wenig genauer an.
Die Lösung ist, das Kostüm der Figur zu duplizieren und horizontal zu spiegeln. So erhält man ein passendes Kostüm, wenn die Figur nach links gehen soll. Die beiden Kostüme muss man nun nur noch entsprechend dem Links- und Rechtsgehen zuweisen.
Um Figuren nach Bedarf anzuzeigen, sie zu verstecken oder Kostüme zuzuweisen, helfen die folgenden Blöcke aus dem Bereich Aussehen.
Erweitere dein bisheriges Programm, sodass der Roboter auch nach Links und Rechts schaut, wenn er sich in diese Richtung bewegt. Benenne das Kostüm, welches nach Rechts schaut, mit 1. Analog dazu das Kostüm für das Schauen Links mit 2.
Erweitere auch dein Programm aus dem Aufgabenteil c) entsprechend. Wir werden im folgenden Aufgabenteil mit diesem weiterarbeiten.
Speichere dein Projekt unter einem sinnvollen Namen ab.
Unser Aquapark hat natürlich einen Imbisstand. Die Serviceroboter sollen auch Bestellungen abholen und zur Kundschaft bringen können. Wenn ein Kunde z. B. einen Burger bestellt hat, liegt das fertige Produkt beim Imbiss.
Im folgenden Verlauf soll der Serviceroboter eine Burgerbestellung abholen. Dazu benötigst du zunächst einen Burger.
Möchte man weitere Figuren hinzufügen, gibt es den Bereich „Figur wählen“.
Lade den Burger hier als Bild herunter und füge ihn als neue Figur in dein Projekt hinzu.
Ergänze nun das bisherige Programm des Roboters um die folgenden Aspekte.
Zu Beginn des Programms soll der Roboter die folgenden Dinge tun:
Er soll an die Position x=-150, y=100 gehen.
Der Roboter soll zu Beginn des Programms nach rechts schauen.
Die Größe des Roboters soll auf 300 gesetzt werden.
Speichere dein Projekt unter einem sinnvollen Namen ab. Wir werden mit diesem weiterarbeiten.
Um eine Interaktion zwischen dem Serviceroboter und dem Burger zu ermöglichen, arbeiten wir mit dem Senden und Empfangen von Nachrichten.
Eine Figur kann eine Nachricht aussenden, während eine andere Figur beim Empfang dieser Nachricht eine Aktion ausführen kann. Die hierfür benötigen Blöcke sind:
Erweitere das Programm deines Serviceroboters um die folgenden Aspekte:
Beim Programmstart soll die Nachricht „Burgerbestellung“ gesendet und gewartet werden.
Falls der Burger berührt wird, soll die Nachricht „Einsammeln“ gesendet und gewartet werden.
Implementiere ein Programm für den Burger mit den folgenden Aspekten:
Wenn der Burger die Nachricht „Burgerbestellung“ empfängt, soll er sich zeigen und anschließend für 2 Sekunden sagen „Der Burger ist fertig!“.
Wenn der Burger die Nachricht „Einsammeln“ empfängt, soll er für 2 Sekunden sagen „Der Burger wurde eingesammelt!“ und sich anschließend verstecken.
Du hast nun drei verschiedene Teilprogramme, eins beim Serviceroboter und zwei beim Burger.
Analysiere, wie die Ausführungsreihenfolge bei deinen drei Programmen funktioniert.
Hierfür sollst du zunächst untersuchen, wie der Computer nach im Programm des Burgers arbeitet.
Danach untersuchst du, wie ab dem folgenden Programmteil des Burgers gearbeitet wird:
Speichere nun dein fertiges Programm geeignet ab.
Um die Bewegung des Roboters über einen Zeitraum nachzuverfolgen, ist es hilfreich, sich den zurückgelegten Weg auf einer digitalen Karte des Aquapark-Geländes anzeigen zu lassen. Hierfür können Figuren eine Spur bei ihrer Bewegung hinterlassen.
Zunächst musst du unten links im Fenster eine „Erweiterung hinzufügen“ (1.) und anschließend die Erweiterung „Malstift“ anwählen (2.). Nun gibt es im Bereich „Malstift“ Zeichenoptionen (3).
Jedes Objekt verfügt über einen Stift. Mit den passenden Befehlen aus dem Bereich „Malstift“ stellt man die gewünschte Farbe, Dicke usw. ein. Bewegt sich eine Figur auf der Bühne und wurde vorher „schalte Stift ein“ ausgeführt, so wird die Bewegung mitgezeichnet. Möchte man dies deaktivieren, muss man „schalte Stift aus“ ausführen.
Lösche dein altes Skript aus deiner Scratchanwendung. Den Burger benötigst du vorerst auch nicht mehr. Entferne ihn.
Erstelle zunächst einen Programmteil, welcher beim Drücken der Taste „r“ die folgenden Dinge macht:
Alle Zeichnungen werden gelöscht.
Der Stift wird angehoben.
Der Serviceroboter geht zum Punkt x=0, y=0.
Der Serviceroboter schaut nach rechts und zieht das Kostüm 1 an.
Nun wird der Stift abgesetzt.
Erläutere, weshalb die Aktion „Stift hoch“ integriert werden muss.
Schreibe nun je einen weiteren Programmteil, welches den Roboter mit dem Stift ein Quadrat, ein Rechteck und ein Dreieck zeichnen lässt. Vergiss nicht, Wiederholungen zu nutzen, um deine Programmteile möglichst kurz zu gestalten.
Hierbei soll beim Drücken einer bestimmten Taste, die jeweilige Figur gezeichnet werden.
Optional: Versuche auch schwierigere Figuren wie Fünfecke und Sechsecke zu zeichnen.
Tipp: Überlege dir vorher, um wie viel Grad sich die Figur dabei immer drehen muss. Versuche eine Formel herauszufinden, mit der man den Winkel ausrechnen kann, wenn man die Eckenanzahl kennt. Hierbei hilft es sich deutlich zu machen, um wie viel Grad sich der Roboter dreht, wenn er sich nach dem Zeichnen einer dieser Figuren einmal im Kreis gedreht hat und wie viel Grad dann jede einzelne Drehung haben muss.
Begründe, dass deine Programmteile so arbeiten, dass immer klar ist, welche Anweisung ausgeführt
wird.
(Partnerarbeit) Jetzt betrachten wir den Imbiss, in dem die Burger, Pommes und auch Getränke zubereitet und ausgegeben werden. Auch der Imbiss wird automatisiert betrieben. Der Imbissangestellte ist ein Roboter, der von den Gästen meist nur „Foody“ genannt wird.
Wenn man eine Bestellung aufgeben möchte, werden, nach einer Begrüßung, zunächst zwei Fragen gestellt.
Erstelle ein neues und leeres Scratchszenario.
Entferne die Scratchkatze und füge den Pommesroboter aus dem Einstiegsszenario ein.
Um diese Funktionalität umzusetzen, schauen wir uns die Interaktion mit einer Nutzerin/einem Nutzer genauer an.
Im Bereich „Fühlen“ gibt es die Möglichkeit, das Programm eine Frage stellen zu lassen. Anschließend
kann man eine Antwort eingeben.
Die Antwort kann dann mit den Block „Antwort“ aus dem Bereich „Fühlen“ genutzt werden.
Der Imbissroboter fragt zunächst, wer bestellt und anschließend, was bestellt wird. Wenn beides gesagt wurde, soll er zusammenfassen sagen, wer gerade bestellt hat und was diese Person bestellt hat.
Analysiere die folgende Idee hinsichtlich ihrer Funktionsweise und entscheide, was am Schluss ausgegeben wird, wenn die erste Antwort „Anna“ und die zweite „Pommes“ ist.
Erläutere, weshalb das Programm nicht das macht, was es soll.
An unserem Beispiel zum Gespräch mit dem Imbissroboter wird deutlich, dass sich ein Computer häufig etwas „merken“ muss. Er benötigt eine Art Gedächtnis.
Schaut man sich alle Blöcke an, wird man keinen finden, der automatisch irgendeinen Wert hoch- oder runterzählt. Hierfür gibt es beim Programmieren Variablen.
Beim Beispiel mit den beiden Antworten erkennt man, dass Variablen für Algorithmen sehr wichtig sind. Sie werden für die folgenden Dinge verwendet:
Speichern von Informationen, die der Algorithmus später noch benötigt.
Berechnungen durchzuführen.
Variablen ermöglichen einer Maschine also eine Art Gedächtnis zu besitzen. Doch wie kann man sich das beim Computer mit dem Merken vorstellen?
Sehr vereinfacht kannst du dir vorstellen, dass der Speicher eines Computersystems wie ein Schrank mit verschiedenen Schubladen ist.
Wenn man eine Variable erstellt, fachsprachlich nennt man das deklariert, muss dem Computer immer ein Datentyp und der Name der Variable gegeben werden.
Ein Datentyp sagt dem Computer, welche Art von Daten unter dem Namen der Variablen gespeichert werden darf. Für unser Beispiel ist die Variable eine Zahl, da wir etwas damit zählen lassen müssen. Und unsere Variable soll den Namen anzahl bekommen.
Jetzt sucht der Computer eine noch freie Schublade und schreibt sowohl den Datentyp, wie auch den Namen der Variablen auf diese Schublade.
Jeder in Scratch deklarierten Variablen wird ein Startwert zugewiesen. Diesen Vorgang nennt man initialisieren. Der Computer öffnet nun die entsprechende Schublade und legt den Startwert, bei uns 0, hinein.
Nun sagen wir dem Computer, dass er den Wert der Variablen anzahl auf 2 setzen soll. Dazu sucht der Computer sucht die Schublade auf der anzahl steht, öffnet diese und legt die Zahl 2 hinein. Anschließend schließt der die Schublade wieder.
Achtung: Das Beispiel mit dem Setzen der Variablen anzahl auf den Wert 2 funktioniert nur, weil „2“ eine Zahl ist.
Würde man versuchen der Variablen anzahl ein einzelnes Zeichen, z. B. ‚a‘, oder eine Zeichenkette, z. B. „Hallo Computer!“, als neuen Wert zuweisen, funktioniert das nicht. Der Computer sucht nämlich nicht nur die Schublade mit dem Namen anzahl, sondern er überprüft auch, ob der Datentyp auf der Schublade zum übergebenen Wert passt.
(Partnerarbeit) Im folgenden Verlauf soll ein Programm für das Bestellgespräch mit dem Imbissroboter implementiert werden.
Einem neuen Gast stellt der Roboter zunächst drei Fragen und sagt nach jeder Antwort, was genau geantwortet wurde.
Implementiere zunächst ein entsprechendes Skript mit den Fragen nach dem Namen des Gastes, welches Essen er bestellen möchte und wie viele dieser Essen er bestellen möchte.
Integriere ebenfalls geeignete Antworten des Imbissroboters.
Verändere dein Programm so, dass die drei Antworten gespeichert werden und am Ende eine Zusammenfassung der Bestellung gesagt wird, in der die drei Antworten genutzt werden.
Erläutere, weshalb für die Lösung von Aufgabenteil b) eine Variable notwendig ist.
(optional) Implementiere weitere Erweiterungen. Diese können z. B. sein:
Nach dem ersten Gast, kann ein zweiter Gast bestellen,
Fragen mit mehreren Antwortmöglichkeiten,
Man kann auch noch Getränke bestellen,
…
Du darfst dir auch eigene Erweiterungen ausdenken.
Da sich der Imbissroboter gerade in einer Testphase befindet kann er gerade nur Hamburger und Pommes als Bestellung aufnehmen. Nachdem der Gast du Bestellung bestätigt hat, soll der Imbissroboter die Bestellung sosoft abrechnen. Dazu multipliziert der Impissroboter die Anzahl an bestellten Produkten, merkt sich diesen und zeigt diesen an. Hamburger kosten 5€ und Pommes 3€.
Implementiere diesen Sachverhalt.
(optional) Damit das funktioniert, darf der Gast aber auch nur Hamburger oder Pommes antworten. Baue eine Sicherung ein, sodass bei jeder falschen Eingabe des Gastes, dieser aufgefordert wird, seine Eingabe zu korrigieren.
(optional) Der Gast soll natürlich auch bezahlen. Dazu gibt er den Betrag als Antwort ein. Falls der Betrag zu gering ist, sagt der Imbissroboter den fehlenden Betrag an und wartet auf die erneute Eingabe. Wenn der Betrag zu viel ist, gibt der Imbissroboter in Form einer Ansage das Wechselgeld zurück und falls der Betrag stimmt, bedankt er sich und der Dialog ist beendet.
Erweitere das Programm entsprechend.
(optional) Nachdem der Imbissroboter die Bestellung aufgenommen und wiederholt hat, soll er nochmal fragen, ob die Angaben so korrekt sind. Gibt der Gast „ja“ als Antwort, ist alles in Ordnung. Gibt der Gast allerdings „nein“ als Antwort, dann soll der Imbissroboterdie Frage erneut wiederholen.
Erweitere dein bisheriges Programm, sodass diese Anforderung erfüllt wird. Du brauchst hier eine Schleife.
Für Kinder unter 10 Jahren ist in dem Imbissroboter noch ein kleines Gewinnspiel eingebaut. Kinder geben ihr Alter ein und wenn sie jünger als 10 sind, dann würfelt der Roboter für sie einen Würfel (1-6) und wenn eine 6 gewürfelt wurde, dann erhalten sie einen gesunden Obstsalat als Nachspeise.
Implentiere diese Abfrage unter Verwendung von Variablen in einem neuen Programm.
(Partnerarbeit) Um die Bestellungen mehrerer Gäste abarbeiten zu können, muss das bisherige Dialogprogramm erweitert werden.
Deine Chefin beauftragt dich, die folgenden Anforderungen umzusetzen:
Zu Beginn des Programms soll der Imbissroboter wieder an seine Startposition x=0, y=0 gehen.
Nun sollen die drei Fragen nach dem Namen, dem Essen und der Anzahl der Essen solange gefragt werden, bis kein weiterer Gast mehr etwas bestellen möchte.
Die Namen, Essen und die Anzahl soll in einer neuen Datenstruktur, einer Liste, gespeichert werden, um die Bestellungen in einer anderen Aufgabe für den Küchenroboter vorzubereiten.
Erstelle in einer neuen Datei eine Variable vom Datentyp Liste und probiere mit die verschiedenen Blöcke für deine Liste aus, indem du einfach verschiedene Zahlen in deiner Liste speicherst.
Hinweis: Die abgerundeten Blöcke kannst du z. B. für eine Ausgabe verwenden und der unterste Block ist eine Bedingung.
Wähle eine der beiden Varianten aus:
Der QR-Code unten zeigt dir einen Teil des Programms.
Analysiere die Funktionsweise und begründe, was die Variable „gast“ bewirkt und wozu sie notwendig ist.
Begründe weiterhin, weshalb für die Umsetzung dieser Aufgabe noch mindestens drei weitere Variablen und eine fünfte Variable für die Liste notwendig sind.
Um die Funktionalität, eine unbekannte Anzahl von Gästen abzuarbeiten, umzusetzen, wird eine Schleife mit einer Abbruchbedingung, eine bedingte Schleife, benötigt.
Für die Bedingung erstellt man eine eigene Variable. Der Imbissroboter muss an der korrekten Stelle im Algorithmus fragen, ob weitere Bestellungen getätigt werden sollen. Wenn dann mit „Nein“ geantwortet wird, soll die Schleife nicht weiter ausgeführt werden.
Begründe weiterhin, weshalb für die Umsetzung dieser Aufgabe noch mindestens drei weitere Variablen und eine fünfte Variable für die Liste notwendig sind.
Implementiere ein Programm, dass die Anforderungen deiner Chefin umsetzt. Eine Liste erstellst du unter dem Bereich „Variablen“.
Du wirst für die Umsetzung, unter anderem, die folgenden Blöcke benötigen.
Die Bestellungen sollen nun für den Küchenroboter vorbereitet werden.
Hierzu soll eine weitere Liste, für die erhältlichen Speisen erstellt werden. Die erhältlichen Speisen sind Burger, Pommes, Salat.
In der zweiten Liste mit dem Namen „Küche“ soll jeweils die Anzahl der bestellten Speisen gezählt werden. Die erste Zahl in der Liste Küche steht für Burger, die zweite für Pommes und die dritte für Salat.
Zu Beginn solltest du auch die Liste Küche immer leeren und dreimal 0 zur Liste Küche hinzufügen.
Du wirst für die Umsetzung eventuell auch die folgenden Block neu nutzen müssen.
Speichere dein Programm unter einem sinnvollen Namen ab.