Toiminta:

Puiden pilkkominen puusta on kovaa työtä, mutta välttämätöntä Minecraftissa, jos haluat valmistaa esineitä ja työkaluja Survival-tilassa. Mutta voit automatisoida tämän askareen koodin avulla agenttimme avulla! Opetetaan agentille, miten se voi kaataa minkä tahansa korkuisen puun ja palata takaisin alas maahan.

Kun aloitat uuden MakeCode-projektin, on usein hyvä idea suunnitella, mitä vaiheita haluat tehdä ennen kuin aloitat koodaamisen.

Tässä on, mitä haluat tehdä:

  1. Määritä, kuinka korkea puu on:
    • Niin kauan kuin agentin edessä on palikka, jatka liikkumista ylöspäin.
    • Seuraa, kuinka pitkä puu on.
  2. Toista seuraavaa yhtä monta kertaa kuin puu on pitkä:
    • Tuhoa edessäsi oleva palikka.
    • Liiku alaspäin.
  3. Kerää kaikki.

Viimeisessä toiminnossa käytettiin ||logic:if then else||-lausekkeita ehtojen tarkistamiseen ja toimintojen suorittamiseen haluamallasi tavalla. Tässä aktiviteetissa käytät ehtolauseita ||loops:while||-silmukassa. Agentti jatkaa liikkumista ylöspäin niin kauan kuin puunlohkossa on kiivettävää.

Toteuta aktiviteetti

Tee projekti

  1. Luo uusi MakeCode-projekti nimeltä Chopper.

  2. Nimeä olemassa oleva ||player:on chat command|| muotoon "tp".

  3. Vetäkää ||agent:AGENT||:sta ||agent:agent teleport to player||-lohko ||player:on chat command "tp"||:n sisälle.

  4. Luotaan nyt myös suuntakomento, jotta voimme kääntää agenttimme ympäri. Voit napsauttaa hiiren kakkospainikkeella ||player:on chat command "tp"|| ja valita Duplicate tehdäksesi kopion.

  5. Nimeä duplikaatti "lt".

  6. Poista sisäpuolinen lohko tästä uudesta duplikaatista ja korvaa ||agent:agent teleport to player|| lohkolla ||agent:agent turn 'left'||.

player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})

Luo korkeusmuuttuja

  1. Vedä lohko ||player:PLAYER||:stä lohko ||player:on chat command|| koodaustyötilaan ja nimeä se uudelleen "chop".

  2. Käytät muuttujaa pitämään kirjaa puun korkeudesta. Napsauta ||variables:VARIABLES|| Työkalulaatikon laatikosta Tee muuttuja -painiketta.

  3. Nimeä uusi muuttuja height.

Tee uuden muuttujan nimeltä 'korkeus'

Initialisoi korkeus nollaksi

  1. Vetää ||variables:VARIABLES||:stä ||variables:set|| ulos ||variables:set||:n kohdalta ja napsauta se ||player:on chat command "chop"||:n sisälle.

  2. Lohkossa ||variables:set|| valitse pudotusvalikosta muuttujaksi height ja aseta height arvoksi 0.

let height = 0player.onChat("tp", function () { agent.teleportToPlayer()})player.onChat("lt", function () { agent.turn(TurnDirection.Left)})player.onChat("chop", function () { height = 0})

Aloita puun tyvestä

Edetään, että agentti on sijoitettu puun tyveen päin, kun pilkkomiskomento annetaan. Käytät komentoja "tp" ja "lt" saadaksesi agentin paikalleen ja lopuksi "chop".

Käytä ||loops:while||-silmukkaa, joka on kuin ||loops:repeat||-silmukka yhdistettynä ehdolliseen lausekkeeseen. Tässä koodi jatkuu niin kauan kuin agentin edessä on lohko. Jos agentin edessä on lohko, se jatkaa liikkumista ylöspäin puussa.

  1. Vetäkää ||loops:LOOPS||:stä ||loops:while||-silmukka ja pudottakaa se ||variables:set 'height'||:n alle. Tämä olisi ||player:on chat command "chop"||:n sisällä.

  2. Vetäkää ||agent:AGENT||:sta ||agent:agent detect 'block' 'forward'|| ja pudottakaa se ||loops:while||-silmukkaan ||logic:true||:n tilalle.

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)) { }})

Liiku puuhun ja pilko

