Étape 9: Jour trois : première partie : Magic pont
Le pont magique est une excellente idée de la baleine et O'Hanlon livre. Il est un pont qui s’étend sous le lecteur, laissant le joueur marche sur l’eau et dans les airs, et vous pouvez afficher les enfants comment un programme pousse à partir d’un simple de forme plus complexe.
Voici la version plus simple :
from mc import * from time import * mc = Minecraft() while True: position = mc.player.getTilePos() mc.setBlock(position.x, position.y-1, position.z, STAINED_GLASS_BLUE) sleep(0.2)
Expliquer toutes les étapes avec soin pour les enfants, en se concentrant sur la boucle de jeu infinie (while True), et comment mc.player.getTilePos() vérifie le poste actuel du joueur, divisé en x, y et z coordonnées. Dites-leur que le sleep(0.2) est de s’assurer que Minecraft n’est pas submergé par faire beaucoup de setBlocks, afin qu’il y a une attente de 0,2 seconde. Rappelons que vous pouvez arrêter un script avec /py en elle-même.
Ont tous les enfants de faire un pont de travail et puis parler avec eux de ses lacunes. Par exemple, le pont des dommages-intérêts au motif que vous marchez dans. Vous vous devez réviser il sorte il est seulement tiré en l’air. Cela vous permet d’introduire l’instruction if :
from mc import * from time import * mc = Minecraft() while True: position = mc.player.getTilePos() belowBlock = mc.getBlock(position.x, position.y-1, position.z) if belowBlock == AIR.id: mc.setBlock(position.x, position.y-1, position.z, STAINED_GLASS_BLUE) sleep(0.2)
Expliquer la différence entre l’affectation = et la comparaison ==. Il est important que vous avez AIR.id plutôt que juste l' AIR dans le code. C’est parce que l’AIR est un bloc mais getBlock() dans l’API de PI Minecraft Python renvoie pas un bloc mais un numéro d’identification de bloc et AIR.id est le numéro d’identification de ce bloc (zéro, en fait).
Bien sûr, ce n’est pas parfait, non plus, parce qu’il ne sera pas dessiner des ponts au-dessus de l’eau. Pour corriger cela, vous obtenez introduire ou et changer la ligne if à :
if belowBlock == AIR.id or belowBlock == WATER_FLOWING.id or belowBlock == WATER_STATIONARY.id:
Si vous voulez, enfants peuvent même ajouter magma.
Il y a un bit final de la magie, et c’est le plus magique de tous. Le pont pouvait s’effacer derrière le joueur. À cette fin, vous auriez besoin d’introduire des listes. Si vous voulez faire cela dépend du niveau de vos élèves. Si vous ne souhaitez pas le faire, puis stocker au-delà de positions des joueurs dans une liste appelée sauvé.
from mc import * from time import * mc = Minecraft() saved = [] while True: position = mc.player.getTilePos() belowBlock = mc.getBlock(position.x, position.y-1, position.z) if belowBlock == AIR.id or belowBlock == WATER_FLOW.id or belowBlock == WATER_STATIONARY.id: mc.setBlock(position.x, position.y-1, position.z, STAINED_GLASS_BLUE) saved.append(position) if len(saved) > 10: firstPosition = saved.pop(0) mc.setBlock(firstPosition.x, firstPosition.y-1, firstPosition.z, AIR) sleep(0.2)
Lorsque vous ajouterez le code, l’expliquer. Vous débutez une liste vide avec sauvé = []. Puis vous ajoutez les position jusqu'à la fin de la liste, et si la liste contient plus de 10 éléments, vous êtes éclater le premier élément et tirant d’air en dessous (vous enregistrez lecteur, pas de pont, postes).
Il y a encore des imperfections. Par exemple, si le pont est dessiné sur l’eau, il sera restauré avec de l’air. De fixation qui peut être un défi pour les étudiants plus intelligents.