Funktionen und Events sind besonders nützliche Möglichkeiten in Programmiersprachen. Mit Funktionen kann man komplizierte Vorgänge vereinfachen und Code leichter wiederverwenden. Mit Events kann man auf Vorgänge reagieren, die sich während des Ablaufs eines Programms ereignen. Diese zentralen Themen werden hier für Menschen erklärt, die noch nicht programmieren können. Alles Gelernte kann man direkt spielerisch ausprobieren und vertiefen.
Arbeitsmittel
Arbeitsblatt
Info für Lehrer*innen
Eingeloggte Lehrer*innen werden hier durch Unterrichtsvorschläge und Zusatzinformationen zur Seite und zu Lernzielen unterstützt. Mehr zu SchuBu+
Funktionen
Ein Computerprogramm ist oft komplex.
Damit man mit dem Programmieren überhaupt anfangen kann, muss man Probleme zuerst vereinfachen.
Kompliziertes vereinfachen. Wie geht das?
Tipp: Nicht alles auf einmal lösen!
Man muss also zuerst darüber nachdenken, aus welchen kleineren Problemen das Ganze besteht.
In der nächsten Übung wird ein Spiel programmiert, in dem sich Computergegner automatisch bewegen.
Dafür müssen alle NPCs programmiert werden.
Die Bewegung jedes einzelnen Bots einzeln zu programmieren, ist sehr aufwendig.
Deshalb ist es viel besser, dieses Problem in Teilprobleme zu zerlegen.
Ein guter Start ist hier, zwei Bot-Scripts für unterschiedliche Bewegungsabfolgen zu schreiben:
patrouilliere
und
rundgang
So kann man sich zuerst darauf konzentrieren, wie patrouillieren zu programmieren ist.
Im nächsten Schritt programmiert man den Rundgang.
Am Schluss kann man einfach jedem NPC sagen, was er machen soll, indem man die Funktionen aktiviert.
In vielen Programmiersprachen heißt so etwas Funktion oder Modul.
In GamBu-Skript heißen solche Blöcke, in denen mehrere Befehle zusammengefasst werden, block.
block [blockname]
[befehl 1]
[anderer Befehl]
[beliebig viele weitere Befehle]
blockende
Aufruf eines Blocks:
blockname
Abb. 1
Aufruf eines Blocks
Sobald ein Block in dieser Weise definiert wurde, kann man ihn in allen Skripten des Spiels aufrufen, indem man einfach den Blocknamen schreibt, als wäre es ein Befehl.
So ist es auch, Blöcke sind selbst programmierte Befehle. Auch sie können in Schleifen wiederholt werden.
Programmiere die Schlange so, dass sie sich genauso wie die Schlange in der Vorlage bewegt!
Tipp: Im Bot-Skript der Vorlage wird zuerst ein Block definiert, der die Schlange einmal hinunter- und hinaufgehen lässt.
Dieser Block wurde patrouilliere genannt und dann in einer Wiederholung 100 mal ausgeführt. Der Block hätte auch jeden anderen Namen bekommen können.
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Wenn alle Texturen, Bilder und Grafiken von dir selbst erstellt, gemalt oder gezeichnet worden sind, dann stehen sie bei einer Veröffentlichung automatisch unter CC BY-ND. Außer den selbst gemachten dürfen auch Grafiken enthalten sein, die ausdrücklich OHNE NAMENSNENNUNG frei verwendbar sind, dann stehen alle Grafiken, auch deine eigenen, nach Veröffentlichung unter CC0.
Die Texturen sollten genau 62 x 62 Pixel groß sein
Wenn alle Musikstücke und Geräusche von dir selbst erstellt, gesungen, gespielt und komponiert worden sind, dann stehen sie bei einer Veröffentlichung automatisch unter CC BY-ND. Außer den selbst gemachten dürfen auch Sounds enthalten sein, die ausdrücklich OHNE NAMENSNENNUNG frei verwendbar sind, dann stehen alle Sounds, auch deine eigenen, nach Veröffentlichung unter CC0.
Ändere die Geschwindigkeit der Schlange oben jetzt so, dass sie doppelt so schnell hinunter und hinaufgeht!
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Auch in Scratch gibt es Funktionen und auch dort heißen sie Blöcke:
Abb. 4
Links die Definition eines Blocks in Scratch, rechts der Aufruf.
In Java-Script schreibt man Funktionen so:
functionpatrouilliere() {
[ Bewegung einer Maus in Java-Script ]
}
Als Nächstes soll ein Rundgang programmiert werden:
Beim Aufruf des Rundgangs soll festgelegt werden, wie schnell und groß der Rundgang sein soll.
Solche Zusatzinformationen beim Aufruf eines Blocks nennt man Parameter.
Variablen und Parameter
Eine Variable ist beim Programmieren ein kleiner Speicher, der eine Information (z. B. eine Zahl, einen Text, ein Bild, …) speichert.
Dieser Speicher bekommt für die spätere Verwendung einen Namen.
So wird eine Variable in GamBu-Script definiert:
[variablenname] = [information]
zum Beispiel
alter = 12
Zum Beispiel kann man in einer Variable speichern, wie viel Käse eine Maus schon gefressen hat.
Jedes Mal, wenn die Maus einen Käse berührt, muss im Programm der gespeicherte Wert um eins erhöht werden.
Diesen Punktestand kann man am Schluss von einem Spiel anzeigen.
gefressenerkaese = 0
bei berührung von ziel gefressenerkaese = gefressenerkaese + 1
Abb. 5
Die Variable ist ein kleiner Informationsspeicher.
Käferstraße:Ergänze folgendes Script! Die Maus soll alle Käfer der Reihe nach fressen und dabei immer sagen, wieviel sie schon gefressen hat. Außerdem soll sie beim zehnten Käse automatisch umdrehen, um die Käfer auf der anderen Seite auch noch zu erwischen. Der Block ist hier bereits vorgegeben:
block gehe_und_sage
wenn futter < 10 dann rechts 1 sonst links 1
sage futter
blockende
wiederhole 100 sekunden gehe_und_sage
Zu definieren ist noch:
die Variable des Futters (Wie viel Futter hat die Maus zu Beginn gefressen?)
die Zeile "bei berührung von"
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Ein Parameter ist eine spezielle Art einer Variable.
Auch in Parametern wird Information gespeichert.
Der Unterschied ist, dass sie zu einem Block gehören.
Sie werden immer zusammen mit einer Funktion definiert.
Man kann den Block so definieren, dass ein Bot unterschiedlich patrouillieren kann:
Mehrere Parameter werden mit Beistrichen getrennt.
Jetzt kann man praktischerweise beim Aufruf einen sehr langsamen und müden Wächter patrouillieren lassen:
patrouilliere 0.5, 5
Und so kann man einen gestressten schnellen Wächter erstellen:
patrouilliere 10, 1
Abb. 6
Aufruf eines Blocks mit Parameter
Schlangenwelle:Befiehl den Schlangen, der Maus aus dem Weg zu gehen! Verwende dazu in allen Scripts aller Schlangen den Block patrouilliere! Dieser Block ist bereits definiert, du brauchst ihn nur noch aufzurufen. Hier funktioniert er aber ein bisschen anders, er hat nur einen Parameter, der die Wartezeit angibt, bevor die Schlange losgeht.
Hier wartet die Schlange zum Beispiel zweieinhalb Sekunden, bevor sie wegmarschiert:
patrouilliere 2.5
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Bisher waren in den Programmieraufgaben nur einzelne Aspekte zu lösen. Jetzt wird das Programmieren anspruchsvoller:
Beobachte genau, was die Schlange macht!
Programmiere die zweite Schlange so, dass sie sich gleich bewegt!
Die beste Lösung besteht aus nur 11 Code-Zeilen und zwei verschiedenen Blöcken. (Du findest eine Liste der wichtigsten Befehle im Scriptfenster rechts.)
Tipps:
Programmiere einen Block für den Rundgang mit Parametern, die vorgeben, wie schnell und wie lange die Schlange in eine Richtung im Block gehen soll!
Dann programmiere einen Block, in dem der erste Block mit unterschiedlichen Werten hintereinander aufgerufen wird.
Am Schluss programmiere eine Schleife, wo der zweite Block oft hintereinander aufgerufen wird!
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Erstelle für die Expertenaufgabe „Maus im Keller” am Ende der Seite einen Block, der eine Bot-Spielfigur schräg gehen lässt! Definiere bei der Blockdefinition zwei Parameter so, dass man beim Blockaufruf angeben kann, wie schräg die Maus geht.
So kommt die Maus nämlich besser bis zum vierten Käse. Der Block soll „schräg“ heißen und so aufgerufen werden:
wiederhole 5 sekunden schräg 1,1
Du hast diese Aufgabe geschafft, wenn die Maus mit diesem wiederholten Blockaufruf den Käse rechts oberhalb der Maus frisst und weiter schräg bis oben geht.
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Erweitere dein Script von der letzten Aufgabe! Rufe den Block wiederholt trickreich so auf, dass die Maus die ersten drei Käse durch drei schräge Bewegungen frisst.
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Ereignisse
Events sind Ereignisse. Ereignisse sind sehr mächtige Möglichkeiten in Programmiersprachen.
Damit kann man festlegen, welcher Code ausgeführt werden soll, wenn ein bestimmtes Ereignis eintrifft.
Ein typisches Beispiel wäre das Ereignis: [eine Taste wurde gedrückt]
oder bei Touch-Screens: [der Bildschirm wurde berührt]
oder [die linke Maustaste wurde geklickt]
Abb. 9
Ein Event auslösen
In GamBu gibt es zwei Ereignisse: Ein Bot kann entweder etwas berühren oder etwas sehen.
bei berührung von [Elementtyp oder ein Element] [Befehl] bei sicht von [Elementtyp oder ein Element] [Befehl]
also zum Beispiel:
bei berührung von spielfigur sage "Hallo :-)"
bei berührung von wand sage "aua"
oder
bei sicht von tod zurück 100
bei sicht von element 10 sage "Ohh, was sehen meine müden Augen. Ein seltener Freund."
Alle Elementtypen, die ein Bot unterscheiden kann, sind:
wand, ball, spielfigur, ziel, tod, ++. Wenn man nicht auf alle Elemente eines Typs, sondern nur auf ein Einzelelement reagieren will, kann man auch die Elementnummer angeben (z. B. element 42). Die Elementnummern sieht man immer auf allen Elementen, sobald man ein Scriptfenster öffnet.
Programmiere die Schlange so, dass sie sich nach unten bewegt, sobald sie eine Spielfigur sieht!
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Jetzt ist es soweit. Programmiere deine Maus möglichst schlau!
Spielziel
Ziel ist es, dass deine Maus viele Käfer und viel Käse frisst, bevor sie entweder stirbt oder die Zeit (1 Minute) aus ist.
Tipps fürs Programmieren
Für das Programmier-Turnier „Das große Fressen” sind drei einfache GamBu-Befehle und ein Zahlenwert sehr nützlich:
richtung element x
Der Befehl dreht den Bot leicht in Richtung des Elements mit der Nummer x. Wenn man das oft wiederholt, schaut er genau zu diesem Element.
vor x
„vor” bewegt den Bot in seine Blickrichtung und „zurück” in die entgegengesetzte Richtung.
zurück x
ACHTUNG: Beim Zurückbewegen dreht sich der Bot um und ändert damit seine Blickrichtung.
der Wert: entfernung von element x
Mithilfe der Entfernung von einem Element kann ein Script zum Beispiel unterscheiden, ob es die linke oder die rechte Maus steuert.
TIPPS: Alle Befehle für GamBu findet man in Abschnitt D (Hacks und Tricks). Wenn man das PDF ausdruckt, hat man seinen eigenen Schummelzettel! Jedes Scriptfenster hat auch rechts einen Bereich mit allen wichtigsten Befehlen.
Vorbereitung
Jede Schülerin und jeder Schüler programmiert eine Maus und kopiert das Script in ein Text-File. So, dass es gut gespeichert bleibt.
Sobald das Turnier startet, darf niemand mehr sein Script verändern. Die Scripts sollten vorher ausprobiert und getestet werden. Am besten auch gegen Scripts von Klassenkolleginnen oder Kollegen!
Bildet Zweiergruppen! Bei ungerader Zahl darf es genau eine Dreiergruppe geben.
Nur ein Gruppenmitglied kopiert beide Scripts in die Script-Fenster der Mäuse des Turnierspiels. Die Startposition der Maus (links oder rechts) kann entweder einvernehmlich oder im Streitfall mit Los entschieden werden.
Turnierregeln
Startet euer Spiel mit dem Button Bots starten!
(In der Dreiergruppe wird dreimal gespielt und als Ergebnis darf jeder sein besseres Ergebnis behalten.)
Nur die jeweils erfolgreicheren Mäuse steigen in die nächste Runde auf, wenn sie zumindest einen Käfer oder Käse gefressen haben.
Bei Gleichstand können auch mehrere Mäuse aufsteigen.
Alle Gewinnermäuse bilden wieder Zweiergruppen und spielen gegeneinander.
Dieser Vorgang wird wiederholt, bis nur noch eine Maus übrig ist oder in einer gesamten Runde niemand mehr ausgeschieden ist.
(Dann haben alle übrig gebliebenen Schülerinnen oder Schüler das Turnier gewonnen.)
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
SPEZIALAUFGABE: Für alle, die eine besondere Herausforderung suchen: Erstelle ein Script, damit die Bot-Maus alle Käsestücke im Keller fressen kann, ohne zu sterben!
Tipp:
Es ist mit dem Schalter möglich, die Wächter vom Käseschatz wegzuschicken.
Bei schwierigen Problemen ist es oft sehr hilfreich, wenn man zusammenarbeitet und gegenseitig bespricht, wie man eine Lösung finden könnte.
Info für Lehrer*innen
Mit SchuBu+ erhalten Lehrer*innen hier kontextbezogene Zusatzinformationen, wie Lösungsvorschläge und Tipps für den Unterricht.
block [blockname] [p1, p2, ..]
[befehl 1]
[anderer Befehl]
[beliebig viele
weitere Befehle]
blockende
block schraeg x,y
rechts x
hinauf y
blockende
p1, p2 sind Parameter. Man kann eigene Namen erfinden und sie im Block wie Variablen verwenden.
[blockname] [w1, w2]
schraeg 1,1
schraeg 10, -10
Mit diesem Aufruf des eigenen Blocks mit dem Namen „schraeg” bewegt sich der Bot ein bisschen nach rechts oben oder im zweiten Beispiel schneller nach rechts unten.
[variablenname] = [Information]
alter = 12
satz = "Mein Freund ist ein Bot"
Der Variablenname kann alles außer ein GamBu-Script-Befehlswort sein.
bei berührung von [Elementtyp oder ein Element] [Befehl]
bei berührung von spielfigur sage "Hallo"
bei berührung von wand sage "aua"
Das Event wird bei Berührung ausgelöst
bei sicht von [Elementtyp oder ein Element] [Befehl]
bei sicht von tod zurück 100
bei sicht von element 10 sage "Ohh, mein Lieblings Wuzi"
Das Event wird bei Sicht ausgelöst
richtung element n
richtung element 103
Der Bot dreht sich ein kleines Stück in die Richtung zum Element.
richtung element n, kraft
richtung element 103, 2
Der Bot dreht sich ein kleines Stück in die Richtung zum Element und bewegt sich hin.
vor x
vor 10
Der Bot macht einen Sprung vor.
zurück x
zurück 10
Der Bot macht einen Sprung zurück.
entfernung von element x
wenn entfernung von element 1 < 100 dann sage "Ich komme näher."
Eine solche wenn .. dann - Konstruktion muss in einer Schleife wiederholt werden, damit der Bot im richtigen Augenblick reagieren kann.
log "text" + "text2" + x
log "Der Wert der Variable my_v = " + my_v
Mit log kann man Texte und Werte in die GamBu-Konsole schreiben. Das hilft beim Fehlerfinden. Mit + werden mehrere Texte zu einem zusammengefasst.
Versteckte Möglichkeiten
Die folgenden Befehle sind nicht auf SchuBu-Seiten beschrieben. Sie sind nicht notwendig, um gute Spiele zu machen. Sie ermöglichen aber spezielle Spielmechaniken für Experten.
Syntax
Beispiel
Anmerkung
wiederhole bis [Bedingung wahr ist] [Befehl]
wiederhole bis entfernung von element 1 < 2 vor 1
Der Bot beschleunigt nach vor, bis er zwei Felder neben dem Element 1 ist.
lade textur von element n
lade textur von element 5
Der Bot übernimmt die Textur von Element 5
lade textur von element n für element m
lade textur von element 5 für element 0
Das Element 0 bekommt die Textur von Element 5
bei taste [Taste] [Befehl]
bei taste "g" sage "g wurde gedrückt"
Mit diesem Event kann man auf Keyboard-Tasten reagieren. Hier eine Taste drücken, um den Tastenwert in die Zwischenablage zu kopieren:
global.[variablenname] = [information]
global.punkte = global.punkte + 1
Wenn ein Variablenname mit .global anfängt, dann kann man auf diese Variable von allen Skripts aller Bots zugreifen.