Summer camp klass på Python kodning med Minecraft (9 / 12 steg)
Steg 9: Dag tre: del ett: Magic bridge
Magiska bron är en bra idé från Whale och Johan Olsson boken. Det gör en bro som sträcker sig under spelaren, låter spelaren gå på vattnet och i luften, och du kan visa barnen hur ett program växer från en enkel till mer komplex form.
Här är den enklaste versionen:
från mc import *
från tiden import *
MC = Minecraft()
samtidigt sant:
läge = mc.player.getTilePos()
mc.setBlock (position.x, position.y-1, position.z, STAINED_GLASS_BLUE)
Sleep(0.2)
Förklara alla steg noggrant för barnen, som fokuserar på oändliga spel slingan (samtidigt sant) och hur mc.player.getTilePos() kontrollerar spelarens aktuella position, indelad i x, y och z koordinater. Berätta för dem att sleep(0.2) är att säkerställa att Minecraft inte är överväldigad med göra massor av setBlocks, så att det finns en 0.2 andra vänta. Minns att du kan stoppa ett skript med /py av sig själv.
Har alla barnen göra en arbetande bro och sedan prata med dem om dess brister. Till exempel skadar bron marken du går på. Du du bör ändra den så det är bara dras i luften. Här kan du presentera om uttalandet:
från mc import *
från tiden import *
MC = Minecraft()
samtidigt sant:
läge = mc.player.getTilePos()
belowBlock = mc.getBlock (position.x, position.y-1, position.z)
om belowBlock == AIR.id:
mc.setBlock (position.x, position.y-1, position.z, STAINED_GLASS_BLUE)
Sleep(0.2)
Förklara skillnaden mellan tilldelningens = och jämförelsen ==. Det är viktigt att du har AIR.id snarare än bara luft i koden. Det beror på att luften är ett Block men getBlock() i Minecraft Python PI API returnerar inte ett block men ett block ID-nummer, och AIR.id är att blockera ID-nummer (noll, faktiskt).
Naturligtvis, detta är inte perfekt, heller, eftersom det inte kommer att dra broar över vattnet. För att fixa det, du får införa eller och ändra om raden till:
om belowBlock == AIR.id eller belowBlock == WATER_FLOWING.id eller belowBlock == WATER_STATIONARY.id:
Om du vill, barn kan även lägga till magma.
Det finns en sista bit av magi, och det är den mest magiska av allt. Bron kan radera sig bakom spelaren. Därför skulle du behöva införa listor. Om du vill göra detta beror på nivån på dina elever. Om du vill göra det, sedan lagra förbi spelare positioner i en lista kallas sparas.
från mc import *
från tiden import *
MC = Minecraft()
sparade =]
samtidigt sant:
läge = mc.player.getTilePos()
belowBlock = mc.getBlock (position.x, position.y-1, position.z)
om belowBlock == AIR.id eller belowBlock == WATER_FLOW.id eller belowBlock == WATER_STATIONARY.id:
mc.setBlock (position.x, position.y-1, position.z, STAINED_GLASS_BLUE)
Saved.append(position)
om len(saved) > 10:
firstPosition = saved.pop(0)
mc.setBlock (firstPosition.x, firstPosition.y-1, firstPosition.z, luft)
Sleep(0.2)
När du lägger till koden, förklara det. Du börjar en tom lista med sparade = []. Sedan du lägga ställning till slutet av listan, och om listan har mer än 10 artiklar i det, du är poppar ut det första objektet och dra luft under den (du sparar spelare, inte bridge, positioner).
Det fortfarande finns brister. Till exempel om bron dras på vatten, återställs det med luft. Fastställande av som kan vara en utmaning för smartare studenter.