Aus Das deutschsprachige Scratch-Wiki

< Scratch-Wiki:Scratch Buch

Version vom 9. Februar 2014, 17:01 Uhr von LiFaytheGoblin (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{scratchbuch}} Nachdem du mittlerweile ziemlich fortgeschritten bist, was den Umgang mit Scratch angeht, wird es Zeit, sich einen ganz besonders spannende…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Scratch Buch-Navigation - Versionen: 1 2 3 4 (Offizieller Plan) - Kapitel: Vorwort Einleitung 1 2 3 4 5 6 7 8 9 10 11 12

Nachdem du mittlerweile ziemlich fortgeschritten bist, was den Umgang mit Scratch angeht, wird es Zeit, sich einen ganz besonders spannenden Teil der Blöcke genauer anzuschauen. Die Rede ist von den grünen Operatoren Blöcken. Sie sind Meister der Logik, die dir einiges Ersparen – oder dich herausfordern können!

In diesem Kapitel lernst du

  • wie man den Computer die kompliziertesten Matheaufgaben lösen lässt.
  • wie man die Bewegungsart einer Figur auf verschiedene Arten und Weisen aufpeppt
  • wie man mit Hilfe von Operatorenblöcken ein Uhrendisplay programmiert

Der Computer – Ein Rechengenie

Wie der Name dieser hochkomplexen Maschine, die sich »Rechner« (oder auf Englisch »Computer«) nennt, bereits vermuten lässt, kann sie Rechenaufgaben hoch und runter und von jedem Schwierigkeitsgrad lösen – Man muss ihr nur die richtigen Befehle dazu geben. Das kann man zum Beispiel tun, indem man ein Programm aus bestimmten Scratch Blöcken zusammenbastelt. Nehmen wir also einmal an, wir wollen diese Aufgabe mit Hilfe von Scratch lösen:

5 mal 3 plus 5 geteilt durch 2

Um diese Aufgabe mit den grünen Operatorenblöcken von Scratch auszudrücken, stehen uns zunächst einmal die Grundrechenarten plus (+), minus (-), mal (*) und geteilt (/) zur Verfügung. Wie das geht, wird dir im folgenden Abschnitt erklärt. Zusätzlich zu den Grundrechenarten gibt es auch fortgeschrittenere Blöcke wie √ oder log. Wenn du damit noch nichts anfangen kannst, ist das nicht so schlimm, denn diese Befehle braucht man beim Programmieren mit Scratch nur selten. Häufig verwendet wird hingegen der "ZUFALLSZAHL VON () BIS ()"-Block, der eine zufällige Zahl (zum Beispiel für zufällige Positionierung) generiert.

Wie stecke ich die Blöcke richtig zusammen?

Um eine Rechenaufgabe in Scratchblöcken auszudrücken, kombinieren wir Operatorenblöcke.

Grundrechenregeln - Allgemeingültig

Es gibt allgemeingültige, grundsätzliche Rechenregeln, an die sich Computer und Taschenrechner halten, wenn es darum geht in welcher Reihenfolge gerechnet wird. Wenn du bereits mit ihnen vertraut bist, kannst du diesen Abschnitt überspringen und gleich zum nächsten übergehen. Wenn nicht, lohnt es sich, sich die Regeln einmal genauer anzuschauen. Sie lauten:

  1. Mal (*) und Geteilt (/) kommt vor Plus (+) und Minus (-)
  2. Von links nach rechts

In unserem Fall (5 mal 3 plus 5 geteilt durch 2) würde der Computer also zunächst 5 mal 3 und dann 5 geteilt durch 2 rechnen. Erst danach würden die beiden Ergebnisse zusammenaddiert werden.

