Programmieren

Computerbefehle für Programme sind in Programmiersprache verfasst, damit der Computer auch versteht, was man ihm befiehlt. Mithilfe der Scriptsprache GamBu-Script machen Schüler*innen erste Schritte beim Programmieren. Sie schreiben Schleifen, Verzweigungen und Schalter für Spiele und können ihre Arbeit in der Game-Engine austesten.

Arbeitsmittel
gesperrter SchuBu+ Inhalt
gesperrter SchuBu+ Inhalt

Info für Lehrende

Eingeloggte Lehrer*innen mit Lizenz für dieses Buch werden hier durch Unterrichtsvorschläge und Zusatzinformationen zur Seite und zu Lernzielen unterstützt.
Mehr zu SchuBu+

Ablauf

Ein Computerprogramm ist eine haargenaue Anleitung für einen Computer, was er tun soll. Jedes Programm hat einen Programmstart und dann eine genaue Reihenfolge von Befehlen. Diese Computerbefehle sind in Programmiersprache verfasst, damit er auch versteht, was man ihm befiehlt.

Abbildung ??
Sprachenlernen zahlt sich aus.

Das folgende Programm ist in der Programmiersprache Java-Script verfasst. Sortiere die Befehle so, dass sie ein sinnvolles Programm ergeben!

else document.write("Nö");
if (antwort == "eine künstliche Intelligenz") document.write("Richtig! Du bist fast so intelligent wie ich.");
var antwort = prompt("Falls ich intelligent wäre, was wäre ich dann?");

Geschichte des Programmierens

Die ersten Programme waren oft eine lange Liste von Befehlen hintereinander.

Im folgenden SchuBuch-Text erfährt man mehr über die Geschichte des Programmierens:

Im SchuBuch hast du vieles darüber gelesen, wie sich das Programmieren historisch entwickelt hat. Schaffst du es, die wichtigsten Entwicklungsschritte richtig in den Zeitstrahl einzuordnen?

1804 1837 1843 1946 1950er 1990er

GamBu-Script

GamBu-Script ist die Scriptsprache, mit der man Spielelemente in der SchuBu-Game-Engine GamBu programmieren kann. Für jedes runde Element in der GamBu-Game-Engine, also , , , und , kann man ein Script schreiben, das bestimmt, was das Element kann, macht und wie es reagiert.

 + Script =  Bot

Alles in GamBu-Script wird kleingeschrieben.

Ein Befehl lautet zum Beispiel:

on touch () => say ("Autsch!") (In Anführungszeichen darf auch großgeschrieben werden.)

On touch () => say („Autsch!“) würde also nicht funktionieren.

on touch say ("Autsch") "Autsch!"

Schreibe ein erstes GamBu-Script! Programmiere den Puck am Eis so, dass er automatisch durch eine Lücke findet und das Netz trifft! Verwende dazu folgenden Befehl:

move (x, y)

Das x ist die Kraft nach links oder rechts. Bei 1 bewegt sich der Puck sehr wenig, bei 100 viel stärker in die angegebene Richtung.
Das y ist die Kraft nach oben oder unten. Bei 10 bewegt sich der Puck nach unten, bei -10 nach oben.
150 ist die maximal mögliche Kraft. Achtung: Die Kraft bedeutet NICHT, wie viele Kästchen die Bewegung sein soll.

Zum Beispiel:

move (-20, 30)

Klicke zum Programmieren auf den Bot (hier ein Puck)!

Info für Lehrende

Das große Fressen

Bereitet euch auf ein Klassenturnier vor! Am Ende der nächsten Seite wird es ein Spiel geben, wo die Maus gewinnt, die am meisten Käse gefressen hat. Alle in der Klasse schreiben ein Script für eine Maus. Die Mäuse-Bots treten dann gegeneinander an. Wer am schlauesten programmiert, gewinnt das Spiel.

Die genauen Turnierregeln finden sich am Ende der nächsten Seite.

Schreibe ein erstes Script für eine der Mäuse auf dem Turnierfeld! Die programmierte Maus soll einen Käse fressen. Kopiere dein Script zum Spaß auch in das Scriptfenster der zweiten Maus, damit beide loslaufen! Im Turnier wird das Script für die zweite Maus dann von einer Klassenkollegin oder einem Klassenkollegen stammen.

Info für Lehrende

Schleifen

Lange Programme sind kompliziert. Sie werden vom Menschen geschrieben, müssen aber zugleich für Computer verständlich sein. Deshalb klingen sie oft seltsam und man muss sich genau an ihre Regeln halten.

Eine praktische Anforderung an alle Programmiersprachen ist zum Beispiel:

Wenn sich etwas Gleiches oft wiederholt, wie schreibt man das?

In Programmiersprachen gibt es dafür mehrere Möglichkeiten, eine davon sind Schleifen. Dabei wird ein Teil des Programms immer wieder neu ausgeführt, also wiederholt.

