In scratch kann man Spiele (und auch andere Dinge) programmieren.
Die offensichtlichen Dinge in Scratch sind die Figuren (Objekte) wie die Katze.
Die Figuren befinden sich auf der Bühne. Die Figuren können sich bewegen, unterschiedliches Aussehen bekommen, Sprechblasen anzeigen oder Klänge ausgeben.
Wie die Figuren sich verhalten wird über Programme (Skripte) gesteuert. Diese verwenden auch Variablen, um sich etwas zu merken.
Um all diese Dinge zu einem sinnvollen Spiel zusammenzubauen können sich die Objekte Signale schicken.
Die folgenden Kapitel stellen diese Elemente vor und zeigen, wie man damit umgeht.
Es erfordert ein wenig Ausdauer, sich da durchzuarbeiten.
Das Bild zeigt den Aufbau von Scratch 1. Das Programm wurde bisher im Kurs verwendet und viele Bilder in diesem Text stammen noch von diesem Programm.
Das Bild zeigt den Aufbau von Scratch 3. Obwohl die grafische Gestaltung etwas moderner ist sind die wesentlichen Elemente unverändert.
Die Bühne ist im Bild relativ klein. Oben rechts an der Bühne kann man die Grösse einstellen. Auch der Präsentationsmodus ist dort zu finden. Im Präsentationsmodus wird nur die Bühne angezeigt.
Skripte steuern die Abläufe im Programm. Also das 'was passiert'.
Skripte gehören zu Objekten, ein Objekt kann mehrere Skripte enthalten. Skripte in Scratch bestehen aus Steuerungselementen und den 'Arbeitslementen'.
Wann läuft ein Skript los, wie reagiert Scratch auf Mausklicks, Wiederholungen und Entscheidungen werden mit Steuerungselementen bewerkstelligt.
Die Farbe dieser Elemente ist
orange in der Palette.
Skripte müssen gestartet werden, die laufen nicht einfach los. Es gibt mehrere Methoden ein Skript zu starten:
wenn die Flagge gedrückt wird,
bei Tastendrücken
oder bei Signalen ('senden' und 'empfangen', „wenn ich 'hallo' empfange“)
Die Flagge wird üblicherweise verwendet um ein Spiel zu starten.
Gestartete Skripte bekommen einen hellen Rahmen.
Man kann auch einfach Befehle, eine Reihe von Befehlen oder ein ganzes Skript mit der Maus anklicken und es läuft los. Das funktioniert sogar für Elemente, die noch in der Palette liegen. Diese Möglichkeit ist als Hilfe bei der Programmentwicklung vorgesehen; im Präsentationsmodus kann das nicht mehr benutzt werden.
Wenn ein Programmablauf mal so, mal anders laufen muss, dann sind Entscheidungen nötig.
Beispiel in Pseudocode:
Falls 'es regnet' spanne den Regenschirm auf sonst klappe den Regenschirm zu.
Bedingungen haben die Werte 'wahr' oder 'falsch'.
Meist sind Bedingungen etwas komplizierter als wie im obigen
Beispiel.
Dann können Bedingungen mit 'UND', 'ODER' oder auch 'NICHT' aus mehreren Teilen miteinander kombiniert werden. Diese 'logischen Operatoren' UND, ODER, NICHT findet man in 'Operatoren'
Diese logischen Operatoren sind mit spitzen Ecken ausgestattet.
Siehe auch Scratchreferenzhandbuch , Seite 14. Dort sind diese logischen Operatoren unter 'Zahlen' aufgeführt (was nicht ganz passt).
Manchmal muss man Dinge mehrmals tun. „Gehe 20 Schritte bis zum Schatz“ zum Beispiel. Dafür gibt es die Wiederholungselemente.
Aufgabe
![]() |
Erstelle das Programm in Scratch und lasse es laufen. Was passiert, wenn man die Wartezeit auf 0 stellt. Oder auf 2sek ? |
Bei den Wiederholungen gibt es die, welche etwas eine bestimmte Anzahl oft tun, die eine Bedingung haben und die einfach ohne Bedingung funktionieren.
Bei den Wiederholungen gibt es zwei 'Geschmacksrichtungen', solche die unten keine Andockmöglichkeit haben und andere, wo unten weitere Elemente angefügt werden können.
Die Farbe der Variablen ist orange in der Palette.
Die Farbe der Operatoren ist grün in der Palette.
Allgemein gesagt: wenn man sich was merken will. Und weil das so wichtig ist, ist dieses Kapitel relativ umfangreich.
Variablen sind 'Datenspeicher', die einen Namen haben und einen Wert.
Beispiel: meine Hausnummer ist 7 . Hier ist der Name der Variablen 'Hausnummer', der Wert ist '7'.
Beispiel: mein Lieblingsessen ist Pizza . Hier ist der Name der Variablen 'Lieblingsessen', der Wert ist 'Pizza'.
Variablen werden in scratch angelegt (erhalten einen Namen). Dann können Werte zugewiesen werden oder Werte verändert werden.
So etwas ähnliches wie 'Variablen' gibt es auch in der Mathematik. Dort werden sie auch als 'Platzhalter' bezeichnet.
Die Verwendung dort ist
jedoch unterschiedlich zu 'Variablen' in einer Programmiersprache.
In einer Programmiersprache bedeutet:
a = 2 die Variable 'a' erhält den Wert 2 b = a die Variable 'a' erhält den Wert, der in der Variable 'b' gespeichert ist.
In der Mathematik bedeutet:
a = 2 die Variable 'a' ist ein Platzhalter für den Wert 2 b = a die Variable 'a' hat denselben Wert wie 'b'.
Operatoren können rechnen, Texte verarbeiten und es gibt Vergleiche. Operatoren verarbeiten z.B. Variablen.
In Scratch können Variablen als Werte ganze Zahlen, Kommazahlen und Texte enthalten.
Sogar das Ergebnis von logischen Operatoren kann verwendet werden.
Variablen können den Wert einer anderen Variablen zugewiesen bekommen. Hierzu zieht man das Symbol der anderen Variable in das Zuweisungsfeld.
Beispiel für Wertezuweisungen in Pseudocode:
a = 2 a = 1.234 a = 'apfel' my_variable = spielstand
Sprechweise ist kurz "a gleich 2" und ausführlich "die Variable mit dem Namen 'a' erhält den Wert 2".
Sprechweise ist kurz "Variable my_variable gleich Variable spielstand" und ausführlich "die Variable mit dem Namen 'my_variable' erhält den Wert von spielstand'".
In Scratch sind die Grundrechenarten und einige komplexere Funktionen verfügbar.
Hier wird eine neue Variable 'c' mit einem Multiplikationsergebnis befüllt.
Es muss aber nicht immer eine neue Variable sein, wenn man 'a' verdoppeln möchte kann das auch so aussehen:
Hier ist absichtlich der Befehl 'a=1' und die restlichen Anweisungen nicht verbunden, da sonst ja immer dasselbe Resultat herauskommen würde.
Aufgabe
![]() | Gib das vorherige Beispiel in Scratch ein und starte die einzelnen Blöcke durch Doppelklick mit der Maus. |
Variablen können nur für eine Figur angelegt werden (private Variablen).
Diese Variablen können von anderen Objekten nicht gelesen und nicht verändert werden.
Variablen können 'für alle Figuren' angelegt werden (globale Variablen).
Diese Variablen können von allen Skripten gelesen und verändert werden.
Die Regel ist: so wenig globale Variablen wie möglich.
Variablen können (fast) beliebige Namen bekommen. Sobald man aber Skripte austauscht oder Fehler in Skripten von Mitschülern sucht, wird das deutlich einfacher wenn die Namensgebung einheitlich ist. Die 'Wartbarkeit' von Software ist dann wichtig, wenn es um Fehlerbehebung und Weiterentwicklung geht.
Die Namen der Variablen sollen lesbar und verständlich sein. Und darauf hindeuten, was sie bedeuten.
Schlechtes Beispiel:
OOO0OO0000 (eine Abfolge von 'Oh's und Nullen, schlecht unterscheidbar)
prqrwrlz (schöner Name, aber was bedeutet das ?)
Schreibweise:
Zusammengesetzte Namen sollten mit 'camelCase' geschrieben werden
oder mit Unterstrichen getrennt werden, damit sie besser lesbar
sind.
xPosition (camelCase, ein Kamelhöcker in der Mitte)
x_position (Unterstriche)
wert_0 (sieht schöner aus als wert0)
Einheitlichkeit:
Namen von Variablen sollten so benutzt werden,
dass
gleichartige Dinge
auch gleich benannt werden.
Gut:
xPosition yPosition
Weniger gut, weil unsystematisch:
xPosition obenuntenKoordinate
Verständlichkeit:
Umlaute und Sonderzeichen sollten vermieden werden. Die
funktionieren zwar, aber wenn mal Skripte international
ausgetauscht
werden, dann können englische
Schüler mit diesen
Zeichen nichts
anfangen.
Lesbarkeit:
Keine Leerzeichen in Namen verwenden!
Zur Verdeutlichung ein Skript. Warum funktioniert das nicht?
Die Lösung ist sehr schwer zu finden: es gibt zwei unterschiedliche Variablen die sehr ähnlich aussehen:
Solche Variablennamen führen zu Fehlern in Programmen die nur sehr schwer zu finden sind.
Die Katze sucht einen Schatz, und fragt nach der Anzahl der Schritte die sie bis zum Schatz gehen soll.
Programmablauf in Pseudocode:
- Frage nach Anzahl der Schritte - hole Antwort - Wiederhole 'anzahl' mal gehe einen Schritt sage die Schrittnummer
Für das Beispiel braucht man zwei Variablen, 'anzahl' und 'schritt'. Die 'Antwort'-Variable wird automatisch durch das 'Antwort'-Element angelegt. Am Variablennamen auf der Bühne sieht man, dass die Variablen lokal sind, also nur für die Katze lesbar/schreibbar sind ("Katze anzahl").
Aufgabe
![]() | Gib' das vorherige Beispiel in Scratch ein und probiere es aus. |
![]() | Schalte das 'Spiel' in den Präsentationsmodus. |
Lösung (aber versuche es mal selber).
Anderes Beispiel für die Verwendung von Variablen: Schleifenzähler, wenn man z.B. Werte von 10 bis 20 braucht.
Nicht abtippen, nur verstehen !
Wie das Schleifenzähler-Beispiel zeigt, können Variablen in scratch überall da eingesetzt werden wo es abgerundete oder rechteckige Andockstellen gibt.
Ein weiteres Beispiel für Variablen ist das Zählen im Spiel, wie oft ein Ereignis aufgetreten ist. Im Beispiel werden Bananen gezählt.
Die Banane kann man mit der Maus bewegen und die Katze reagiert darauf.
Der Variablenname 'a' ist hier nicht sinnvoll gewählt. Was wäre besser ?
Aufgabe
![]() | Erweitere das Bananenzählen so, dass die Katze nach drei Bananen satt ist und 'ich bin satt' sagt. Und jetzt hat man fast schon ein Tamagotchi. |
Lösung (aber versuche es mal selber).
Beispiel: Tamagotschi kann 'hungrig' sein, oder 'muede', oder 'willSpielen'. Je nachdem kann sich die Figur verhalten, hier in Pseudocode formuliert:
falls zustand= 'hungrig' verhalte dich wie ein hungriger Tamagotchi... falls es Bananen gibt setze zustand auf 'muede' falls zustand ='muede' verhalte dich wie ein müder Tamagotchi
Durch Anclicken der Checkbox links von einer Variablen wird diese auf der Bühne angezeigt. Die Anzeige auf der Bühne kann zwischen drei Anzeigeformen umgeschaltet werden. Hierzu auf der Bühne mit Maus rechts clicken auf die Variable. Es kann ausgewählt werden:
Aufgaben
![]() |
Lege drei Variablen an. |
![]() |
Die zweite Variable soll zweimal auf der Bühne angezeigt werden, jedesmal in groß. |
Dieses Kapitel kann man überspringen, da Listen-Variablen selten gebraucht werden.
Normale Variablen sind 'jeweils nur ein Wert'. Manchmal möchte man jedoch mehrere Werte zusammenfassen.
Beispiel: Namen der Schüler eine Klasse.
Beispiel: Temperaturen, die jede Minute gemessen werden.
Scratch hat für diesen Zweck Listen.
Listen werden verwendet, wenn man gleichartige Daten hat, aber noch nicht weiss wie viele es werden sollen.
Z.B. die Namen der Schüler in der Klasse: hier weiß der Programmierer noch nicht in welcher Klasse das verwendet wird und muss mit unterschiedlichen Schülerzahlen rechnen.
Listeninhalte kann man als Datei exportieren und importieren.
Index ab 1; 'index' ist der Name für die Position eines Elementes.
Längen-Operator
Anfügen an beliebiger Position; Entfernen an beliebiger Position; die anderen Elemente rücken auf.
Sortieren von Listen
Es gibt keine eingebauten
Sortiermethoden.
Im Internet findet man Skripte für 'Bubblesort',
das ist ein
einfacher
Sortieralgorithmus.
Bei den Operatoren gibt es die runden Blöcke und die spitzen Blöcke.
Die runden Blöcke geben eine Zahl oder einen Text zurück.
Die spitzen Blöcke geben einen boolschen Wert zurück und können
insbesondere dort verwedendet werden wo Blöcke spitze Löcher haben.
Einige Blöcke erklärt:
Zufallszahl: liefert eine zufällige Zahl im dem angegeben Bereich.
mod: der Rest der ganzzahligen Division. mod(7, 2) ergibt 1; mod(6, 3) ergibt 0
Aufgaben
![]() |
Lege eine Variable 'spielstand' an. wenn spielstand < 20: sage "noch zu wenig" wenn spielstand zwischen 40 und 60: sage 'gutes Mittelfeld' wenn spielstand grösser 80: sage 'prima, sehr gut'
|
Die Farbe dieser Elemente ist gelb in der Palette.
Objekte, bzw. die Skripte darin können sich über Signale
unterhalten.
Diese Funktionalität ist sehr wichtig in scratch, um Programmabläufe zu koordinieren.
Die Skripte können die Signale empfangen und reagieren also nur auf die Signale, die sie interessant finden (genau genommen der Programmierer als er/sie das Programm geschrieben hat). Was die Skripte dann tun hängt dann vom Zweck des Programmes ab.
Es gibt zwei Arten von Sendesignalen
asynchrones Senden
„Sende XYZ an alle“ schickt ein Signal und macht dann einfach
weiter. Die Empfänger müssen dann noch nicht fertig sein mit ihrer Arbeit.
synchrones Senden
„Sende XYZ an alle und warte“ wartet, bis alle Empfänger ihre
Arbeit fertig gemacht haben. Das ist dann nützlich, wenn man
Dinge in einer exakten
Reihenfolge tun will.
Besonderheiten sind,
dass man auch an eigene Skripte Signale senden kann,
dass es (fast) beliebig viele Empfänger für Signale geben kann,
dass es (manchmal) auch keinen Empfänger für Signale gibt,
dass man synchrone Signale benutzen kann, um Unterprogramme in scratch zu konstruieren. Mehr dazu bei Abschnitt 1.5.2, „Unterprogramme in scratch 1.4“
![]() | |
Signale werden auch an den ScratchClient geschickt, und der ScratchClient kann auch Signale an Scratch und die Skripte schicken. Ein Beispiel ist im Abschnitt 1.10, „Fühlen, Sensoren“ enthalten. |
Der Ablauf von Programmen kann schnell sehr unübersichtlich werden.
Da hilft es, wenn man die Abläufe in einer Grafik aufzeichnen kann.
Die Beschreibungsmethode Unified Modeling Language 'UML' wird üblicherweise zur Beschreibung von Software verwendet. Entwickelt wurde diese von Booch,
Jacobsen, Rumbaugh etwa 1990.
Diese Beschreibungen sind standardisiert, was den Vorteil hat dass man nicht jedesmal erklären muss wie die Grafiken aufgebaut sind.
UML benutzt grafische
Darstellungen. Diese sind übersichtlich und schnell verständlich. Werden Signale verwendet so bieten sich 'Sequenzdiagramme' an um die
Abläufe zu
beschreiben.
Sequendiagramme bestehen aus vertikalen Linien (Lebenslinien) für die beteiligten Softwarekomponenten.
Signale werden als horizontale Pfeile gezeichnet. Synchrone Nachrichten haben gefüllte Pfeilspitzen, asynchrone Nachrichten haben offene Pfeilspitzen. Bei synchronenen Nachrichten zeichnet man üblicherweise noch einen Rückgabepfad ein.
Zu den Pfeilen werden die Namen der Signale geschrieben.
Kleine Rechtecke an den Lebenslinien sind die Programmteile, die nach dem Eintreffen der Signale ausgeführt werden.
Das pingpong-Beispiel sind zwei Scripte, die sich gegenseitig Signale zuschicken: ping hin, pong zurück. Das Programm entstand bei einer Überprüfung der Rechengeschwindigkeit von scratch: wie schnell kann man Signale schicken.
Damit das Programm überhaupt losläuft. muss man einmal über die grüne Flagge ein 'ping' losschicken. Dann läuft das Programm endlos weiter.
Hier das scratch-Programm dazu. Es gibt noch eine Variable 'counter', ein Zähler für die Anzahl der Durchläufe.
Aufgaben
![]() |
Erweitere das Beispielprogramm so, dass die Anzahl der Signale je Sekunde gemessen werden kann. |
![]() |
Gibt es einen Unterschied, ob das Programm im Entwicklermodus oder Präsentationsmodus läuft ? Im Entwicklermodus werden die laufenden Skripte jeweils hell hinterlegt, was CPU-Zeit benötigt. Im Präsentationsmodus sollte diese Animation nicht mitlaufen und deswegen etwas schneller sein. Überprüfe das. |
Scratch 1.4 hat kein Konzept für Unterprogramme. Mit synchronen Signalen kann man das aber einfach selber aufbauen.
Gründe für den Einsatz von Unterprogrammen sind:
Übersichtlichkeit, Verständlichkeit
Oft hat man das Problem, dass ein Ablauf an mehreren Stellen identisch oder fast identisch vorkommt. Man kann dann zwar einfach die benötigten Blöcke
kopieren, aber das vergrössert den Code und macht ihn schlechter verständlich.
Wartbarkeit
Wenn man später Änderungen an sich wiederholenden Abläufen durchführt vergisst man leicht, dass die anderen Stellen ebenfalls zu ändern sind.
DRY, Don't repeat yourself
Gleiche Abläufe sollen nur einmal programmiert werden.
Beispiel: Muster stempeln.
Erzeuge ein regelmässiges Raster auf dem Bildschirm aus Quadraten.
Das soll einen Punktestand anzeigen.
Das Beispiel zeigt einen Punktezähler 'spielstand', der am Anfang auf Null gesetzt wird.
Dann soll sich der Spielstand ändern, und für jeden Punkt ein
Quadrat angezeigt werden.
In Spielen gibt es meist mehrere Stellen, die den Spielstand verändern. Um zu zeigen, wie unübersichtlich das Skript
ohne Unterprogramme wird, hier ein
Beispiel wie man es nicht machen soll:
Mit einem Unterprogramme wird es deutlich kürzer und einfacher:
Der Ablauf wurde jetzt mit Unterprogrammen aufgebaut. Hier ist der Vollständigkeit halber auch das Setzen des Spielstands '0' enthalten.
Und hier noch das Sequenzdiagramm der Unterprogrammaufrufe. Die Signale sind synchron (sende und warte), deshalb als geschlossene Pfeile gezeichnet und der gestrichelte Rück-Pfad deutet das 'warten' an.
Die Farbe dieser Elemente ist blau in der Palette.
Die Objekte können sich um kleine Schritte bewegen, von dort wo sie sich gerade befinden (relative Bewegungen). Diese Bewegung geht in die Richtung in die die Figur gerade gedreht ist.
Die Bewegungsgeschwindigkeit kann über 'warte'-Anweisungen beeinflusst werden.
Oder die Figur kann in x oder y-Richtung (oder beidem) auf eine Position gesetzt werden (absolute Bewegung, absolute Positionierung).
Absolute Positionierung wird oft verwendet um am Beginn eines Spieles die Objekte auf ihre Startposition zu setzen.
Die Koordinaten sind -240 bis +240 in x-Richtung, und -180 bis +180 in y-Richtung. Wenn man die Maus über der Bühne bewegt, werden die Koordinaten angezeigt.
Die Objekte kann man, obwohl ein Programm läuft, immer noch mit der Maus bewegen. Das kann bei den Objekten ausgeschaltet werden, dann sind die Objekte nur noch vom Programm aus veränderbar.
Aufgaben zu relativen Bewegungen. Wenn Du das 'Katze mit dem Schatz'-Beispiel schon gemacht hast, dann überspringe das und gehe zu den absoluten Bewegungen.
Aufgaben
![]() | Schreibe ein Skript, das die Katze 20 mal um einen kleinen Schritt bewegt. |
![]() | Schreibe ein Skript, das die Katze in einem Viereck bewegt. Dann schiebe die Katze mit der Maus in eine Ecke, und beobachte was bei der Bewegung passiert. |
Aufgaben zu absoluten Bewegungen
![]() | Bewege die Katze von Position[0,0] zu [100,0] in 5-er Schritten. Benutze eine Variable xSoll und eine Schleife. |
![]() | Eine komplizierte Aufgabe: schreibe ein Skript, das die Katze immer dem Mauszeiger folgen lässt. Die Mauszeigerkoordinaten sind bei 'Fühlen' verfügbar. |
Zusatzaufgabe
![]() |
Schräge Bewegungen eines Objektes.
Erzeuge zwei Variablen xSoll
und
ySoll.
Und dann folgendes Programm:
wiederhole fortlaufend: ändere xSoll um 2.3 ändere ySoll um 2 gehe zu xSoll, ySoll |
![]() | |
Es gibt einen 'SuperSonderAllesInEinem'-Befehl für absolute, zeitgesteuerte Bewegungen 'gleite' |
Dieser Befehl ist deswegen so interessant, da damit z.B. lange Bewegungen mit gleichmässiger Geschwindigkeit zurückgelegt werden können.
Zusätzlich braucht der Befehl relativ wenig CPU-Zeit verglichen mit einer Bewegung, die aus einzel-'gehe'-Befehlen zusammengesetzt ist.
Man muss nicht alles selber erfinden. Es gibt für fast alle Probleme bereits Lösungen. Diese werden oft auch als 'pattern' bezeichnet.
In diesem Kapitel sollen einige Beispiele vorgestellt werden für Bewegungen, die Bewegung in einem Labyrinth, in einem Jump and Run und für Wurfbahnen.
Es gibt die Möglichkeit Figuren über Tasten zu steuern. Eine einfache Lösung ist (Vorsicht, nicht nachmachen):
Diese Lösung braucht relativ CPU-Zeit, belastet den Rechner also stark. Deshalb ist sie nicht empfehlenswert, wenn man die Figur über längere Strecken bewegen will.
Eine bessere Lösung, dass über Variablen die Richtungen vorgegeben werden und diese über Tasten belegt werden. Das sieht so aus:
Was passiert hier: in einer Endlosschleife wird die Position um den Wert der Variablen 'dx' verändert. Die Tastendrücke setzen diesen Wert entsprechend (nach rechts: positiver Wert; nach links: negativer Wert). Es ist also nur bei Richtungswechseln ein Tastendruck nötig. Beispielprojekt
Aufgabe zur Bewegungssteuerung
![]() | Erweitere das Beispiel um eine Steuerung in der y-Richtung. |
![]() | Erweitere das Beispiel so, dass die Figur mit der Leertaste gestoppt wird. |
Man kann eine Figur so weit bewegen, bis sie an einer bestimmten Farbe anstösst. Im Beispiel wurde die blaue Farbe als Begrenzung gewählt.
Die Bewegungsrichtung wird über zwei Variablen dx und dy definiert. Das 'd' ist eine Abkürzung für 'delta', also einen Wert der einen Unterschied angibt. Soll sich die Figur nach rechts bewegen ist dx=3 und dy=0. Soll sich die Figur nach unten bewegen, dann ist dx=0 und dy=-3. In einer Schleife wird die Figur jeweils um diese Werte 'versetzt'.
Die Bewegung wird gestoppt, sobald die Figur die Begrenzungsfarbe berührt. Da bei einer Berührung die Figur nicht mehr weiterläuft, muss dann die Figur wieder einen Schritt zurückbewegt werden.
Hier die Beispiellösung: Beispielprojekt
Spielfiguren bei einem Jump and Run können eine rechts-links-Bewegung ausführen. Bei Bedarf können die Figuren auch über Hindernisse springen oder z.B. auf Hindernisse drauf springen. Ein Grundmuster für die X-Bewegung ist wie wie im Layrinth:
Eine Variable scrollX ist mit +5 (für Bewegung nach rechts) bzw. -5 (für Bewegung nach links) belegt. Die Pfeiltasten der Tastatur werden für das Belegen dieser Variablen verwendet. In einer Schleife wird dann das Objekt um diesen Betrag bewegt.
Die Bewegung in Y-Richtung muss mehrere Fälle abdecken:
Wenn das Objekt in der Luft ist, soll es nach unten fallen.
Das Objekt soll auf 'festen' Unterlagen stehen/gehen können.
Wenn das Objekt auf einer festen Unterlage steht/geht, dann soll es springen können. Nicht allerdings, wenn es in der Luft ist, denn da kann man sich ja nicht abstossen.
Diese Anforderungen können in Scratch mit Farbkodierungen erledigt werden. Die Spielfigur erhält an den Füssen eine spezielle Farbe, hier zum Beispiel sind es 'Raketenschuhe'.
Die 'festen Unterlagen' erhalten einen doppelten Farbüberzug. Der eine Überzug stoppt die Fallbewegung, der andere ist dafür zuständig die Sprungbewegung zu erlauben. Im Detail sieht das so aus:
Springen ist erlaubt, wenn die grüne Farbe berührt wird:
Nach oben bewegen, Stop der Fallbewegung und Fallen:
Hier Beispielprojekte:
Wurfbahnen sind idealisiert eine Parabel. Die Flugbahn kann - auch wenn das im Lehrplan noch nicht behandelt wurde - mit folgenden Kochrezept berechnet werden.
Für eigene Projekte kann das Skript einfach mit einem 'Sprite' eingebunden werden. Hier die Schritt-für-Schritt-Anleitung
Das Wurfbahn-Sprite 'wurfbahn_sprite.sprite' speichern. (Link anklicken, speichern unter /home/pi).
Scratch öffnen, dann 'neues Objekt aus Datei laden' und den Sprite 'wurfbahn_sprite.sprite' laden.
Um die Funktion auszuprobieren fehlt noch das Belegen der Variablen 'wurfbahn_winkel'. So sollte das aussehen:
Die Farbe dieser Elemente ist violett in der Palette.
Es gibt nicht nur Katzen in Scratch.
Klicke auf 'Neues Objekt aus Datei laden' und schaue Dir die Verzeichnisse an.
In „Media/Costumes“ findet man eine Sammlung verschiedener Grafiken.
Möchte man ein Objekt laden, dann auswählen und übernehmen durch 'ok' oder Doppelklick.
Objekte können mehrere 'Kostüme' haben. Beispiel ist die Katze. Wähle das Objekt aus (wenn mehrere Objekte auf der Bühne sind, Auswählen durch Anklicken in der Objektanzeige)und schaue in 'Kostüme' nach. Hier sind zwei verschiedene Bilder für die Katze vorhanden.
Zu was braucht man Kostüme ?
Eine Figur soll mit den Armen zappeln.
Ein Tamagotchi hat verschiedene Stimmungen und soll je nachdem andere Gesichtsausdrücke haben.
Eine Figur bekommt eine Beule (autsch), wenn sie mit einem Hindernis kollidiert.
Die Katze kann gehen
Und und und.
Kostüme kann man mit Skripten auswählen, diese Befehle findet man unter 'Aussehen'.
Aufgaben
![]() | Lass' die Katze gehen. Schreibe ein Skript, das die Katze in 10-er Schritten bewegt und schalte dabei die Kostüme um. |
![]() | Experimentiere mit Schrittweiten. Wann sieht die Bewegung flüssig aus ? |
Hinweis: Das Skript sieht ungefähr so aus:
Drei Möglichkeiten: ganz neu malen, oder aus einem bestehenden Bild abwandeln.
Die dritte Möglichkeit ist der Import aus Bildern, die mit dem Fotoapparat, Scanner oder einem anderen Computer erstellt wurden.
Den „Neues Objekt Malen“- Button drücken, oberhalb der Objekt-Anzeige.
Man erhält einen Grafik-Editor.
Farbe auswählen: in der Farbpalette eine Farbe aussuchen
Mit einem Malwerkzeug Pinsel – Freihand malen
Mit dem Malwerkzeugen Linie, Rechteck oder Kreis können geometrische Formen gezeichnet werden.
Löschen mit dem Radiergummi.
Durchsichtige Stellen können mit der 'durchsichtig-Farbe' gezeichnet werden..
Wichtig: 'ok' auswählen, wenn man fertig ist.
In der Kostümansicht ein Kostüm 'kopieren' und dann 'bearbeiten' auswählen.
Bild im Format jpg, gif oder png abspeichern. Und in Scratch importieren.
Mit den Blöcken 'komme nach vorn' und 'gehe N Ebenen nach hinten' kann man Grafiken überlagern und andere Elemente dahinter verstecken. Beispiel Gläser füllen
Aufgaben
![]() | Male ein Strichmännchen. | |||
![]() |
Erzeuge zwei Abwandlungen des Strichmännchens, die mit den
Armen
winken.
Animiere die Kostüme: Schreibe ein Skript, so dass
das
Strichmännchen zappelt.
|
|||
![]() | Das Skript speichern. 'hampelmann' wäre ein guter Name. | |||
![]() | Erweitere das Skript, so dass das Strichmännchen nach 30 Sekunden 'ich bin müde' sagt. Und eine Weile stehenbleibt. |
Der Hintergrund der Bühne ist ein Grafikobjekt wie andere Objekte auch. Allerdings kann man dieses Objekt nicht bewegen.
Das Hintergrund-Objekt kann wie alle anderen Objekte Skripte enthalten.
Man wird typischerweise solche Skripte an dieses Objekt anhängen, die das ganze Projekt/Spiel betreffen.
Ein Beispiel dafür ist eine komplizierte Startprozedur, wo andere Objekte in einer genau definierten Reihenfolge positioniert, angezeigt und gestartet werden müssen.
Die Farbe dieser Elemente ist magenta in der Palette.
Spiele ohne Töne und Musik sind langweilig. Kurze Töne oder Klänge unterstützen Aktionen; eine Hintergrundmusik vermittelt eine Grundstimmung zu einem Spiel.
![]() | |
Wenn Klänge nicht funktionieren, dann die Lautstärke am Monitor kontrollieren. Dann gibt es noch eine Lautstärkeeinstellung in scratch.
Damit es nicht zu einfach ist, gibt es noch eine Lautstärkeeinstellung in linux.
Termin 'lxterminal' öffnen,
|
In der 'Schepper Klang'-Abteilung kann man Schlagzeuge und Töne spielen. Diese Töne können zeitgenau in eine Bewegung eingebaut werden.
Zu den Objekten kann man Klänge importieren. Das sind teils teils synthetische, teils natürliche Klänge (mit dem Mikrofon aufgenommen).
Unter 'Music Loops' sind Klänge abgelegt, die sich als Hintergrundmusik eignen.
'Spiele Klang ganz': spielt den Klang bis zum Ende.
'Spiele Klang' bricht ab, wenn das Skript verlassen wird.
Aufgaben
![]() | Das Strichmännchen so erweitern, dass es bei jeder Bewegung einmal einen Trommelklang macht. |
![]() | Und wenn das Strichmännchen müde ist, dann soll es erst mal einen Schrei von sich geben. |
Man kann Fotos oder mit einem Mikro aufgenommene Klänge in Scratch importieren. Bildern, Zeichnungen, Fotografien, Tonaufnahmen können aber urheberrechtlich geschützt sein. Sind Personen zu sehen, zu hören, so kann das Persönlichkeitsrecht betroffen sein.
Deshalb ist zu beachten:
Fotos und Tonaufnahmen von Personen ohne deren Einwilligung zu verwenden ist nicht erlaubt. Das verletzt die 'Persönlichkeitsrechte' der Person.
Auch wenn Ihr Aufnahmen von Personen mit deren Einwilligung verwendet, sollten diese die Personen nicht schlecht dargestellt werden.
Bilder, also Zeichnungen, Fotografien aus Zeitungen, Comics oder dem Internet sind in der Regel urheberrechtlich geschützt. Das bedeutet, dass der Erfinder, Zeichner oder Fotograf gefragt werden muss, ob diese verwendet werden dürfen.
Es gibt freie Sammlungen von Bildern oder Klängen, aber das muss dann jedesmal dabei stehen. Hier ist jedesmal die Lizenz nachzusehen und genau zu lesen.
Bei selbstgemalten Bildern oder eigenen Fotografien gibt es normalerweise keine Probleme. Und eigene Bilder zu gestalten macht mehr Spass als wie Lizenztexte zu lesen!
Persönlichkeitsrecht Deutschland
Aufgabe
![]() | Kurz überlegen: würdest Du es erlauben, wenn jemand Zeichnungen, die Du angefertigt hast, in einem Spiel verwendet ? |
![]() | Kurz überlegen: würdest Du es erlauben, wenn jemand Fotografien von Dir ungefragt in einem Spiel verwendet ? |
Die Kategorie 'Fühlen' der Palette ist etwas unglücklich aus dem englischen 'Sensing' übersetzt. 'Messen' wäre besser geeignet.
Diese Kategorie enthält Frage/Antwort, Mauskoordinaten, Abstände, Zeitmessungen.
Die Lautstärke-Funktionen können auf dem RaspberryPi nicht benutzt werden, da keine Soundkarte mit Mikrofon vorhanden ist.
Ganz unten sind die Sensorwerte zu finden. Das sind Variablen von Messaufnehmern, die über die Adapterplatine angeschlossen werden können.
Adapterplatine, Taster
Als ein Beispiel für die Benutzung der externen Sensoren soll die Katze in Scratch hüpfen, wenn eine Taste auf der Adapterplatine gedrückt wird.
Zusatzaufgabe
![]() |
Die folgenden Schritte durchführen. Schritt1: Rechte Maustaste über 'Fühlen', Wert von Sensor, im Popup dann 'Unterstützung von Netzwerksensoren einschalten'. Schritt 2: LXTerminal öffnen, folgenden Text eingeben cd ~/scratchClient python3 src/scratchClient.py -config config/config_ikg_button_intern.xml Das Terminal offen lassen, also nicht beenden oder schliessen. Diese Befehle starten den ScratchClient, ein Programm das zwischen Scratch und der Adapterplatine Signale austauscht. Wenn jetzt auf der Platine die Taster gedrückt werden (stumpfes Ende eines Stiftes durch die Löcher in der Abdeckung), dann werden Signale 's0_pressed', 's1_pressed', 's8_pressed' bzw 's0_released', 's1_released', 's8_released' nach scratch geschickt. Schritt 3: Ein Scratch-Programm schreiben Das Programm empfängt ein Signal und lässt das Objekt hüpfen. Statt zu hüpfen könnte man auch Schritte ausführen, einen Zähler hochzählen oder anderes. |
Die einzelnen Sprachelemente sind in der Scratch-Referenz beschrieben. In Scratch gibt es Hilfe zu jedem Befehl (rechte Maustaste, Hilfe), und allgemeine Hilfeseiten 'Hilfe'.
Kommentare sind Anmerkungen, Bemerkungen oder Notizen, die an Abläufe angehängt werden können. Sie sollen helfen, das Programm für andere besser verständlich zu machen oder dienen auch als Notizen für das eigene Verständnis. Rechte Maustaste, im Skript-Bereich 'Anmerkung hinzufügen'.
Wenn man Computerprogramme schreibt, dann funktionieren die selten beim ersten Mal.
Meistens enthalten Programme Fehler. Es kann sein, dass
etwas nicht funktioniert, wie es soll
oder Funktionen fehlen noch.
Fehler in Programmen nennt man auch englisch 'bug'. 'Debuggen' bedeutet: Fehler entfernen.
Fehlerbehebung kann kompliziert sein und viel Zeit benötigen. Aber das 'debugging' gehört zum Programmieren dazu.
Durch übersichtliches, strukturiertes Programmieren kann man Fehler vermeiden. Dazu gibt es einige Tips am Ende des Kapitels.
Definition Ein Fehler ist die Abweichung des erwarteten Verhaltens eines Programmes vom aktuellen Verhalten.
Das erwartete Verhalten ist das ‚so soll es sein‘-Verhalten.
Das aktuelle Verhalten ist das Verhalten, welches das Programm gerade hat 'so ist es gerade'.
Das folgende Skript soll die Figur langsam rechts herum drehen.
Das erwartete Verhalten ist also ‚drehe Figur rechts herum‘.
Tatsächlich dreht sich die Figur jedoch links herum
Das beobachtete Verhalten ist also ‚Figur dreht sich links herum‘.
Da erwartetes Verhalten und beobachtetes Verhalten nicht übereinstimmen hat das Programm einen Fehler.
Methodisches Vorgehen erleichtert die Fehlersuche.
In scratch gibt es Möglichkeiten die für die Fehlersuche genutzt werden können.
Starte nicht alles auf einmal (grüner Punkt), sondern nur einzelne Skripte durch Doppelclick mit der Maus. So können einzelne Teile gezielt überpüft werden, ohne dass andere Skripte dazwischenfunken.
Die Werte von Variablen können auf der Bühne sichtbar gemacht werden. Später kann man diese wieder ausblenden.
Die Werte von Variablen kann man mit dem Regler verändern. Der Bereich kann über die Reglerbereiche angepasst werden.
Oder man setzt die Werte von Variablen mit einzelnen 'setze'-Befehlen in der Palette. Blöcke in der Pelette können über Doppelclick ausgeführt werden.
Die Position von Figuren auf der Bühne können mit der Maus verändert werden. Das ist ganz praktisch, wenn man überprüfen will ob Farb-Berührungen, Positionen, Pbjekt-Berührungen richtig ermittelt werden.
Es ist wichtig, dass der Fehler wiederholt werden kann. So kann man genauer untersuchen wie der Fehler zustande kommt. Und dann auch nach den Korrekturen überprüfen ob der Fehler wirklich behoben ist.
Fehler können immer auftreten oder nur manchmal.
Manchmal treten Fehler nur auf, wenn man ein Spiel das zweite Mal durchläuft. Oder nur wenn eine bestimmte Taste gedrückt wird.
Wenn klar ist wann der Fehler auftritt, dann ist das oft schon ein wichtiger Schritt um die Ursache zu erkennen.
Beobachte den Fehler. Welche Skripte sind aktiv dabei? Welche Werte haben die Variablen?
Beobachte die Details. Wenn genügend Informationen bekannt sind, wann wird es einfacher den Fehler zu beheben.
Manche Programme sind sehr groß und oft ist unklar, wo der Fehler steckt.
Aktiviere nur die Teile, die auch notwendig sind. Taucht der Fehler noch auf, dann steckt er in den aktiven Teilen, die inaktiven Teile sind wahrscheinlich in Ordnung. Verkleinere die Anzahl der Skripte so oft, bis nur wenige Skriopte übrig sind.
Man kann auch Teile des Programmes in einem neuen Projekt ausprobieren. Manchmal ist so ein kleiner Versuch schneller durchzuführen als die Untersuchung eines großen Programmes.
Diese Methode heisst auch 'wolf fencing': Wie fängt man einen Wolf in Kanada? Man baut einen Zaun durch die Mitte, und hört auf welcher Seite der Wolf ist. Dann teilt man diese Seite nochmals mit einem Zaun und hört wieder. Das macht man ein paar Mal, und dann hat man den Wolf gefangen.
Bei der Behebung von Fehlern sollte man nicht nebenher noch Ergänzungen oder Erweiterungen durchführen.
Werden viele Änderungen durchgeführt, dann können dadurch neue Fehler entstehen.
Es hilft, wenn die verschiedenen Massnahmen (stichwortartig) mitgeschrieben werden. Man vermeidet, dass man sich wiederholt. Und es hilft wenn man jemanden um Hilfe bittet: man kann besser berichten was schon getan wurde.
Meist denkt man an die naheliegenden Ursachen zuerst. Die unwahrscheinlichen Dinge vergisst man oft:
Es sind noch andere Skripte aktiv, die den Ablauf beeinflussen.
Falsch angeschlossene Elektronikbauteile. Verpolte LED leuchten nicht. Oder an einem Potentiometer die die Kabel vertauscht. Stecker werden manchmal verdreht.
Jumper auf der Adapterplatine vergessen oder falsch gesteckt.
Ein Fehler in den Programmen scratch oder scratchClient. Ein Neustart hilft manchmal.
Manchmal hilft eine Pause um dann wieder neu nachforschen zu können.
Erkläre das Problem einem Mitschüler oder einem Experten. Manchmal fällt einem schon eine Lösung ein wenn man das Problem jemandem erklärt.
Wenn man gerade niemanden findet, der einem zuhört, dann kann man eine Gummiente auf den Monitor stellen und dieser Ente das Programm laut erklären. Deswegen heisst diese Methode auch ‚Rubber Duck-Methode‘.
Der Fehler ist dann hoffentlich wiederholbar, so dass man den auch zeigen kann.
Wichtig dabei ist: versuche den Fehler neutral zu beschreiben. Berichte die beobachteten Fakten, nicht Hypothesen. Vermeide es Mutmassungen über mögliche Ursachen zu berichten: das könnte den Helfer auf die falsche Fährte locken. Die Liste der bereits durchgeführten Massnahmen ist hilfreich.
Überprüfe, ob der Fehler behoben ist. Deshalb ist Schritt 1 so wichtig.
Wenn der Fehler nicht behoben ist, dann weiter bei Schritt 1.
Gibt es noch ähnliche Stellen wie die gerade gefundene Ursache ? Dann sollten auch diese untersucht werden.
Kommentare in den Skripten erleichtern das Verständnis und die Fehlersuche.
Je übersichtlicher ein Programm aufgebaut ist, desto weniger Fehler wird es haben.
Beispiel: Ein Spiel mit verschiendenen Leveln funktionierte beim zweiten Durchlauf nicht richtig, da die Spielfiguren nicht wieder auftauchten wenn sie sollten.
Es wurden Skripte für 'level_1_start', 'level_1_stop', 'level_2_start', 'level_2_stop' eingebaut, in denen die Figuren sichtbar/ unsichtbar gemacht wurden. Dadurch wurde das Programm einfacher zu verstehen und funktionierte dann richtig.
Wenn man alle möglichen Sachen in einem Skript erledigt, dann entsteht eine ziemlich verknotete Struktur, die schwierig zu verstehen ist. Man sagt auch 'Spaghetti'-Programm dazu.
Besser ist es, wenn zusammengehörende Teile in separate Skripte geschrieben werden. Das Programm wird übersichtlicher und einfacher zu vestehen und zu testen.
Wenn man das Verhalten von Skripten überprüfen möchte, dann kann man Meldungen einbauen. Diese Meldungen helfen für das Untersuchen des Verhaltens, müssen aber für das fertige Programm wieder ausgebaut werden.
Ein Nachteil dieser ‚sage‘-Blöcke ist, dass schnell veränderliche Werte schwer zu sehen sind.
Benutzen von Listen für Meldungen
Mit einer Liste kann der Verlauf von Werten besser verfolgt werden.
Man legt unter ‚variablen‘ eine Liste an (hier ‚printout‘) und fügt die Meldungen in die Liste hinzu.
Auf der Bühne kann man die Liste anzeigen und sieht die einzelnen Meldungen.
Vorsicht: die Liste kann schnell sehr lang werden, was viel Speicherplatz benötigt. Deshalb öfter speichern und diese Methode nur sparsam einsetzen.
Bevor man in einem komplizierten Programm neue Funktionen einbaut, sollte man diese erst mal in einem separaten scratch-Projekt ausprobieren.
Bei der Skalierung werden verschiedene Wertebereiche ineinander umgerechnet.
Beispiel:
Ein an den Raspberry Pi angeschlossenes Potentiometer liefert Messwerte von 0 bis 1023.
Mit diesem Wert soll eine Figur auf der Bühne in der y-Achse bewegt werden.
Die Y-Achse ist -180 bis +180.
Man braucht also eine Formel, mit der man einen beliebigen Potentiometerwert in einen Wert auf der y-Achse umwandeln kann.
Gegeben sind die Start- und Endewerte des Eingangs und des Ausgangs, wie z.B. der Potentiometerwert und die Werte auf der Y-Achse.
Gesucht wird eine Formel, die einen beliebigen Eingangswert in einen Ausgangswert umrechnet.
Die Eingangsgröße 'input' ist der Wert des Potentiometers
Die Ausgangsgröße 'output' ist der Wert auf der Bühne.
Es ist sinnvoll, dass die Werte zuerst in einer Tabelle aufgeschrieben werden.
Eingangswert input | von input 1 = | 0 | bis input 2 = | 1023 |
Ausgangswert output | von output 1 = | -180 | bis output 2 = | 180 |
Zusammengehörende Werte stehen untereinander.
Mit den Werten aus der Tabelle kann ein Umrechnungsfaktor 'm' berechnet werden:
Hier kann man bereits die Zahlen aus der Tabelle einsetzen und den Wert ausrechnen.
Der Ausgangswert 'output' wird aus einem Eingangswert 'input' wie folgt berechnet
Mit Zahlen aus dem Beispiel ergibt sich der Umrechnungsfaktor m zu
Mit der Formel aus Schritt 3 erhält man dann
In scratch kann die Lösung so aussehen. Den Wert m kann man aber auch einfach mit dem Taschenrechner ausrechnen.
Die beiden input-Werte aus der Wertetabelle in die Formel einsetzen. Es müssen die zugehörigen output-Werte herauskommen.
Die Skalierungsformel wird angewendet, wenn man eine lineare oder 'gleichmässigen' Umrechnung von Sensorwerten benötigt.
Aufgabe
![]() | Ein Abstandsensor liefert Werte von 80 bis 610. Damit soll auf der Bühne ein Element vertikal von y = 20 bis y= 240 verschoben werden. Berechne den Umrechnungsfaktor m und stelle die Formel für den Ausgangswert auf. |
![]() | Ein Abstandsensor liefert Werte von 80 bis 610. Damit soll auf der Bühne ein Element horizontal von 240 bis -60 verschoben werden. Berechne den Umrechnungsfaktor m und stelle die Formel für den Ausgangswert auf. |
![]() | In einem Spiel sollen die Credits des Spielers mit einem Objekt angezeigt werden, das sich horizontal von -60 bis 100 bewegt. Der Credit-Zähler soll Werte von 5 bis 100 haben. Wie muß die Position des Objektes berechnet werden ? |
Der RaspberryPi Computer hat die Möglichkeit, direkt auf Ein- und Ausgabeleitungen zuzugreifen. Ausführlich erklärt wird das in dem Handbuch der Adapterplatine.
Mit dem bisher erworbenen Wissen kann man schon eigene Experimente mit den Schaltern und Leuchtdioden der Adapterplatine ausführen.
Hier die Schritt- für Schrittanweisung für den Start der scratchClient-Software.
Da Scratch selber nicht auf Hardware zugreifen kann, braucht man dazu eine spezielle Software, welche die Hardware bedient.
Es gibt viele verschiedene Ausführungen solcher Software, hier im Kurs wird der 'scratchClient' benutzt. Speziell entwickelt für das IKG.
Die scratchclient-Software muss manuell gestartet werden. Die Befehle hierzu sind in den Experimenten jeweils angegeben. Hier ein Beispiel und Erklärungen dazu was die einzelnen Schritte bedeuten.
Die Befehle werden in ein Terminal 'lxterminal' eingegeben. Die Befehle müssen nicht abgetippt werden, sondern können mit copy/paste übernommen werden.
cd ~/scratchClient python3 src/scratchClient.py -c ikg_led
In der ersten Zeile wird das Verzeichnis im Dateisystem der SD-Karte gewechselt zu dem Verzeichnis, in dem die scratchClient Software gespeichert ist.
cd
bedeutet 'change directory' und ist der Befehl, der zu einem Verzeichnis im Dateisystem wechselt.
Der nachfolgende Text '~/scratchClient' gibt das Verzeichnis an. Die Tilde '~' bedeutet das Heimatverzeichnis des Anwenders. Da im Kurs der Benutzer immer 'pi' ist, und die Heimatverzeichnisse im Verzeichnis /home/ liegen, ist die Tilde '~' also eine Abkürzung für /home/pi.
![]() | ||||
Das Tilde-Zeichen erhält man, wenn man die 'alt gr' Taste drückt und hält, und dann die 'tilde' Taste.
|
Der Befehl
cd ~/scratchClient
wechselt also in das Verzeichnis /home/pi/scratchClient.
Die zweite Zeile ist der eigentliche Aufruf oder die Aktivierung des Programmes.
Der scratchClient ist in der Sprache 'python' geschrieben, und der Quellcode ist im Verzeichnis 'src' zu finden. Das Programm heisst 'scratchClient.py'. Pythonprogramme werden mit dem Programm 'python3' gestartet, dahinter folgt die Angabe des Programmnamens.
python3 src/scratchClient.py
startet also ein Pythonprogramm.
Der scratchClient braucht eine Angabe, welche Ein- und Ausgänge zu verwenden sind und wie diese funktionieren sollen. Das wird mit einer Konfigurationsdatei eingestellt, die im Beispiel 'ikg_led' heisst.
Der Genauigkeit halber: Die Konfigurationen liegen im Verzeichnis './config'; der genaue Dateiname ist 'config_ikg_led.xml'; die scratchClient-Software ergänzt das automatisch aus der Abkürzung.
An dem Ausdruck
-c
erkennt der scratchClient, dass danach der Name der Konfigurationsdatei folgt.
Zuletzt das
sudo
. Der Zugriff auf Hardware ist nur für einen Superuser erlaubt, der normale Benutzer 'pi' darf das nicht. Mit dem vorangestellten
sudo
'superuser
do' wird scratchClient dann so ausführt, als ob ein Superuser ihn gestartet hätte.
Jetzt: Terminal öffnen, Befehl eingeben oder kopieren.
Die Ausgabe sieht dann so aus:
![]() |
Einige Dinge sind zu beachten:
Fenster des Terminals nicht schliessen (mit dem 'X' oben rechts in der Titel-Zeile). Man darf das Fenster aber minimieren(mit dem '_' oben rechts in der Titel-Zeile).
Programm nur einmal starten.
Beenden des Programmes über strg-c (steuerung-Taste und c zusammen).
Strg-c wird oft auch englisch als ctrl-c (control, englisch für Steuerung) oder abgekürzt ^C geschrieben.
Möchte man den Rechner ausschalten, dann muss das Programm nicht gesondert gestoppt werden.
In der linken unteren Ecke ist der Button für das Hinzufügen von Extension.
Anschliessend die ScratchClient Extension anwählen.
Die scratchClient-Software kann über den Web-Browser überprüft werden.
Adresse localhost:8080 aufrufen.
Es wird die gerade aktuelle Konfiguration angezeigt; ein Bild der Schnittstellen zeigt auch die Daten an, die von scratch geschickt werden. Es ist empfehlenswert, das mal anzusehen.
In der Darstellung der Schnittstellen können auch Eingaben simuliert werden.
Die Aufgaben für dieses Kapitel sind im Handbuch der Adapterplatine zu finden.
Eine Rechenvorschrift oder Rechenrezept.
PLUS, MINUS, MULTIPLIKATION, DIVISION und z.B. auch die Funktionen SIN, COS etc. Diese Operatoren können auf Zahlenwerte angewendet werden.
Eine Lizenz ist ein 'Überlassungsvertrag' zwischen einem Programmierer, Hersteller, Künstler, Photographen und einem Verwender, der das Werk benutzen möchte. Es gibt sehr restriktive Lizenzen (der Verwender darf nicht weitergeben, nicht verändern o.ä.) und sehr offene Lizenzen (der Anwender darf auch beruflich verwenden, verändern, beliebig weitergeben). Auch wenn es unbequem ist: man muss das sehr ernst nehmen.
UND, ODER, NICHT, arbeiten mit den logischen Werten 'wahr' bzw. 'falsch'.
Präsentation= Vorführung; Modus = Betriebsart. In diesem Modus werden die Palette, Skripte verdeckt und das Programm benutzt den kompletten Bildschirm.
Manchmal möchte man den prinzipiellen Ablauf eines Programmes in gut lesbaren Sätzen darstellen. Dann verwendet man etwas formalere Ausdrücke als in der Umgangssprache, aber eben noch nicht die exakten Formulierungen einer Programmiersprache.
Wenn man wie in Scratch grafisch arbeitet, dann spart das auch Arbeit bei der Dokumentation, da das Kopieren von Grafiken in die Dokumentation viel Arbeit bedeutet.
Programm, das die Ansteuerung von Hardware durch Scratch ermöglich.
Ein Diagramm, das den Ablauf in einem Programm zeigt. Es zeigt die Objekte und die Signale, die hin- und hergeschickt werden.
Eine Abfolge von Programmbefehlen für einen Computer.
Ein Objekt, das komplett mit Grafik, Skripten und Variablen geladen werden kann.
Texte 'Strings' können verkettet werden. Hier bietet Scratch einen 'Verbinde'-Operator an und die 'Zeichen an Stelle N'. Diese liefern wieder Texte (Strings). Der Längenoperator 'Länge von ' liefert einen Zahlenwert.