Was ist nun aber zum Beispiel, wenn wir selbst bestimmen wollen, welcher Teil der Rechnung zuerst berechnet wird? Dafür gibt es eine dritte Regel:
3. Klammern zuerst
Wir benutzen also Klammern um zu zeigen, was zuerst gerechnet werden soll – nämlich von der innersten Klammer zur äußersten. Unsere Rechnung von vorhin sähe also, wenn wir bestimmen wollten, dass von links nach rechts ohne Beachtung der Regel "* und / kommt vor + und Minus -" gerechnet werden sollte, so aus:

(((5 mal 3) plus 5) geteilt durch 2)

Nach der Regel wird hier zuerst 5 mal 3, dann das Ergebnis plus 5 und zuletzt alles geteilt durch 2 gerechnet. Verstanden? Dann übertragen wir das Ganze jetzt auf Scratch!

Grundrechenregeln - Auf Scratch übertragen

Bei Scratch gibt es auch so etwas wie Klammern, die es uns erlauben die Reihenfolge, in der die einzelnen Rechnungsabschnitte gerechnet werden, selbst festzulegen. Hier kommen wir wieder auf unsere Rechenblöcke zurück.

Kap10 1.png

Wie du siehst, sind die Rechenblöcke an den Seiten abgerundet. Diese Form erinnert doch – ja! An unsere Klammern! Denn so bestimmen wir bei Scratch allein dadurch, wie wir die Blöcke ineinander stecken, in welcher Reihenfolge der Computer rechnet. Die ersten beiden Rechenregeln (»* und / vor + und -« und »von links nach rechts«) werden dadurch außer Kraft gesetzt und wir müssen uns nicht im Geringsten darum kümmern! Die Rechnung

(((5 mal 3) plus 5) geteilt durch 2)

sähe in Blöcken dann so aus:

Kap10 2.png

Wie erhalte ich ein Ergebnis?

Nun weißt du, wie man Blöcke richtig zusammensteckt, damit eine Rechnung so berechnet wird, wie wir es wollen. Doch wie bekommst du auch das Ergebnis angezeigt? Dafür gibt es zwei Möglichkeiten.

Möglichkeit 1: Figuren

Die einfachste Möglichkeit ist, den "sage ()" – Block zu verwenden, um das Ergebnis anzeigen zu lassen. Die Blockkombination sieht dann so aus:

Kap10 3.png

Die Figur, die den Block ausführt (in diesem Fall die Scratch Katze), sagt dir das Ergebnis in einer Sprechblase:

Kap10 4.png

Möglichkeit 2: Variablen

Die Möglichkeit, dass Ergebnis dadurch herauszufinden, dass man es Figuren sagen lässt, ist zwar schön und gut und für einfache Aufgaben auch praktisch, doch vielleicht möchte man sein Ergebnis auch speichern, oder ohne eine Figur arbeiten. In diesem Fall benutzt man den "Setze () auf ()"-Block für Variablen und lässt die Variable anzeigen. Diese Blockkombination sieht dann so aus:

Kap10 5.png

Der Wert der Variable ist nun das Ergebnis der Rechnung und wird auf der Bühne gezeigt:

Kap10 6.png

Das andere "geteilt": Modulo

Interessant zu wissen: Modulo, als mod abgekürzt, berechnet den Rest der übrig bleibt, wenn man eine Zahl durch die andere teilt. Im folgenden Beispiel wird der Unterschied zum »normalen« geteilt deutlich:

Teilt man 5 durch 3, passt 3 einmal in die 5 rein und 2 bleibt übrig:

5 / 3 = 1 Rest 2

Der Rest, der übrig bleibt, kann aber auch mit dem »anderen geteilt«, Modulo, berechnet werden:

5 mod 3 = 2

Modulo kann wird häufig benutzt um zu prüfen, ob eine Zahl gerade ist. Eine Zahl ist gerade, wenn sie ohne Rest durch 2 teilbar ist, die Zahl mod 2 also 0 ergibt.

Mathematik in Programmen