In GamBu-Script werden Schleifen deshalb Wiederholung (repeat) genannt. Es gibt zwei Arten:

repeat seconds (x) [Befehl]

oder

repeat count (x) [Befehl]

Zum Beispiel könnte ein GamBu-Script so lauten:

move (100, 0) repeat count (100) move (-1, 0)

Der Bot würde mit Kraft 100 nach rechts düsen, dann aber langsam hundertmal hintereinander ein bisschen zurück nach links fahren.

Probier es aus! Klicke auf die Maus und kopiere das Beispiel-Script in das Script-Eingabe-Fenster!

Info für Lehrende

Schaffst du es, das Script so zu verändern, dass die Maus den Käse frisst? (Du musst das Spiel links oben mit dem Kreispfeil neu starten.)

Schleifen in Scratch

Info für Lehrende

Scratch ist eine einfache, visuelle Programmiersprache, mit der junge Menschen digitale Geschichten, Spiele und Animationen erstellen können. Der Vorteil ist, dass die Community sehr groß ist, deshalb wird man leicht Hilfe und Informationen finden. Der Nachteil gegenüber GamBu ist, dass es viel schwieriger ist, mit Scratch ein fertiges lustiges Spiel zu erfinden. Die GamBu-Game-Engine ist dagegen selbst wie ein Spiel.

Zum Vergleich sieht eine ähnliche Schleife wie die oben in Scratch so aus:

Scratch Screenshot

Programmiere die Maus so, dass sie automatisch zum Käse läuft und ihn frisst!

Info für Lehrende

EXPERTENFRAGE: Obwohl immer eine Programmierzeile nach der anderen ausgeführt wird:

Wieso bewegt sich die Maus bei diesem Script schräg nach oben und nicht zuerst nach oben und dann nach rechts? move (0, 100) move (100, 0)

Wenn man warten möchte, bis ein GamBu-Script später weitergeht, könnte man diesen Trick verwenden:

say ("Los geht's!") repeat seconds (1) move (0, 0) say ("Eine Sekunde ist schnell vergangen.")

Verwende Schleifen für andauernde Bewegung! Klicke auf die Maus und schreibe ein Script, dass die Maus zuerst nach oben und dann nach rechts geht, um sicher den Käse zu erreichen!

Info für Lehrende

Verzweigungen

Programmierte Geräte sollen uns Arbeit abnehmen. Dazu gehört, dass sie selbst Entscheidungen treffen können.

Wie formuliert man eigenständige Entscheidungen von Programmen?

Eine Möglichkeit in Programmiersprachen sind bedingte Anweisungen, sogenannte Verzweigungen. Der Programmablauf muss an einer solchen Stelle entscheiden, ob ein Befehl ausgeführt wird oder nicht.

Man sieht, wie die Roboter heiraten.
wenn [ja], dann [heiraten]
Man sieht den weinenden Roboter.
sonst [weinen]

In GamBu-Script schreibt man eine Verzweigung so:

if ([Bedingung erfüllt]) [Befehl] else [anderer Befehl]

zum Beispiel:

if (name == "Martin") say ("Hallo Martin!") else say ("Hallo?")

In Scratch würde der Befehl so aussehen:

if then in Scratch

In der häufig verwendeten Sprache Java-Script sieht eine Verzweigung fast gleich wie in GamBu-Script aus:

if (name == "Martin") alert("Hallo Martin!") else alert("Hallo?")

Im GamBu-Script-Beispiel oben hat der Bot „Hallo Martin!” gesagt. Bots können reden!

say ([text in Anführungszeichen])

Dieser praktische Befehl zeigt den Text, den der Bot sagen soll, in einer Sprechblase an.

Wenn man eine Sprechblase wieder wegkriegen möchte, dann lässt man den Bot einfach nichts sagen:

say ("")

Schalter

In der GamBu-Game-Engine gibt es einen mächtigen Baustein für Spiele, den Schalter. Spielfiguren können Schalter ein- oder ausschalten, um Türen zu öffnen, magische Dinge zu entdecken, Überraschungen zu erleben oder Bots zu aktivieren. Schalter sind gute Bauteile für Rätsel. Auch im Turnier „Das große Fressen” spielen Schalter eine wichtige Rolle. Schalter sind nur für Spieleautoren und Spieleautorinnen zugänglich, die programmieren können:

Einen Schalter erstellt man nämlich so:

  1. Man platziert einen Ball dorthin, wo der Schalter im Spiel dann sein soll.
  2. Man klickt auf den Ball, um das Scriptfenster zu öffnen.
  3. In das Script schreibt man den Befehl:

Zum Erstellen eines Schalters:

transform to switch

und zum Auslesen, ob ein Schalter ein oder aus ist:

state of element (n)

