User manual
kd = 7
LED = [18, 23, 24, 25]
Für die GPIO-Pins der vier Knetekontakte werden wieder vier Variablen an-
gelegt. Die Liste LED[] beinhaltet die GPIO-Pins der vier LEDs.
a = [7, 5, 2, 1]
Diese Liste enthält vier Grenzwerte für den Abstand. Ist der Abstand zwi-
schen Spielfigur und Schatz kleiner als einer der Werte, leuchtet die zuge-
hörige LED.
for i in LED:
GPIO.setup(i, GPIO.OUT, initial=False)
Eine Schleife setzt die GPIO-Pins der LEDs als Ausgänge und schaltet sie aus.
ende = 0
Die Variable ende definiert das Spielende. Die Hauptschleife des Pro-
gramms läuft in diesem Spiel nicht endlos, sondern nur so lange, bis der
Schatz gefunden ist.
x = random.randrange(-30,-19)
z = random.randrange(8,26)
mc.setBlock(x, 2, z, block.DIAMOND_ORE)
Die Koordinaten x und y des Schatzes werden zufällig innerhalb der Spielflä-
che festgelegt. Ein Block aus dem Material block.DIAMOND_ORE wird an
dieser Stelle in einer y-Höhe von 2 gesetzt, das ist eine Einheit unterhalb der
Spielfläche. Die Wiese hat an dieser Stelle die y-Höhe 3.
mc.player.setPos(-25, 4, 16)
Die Spielfigur wird mitten auf die Wiese gestellt.
while ende == 0:
p = mc.player.getTilePos()
d = math.sqrt((p.x-x)*(p.x-x)+(p.z-z)*(p.z-z))
Die Hauptschleife des Programms läuft, solange die Endbedingung noch
nicht erreicht ist. In jedem Durchlauf wird die Position der Spielfigur in der
Variablen p gespeichert, und dann wird nach Pythagoras der Abstand in der
x/z-Ebene zwischen Spielfigur und Schatz errechnet.
for i in range(4):
if d < a[i]:
GPIO.output(LED[i], True)
else:
GPIO.output(LED[i], False)
Eine Schleife prüft die vier in der Liste a[] gespeicherten Abstandswerte.
Ist der Abstand kleiner als der geprüfte Wert, leuchtet die zugehörige LED.
Ist der Abstand also kleiner als 1, leuchten alle LEDs, ist er dagegen größer
gleich 7, leuchtet keine.
if GPIO.input(kw) == False:
pyautogui.keyDown('w')
else:
pyautogui.keyUp('w')
Anschließend werden in jedem Durchlauf der Hauptschleife die vier Knete-
kontakte abgefragt. Wird einer davon berührt, simuliert pyautogui einen
entsprechenden Tastendruck und bewegt die Spielfigur.
bl = mc.getBlock(x, 3, z)
if bl == block.AIR.id:
ende = 1
Um das Spiel zu beenden, muss der Spieler den Schatz freilegen. Dazu wird
in jedem Schleifendurchlauf der Hauptschleife geprüft, ob der Block ober-
halb des Schatzes das Material block.AIR hat, also nicht vorhanden ist.
In diesem Fall wird die Variable ende auf 1 gesetzt und dadurch die Haupt-
schleife nicht mehr wiederholt.
time.sleep(0.05)
Die Zeitverzögerung dient auch hier wieder dazu, das Spiel spielbar zu ma-
chen.
Hat der Spieler den Schatz freigelegt, wird die Hauptschleife nicht mehr wie-
derholt. Jetzt wird kurz der Sieg angezeigt.
for j in range(10):
for i in LED:
GPIO.output(i, True)
time.sleep(0.2)
for i in LED:
GPIO.output(i, False)
time.sleep(0.2)
Die LEDs blinken zehnmal hintereinander gleichzeitig. Dazu werden alle vier
LEDs für 0,2 Sekunden eingeschaltet und danach für 0,2 Sekunden aus.
mc.setBlock(x, 2, z, block.SAND)
Der Block, in dem sich der Schatz befindet, wird wieder mit Sand gefüllt,
damit es beim nächsten Spiel keine zwei Schätze gibt.
mc.setBlocks(-20, 3, 8, -30, 3, 25, block.GRASS)
Die komplette Spielfläche wird erneut als Wiese gesetzt. Auf diese Weise
werden auch Blöcke gefüllt, die man weggeschlagen hat, ohne den Schatz
zu finden.
GPIO.cleanup()
Zum Schluss werden die GPIO-Pins zurückgesetzt, um Probleme beim
nächsten Programmstart zu vermeiden.
Der gesuchte Schatz
Steve sucht den Schatz
Der Tag 22 in der Minecraft
TM
-Welt