Dass die vorher gezeigten Möglichkeiten, Rechenoperatorenblöcke von Scratch zu verwenden, nützlich sind, um deine Mathematikhausaufgaben zu erledigen, ist offensichtlich. Doch wofür braucht man diese Blöcke eigentlich beim Programmieren? Da der Kreativität natürlich keine Grenzen gesetzt sind, wollen wir ihren Nutzen nur an einigen wenigen, aber häufig angewandten Beispielen herausfinden.

Gitterplatzierung

Normalerweise bewegt sich eine Figur Pixel für Pixel. Für manche Programme kann es nützlich sein, diese Pixel sozusagen zu vergrößern – Daraus entsteht ein Gitter, in dem sich die Figur bewegt. Diese Gitterplatzierung wird zum Beispiel für Puzzles, Schach, Spiele im Retrostyle und Ähnliches verwendet.

Nehmen wir einmal an, wir wollen, dass sich die Scratch Katze im folgenden Beispiel der Maus folgend im Gitter bewegt (also von Quadrat zu Quadrat hüpft).

Kap10 13.png

Zunächst müssen wir wissen, wie groß die Quadrate im Gitter, also wie groß die einzelnen Schritte sind. In diesem Fall sind es 100 auf 100 Pixel. Für die Bewegung benutzen wir nun diese Formel:

Kap10 14.png

Der "gerundet"-Block setzt die Kommazahl, die bei Mausposition geteilt durch 100 herauskommt auf die nächst höhere, ganze Zahl, wenn die Zahl hinter dem Komma 5 oder größer ist. Er setzt die Kommazahl auf die nächst niedrigere, ganze Zahl, wenn die Zahl hinter dem Komma kleiner ist als 5. Dabei kommen in unserem Beispiel ganze Zahlen von -3 bis 3 als Ergebnis heraus. Diese werden mal 100 genommen. Dadurch sind letztendlich für die Figur die Positionen X beziehungsweise Y = {-300, -200, -100, 0, 100, 200, 300}.

Anregung

Du kannst diesem Projekt auch noch weitere Figuren hinzufügen, die sich auch im Gitter platzieren! Wie wäre es mit Objekten, die man sammeln muss, und einigen Gegnern?

Ein als Beispiel erweitertes Projekt mit Erklärungen in den Kommentaren (im Projekteditor sichtbar) kannst du auf dieser Seite finden: http://scratch.mit.edu/projects/12112613.

Schwerkraft

Die Schwerkraft ist in der Physik die Kraft, die uns, wenn wir springen, immer wieder zurück zur Erde zieht. Wenn wir nach oben springen, passiert Folgendes: Zunächst werden wir immer langsamer, bis wir am höchsten Punkt unseres Sprunges angekommen sind. Dann fallen wir nach unten, wobei wir schneller werden, je weiter wir bereits gefallen sind. Dieses Prinzip in Spiele mit einzubauen, macht sie realistischer und schöner zu spielen. Bleibt nur noch die Frage nach dem "Wie".

Vorbereitung

Für unsere realistisch aussehende Schwerkraftsimulation benötigen wir zwei Figuren: Eine vom Spieler lenkbare und eine, die den Boden darstellt, auf dem die erste Figur läuft. Das könnte zum Beispiel so aussehen:

Kap10 7.png

Die erste Figur wollen wir nun zunächst einmal steuerbar machen. Sie soll mit den Pfeiltasten nach links und rechts gehen und in die passende Richtung schauen. Dafür setzen wir den Drehmodus der Figur auf Rechts-Links und basteln ein Skript zusammen, das dir bereits bekannt sein sollte:

Kap10 8.png

Schwerkraft

