User manual
else:
pyautogui.keyUp('s')
GPIO.output(ls, False)
if GPIO.input(kd) == False:
pyautogui.keyDown('d')
GPIO.output(ld, True)
else:
pyautogui.keyUp('d')
GPIO.output(ld, False)
p = mc.player.getTilePos()
if mc.getBlock(p.x, p.y, p.z) == block.
SNOW.id:
mc.postToChat("Schnee")
time.sleep(0.05)
So funktioniert das Programm
import random
Zusätzlich zu den bereits bekannten Modulen wird das Modul random
importiert, um Zufallszahlen zu erzeugen. Die Eisschollen sollen zufällig er-
scheinen.
Wie entstehen Zufallszahlen?
Gemeinhin denkt man, in einem Programm könne nichts zufällig ge-
schehen – wie also kann ein Programm dann in der Lage sein, zufällige
Zahlen zu generieren? Teilt man eine große Primzahl durch irgend-
einen Wert, ergeben sich ab der x-ten Nachkommastelle Zahlen, die
kaum noch vorhersehbar sind. Sie ändern sich auch ohne jede Regel-
mäßigkeit, wenn man den Divisor regelmäßig erhöht. Dieses Ergebnis
ist zwar scheinbar zufällig, lässt sich aber durch ein identisches Pro-
gramm oder den mehrfachen Aufruf des gleichen Programms jederzeit
reproduzieren. Nimmt man aber eine aus einigen dieser Ziffern zusam-
mengebaute Zahl und teilt sie wiederum durch eine Zahl, die sich aus
der aktuellen Uhrzeitsekunde oder dem Inhalt einer beliebigen Spei-
cherstelle des Computers ergibt, kommt ein Ergebnis heraus, das sich
nicht reproduzieren lässt und daher als Zufallszahl bezeichnet wird.
kw = 16
ka = 21
ks = 12
kd = 7
lw = 27
la = 24
ls = 18
ld = 4
Nach dem Import der Bibliotheken und der Initialisierung der Minecraft
TM
-
Verbindung werden die acht verwendeten GPIO-Pins in Variablen gespei-
chert. kw, ka, ks, kd sind die GPIO-Pins der Knetekontakte, die die Tasten w,
a, s, d simulieren. lw, la, ls, ld sind die GPIO-Pins der zugehörigen LEDs.
Weitere Variablen werden für die Koordinaten der Eisschollen benötigt.
x = 3
z = -30
Die Variablen x und z bezeichnen die Koordinaten des Felds, von dem aus
das Erstellen der Eisschollen berechnet wird.
mc.player.setPos(x-30, 0, z+1)
Die Spielfigur wird an den Anfang der Straße bei der Zahl 21 gesetzt.
bx = [0, 0, 0, 0, 0, 0, 0]
bz = [0, 0, 0, 0, 0, 0, 0]
Diese beiden Listen enthalten später die Koordinaten der insgesamt sieben
Eisschollen. Solche Listen müssen in Python einmal komplett angelegt wer-
den.
GPIO.setmode(GPIO.BCM)
GPIO.setup(kw, GPIO.IN)
GPIO.setup(ka, GPIO.IN)
GPIO.setup(ks, GPIO.IN)
GPIO.setup(kd, GPIO.IN)
GPIO.setup(lw, GPIO.OUT, initial=False)
GPIO.setup(la, GPIO.OUT, initial=False)
GPIO.setup(ls, GPIO.OUT, initial=False)
GPIO.setup(ld, GPIO.OUT, initial=False)
Die GPIO-Pins für die Knetekontakte werden als Eingänge ohne
Pull-down-Widerstände eingerichtet, die GPIO-Pins für die LEDs werden als
Ausgänge eingerichtet und ausgeschaltet.
for i in range(7):
bx[i] = x-2*i
bz[i] = z+random.randrange(3)
mc.setBlock(bx[i], 0, bz[i], block.SNOW)
Eine Schleife erzeugt zufällig die sieben Eisschollen vom Typ block.SNOW,
die sich dann auf den Spieler zubewegen. Die x-Koordinaten werden in der
Liste bx[] gespeichert. Alle Eisschollen haben einen Abstand von zwei Fel-
dern zur nächsten. Die z-Koordinaten werden in der Liste bz[] gespeichert.
Sie sind zufällig auf die drei Felder breite Straße verteilt.
for j in range(35):
for i in range(7):
Die Hauptschleife des Programms läuft diesmal nicht endlos, sondern 35-
mal. So lange dauert es, bis die Eisschollen die ganze Straße entlang und am
Ende ins Wasser gerutscht sind.
Innerhalb der Schleife läuft eine weitere Schleife siebenmal, um alle sieben
Eisschollen zu bewegen.
mc.setBlock(bx[i], 0, bz[i], block.AIR)
bx[i] -= 1
mc.setBlock(bx[i], 0, bz[i], block.SNOW)
Die aktuelle Eisscholle wird gelöscht und durch einen Block vom Typ
block.AIR ersetzt. Danach wird die x-Koordinate um 1 in negativer Rich-
tung verändert, da die Straße in dieser Richtung verläuft, und dort wird eine
neue Eisscholle vom Typ block.SNOW angelegt.
if GPIO.input(kw) == False:
pyautogui.keyDown('w')
GPIO.output(lw, True)
else:
pyautogui.keyUp('w')
GPIO.output(lw, False)
Nach dem gleichen Schema werden alle vier Knetekontakte abgefragt. Wird
ein Kontakt berührt, simuliert pyautogui einen Tastendruck auf die ent-
sprechende Taste. Danach wird die zugehörige LED eingeschaltet. Bei allen
nicht berührten Knetekontakten simuliert pyautogui das Loslassen der
entsprechenden Taste, und die LED wird ausgeschaltet. Diese Überprüfung
aller Knetekontakte findet in der inneren Schleife statt, also nach jeder Be-
wegung einer einzelnen Eisscholle.
p = mc.player.getTilePos()
if mc.getBlock(p.x, p.y, p.z) == block.SNOW.id:
mc.postToChat("Schnee")
Danach wird die Position der Spielfigur in der Variablen p gespeichert, und
es wird geprüft, ob die Spielfigur auf einem Eisblock steht. Ist das der Fall,
gibt die Funktion mc.postToChat() eine Nachricht in Minecraft
TM
aus.
Diese Nachrichten verschwinden nach einiger Zeit automatisch.
time.sleep(0.05)
Die Wartezeit am Ende jedes Schleifendurchlaufs sorgt dafür, dass sich die
Eisschollen in einer Geschwindigkeit bewegen, bei der man ihnen noch aus-
weichen kann
Hier ist der Tag 21 in der Minecraft
TM
-Welt










