Activité : Agent Tree Chopper

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 :

  1. 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.
  2. 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.
  3. 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

  1. Créer un nouveau projet MakeCode appelé Chopper.

  2. Renommer le ||player:on chat command|| existant en "tp".

  3. Depuis ||agent:AGENT||, faites glisser un bloc ||agent:agent teleport to player|| à l’intérieur de ||player:on chat command "tp"||.

  4. 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.

  5. Renommer le duplicata "lt".

  6. 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

  1. De ||player:PLAYER||, faites glisser un bloc ||player:on chat command|| dans l’espace de travail de codage et renommez-le "chop".

  2. 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.

  3. Nommez la nouvelle variable height.

Faites une nouvelle variable nommée 'hauteur'

Initialisez la hauteur à zéro

  1. Depuis ||variables:VARIABLES||, faites glisser ||variables:set|| et accrochez-la à l’intérieur de ||player:on chat command "chop"||.

  2. Dans le bloc ||variables:set||, utilisez le menu déroulant pour sélectionner height comme variable et définissez height à 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.

  1. 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"||.

  2. 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!

  1. De ||variables:VARIABLES||, placez un bloc ||variables:change|| dans la boucle ||loops:while||.

  2. 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.

  3. 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électionnant up comme direction dans le menu déroulant.

  4. Finalement, faites monter votre agent. Attrapez un bloc ||agent:agent move||, puis utilisez le menu déroulant pour sélectionner up 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.

  1. 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"||.

  2. De ||variables:VARIABLES||, faites glisser height et remplacez le 4 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.

  1. 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.

  1. Dans le bloc ||agent:move||, sélectionnez down 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é.

  1. 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

Agent - Préparation du début de la coupe d'arbre

Agent - Début de la coupe d'arbre orientation correcte

Agent - Fin de la coupe d'arbre

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 :

  1. Téléporter l’agent.
  2. Tourner l’agent jusqu’à ce qu’il trouve la base de l’arbre.
  3. 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

  1. 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 :

  1. Créer une variable appelée TurnToTree et la régler sur true.

  2. 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.

Stop Code

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.

  1. Cliquez sur le bouton d’arrêt dans le coin inférieur gauche de votre fenêtre de connexion de code.

Stop Code

  1. 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.

Play

  1. 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.

Save

Save Confirm

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.

  1. 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 ?

Save Confirm

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.

Agent - Creuser 4

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 ?

L'agent creuse vers le bas et horizontalement

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.