Die ständig wirkende Schwerkraft beeinflusst die Y-Position der Spielfigur, da sie, wie auch in Wirklichkeit, nach unten, also auf den Boden, drückt. Außerdem gilt: Je höher der Wert der Y-Position ist, desto schneller fällt der Wert der Y-Position durch die Schwerkraft. Also wird die Y-Position abhängig von einem Faktor, der sich mit der Höhe erhöht, verändert. Wir brauchen demnach zunächst einmal eine Variable, die diesen Faktor, der die Geschwindigkeit, mit der die Figur fällt, enthält. In diesem Beispiel nennen wir sie Fall-Geschwindigkeit (Y). Nun brauchen wir die passende Formel, um diese Geschwindigkeit zu setzen. Dafür gilt:

  1. Wenn die Figur auf dem Boden ist, fällt sie nicht, deshalb ist die Fall-Geschwindigkeit dann 0.
  2. Die Y-Position ändert sich ständig um die Fall-Geschwindigkeit.
  3. Die Fall-Geschwindigkeit ändert sich ständig um -0.1, da die Y-Position ins Negative verändert wird (außer die Figur ist auf dem Boden).
  4. Da die Y-Position sich nicht gleich bleibend, sondern immer schneller ändert, muss die Fall-Geschwindigkeit mit einer kleinen Zahl multipliziert werden.

Für Punkt 1 ist das Skript schnell gebaut:

Kap10 9.png

Das Skript soll ständig laufen und die Variable Fall-Geschwindigkeit auf 0 setzen, falls der Boden berührt wird. Von da an soll es warten, bis der Boden nicht mehr berührt wird, bis erneut geprüft wird, ob der Boden berührt wird. Dieser letzte Teil verhindert, dass die Figur später beim Springen am Boden "kleben bleibt", weil die Fall-Geschwindigkeit nicht verändert werden kann.

Die Punkte 2, 3 und 4 stellen einen sich wiederholenden Ablauf dar, der für Punkt 3 (der Einfachheit wegen ans Ende des Skriptes gesetzt) um eine Bedingung ergänzt werden muss:

Kap10 10.png

Erst ändert sich die Y-Position um die Fall-Geschwindigkeit. Dann wird die Fall-Geschwindigkeit auf ihren Wert mal 1.01 gesetzt. Zuletzt wird geprüft ob gerade der Boden berührt wird. Wenn das nicht der Fall ist, wird die Fall-Geschwindigkeit um 0.1 vermindert.

Schließlich wird die Figur noch auf ihre Startposition gesetzt und die Fall-Geschwindigkeit auf 0 zurückgesetzt, jedes Mal sobald das Spiel startet:

Kap10 11.png

Springen

Nun fehlt nur noch das Skript, dass die Figur hochspringen lässt. Für eine reibungslose Lenkung, bauen wir es in unser Links-Rechts-Steuerung mit ein:

Kap10 12.png

Da beim Springen die Y-Position zuerst ins positive verändert wird, muss die Fall-Geschwindigkeit lediglich auf eine Zahl größer als 0 gesetzt werden. Danach läuft, dank unserer Schwerkraft-Simulation alles wie von selbst. Logischerweise darf die Figur nur springen, wenn sie auch den Boden berührt.

Anregung

Aus unseren bisherigen Skripten lässt sich in wenigen Schritten ein einfaches "Jump and Run" Spiel erstellen! Füge dazu weitere Kostüme für den Boden (als Level) und ein Objekt hinzu, das auf Berührung mit der Figur in das nächste Level wechselt! Wenn du willst, kannst du sogar Gegner mit einbauen.

Ein als Beispiel erweitertes Projekt mit Erklärungen in den Kommentaren (im Projekteditor sichtbar) kannst du auf dieser Seite finden: http://scratch.mit.edu/projects/12008309/.

Weitere Operatoren

In diesem Teil des Kapitels wirst du sehen, dass Operatorenblöcke nicht nur fürs Rechnen oder für Bedingungen zu gebrauchen sind. Sie werden mit Hilfe des folgenden Beispielprojektes vorgestellt.

Digitales Uhrendisplay

Wir wollen eine digitale Uhr programmieren, die immer die aktuelle Uhrzeit auf der Bühne anzeigt. Das Programm besteht aus zwei Teilen, die nacheinander Programmiert werden: Einerseits der digitalen Uhr, und andererseits das Uhrendisplay.

Die Uhr