Vihdoin pääset pilkkomaan – tai ainakin agentti pääsee!”

  1. Sijoita ||variables:VARIABLES||:stä ||variables:change||-lohko ||loops:while||-silmukan sisään.

  2. Uuden lohkon pitäisi lukea ||variables:change 'height' by 1||. Tämä kasvattaa korkeus-muuttujaa 1:llä joka kerta, kun agentti liikkuu ylöspäin. Näin voimme seurata puun korkeutta.

  3. Jos lehdet tai oksat ovat agentin pään yläpuolella, ne on tuhottava, jotta agentti voi liikkua ylöspäin. Aseta ||agent:AGENT||:sta ||agent:agent destroy|| ||variables:change 'height' by 1||:n alapuolelle. Sinun täytyy säätää tätä lohkoa valitsemalla alasvetovalikosta suunnaksi up.

  4. Viimein saat agentin liikkumaan ylöspäin. Nappaa ||agent:agent move||-lohko ja valitse sitten pudotusvalikosta up suunnaksi kuten edellisessä vaiheessa.

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) }})

Tule takaisin alas

Kun agentti on saavuttanut puun huipun (sen edessä ei ole enää lohkoa), puun korkeus tallennetaan muuttujaan height. Sitten haluat toisen silmukan, joka tuhoaa agentin edessä olevan lohkon (puunrungon), kun agentti liikkuu alaspäin. Tämän silmukan pitäisi käydä niin monta kertaa kuin puun korkeus on.

  1. Vedä ||loops:LOOPS||:stä ||loops:repeat||-silmukka ja pudota se ||loops:while||-silmukan jälkeen ||player:on chat command "chop"||:ssa.

  2. Vedä ||variables:VARIABLES||:stä height ja korvaa 4:n ||loops:repeat||-silmukan ||loops:repeat|| tilalla.

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++) { }})

Hakkaa samalla kun pudotat

Tässä vaiheessa agentin pitäisi seisoa puun latvassa. Sinun täytyy saada se kiipeämään takaisin alas, pilkkomaan puu ja keräämään puu.

  1. Sijoita ||agent:AGENT||:sta ||agent:move|| ja ||agent:destroy|| ||loops:repeat||-silmukan sisälle.

Nyt sinun täytyy säätää nämä palikat tilanteeseen sopiviksi. Agentin täytyy liikkua alaspäin ja se pilkkoo jokaisen edessä olevan puun palan.

  1. Valitse lohkossa ||agent:move|| suunnaksi down. Agentti liikkuu alaspäin. Sitten agentin pitäisi tuhota edessään oleva puulohko. Oletusasetukset ovat ok ||agent:destroy||:lle.

Viimeiseksi haluat agentin keräävän kaiken pilkkomansa puun.

  1. Sijoita ||agent:AGENT||:sta ||agent:agent collect all|| ||loops:repeat||-silmukan jälkeen. Tämä on nyt viimeinen lohko ||player:on chat command||-ohjelmassamme "chop".

Valmis ohjelma

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()})

Jako-ohjelma: https://makecode.com/_1hFLi6X1qPcJ

Agentti - Tree Chop Start Prep

Agentti - Tree Chop Start Correct Facing

Agentti - Tree Chop Finish

Haasteet

Olisikin kiva, että agentti teleporttaisi osana ||player:on chat command "chop"||. On vaikea ennustaa, mihin suuntaan agentti on teleportin jälkeen. Suuntakomennot (”tp” ja ”lt”) toimivat, mutta yksi komento olisi tehokkaampi.

Voidaanko tämä automatisoida? Kun olet suorittanut nämä kaksi haastetta, sinun pitäisi pystyä toteuttamaan tämä. Ajattele ensin ongelmaa.

Tahdot:

  1. Teleportoida agentti.
  2. Käännä agenttia, kunnes se löytää puun juuren.
  3. Aloita kiipeäminen ja suorita jo tekemämme koodi.

Tämän suunnitelman ainoa mahdollinen haittapuoli on se, että sinun täytyisi edelleenkin seistä suoraan puun juurella, jotta agentti lähtisi liikkeelle oikeasta paikasta. Matalat oksat saatetaan joutua raivaamaan. Ehkä bonuksena voisit keksiä, miten korjaat tämänkin ongelman, mutta suorita ensin haasteet 1 ja 2.

