User manual

Heute im Adventskalender
1 LED orange mit eingebautem Vorwiderstand
Minispiel Goldsuche
In dem Minispiel des 22. Tags soll mit der Spielfigur ein unter der Wiese zufäl-
lig versteckter Schatz gefunden werden. Die vier LEDs helfen dabei, indem
sie den Abstand zum Schatz zeigen.
Bauteile
1 Steckbrett
1 LED rot mit eingebautem Vorwiderstand
1 LED orange mit eingebautem Vorwiderstand
1 LED gelb mit eingebautem Vorwiderstand
1 LED grün mit eingebautem Vorwiderstand
4 20-MOhm-Widerstände (rot-schwarz-blau)
10 GPIO-Verbindungskabel
4 Knetekontakte
Das Programm
Neben der Zahl 22 befindet sich eine große Wiese, unter der das Programm
22mc_spiel01.py einen Schatz versteckt. Bewegen Sie die Spielfigur mit
den Knetekontakten. Wenn alle vier LEDs leuchten, stehen Sie genau über
dem Schatz. Schlagen Sie dann mit dem Schwert den Grasblock weg, um
den Schatz freizulegen.
Das Spielfeld für die Schatzsuche.
#!/usr/bin/python
import mcpi.minecraft as
minecraft
import mcpi.block as block
import time
import random
import math
import pyautogui
import RPi.GPIO as GPIO
mc = minecraft.Minecraft.
create()
kw = 16
ka = 21
ks = 12
kd = 7
LED = [18, 23, 24, 25]
a = [7, 5, 2, 1]
GPIO.setmode(GPIO.BCM)
GPIO.setup(kw, GPIO.IN)
GPIO.setup(ka, GPIO.IN)
GPIO.setup(ks, GPIO.IN)
GPIO.setup(kd, GPIO.IN)
for i in LED:
GPIO.setup(i, GPIO.OUT, initial=False)
ende = 0
x = random.randrange(-30,-19)
z = random.randrange(8,26)
mc.setBlock(x, 2, z, block.DIAMOND_ORE)
mc.player.setPos(-25, 4, 16)
while ende == 0:
p = mc.player.getTilePos()
d = math.sqrt((p.x-x)*(p.x-x)+(p.z-z)*(p.z-z))
for i in range(4):
if d < a[i]:
GPIO.output(LED[i], True)
else:
GPIO.output(LED[i], False)
if GPIO.input(kw) == False:
pyautogui.keyDown('w')
else:
pyautogui.keyUp('w')
if GPIO.input(ka) == False:
pyautogui.keyDown('a')
else:
pyautogui.keyUp('a')
if GPIO.input(ks) == False:
pyautogui.keyDown('s')
else:
pyautogui.keyUp('s')
if GPIO.input(kd) == False:
pyautogui.keyDown('d')
else:
pyautogui.keyUp('d')
bl = mc.getBlock(x, 3, z)
if bl == block.AIR.id:
ende = 1
time.sleep(0.05)
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)
mc.setBlock(x, 2, z, block.SAND)
mc.setBlocks(-20, 3, 8, -30, 3, 25, block.GRASS)
GPIO.cleanup()
So funktioniert das Programm
import math
Zusätzlich zu den bereits bekannten Modulen wird das Modul math impor-
tiert. Es enthält die Wurzelfunktion math.sqrt() für die Abstandsberech-
nung nach Pythagoras.
kw = 16
ka = 21
ks = 12
Ein Gamepad mit vier Sensorkontakten aus Knete und vier LEDs.