Für unsere Uhr soll, falls die Stunde oder die Minute einstellig ist, eine Null vor die jeweilige Zahl gestellt werden, da das bei digitalen Uhren so üblich ist.

Einstellig bedeutet:

  • die Nummer oder das Wort hat die Länge 1
  • die Nummer oder das Wort besteht aus einer einzigen Zahl, beziehungsweise einem einzigen Buchstaben
  • die Nummer ist kleiner als 10

Dafür muss zunächst geprüft werden, ob die Stunde einstellig ist. Wir benutzen dazu den Operatorenblock »LÄNGE VON ()« und den füllen den Parameter mit dem Fühlenblock »(STUNDE) IM MOMENT«.

Um gegebenenfalls eine 0 vor die Stundenzahl zu setzen, kann der Operatorenblock »VERBINDE ()()« benutzt werden. Dabei wird die Stunde im Moment mit 0 verbunden und in einer eigenen, passend benannten Variable festgehalten.

Kap10 15.png

Mit diesem Skript fügt man eine Null vor einer einstelligen Stundenzahl ein. Das gleiche wie für einstellige Stunden gilt natürlich auch für einstellige Minuten. Hier geht man genauso vor - man passt lediglich den Fühlenblock und den Variabel-Namen entsprechend an.

Nachdem die Stunden-Variable und die Minuten-Variable auf den richtigen Wert gesetzt wurden, müssen die Beiden jetzt in einer weiteren Variablen (nennen wir sie »Zeit«) mit einem Doppelpunkt (:) dazwischen verbunden werden. Auch hierfür können wir den »VERBINDE ()()«-Block benutzen, den wir diesmal ineinander schachteln. Dieser Part sieht dann so aus:

Kap10 16.png

Schließlich muss das Skript noch fortlaufend ausgeführt werden. Um den Computer ein wenig zu entlasten, soll die Schleife nach jedem Durchgang eine Sekunde lang pausieren.

Das endgültige Skript für diesen Teil unseres Uhren-Programms sieht schlussendlich und zusammengesetzt so aus:

Kap10 17.png

Das Display

Damit die Uhrzeit nicht nur in der Zeit-Variablen, sondern auch auf der Bühne angezeigt wird, soll eine Figur die Zahlen auf die Bühne stempeln. In Worten passiert folgender Vorgang:

  1. Stemple das erste Zeichen der Zeit-Variable
  2. Gehe weiter nach rechts
  3. Stemple das zweite Zeichen der Zeit-Variable
  4. Gehe weiter nach rechts
  5. Stemple das dritte Zeichen der Zeit-Variable
  6. Gehe weiter nach rechts
  7. Stemple das vierte Zeichen der Zeit-Variable
  8. Gehe weiter nach rechts
  9. Stemple das letzte Zeichen der Zeit-Variable

Dieser Vorgang lässt sich kürzer fassen, indem man eine Zähler-Variable kreiert:

  1. Stemple das (Zähler) Zeichen der Zeit-Variable
  2. Ändere die Zähler-Variable um 1
  3. Gehe weiter nach rechts

Dieser Vorgang muss natürlich solange wiederholt werden, bis jedes Zeichen der Zeit-Variable gestempelt wurde.

Für das Stempeln des Zeichens der Zeit-Variable, muss die Figur mit Kostümen für jede Zahl und den Doppelpunkt ausgestattet werden. Sie soll dann zunächst zu dem Kostüm wechseln, das so aussieht wie das Zeichen, und dann einen Abdruck hinterlassen. Indem man dieses Kostüm nach dem Zeichen benennt, kann man die Figur einfach mithilfe eines passenden Parameters zu diesem Kostüm wechseln lassen und vermeidet extrem lange Falls-Sonst-Skripte. In Blöcken sieht der Vorgang dann so aus:

Kap10 18.png