Haaste 1 – Teleportoi agentti ja valmistaudu haasteeseen 2

  1. Voit saada agentin teleporttaamaan osana ||player:on chat command "chop"||?

Sen jälkeen tarvitset joitain asioita, jotta voit suorittaa haasteen 2. Luo seuraavat:

  1. Luo muuttuja nimeltä TurnToTree ja aseta se arvoon true.

  2. Luo while-silmukka, joka saa agentin kääntymään vasemmalle tai oikealle.

Testaa koodisi!

Mitä tapahtui? Voi ei, olet taas juuttunut äärettömään silmukkaan. TurnToTree on true, joten uusi while-silmukkasi vain jatkuu ja jatkuu. Siksi agenttisi vain pyörii ja pyörii.

Koodin pysäyttäminen

Lue alta, miten tämä pysäytetään…

Jos olet jäänyt kiinni äärettömään silmukkaan, sinun on pysäytettävä koodisi koodin yhteysikkunasta.

  1. Klikkaa koodiyhteysikkunan vasemmassa alakulmassa olevaa pysäytyspainiketta.

Koodin pysäyttäminen

  1. Käynnistä koodausympäristö uudelleen. Napsauta toistopainiketta. Jos play-painike ei ole päällä, koodisi ei toimi Minecraftissa.

Play

  1. Koodin tallentaminen uudelleen voi myös käynnistää koodisi uudelleen, joten tee se varmuuden vuoksi. Tallenna vielä kerran ja sano varoitusviestille kyllä.

Tallenna

Tallenna Vahvista

Tämä on ihan ok, koska nyt olet valmistautunut Challenge 2:een, mutta sinun on keksittävä keino pysäyttää agentti, kun se näkee puun.

Haaste 2 – Laita agentti kohtaamaan puu automaattisesti

Olet nyt valmis ratkaisemaan toisen tehtävän.

  1. Käännä agenttia, kunnes se löytää puun juuren.

Tehdäksesi tämän sinun on asetettava TurnToTree arvoksi false while-silmukan sisäpuolella, mutta tarvitset tätä varten ehdon. Haluat, että agentti pysähtyy, kun se löytää puun.

Agentilla ei ole find-lohkoa, mutta detect-lohko on. Ehkä tästä voisi olla hyötyä?

Tallenna Vahvista

Tämä lohko palauttaa true tai false, jos agentti havaitsee tai löytää lohkon sanomassasi suunnassa.

Miten voisit testata tätä ehtoa ja pysäyttää agentin kääntymisen? Sinun täytyy asettaa TurnToTree arvoksi false, mutta missä ja miten?

Kokeet

Tässä ei ole sääntöjä… Kopioi jokaisen kokeen koodi ja vaihda asioita nähdäksesi, millaisia tuloksia voit luoda. Ehdotuksia on annettu, mutta tee kuten haluat!

Koe 1 – Suurenna reiän kokoa

Agentti työskentelee ahkerasti puolestasi! Voit saada sen kaivamaan myös puolestasi. Anna chatissa komento dig 4 kokeillaksesi tätä koodia.

Voitko saada agentin kaivamaan ja asettamaan jotain samaan aikaan? Voitko kasvattaa reiän kokoa? Juuri nyt se on 2 x 2. Voisit saada agentin kaivamaan 4 x 4 kokoisen kuopan ja vuorata sen kullalla, kun se menee alaspäin.

Agentti - Kaiva 4

Kokeilu 2 – Luo sokkelo

Tämän kokeilun koodin tarkoituksena on saada sinut miettimään, miten voisit rakentaa koodia, jolla voisit luoda tunnelia kaivavan robotin. Agentti hyväksyy tällä kertaa kaksi numeroa. Ensin se kaivautuu alaspäin ja sitten kaivautuu vaakasuoraan.

Kokeile tätä koodia antamalla on chat-komento dig 5 4.

Miten saisit agenttisi rakentamaan maanalaisen labyrintin? Mitä muuta voisit tehdä tällä maanalaisella kuopalla, jota se kaivaa? Voisit täyttää sen laavalla tai laittaa sinne joitakin mobeja tai jopa rakentaa maanalaisen kodin. Mitkä muut koodinpätkät voisivat auttaa sinua tässä?

Agentti kaivaa alas ja vaakasuoraan

Vastaa

Sähköpostiosoitettasi ei julkaista.