Drzwi otwierane fotokomórką.

Chciałbym nauczyć dzieciaki podstaw programowania. Długo zastanawiałem się jak to zrobić i po przemyśleniach postanowiłem spróbować pythonowego mcpi, bo maluchy od kilku lat budują co popadnie w Minecraft na Androidzie. Uruchomiłem spigot, zainstalowałem RaspberryJuce i Geyser… I sam wsiąkłem na kilka wieczorów ;).

from mcpi import minecraft
import mcpi.block as block
import minecraftstuff
import time
from threading import Thread
import sys
from pathlib import Path

mc = minecraft.Minecraft.create()

if not (Path(".house_coordinates.txt").is_file()):
    print("Zbuduj najpierw dom za pomocą house.py")
    sys.exit()
else:
    f = open(".house_coordinates.txt", "r")
    x,y,z = f.readline().split(',')
    f.close()
    housePos = minecraft.Vec3(int(x),int(y),int(z))

blocksPos = [ (0,0,0), (-1,0,0), (-2,0,0), (0,1,0), (-1,1,0),
              (-2,1,0), (0,2,0), (-1,2,0), (-2,2,0), (0,3,0),
              (-1,3,0), (-2,3,0) ]

doorsPos = housePos + minecraft.Vec3(6,0,0)
doorsBlocks = [minecraftstuff.ShapeBlock(x,y,z,block.WOOD_PLANKS.id) for [x,y,z] in blocksPos]
doorShape = minecraftstuff.MinecraftShape(mc, doorsPos, doorsBlocks)

def openDoor():
 while True:
  pos = mc.player.getTilePos()
  if pos.x in range(doorsPos.x-3, doorsPos.x+1) and abs(pos.y-doorsPos.y)<2 and abs(pos.z-doorsPos.z)<2:
     doorShape.moveBy(0, -4, 0)
     time.sleep(5)
     doorShape.moveBy(0, 4, 0)

Thread(target=openDoor).start() 
from mcpi import minecraft
from pathlib import Path

mc = minecraft.Minecraft.create()
if not (Path(".house_coordinates.txt").is_file()):
    housePos = mc.player.getTilePos()+minecraft.Vec3(0,0,10)
    f = open(".house_coordinates.txt", "w")
    f.write("{},{},{}".format(housePos.x, housePos.y, housePos.z))
    f.close()
else:
    f = open(".house_coordinates.txt", "r")
    x,y,z = f.readline().split(',')
    f.close()
    housePos = minecraft.Vec3(int(x),int(y),int(z))

mc.setBlocks(housePos.x+0,  housePos.y+0,  housePos.z+0,
             housePos.x+10, housePos.y+10, housePos.z+10, 17)
mc.setBlocks(housePos.x+1,  housePos.y+1,  housePos.z+1,
             housePos.x+9,  housePos.y+9,  housePos.z+9, 0)
mc.setBlocks(housePos.x+4,  housePos.y,    housePos.z,
             housePos.x+6,  housePos.y+3,  housePos.z, 0)
mc.setBlocks(housePos.x+1,  housePos.y+5,  housePos.z,
             housePos.x+2,  housePos.y+6,  housePos.z, 0)
mc.setBlocks(housePos.x+8,  housePos.y+5,  housePos.z,
             housePos.x+9,  housePos.y+6,  housePos.z, 0)

Pobudujemy z pętli, pokażę młodemu minecraftstuff, kształty i obiekty 3d i myślę, że mu się spodoba. A poniższe, to drzwi na fotokomórkę. Wystarczy podejść ;).