Es reicht natürlich nicht, die Uhrzeit nur einmal abzustempeln – Schließlich soll sie ja aktuell angezeigt werden! Dafür müssen wir den Vorgang oben unendlich oft wiederholen, dazwischen jedoch immer wieder die Malspuren entfernen, da sonst die Uhrzeit unleserlich wird! Außerdem muss die Ausgangsposition immer wieder nach links- und die Zähler-Variable zurückgesetzt werden.

Um den Computer zu entlasten, können wir auch hier die Schleife wieder pausieren lassen – intelligenterweise soll der Computer warten, bis die Zeit sich geändert hat, also eine neue Minute angebrochen ist.

Das endgültige Skript für diesen zweiten Part sieht am Ende so aus:

Kap10 19.png

Anregung

Wie wäre es nun, wenn du dein Projekt weiter ausbaust? Du könntest zum Beispiel eine Weckfunktion oder einen Timer einbauen!

Ein als Beispiel erweitertes Projekt mit Erklärungen in den Kommentaren (im Projekteditor sichtbar) kannst du auf dieser Seite finden: http://scratch.mit.edu/projects/12114632/.

Zusammenfassung

In diesem Kapitel hast du die Blöcke der Kategorie Operatoren kennen gelernt. Du kannst jetzt mit Zahlen zaubern und mit Buchstaben jonglieren. Außerdem hast du an den Beispielen Schwerkraft, Gitterplatzierung und digitale Uhr gelernt, Operatorenblöcke anzuwenden. Ganz schön fortgeschritten!

Zu fortgeschritten für dich? Wenn du Probleme mit der grundlegenden Mathematik in diesem Kapitel hast, frag am besten deine Eltern oder deinen Lehrer um genauere Erklärungen. Um die anderen Operatoren besser zu verstehen, kann es auch helfen, einfach ein wenig auszuprobieren.

Die folgenden Begriffe sind in Kapitel 10 aufgetaucht:

  • Grundrechenregeln — Regeln die Rechenreihenfolge
    • Klammern vor Mal/ Geteilt vor Plus/ Minus
    • Rechnen von Links nach Rechts
  • Zeichen — Ein Buchstabe oder eine Ziffer eines Wortes oder einer Zahl. Beispiel: H ist das vierte Zeichen in Mathematik.
  • Ziffer — Zeichen einer Zahl. Beispiel 5 ist die letzte Ziffer in 345.

Ein paar Fragen ... =

1. Das folgende Skript begrüßt einen Benutzer.

Kap10 20.png

Mit welchem Operatorenblock kannst du hier das Benutzen von zwei "SAGE () FÜR 2 SEK."-Blöcken vermeiden?

2. Wie kannst du eine Figur an einer zufälligen Stelle positionieren?

... und ein paar Aufgaben

1. Finde heraus, was die Lösung dieser komplizierten Rechenaufgabe ist: 5 * 3 / (7 - 2) + 120 * 721.

Beachte die Reihenfolge, in der die einzelnen Teile gerechnet werden!

2. Lass den Computer alle geraden Zahlen der Lösung addieren! Dazu wirst du den Modulo-Befehl und eine Zählervariable benötigen.

3. Lass den Computer alle Zahlen bis zu einer gewünschten Zahl in gerade und ungerade Zahlen sortieren. Benutze dazu wieder den Modulo-Befehl, eine Zählervariable, und Listen.

Lösungsskripte zu den hier gestellten Aufgaben findest du in diesem Projekt: http://scratch.mit.edu/projects/11986930/.

Abweichungen, bei denen die richtigen Ergebnisse herauskommen, sind ebenfalls möglich.



Code zum Einbinden ins Forum:
[wiki=de:Scratch-Wiki:Scratch Buch/Operatoren]Scratch Buch/Operatoren[/wiki]

Kategorie:En-Link

Cookies helfen uns bei der Bereitstellung von Das deutschsprachige Scratch-Wiki. Durch die Nutzung von Das deutschsprachige Scratch-Wiki erklärst du dich damit einverstanden, dass wir Cookies speichern.