Aktivitet: Agent Tree Chopper

Afhugning af træer for træ er hårdt arbejde, men nødvendigt i Minecraft, hvis du ønsker at fremstille objekter og værktøj i Survival mode. Men du kan automatisere denne opgave gennem kode med hjælp fra vores agent! Lad os lære agenten at fælde et træ i en hvilken som helst højde og vende tilbage ned til jorden igen.

Når du starter et nyt MakeCode-projekt, er det ofte en god idé at planlægge, hvilke trin du vil tage, før du begynder at kode.

Her er, hvad du vil gøre:

  1. Find ud af, hvor højt træet er:
    • Så længe der er en blok foran agenten, skal du fortsætte med at bevæge dig opad.
    • Hold styr på, hvor højt træet er.
  2. Gentag følgende lige så mange gange, som træet er højt:
    • Destruer blokken foran dig.
    • Før nedad.
  3. Saml alting op.

Den sidste aktivitet brugte ||logic:if then else||-anvisninger til at kontrollere betingelser og udføre handlinger på den måde, du ønskede det. I denne aktivitet skal du bruge betingelsesanvisninger i en ||loops:while|| sløjfe. Agenten vil fortsætte med at bevæge sig opad, så længe der er en træblok at klatre op ad.

Gør aktiviteten

Skab et projekt

  1. Opret et nyt MakeCode-projekt med navnet Chopper.

  2. Den eksisterende ||player:on chat command|| skal omdøbes til "tp".

  3. Fra ||agent:AGENT|| skal du trække en ||agent:agent teleport to player||-blok ind i ||player:on chat command "tp"||.

  4. Nu skal vi også oprette en retningskommando, så vi kan dreje vores Agent rundt. Du kan højreklikke på ||player:on chat command "tp"|| og vælge Duplikat for at lave en kopi.

  5. Nævn duplikatet "lt".

  6. Slet den indvendige blok for dette nye duplikat, og erstat ||agent:agent teleport to player|| med ||agent:agent turn 'left'||.

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

Opret højdevariablen

  1. Fra ||player:PLAYER|| skal du trække en ||player:on chat command||-blok ind i kodningsarbejdsområdet og omdøbe den til "chop".

  2. Du skal bruge en variabel til at holde styr på træets højde. Klik på knappen Lav en variabel i skuffen ||variables:VARIABLES|| Værktøjskasse.

  3. Nævn den nye variabel height.

Opret en ny variabel med navnet 'højde'

Initialiser højde til nul

  1. Fra ||variables:VARIABLES|| trækker du ||variables:set|| ud og klikker den fast inden for ||player:on chat command "chop"||.

  2. I blokken ||variables:set|| skal du bruge rullemenuen til at vælge height som variabel og indstille height til 0.

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

Start ved bunden af et træ

Lad os antage, at agenten er placeret med front mod bunden af træet, når huggekommandoen gives. Du bruger kommandoerne "tp" og "lt" til at få din agent på plads og til sidst "chop".

Brug en ||loops:while||-sløjfe, som er som en ||loops:repeat||-sløjfe kombineret med en betinget erklæring. Her vil koden fortsætte, så længe der er en blok foran agenten. Hvis der er en blok foran agenten, vil den fortsætte med at bevæge sig opad i træet.

  1. Fra ||loops:LOOPS|| skal du trække en ||loops:while||-loop ud og placere den under ||variables:set 'height'||. Dette vil være inden for ||player:on chat command "chop"||.

  2. Fra ||agent:AGENT|| trækker du ||agent:agent detect 'block' 'forward'|| ud og placerer den i ||loops:while||-loop’en, der erstatter ||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)) { }})

Før op i træet og hugg

Endeligt får du lov til at hugge – eller i det mindste gør agenten det!

  1. Fra ||variables:VARIABLES|| placerer du en ||variables:change||-blok inde i ||loops:while||-loopet.

  2. Den nye blok skal lyde ||variables:change 'height' by 1||. Dette vil øge højdevariablen med 1, hver gang agenten bevæger sig opad. På den måde kan vi holde styr på træets højde.

  3. Hvis blade eller grene er over agentens hoved, skal du ødelægge dem for at flytte agenten opad. Fra ||agent:AGENT|| skal du placere ||agent:agent destroy|| under ||variables:change 'height' by 1||. Du skal justere denne blok ved at vælge up som retning fra drop-down-menuen.

  4. Finalt skal du få din agent til at bevæge sig opad. Tag en ||agent:agent move||-blok, og brug derefter drop-down-menuen til at vælge up som retning, ligesom du gjorde i det foregående trin.

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

Kom ned igen

Når agenten når toppen af træet (der er ikke længere en blok foran den), gemmes træets højde i variablen højde. Derefter vil du have en anden løkke, der ødelægger blokken foran agenten (træstammen), når agenten bevæger sig nedad. Denne løkke skal køre lige så mange gange som træets højde.

  1. Fra ||loops:LOOPS|| skal du trække en ||loops:repeat|| løkke ud, og slippe den efter ||loops:while|| løkken i din ||player:on chat command "chop"||.

  2. Fra ||variables:VARIABLES|| trækker du height ud og erstatter 4 i ||loops:repeat||-sløjfen.

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

Hækle, mens du slipper

På dette tidspunkt bør agenten stå i toppen af et træ. Du skal få den til at kravle ned igen, hugge træet og samle træet op.

  1. Fra ||agent:AGENT|| skal du placere en ||agent:move|| og ||agent:destroy|| inde i ||loops:repeat||-løjpen.