n ist die Nummer des Schalters. (Man sieht die Nummern aller Elemente immer, wenn man ein Scriptfenster öffnet.)

Ich bin ein Schalter! magische Verwandlung von Bot in einen Schalter
transform to switch
Bist du eingeschaltet? Roboter schaut auf den Schalter und fragt in der Sprechblase „Bist du eingeschaltet?“
state fo element (5) == 1

Ein Schalter wird ein- oder ausgeschaltet, wenn ihn ein Spielcharakter in GamBu berührt: Der state von einem Element kann entweder 0 oder 1 sein. 1 wenn der Schalter eingeschaltet ist und 0 wenn er ausgeschaltet ist.

EXPERTENFRAGE

Was passiert bei diesem GamBu-Script? repeat (10 seconds) say (state of element (1))

Programmiere die Schlangen-Leibwächter der Käferpräsidentin so, dass sie höflich und artig, genau dann, wenn die Maus den Schalter betätigt, nach oben und unten weggehen! Ziel ist es, dass die Maus den Käfer frisst.

TIPP: Beachte, dass du wiederholt den Schaltwert überprüfen musst, um zu erfahren, ob er irgendwann von der Maus gedrückt wird! Die obere Schlange muss also in einer Schleife folgende Bedingung immer wieder überprüfen: if (state of element (1) == 1) move (0, 1) Die Nummern der Elemente sieht man, sobald man ein Scriptfenster öffnet.

Info für Lehrende

EXPERTENFRAGE: Noch eine schwere Expertenfrage:

Was ist der Unterschied zwischen diesen beiden Befehlen? repeat seconds (3) say (state of element (5))say (state of element (5))


Wende deine neuen Fähigkeiten jetzt an!

Erstelle ein eigenes Spiel mit interessanten NPCs! Öffne die Game-Engine GamBu und wende in den Gambu-Scripts der NPCs an, was du gelernt hast!

Popup: Spiel mit programmierten Gegnern

Spiel mit programmierten Gegnern

Folgende Elemente soll das Spiel beinhalten:

  • Mindestens eine Spielfigur.
  • Mindestens ein Ziel
  • Mindestens ein rundes Tod-Element, das per Script bewegt wird.

Hacks und Tricks

Syntax
Beispiel
Anmerkung
say ("Ein beliebiger Text")
say ("Halli Hallo")
Der Bot sagt: „Halli Hallo” in einer Sprechblase.
say ("")
say ("")
Die Sprechblase verschwindet.
move (x, y)
move (-200,100)
Der Bot bewegt sich mit Kraft 200 nach links und 100 nach oben.
repeat seconds (x) [Befehl]
repeat seconds (10) move (0, 0.1)
Der Bot bewegt sich 10 Sekunden lang langsam nach oben.
repeat count (x) [Befehl]
repeat count (3) move (0, -200)
3 Frames hintereinander beschleunigt der Bot sehr stark nach unten.
transform to [Element-Typ]
transform to switch
Der Bot verwandelt sich in einen Schalter. Element-Typen: ball, player, goal, death, ++, wall, stop, switch, bot
state of element (n)
say (state of element (1))
Wenn das Element 1 eingeschaltet ist, ist state == 1 sonst 0.
if ([Bedingung ist wahr]) [Befehl]
if (state of element (35) == 1) say ("eingeschaltet!")
Falls der Schalter eingeschaltet ist, dann sagt der Bot "eingeschaltet!".
Wichtig: In Bedingungen muss für die Gleichheit immer ein doppeltes == verwendet werden.
if ([Bedingung wahr ist]) [Befehl] else [anderer Befehl]
if (state of element (35) == 1) say ("eingeschaltet!") else say ("ausgeschaltet")
Mit der zusätzlichen Angabe von „else [anderer Befehl]“ wird hier bestimmt, was der Bot macht, wenn der Schalter ausgeschaltet ist.

11. Programmieren
gesperrter SchuBu+ Inhalt Tools
Zeitgesperrter SchuBu+ Inhalt
Zufallgesperrter SchuBu+ Inhalt
Zeigengesperrter SchuBu+ Inhalt
Rechnengesperrter SchuBu+ Inhalt
Antwortengesperrter SchuBu+ Inhalt
Quizgesperrter SchuBu+ Inhalt
Info
Buchauswahl Digitale Grundbildung 2 - Inhaltsverzeichnis
Tools
Zeitgesperrter SchuBu+ Inhalt
Zufallgesperrter SchuBu+ Inhalt
Zeigengesperrter SchuBu+ Inhalt
Rechnengesperrter SchuBu+ Inhalt
Antwortengesperrter SchuBu+ Inhalt
Quizgesperrter SchuBu+ Inhalt
Über SchuBu
Zwischenstand gespeichert
Meine Lösung prüfen
erledigt
Juhu!
Du hast das Aufgabenpaket abgeschlossen.
Erledigt:
Genug für heute