Tăierea copacilor pentru lemn este o muncă grea, dar necesară în Minecraft dacă doriți să creați obiecte și unelte în modul Survival. Dar puteți automatiza această corvoadă prin cod cu ajutorul agentului nostru! Haideți să învățăm agentul cum să taie un copac de orice înălțime și să se întoarcă înapoi la sol.
Când începeți un nou proiect MakeCode, este adesea o idee bună să planificați ce pași doriți să faceți înainte de a începe să codificați.
Iată ce veți dori să faceți:
- Dați-vă seama cât de înalt este copacul:
- Atâta timp cât există un bloc în fața agentului, continuați să vă deplasați în sus.
- Țineți evidența înălțimii copacului.
- Repetați următoarele de același număr de ori cât este înalt copacul:
- Distrugeți blocul din fața voastră.
- Mutați-vă în jos.
- Colectați totul.
Ultima activitate a folosit declarațiile ||logic:if then else||
pentru a verifica condițiile și a efectua acțiuni așa cum ați dorit să fie făcute. În această activitate, veți folosi condiționalele într-o buclă ||loops:while||
. Agentul va continua să se deplaseze în sus atâta timp cât există un bloc de copac pe care să urce.
- Realizați activitatea
- Realizați un proiect
- Creați variabila de înălțime
- Inițializați înălțimea la zero
- Începeți de la baza unui copac
- Mutați-vă în susul copacului și tăiați
- Veniți înapoi în jos
- Tăiați în timp ce lăsați
- Program complet
- Provocări
- Provocarea 1 – Teleportarea agentului și pregătirea unor lucruri pentru Provocarea 2
- Provocarea 2 – Puneți agentul să se confrunte automat cu copacul
- Experimente
- Experiment 1 – Mărește dimensiunea găurii
- Experiment 2 – Creați un labirint
Realizați activitatea
Realizați un proiect
-
Crearea unui nou proiect MakeCode numit Chopper.
-
Renumiți proiectul existent
||player:on chat command||
la"tp"
. -
Din
||agent:AGENT||
, trageți un bloc||agent:agent teleport to player||
în interiorul||player:on chat command "tp"||
. -
Acum, haideți să creăm și o comandă direcțională pentru a ne putea întoarce agentul. Puteți face clic dreapta pe
||player:on chat command "tp"||
și selecta Duplicate pentru a face o copie. -
Renumiți duplicatul
"lt"
. -
Ștergeți blocul interior pentru acest nou duplicat și înlocuiți
||agent:agent teleport to player||
cu||agent:agent turn 'left'||
.
player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})
Creați variabila de înălțime
-
Din
||player:PLAYER||
, trageți un bloc||player:on chat command||
în spațiul de lucru de codare și redenumiți-l"chop"
. -
Vă veți folosi o variabilă pentru a ține evidența înălțimii arborelui. În sertarul
||variables:VARIABLES||
Toolbox, faceți clic pe butonul Make a Variable. -
Denumiți noua variabilă
height
.
Inițializați înălțimea la zero
-
Din
||variables:VARIABLES||
, trageți în afară||variables:set||
și fixați-o în interiorul||player:on chat command "chop"||
. -
În blocul
||variables:set||
, folosiți meniul derulant pentru a selectaheight
ca variabilă și setațiheight
la0
.
let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0})
Începeți de la baza unui copac
Să presupunem că agentul este plasat cu fața la baza copacului atunci când se dă comanda de tăiere. Folosiți comenzile "tp"
și "lt"
pentru a plasa agentul pe poziție și apoi, în final, "chop"
.
Utilizați o buclă ||loops:while||
, care este ca o buclă ||loops:repeat||
combinată cu o declarație condițională. Aici, codul va continua atâta timp cât există un bloc în fața agentului. Dacă există un bloc în fața agentului, atunci acesta va continua să urce în arbore.
-
Din
||loops:LOOPS||
, trageți o buclă||loops:while||
și aruncați-o sub||variables:set 'height'||
. Aceasta ar fi în interiorul||player:on chat command "chop"||
. -
Din
||agent:AGENT||
, trageți||agent:agent detect 'block' 'forward'||
și aruncați-l în bucla||loops:while||
care înlocuiește||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)) { }})
Mutați-vă în susul copacului și tăiați
În sfârșit, ajungeți să tăiați ceva – sau cel puțin agentul o face!
-
Din
||variables:VARIABLES||
, plasați un bloc||variables:change||
în interiorul buclei||loops:while||
. -
Noul bloc ar trebui să citească
||variables:change 'height' by 1||
. Acest lucru va crește variabila înălțime cu 1 de fiecare dată când agentul se mișcă în sus. Acesta este modul în care putem ține evidența înălțimii copacului. -
Dacă frunzele sau ramurile sunt deasupra capului agentului, trebuie să le distrugeți pentru a muta agentul în sus. De la
||agent:AGENT||
, plasați||agent:agent destroy||
sub||variables:change 'height' by 1||
. Va trebui să ajustați acest bloc selectândup
ca direcție din meniul derulant. -
În cele din urmă, faceți ca agentul dvs. să se deplaseze în sus. Luați un bloc
||agent:agent move||
și apoi folosiți meniul derulant pentru a selectaup
ca direcție, așa cum ați făcut la pasul anterior.
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) }})
Veniți înapoi în jos
După ce agentul ajunge în vârful copacului (nu mai există un bloc în fața lui), înălțimea copacului va fi stocată în variabila înălțime. Apoi veți dori o altă buclă care va distruge blocul din fața agentului (trunchiul copacului) pe măsură ce agentul se deplasează în jos. Această buclă ar trebui să se execute de atâtea ori câte ori este înălțimea copacului.
-
Din
||loops:LOOPS||
, trageți o buclă||loops:repeat||
și aruncați-o după buclă||loops:while||
în||player:on chat command "chop"||
dumneavoastră. -
Din
||variables:VARIABLES||
, tragețiheight
și înlocuiți4
în bucla||loops:repeat||
. - Din
||agent:AGENT||
, plasați un||agent:move||
și un||agent:destroy||
în interiorul buclei||loops:repeat||
. - În blocul
||agent:move||
, selectațidown
ca direcție. Agentul se va deplasa în jos. Apoi, agentul ar trebui să distrugă blocul de copac din fața sa. Setările implicite sunt ok pentru . - Din
||agent:AGENT||
, plasează||agent:agent collect all||
după bucla||loops:repeat||
. Acesta este acum ultimul bloc din programul nostru||player:on chat command||
pentru"chop"
. - Teleportați agentul.
- Întoarceți agentul până când găsește baza copacului.
- Începeți să vă cățărați și să executați codul pe care l-am făcut deja.
- Puteți face ca agentul să se teleporteze ca parte din
||player:on chat command "chop"||
? -
Creați o variabilă numită
TurnToTree
și setați-o latrue
. -
Creați o buclă while care să-l facă pe agent să se întoarcă la stânga sau la dreapta.
- Click pe butonul de oprire din colțul din stânga jos al ferestrei de conectare a codului.
- Reporniți mediul de codare. Faceți clic pe butonul de redare. Dacă butonul de redare nu este activat, atunci codul dvs. nu va rula în Minecraft.
- Salvarea din nou a codului dvs. poate reporni codul, de asemenea, așa că faceți acest lucru pentru o măsură bună. Mai salvați încă o dată și spuneți „da” la mesajul de avertizare.
- Întoarceți agentul până când găsește baza copacului.
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++) { }})
Tăiați în timp ce lăsați
În acest moment, agentul ar trebui să se afle în vârful unui copac. Trebuie să-l faceți să coboare înapoi, să taie copacul și să colecteze lemnul.
Acum trebuie să adaptați aceste blocuri la situație. Agentul trebuie să se deplaseze în jos și va tăia fiecare bucată de copac care se află în fața sa.
În cele din urmă, vrei ca agentul tău să colecteze tot lemnul pe care l-a tăiat.
Program 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()})
Program partajat: https://makecode.com/_1hFLi6X1qPcJ
Provocări
Ar fi frumos ca agentul să se teleporteze ca parte din ||player:on chat command "chop"||
. Este greu de prezis în ce direcție se va afla agentul după ce îl teleportezi. Comenzile direcționale („tp” și „lt”) funcționează, dar o singură comandă ar fi mai eficientă.
Se poate automatiza acest lucru? După ce ați finalizat aceste două provocări, ar trebui să puteți realiza acest lucru. În primul rând, gândiți-vă la problemă.
Vreți să:
Singurul dezavantaj potențial al acestui plan este că tot va trebui să stați direct la baza copacului pentru ca agentul să pornească de la locul potrivit. S-ar putea să fie nevoie să fie curățate ramurile joase. Poate că, ca bonus, v-ați putea da seama cum să rezolvați și această problemă, dar mai întâi finalizați Provocările 1 și 2.
Provocarea 1 – Teleportarea agentului și pregătirea unor lucruri pentru Provocarea 2
După aceea veți avea nevoie de câteva lucruri pentru a realiza Provocarea 2. Vă rugăm să creați următoarele:
Testați-vă codul!
Ce s-a întâmplat? O, nu, ați rămas blocat într-o altă buclă infinită. TurnToTree
este true
, așa că noua ta buclă while continuă să meargă și să meargă. Prin urmare, agentul dvs. continuă să se învârtă și să se învârtă.
Citește mai jos cum să oprești acest lucru…
Dacă sunteți prins într-o buclă infinită, va trebui să vă opriți codul din fereastra de conectare a codului.
Acest lucru este în regulă pentru că acum ești pregătit pentru Provocarea 2, dar trebuie să găsești o modalitate de a opri agentul atunci când vede copacul.
Provocarea 2 – Puneți agentul să se confrunte automat cu copacul
Acum sunteți gata să rezolvați cea de-a doua sarcină.
Pentru a face acest lucru, va trebui să setați TurnToTree
la false
în interiorul buclei while, dar aveți nevoie de o condiție pentru aceasta. Vreți ca agentul să se oprească atunci când găsește copacul.
Nu există un bloc de găsire pentru agent, dar există un bloc de detectare. Poate că acesta ar putea fi util?
Acest bloc returnează true
sau false
dacă agentul detectează sau găsește un bloc în direcția pe care i-o spuneți.
Cum ați putea testa această condiție și apoi să opriți agentul să se întoarcă? Trebuie să setați TurnToTree
la false
, dar unde și cum?
Experimente
Aici, nu există reguli… Copiați codul pentru fiecare experiment și schimbați lucrurile pentru a vedea ce fel de rezultate puteți crea. Sunt date sugestii, dar faceți cum doriți!
Experiment 1 – Mărește dimensiunea găurii
Agentul lucrează din greu pentru tine! Îl poți face să sape și pentru tine. Introduceți pe chat comanda dig 4 pentru a încerca acest cod.
Puteți face ca agentul să sape și să plaseze ceva în același timp? Poți mări dimensiunea găurii? În acest moment, este de 2 x 2. Ai putea face ca agentul să sape o gaură de 4 x 4 și să o căptușească cu aur pe măsură ce coboară.
Experiment 2 – Creați un labirint
Codul acestui experiment are ca scop să vă facă să vă gândiți la modul în care ați putea construi un cod pentru a crea un robot care să facă un tunel. Agentul va accepta de data aceasta două numere. Mai întâi, va săpa în jos și apoi va săpa pe orizontală.
Introduceți comanda on chat dig 5 4 pentru a încerca acest cod.
Cum ai putea face ca agentul tău să construiască un labirint subteran? Ce altceva ați putea face cu această gaură subterană pe care o sapă? Ați putea să o umpleți cu lavă sau să puneți niște mobs acolo jos sau chiar să construiți o casă subterană. Ce alte bucăți de cod v-ar putea ajuta să faceți acest lucru?
.