Nu skal du tilpasse disse blokke til situationen. Agenten skal bevæge sig nedad og skal hugge hvert stykke af det træ, der er foran den.

  1. I ||agent:move||-blokken skal du vælge down som retning. Agenten vil bevæge sig nedad. Derefter skal agenten ødelægge den træblok, der ligger foran den. Standardindstillingerne er ok for ||agent:destroy||.

Til sidst skal agenten samle alt det træ, den har hugget.

  1. Fra ||agent:AGENT|| skal du placere ||agent:agent collect all|| efter ||loops:repeat||-loopet. Dette er nu den sidste blok i vores ||player:on chat command|| for "chop".

Fuldstændigt program

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

Delt program: https://makecode.com/_1hFLi6X1qPcJ

Agenter - Træhugststart Forberedelse

Agenter - Træhugststart Korrekt Facing

Agenter - Træhugst Afslutning

Udfordringer

Det ville være rart at have agenten til at teleportere som en del af ||player:on chat command "chop"||. Det er svært at forudsige, hvilken retning agenten vil vende, efter at du har teleporteret den. Retningskommandoerne (“tp” og “lt”) virker, men én kommando ville være mere effektiv.

Kan vi automatisere dette? Når du har gennemført disse to udfordringer, burde du være i stand til at udføre dette. Tænk først over problemet.

Du vil gerne:

  1. Teleportere agenten.
  2. Drejse agenten, indtil den finder træets fod.
  3. Begynde at klatre og køre den kode, vi allerede har lavet.

Den eneste potentielle ulempe ved denne plan er, at du stadig skal stå direkte ved træets fod, for at agenten starter på det rigtige sted. Det kan være nødvendigt at rydde lave grene. Måske kan du som en bonus også finde ud af at løse dette problem, men først skal du gennemføre udfordring 1 og 2.

Udfordring 1 – Teleport Agent og få sat nogle ting op til udfordring 2

  1. Kan du få agenten til at teleportere som en del af ||player:on chat command "chop"||?

Derpå skal du bruge nogle ting for at gennemføre udfordring 2. Du skal oprette følgende:

  1. Opret en variabel kaldet TurnToTree og sæt denne til true.

  2. Opret en while loop, der får agenten til at dreje til venstre eller højre.

Test din kode!

Hvad skete der? Åh nej, du sidder fast i endnu en uendelig løkke. TurnToTree er true, så din nye while-loop bliver bare ved og ved og ved. Derfor bliver din agent bare ved med at snurre og snurre.

Stop kode

Læs nedenfor, hvordan du stopper dette…

Hvis du er fanget i en uendelig løkke, skal du stoppe din kode fra kodetilslutningsvinduet.

  1. Klik på knappen Stop i det nederste venstre hjørne af dit kodetilslutningsvindue.

Stop kode

  1. Start kodningsmiljøet igen. Klik på knappen play (afspil). Hvis play-knappen ikke er tændt, vil din kode ikke køre i Minecraft.

Play

  1. Sparer du din kode igen, kan du også genstarte din kode, så gør det for en sikkerheds skyld. Gem endnu en gang, og sig ja til advarselsmeddelelsen.

Save

Save Confirm

Dette er ok, for nu er du forberedt til udfordring 2, men du skal finde ud af en måde at stoppe agenten på, når han ser træet.

Udfordring 2 – Få agenten til at se træet automatisk

Du er nu klar til at løse den anden opgave.

  1. Sving agenten, indtil den finder træets fod.

For at gøre dette skal du sætte TurnToTree til false inde i while-loop’en, men du har brug for en betingelse til dette. Du ønsker, at agenten skal stoppe, når den finder træet.

Der er ingen find-blok for agenten, men der er en detect-blok. Måske kunne denne være nyttig?

Save Confirm

Denne blok returnerer true eller false, hvis agenten registrerer eller finder en blok i den retning, du fortæller den.

Hvordan kan du teste denne betingelse og derefter stoppe agenten fra at dreje? Du skal sætte TurnToTree til false, men hvor og hvordan?

Eksperimenter

Her er der ingen regler… Kopier koden for hvert eksperiment og ændr rundt på tingene for at se, hvilke resultater du kan skabe. Der er givet forslag, men gør som du vil!

Eksperiment 1 – Forøg størrelsen af hullet

Agenten arbejder hårdt for dig! Du kan også få den til at grave for dig. Indtast on chat-kommandoen dig 4 for at afprøve denne kode.

Kan du få agenten til at grave og placere noget på samme tid? Kan du øge størrelsen på hullet? Lige nu er det 2 x 2. Du kan måske få agenten til at grave et hul på 4 x 4 og fylde det med guld, efterhånden som det går ned.

Agent - Grav 4

Eksperiment 2 – Skab en labyrint

Denne eksperimentkode har til formål at få dig til at tænke over, hvordan du kan bygge noget kode til at skabe en robot, der graver tunneler. Agenten vil denne gang acceptere to tal. Først graver den nedad, og derefter vil den grave vandret.

Indtast on chat-kommandoen dig 5 4 for at afprøve denne kode.

Hvordan kunne du få din agent til at bygge en underjordisk labyrint? Hvad kunne du ellers gøre med dette underjordiske hul, som den graver? Du kunne fylde det med lava eller lægge nogle mobs derned eller endda bygge et underjordisk hjem. Hvilke andre kodestykker kunne hjælpe dig med at gøre dette?

Agent graver nedad og horisontalt

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.