La coupe des arbres pour le bois est un travail difficile mais nécessaire dans Minecraft si vous voulez fabriquer des objets et des outils en mode Survie. Mais vous pouvez automatiser cette corvée par le code avec l’aide de notre agent ! Enseignons à l’agent comment couper un arbre de n’importe quelle hauteur et revenir au sol.
Lorsque vous commencez un nouveau projet MakeCode, c’est souvent une bonne idée de planifier les étapes que vous voulez suivre avant de commencer à coder.
Voici ce que vous voudrez faire :
- Déterminer la hauteur de l’arbre :
- Tant qu’il y a un bloc devant l’agent, continuez à monter.
- Conservez la hauteur de l’arbre.
- Répétez ce qui suit le même nombre de fois que la hauteur de l’arbre:
- Détruisez le bloc devant vous.
- Déplacez-vous vers le bas.
- Recueillez tout.
La dernière activité a utilisé les déclarations ||logic:if then else||
pour vérifier les conditions et effectuer les actions comme vous le souhaitiez. Dans cette activité, vous allez utiliser des conditionnels dans une boucle ||loops:while||
. L’agent continuera à monter tant qu’il y aura un bloc d’arbre à grimper.
- Faire l’activité
- Faire un projet
- Créer la variable de hauteur
- Initialisez la hauteur à zéro
- Démarrer à la base d’un arbre
- Montez dans l’arbre et coupez
- Revenez en bas
- Chop while you drop
- Programme complet
- Défis
- Défi 1 – Téléporter l’agent et obtenir certaines choses pour le défi 2
- Défi 2 – Faire en sorte que l’agent fasse face à l’arbre automatiquement
- Expériences
- Expérience 1 – Augmenter la taille du trou
- Expérience 2 – Créer un labyrinthe
Faire l’activité
Faire un projet
-
Créer un nouveau projet MakeCode appelé Chopper.
-
Renommer le
||player:on chat command||
existant en"tp"
. -
Depuis
||agent:AGENT||
, faites glisser un bloc||agent:agent teleport to player||
à l’intérieur de||player:on chat command "tp"||
. -
Maintenant, créons aussi une commande directionnelle pour pouvoir faire tourner notre agent. Vous pouvez faire un clic droit sur
||player:on chat command "tp"||
et sélectionner Dupliquer pour en faire une copie. -
Renommer le duplicata
"lt"
. -
Supprimer le bloc intérieur pour ce nouveau duplicata et remplacer
||agent:agent teleport to player||
par||agent:agent turn 'left'||
.
player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})
Créer la variable de hauteur
-
De
||player:PLAYER||
, faites glisser un bloc||player:on chat command||
dans l’espace de travail de codage et renommez-le"chop"
. -
Vous utiliserez une variable pour garder trace de la hauteur de l’arbre. Dans le tiroir de la boîte à outils
||variables:VARIABLES||
, cliquez sur le bouton Faire une variable. -
Nommez la nouvelle variable
height
.
Initialisez la hauteur à zéro
-
Depuis
||variables:VARIABLES||
, faites glisser||variables:set||
et accrochez-la à l’intérieur de||player:on chat command "chop"||
. -
Dans le bloc
||variables:set||
, utilisez le menu déroulant pour sélectionnerheight
comme variable et définissezheight
à0
.
let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0})
Démarrer à la base d’un arbre
Supposons que l’agent est placé face à la base de l’arbre lorsque la commande chop est donnée. Vous utilisez les commandes "tp"
et "lt"
pour mettre votre agent en place et enfin "chop"
.
Utiliser une boucle ||loops:while||
, qui est comme une boucle ||loops:repeat||
combinée avec une instruction conditionnelle. Ici, le code continuera tant qu’il y a un bloc devant l’agent. S’il y a un bloc devant l’agent, alors il continuera à monter dans l’arbre.
-
De
||loops:LOOPS||
, faites glisser une boucle||loops:while||
et déposez-la sous||variables:set 'height'||
. Ce serait à l’intérieur de||player:on chat command "chop"||
. -
De
||agent:AGENT||
, faites glisser||agent:agent detect 'block' 'forward'||
et déposez-la dans la boucle||loops:while||
remplaçant||logic:true||
.
let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0 while (agent.detect(AgentDetection.Block, FORWARD)) { }})
Montez dans l’arbre et coupez
Enfin, vous pouvez couper – ou du moins l’agent le fait!
-
De
||variables:VARIABLES||
, placez un bloc||variables:change||
dans la boucle||loops:while||
. -
Le nouveau bloc devrait lire
||variables:change 'height' by 1||
. Cela augmentera la variable de hauteur de 1 à chaque fois que l’agent se déplace vers le haut. C’est ainsi que nous pouvons garder la trace de la hauteur de l’arbre. -
Si des feuilles ou des branches sont au-dessus de la tête de l’agent, vous devez les détruire afin de faire monter l’agent. A partir de
||agent:AGENT||
, placez||agent:agent destroy||
sous||variables:change 'height' by 1||
. Vous devrez ajuster ce bloc en sélectionnantup
comme direction dans le menu déroulant. -
Finalement, faites monter votre agent. Attrapez un bloc
||agent:agent move||
, puis utilisez le menu déroulant pour sélectionnerup
comme direction comme vous l’avez fait à l’étape précédente.
let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0 while (agent.detect(AgentDetection.Block, FORWARD)) { height += 1 agent.destroy(UP) agent.move(UP, 1) }})
Revenez en bas
Après que l’agent ait atteint le sommet de l’arbre (il n’y a plus de bloc devant lui), la hauteur de l’arbre sera stockée dans la variable height. Ensuite, vous voudrez une autre boucle qui détruira le bloc devant l’agent (le tronc de l’arbre) au fur et à mesure que l’agent descend. Cette boucle devrait s’exécuter autant de fois que la hauteur de l’arbre.
-
Depuis
||loops:LOOPS||
, faites glisser une boucle||loops:repeat||
, et déposez-la après la boucle||loops:while||
dans votre||player:on chat command "chop"||
. -
De
||variables:VARIABLES||
, faites glisserheight
et remplacez le4
dans la boucle||loops:repeat||
.
let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0 while (agent.detect(AgentDetection.Block, FORWARD)) { height += 1 agent.destroy(UP) agent.move(UP, 1) } for (let i = 0; i < height; i++) { }})
Chop while you drop
À ce stade, l’agent devrait se tenir au sommet d’un arbre. Vous devez le faire redescendre, couper l’arbre et récupérer le bois.
- Depuis
||agent:AGENT||
, placez un||agent:move||
et un||agent:destroy||
à l’intérieur de la boucle||loops:repeat||
.
Maintenant vous devez ajuster ces blocs pour la situation. L’agent doit se déplacer vers le bas et coupera chaque morceau de l’arbre qui se trouve devant lui.
- Dans le bloc
||agent:move||
, sélectionnezdown
comme direction. L’agent se déplacera vers le bas. Ensuite, l’agent devrait détruire le bloc d’arbre qui se trouve devant lui. Les paramètres par défaut sont ok pour||agent:destroy||
.
Enfin, vous voulez que votre agent collecte tout le bois qu’il a coupé.
- De
||agent:AGENT||
, placez||agent:agent collect all||
après la boucle||loops:repeat||
. C’est maintenant le dernier bloc de notre||player:on chat command||
pour"chop"
.
Programme complet
let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0 while (agent.detect(AgentDetection.Block, FORWARD)) { height += 1 agent.destroy(UP) agent.move(UP, 1) } for (let i = 0; i < height; i++) { agent.move(DOWN, 1) agent.destroy(FORWARD) } agent.collectAll()})
Programme partagé : https://makecode.com/_1hFLi6X1qPcJ
Défis
Il serait bien que l’agent se téléporte dans le cadre de ||player:on chat command "chop"||
. Il est difficile de prévoir dans quelle direction l’agent sera orienté après que vous l’ayez téléporté. Les commandes directionnelles (« tp » et « lt ») fonctionnent, mais une seule commande serait plus efficace.
Pouvons-nous automatiser cela ? Après avoir relevé ces deux défis, vous devriez être en mesure d’y parvenir. Tout d’abord, pensez au problème.
Vous voulez :
- Téléporter l’agent.
- Tourner l’agent jusqu’à ce qu’il trouve la base de l’arbre.
- Commencer à grimper et exécuter le code que nous avons déjà fait.
Le seul inconvénient potentiel de ce plan est que vous auriez toujours besoin de vous tenir directement à la base de l’arbre pour que l’agent commence au bon endroit. Il faudrait peut-être dégager les branches basses. Peut-être qu’en bonus, vous pourriez trouver comment résoudre ce problème également, mais d’abord, complétez les défis 1 et 2.
Défi 1 – Téléporter l’agent et obtenir certaines choses pour le défi 2
- Pouvez-vous avoir l’agent se téléporter dans le cadre de
||player:on chat command "chop"||
?
Après cela, vous aurez besoin de certaines choses pour accomplir le défi 2. Veuillez créer ce qui suit :
-
Créer une variable appelée
TurnToTree
et la régler surtrue
. -
Créer une boucle while qui fait tourner l’agent à gauche ou à droite.
Testez votre code!
Que s’est-il passé ? Oh non, vous êtes coincé dans une autre boucle infinie. TurnToTree
est true
, donc votre nouvelle boucle while ne fait que continuer et continuer. Par conséquent, votre agent continue de tourner et de tourner.
Lisez ci-dessous comment arrêter cela…
Si vous êtes pris dans une boucle infinie, vous devrez arrêter votre code depuis la fenêtre de connexion du code.
- Cliquez sur le bouton d’arrêt dans le coin inférieur gauche de votre fenêtre de connexion de code.
- Redémarrez l’environnement de codage. Cliquez sur le bouton de lecture. Si le bouton de lecture n’est pas allumé, alors votre code ne sera pas exécuté dans Minecraft.
- Sauvegarder votre code à nouveau peut redémarrer votre code aussi, alors faites-le pour faire bonne mesure. Sauvegardez une fois de plus et dites oui au message d’avertissement.
C’est ok car maintenant vous êtes préparé pour le défi 2, mais vous devez trouver un moyen d’arrêter l’agent quand il voit l’arbre.
Défi 2 – Faire en sorte que l’agent fasse face à l’arbre automatiquement
Vous êtes maintenant prêt à résoudre la deuxième tâche.
- Tournez l’agent jusqu’à ce qu’il trouve la base de l’arbre.
Pour ce faire, vous devrez régler TurnToTree
sur false
à l’intérieur de la boucle while, mais vous avez besoin d’une condition pour cela. Vous voulez que l’agent s’arrête quand il trouve l’arbre.
Il n’y a pas de bloc find pour l’agent, mais il y a un bloc detect. Peut-être que cela pourrait être utile ?
Ce bloc renvoie true
ou false
si l’agent détecte ou trouve un bloc dans la direction que vous lui indiquez.
Comment pourriez-vous tester cette condition et ensuite arrêter l’agent de tourner ? Vous devez régler TurnToTree
sur false
, mais où et comment ?
Expériences
Ici, il n’y a pas de règles… Copiez le code de chaque expérience et modifiez les choses pour voir quel genre de résultats vous pouvez créer. Des suggestions sont données, mais faites comme bon vous semble !
Expérience 1 – Augmenter la taille du trou
L’agent travaille dur pour vous ! Vous pouvez lui demander de creuser pour vous aussi. Entrez la commande sur le chat creuser 4 pour essayer ce code.
Pouvez-vous faire en sorte que l’agent creuse et place quelque chose en même temps ? Pouvez-vous augmenter la taille du trou ? Pour l’instant, il est de 2 x 2. Vous pourriez faire en sorte que l’agent creuse un trou de 4 x 4 et le tapisse d’or au fur et à mesure qu’il descend.
Expérience 2 – Créer un labyrinthe
Ce code d’expérience a pour but de vous faire réfléchir à la façon dont vous pourriez construire un code pour créer un robot tunnelier. Cette fois, l’agent accepte deux nombres. D’abord, il creuse vers le bas, puis il creusera horizontalement.
Entrez la commande on chat dig 5 4 pour essayer ce code.
Comment pourriez-vous faire en sorte que votre agent construise un labyrinthe souterrain ? Que pourriez-vous faire d’autre avec ce trou souterrain qu’il est en train de creuser ? Vous pourriez le remplir de lave ou y mettre des mobs ou même construire une maison souterraine. Quels autres morceaux de code pourraient vous aider à faire cela ?
.