User manual

So funktioniert das Programm
#!/usr/bin/python
Python-Programme, die über die Kommandozeile gestartet werden, müs-
sen am Anfang immer obige Zeile enthalten. Bei Programmen, die nur über
die Python-Shell gestartet werden, ist das nicht nötig. Aus Gründen der
Kompatibilität sollten Sie sich aber angewöhnen, diese Zeile am Anfang je-
des Python-Programms einzutragen.
import mcpi.minecraft as minecraft
import RPi.GPIO as GPIO
Ein großer Vorteil von Python ist die einfache Erweiterbarkeit um neue Funk-
tionen aus Funktionsbibliotheken. Für nahezu jede Aufgabe gibt es bereits
fertige Bibliotheken, sodass Sie viele Standardaufgaben nicht mehr selbst zu
lösen brauchen. Die Bibliothek mcpi.minecraft wird für die Verbindung
zu Minecraft
TM
benötigt. Hier sind alle Steuerungsfunktionen enthalten. Die
Bibliothek RPI.GPIO wird für die Unterstützung der GPIO-Pins importiert.
mc = minecraft.Minecraft.create()
Diese Zeile ist in jedem Programm enthalten, das Minecraft
TM
nutzt. Sie
generiert ein Python-Objekt für das laufende Minecraft
TM
-Spiel. Objekte
sind weit mehr als nur einfache Variablen. Sie können verschiedene Eigen-
schaften haben und über Methoden beeinflusst werden. Methoden werden
durch einen Punkt getrennt direkt hinter dem Objektnamen angegeben.
Verschiedene Methoden dieses Objekts können dann ins Spiel eingreifen
oder Daten aus dem Spiel auslesen.
GPIO.setmode(GPIO.BCM)
Die Bibliothek RPi.GPIO unterstützt zwei Methoden zur Bezeichnung der
Pins. Im Modus BCM werden die bekannten GPIO-Portnummern verwendet,
die auch in Scratch genutzt werden. Im Modus BOARD entsprechen die Be-
zeichnungen den Pinnummern auf der Raspberry-Pi-Platine. Üblicherweise
wird BCM verwendet.
GPIO.setup(18, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
Die Funktion GPIO.setup initialisiert einen GPIO-Pin als Ausgang oder
als Eingang. Der erste Parameter bezeichnet den Pin je nach vorgegebe-
nem Modus BCM oder BOARD mit seiner GPIO-Nummer oder Pinnummer.
Der zweite Parameter kann entweder GPIO.OUT für einen Ausgang oder
GPIO.IN für einen Eingang sein.
while True:
Schleifen mit while laufen so lange, wie die danach angegebene Bedin-
gung wahr ist. Da die Bedingung hier einfach True lautet, also immer wahr
ist, läuft die Schleife endlos.
Einrückungen sind in Python wichtig
In den meisten Programmiersprachen werden Programmschleifen oder
Entscheidungen eingerückt, um den Programmcode übersichtlicher zu ma-
chen. In Python dienen diese Einrückungen nicht nur der Übersichtlichkeit,
sondern sind für die Programmlogik sogar zwingend nötig. Dafür braucht
man in dieser Sprache keine speziellen Satzzeichen, um Schleifen oder Ent-
scheidungen zu beenden.
p = mc.player.getTilePos()
Die eingerückten Zeilen werden in jedem Schleifendurchlauf einmal ausge-
führt. Diese Zeile liest die Koordinaten des Minecraft
TM
-Klotzes aus, auf dem
die Spielfigur gerade steht, und schreibt diese in die Variable p.
Das Minecraft
TM
-Koordinatensystem
Koordinaten in Minecraft
TM
werden in Rastereinheiten in der Größe der Klöt-
ze gezählt. Im Gegensatz zu vielen bekannten 3-D-Programmen hat die ho-
rizontale Ebene in Minecraft
TM
x- und z-Koordinaten. Die y-Achse zeigt nach
oben in die Luft.
Die Spielfigur soll die kleine grüne Fläche neben der gemauerten 2 betreten.
Diese Fläche liegt in der x-Achse zwischen den Koordinaten –1 und 1, in der
z-Achse zwischen 2 und 4. Ob die Figur dort steht, wird mit einer if-Abfrage
geprüft:
if (p.x<=1 and p.x>=-1 and p.z<=-2 and p.z >=-4):
Innerhalb der if-Abfrage sind vier Bedingungen mit and verknüpft. Sie
müssen alle gleichzeitig wahr sein, damit die Abfrage im Ganzen wahr er-
gibt. p.x liefert die x-Koordinate des in p gespeicherten Punkts, p.z liefert
die z-Koordinate.
GPIO.output(23, True)
GPIO.output(18, False)
Die eingerückten Zeilen werden immer dann ausgeführt, wenn die if-
Abfrage wahr liefert.
Die Funktion GPIO.output setzt den Status eines GPIO-Pins. Jeder Pin
kann auf zwei verschiedene Zustände gesetzt werden. True schaltet den
Pin ein, False schaltet ihn wieder aus. Diese Zeilen schalten die LED an
GPIO-Pin 23 ein und die LED an GPIO-Pin 18 aus.
Ergibt die if-Abfrage nicht wahr, weil die Spielfigur außerhalb der grünen
Fläche steht, wird der zweite Teil der Abfrage hinter else ausgeführt.
else:
GPIO.output(18, True)
GPIO.output(23, False)
Diese Zeilen schalten, entgegengesetzt zum ersten Teil der Abfrage, die LED
an GPIO-Pin 18 ein und die LED an GPIO-Pin 23 aus.
Starten Sie das Programm mit der Taste [F5]. Eventuell auftauchende War-
nungen wegen verwendeter GPIO-Ports können Sie ignorieren. Die rote
LED leuchtet. Bewegen Sie die Spielfigur auf die grüne Fläche neben der 2,
leuchtet die grüne LED. Verlässt die Spielfigur diese Fläche wieder, leuchtet
erneut die rote LED.
Spielfigur Steve steht auf der grünen Fläche
Spielfigur Steve steht außerhalb der grünen Fläche