Gjør skrapelodningen mer effektiv med egendefinerte blokker

Hva du skal skape

Du er nå mest av veien gjennom denne nybegynners serien på Scratch. Du har laget et spill der brukeren jager en katt med en krabbe, katten sier 'Ouch!' når krabben nipper den, og en poengsum holdes. Spillet har noen animasjoner og holder poeng, som det viser på slutten.

I denne delen fortsetter vi å jobbe med dette prosjektet. Vi bruker en egendefinert blokk for å gjøre koden enklere og enklere å jobbe med.

Bruk av egendefinerte blokker

Tilpassede blokker har noen bruksområder:

  • Bruk dem til å bruke DRY (Do not Repeat Yourself) prinsippet til prosjektene dine, erstatte blokker som du bruker mer enn en gang med en egendefinert blokk. På denne måten kan du definere en rutine en gang og deretter bruke den når du trenger ved å sette inn din egendefinerte blokk i prosjektet.
  • Hvis skriptene dine blir store og uhåndterlige, bruk dem til å rydde opp ting og lagre lange rutiner andre steder.
  • Opprette rekursive rutiner der rutinen kjøres igjen hvis en tilstand er eller ikke er oppfylt.
  • Opprette rutiner der verdier eller strenger kan endres hver gang du legger til rutinen til et skript.

I denne opplæringen bruker vi de tre første tilnærmingene.

Hva du trenger

For å fullføre denne opplæringen må du:

  • en gratis konto med Scratch
  • en nettleser med tilgang til Scratch (jeg anbefaler å bruke en moderne nettleser som Chrome, Firefox, Safari eller Opera for den beste opplevelsen)

Starter

Vi skal jobbe med prosjektet som ble opprettet i den siste delen av denne serien, på animasjoner. Vi bruker eiendommene og skriptene vi har laget så langt, og legger til flere.

Avhengig av om du jobbet sammen med den opplæringen, er det to måter å komme i gang for denne opplæringen:

  • Åpne prosjektet du opprettet for den siste opplæringen, og lag et duplikat av det.
  • Remix prosjektet jeg opprettet for å støtte den siste opplæringen.

Alternativt kan du bare fortsette å jobbe i det samme prosjektet du allerede har opprettet. Slik gjør du hver av disse (du trenger bare å gjøre en).

Dupliserer ditt eget prosjekt

Åpne Skrap og gå til prosjektet du vil duplisere. Pass på at du har klikket på Se innsiden knappen slik at du kan se prosjektets arbeid.

Klikk på i verktøylinjen Fil> Lagre som en kopi:

Skrap vil åpne din nye kopi. Gi nytt navn til det og begynn å jobbe med det.

Remixing av prosjektet mitt

Logg inn på Skrap og gå til siden for prosjektet mitt på animasjoner.

Klikk på Se innsiden knappen for å se prosjektet:

Klikk nå på Remix knapp. Skrap vil lagre en duplikat av prosjektet mitt som et nytt prosjekt i kontoen din. Gi nytt navn til det, og du er god til å gå!

Opprette en egendefinert blokk for å unngå gjentakelse

Først må du identifisere hvor en tilpasset blokk vil gjøre skriptene dine mer effektive. I dette prosjektet inneholder hovedskriptet for scenen noen repetisjon av to linjer:

  • vent 1 sek
  • endre timeren med -1

Dette er ikke mye gjentakende kode, så i et reelt prosjekt kan du velge å forlate det som det er, men for formålet med denne opplæringen la vi erstatte den med en egendefinert blokk.

Velg Scene og klikk på Flere blokker. Klikk på Lag en blokk knapp. Du blir presentert med Ny blokk dialogboks:

Du ser nå et nytt skript "hat" som heter Definer Count ned hvert sekund (eller hva du har kalt det):

For å definere denne blokken må du legge til blokkene som den vil erstatte under den "hatten". Disse vil være vent 1 sek og endre timeren med -1 blokker.

Når du har gjort det, rediger manuset med de to gjentatte blokkene i det, slik at de to blokkene blir erstattet av din egendefinerte blokk hver gang. Skriptet vil nå ha 11 blokker med kode i stedet for 14:

Dette har bare redusert koden med tre linjer i det skriptet, men du kan se hvordan hvis du brukte større rutiner eller gjentar dem oftere, for forskjellige sprites kanskje, ville det gjøre ting mer effektive. Hvis du vil lage en egendefinert blokk gjelder for alle dine sprites, opprett den i scenen.

Opprette en egendefinert blokk for å forkorte et script

En annen måte du kan bruke egendefinerte blokker på, er å erstatte store rutiner i skriptene, slik at skriptene dine blir kortere og enklere å administrere. Katten sprite har for øyeblikket ganske mange blokker i hovedskriptet, så la oss bruke dette prinsippet til det.

Slik ser katteskriptene ut nå:

La oss lage to tilpassede blokker: en for rutinen som ber brukeren å definere hva katten vil si, og en for rutinen som gjør at katten reagerer på å bli fanget av krabbe.

Pass på at du har valgt katten, og gå til Flere blokker seksjon. Klikk på Lag en blokk knappen, og navn din første blokk. Jeg skal kalle det: 'Bruker definerer kattelyd'.

Dra nå blokkene som kjører den rutinen til "hatten" for din egendefinerte blokk. Blokkene du trenger å flytte er følgende:

  • spør Skal katten mjøte eller skrike når den er nippet av krabbe? og vent
  • hvis svaret = meow da
  • si meow i 2 sekunder
  • ellers
  • hvis svar = skrik da
  • si skrik! i 2 sekunder

Pass på at du drar noen blokker under disse tilbake til det opprinnelige skriptet.

Legg nå til Bruker definerer kattelyd blokkere inn i ditt opprinnelige manuskript på stedet der du tok ut blokkene over.

Gjenta dette for linjene med kode under det, og opprett en ny tilpasset blokk som heter Cat reagerer på å bli fanget, legger blokkene til det, og legger til det nye Cat reagerer på å bli fanget blokkere til det opprinnelige skriptet ditt.

Her ser kattens skript ut akkurat nå:

Kodenes størrelse er den samme, men ved å skille ut de to rutinene du har gjort det lettere å se hva som skjer i ditt originale skript. Dette er en teknikk som noen vil finne nyttige, mens andre kanskje foretrekker å holde fast med å holde alle blokkene dine i ett langt skript!

Opprette en egendefinert blokk for rekursiv rutine

En annen bruk for en tilpasset blokk er å lage en rekursiv rutine, der en rutine kan kjøres inne i seg selv. Det er lettere å forklare ved å lage en.

De Bruker definerer kattelyd egendefinert blokk som vi nettopp har definert, ber brukeren å skrive inn en lyd som katten skal gjøre. Hvis brukeren skriver 'meow' eller 'scream', reagerer manuset på det. Men hva om brukeren mistypes eller skriver noe annet? Hvis det skjer, vil vi vise en melding til brukeren og deretter stille spørsmålet på nytt. Vi kan gjøre det ved å lage Bruker definerer lyd rutinemessig rekursiv.

Velg kattesprite og rediger Bruker definerer kattelyd egendefinert blokk. Start med å erstatte hvis blokkere inne i ellers delen av hvis - ellers blokkere med et sekund hvis - ellers blokkere. Pass på at du kopierer betingelsene (svar = skrik) fra originalen din hvis blokkere inn i hvis delen av den nye hvis - ellers blokkere. Flytt si skrik! i 2 sekunder blokkere inne i hvis loop i det hvis - ellers blokkere.

Nå i ellers delen av hvis - ellers blokkere, legg til disse blokkene:

  • si Beklager, jeg fikk ikke det i 1 sekund
  • sett Timer til 0
  • Bruker definerer kattelyd

Slik ser du skriptet ditt:

Nå, hvis brukeren skriver feil svar, vil katten si, "Beklager, jeg fikk ikke det," vil timeren nullstilles, og rutinen vil bli kjørt igjen, og spør brukeren hvilken lyd de vil at katten skal gjøre.

Sammendrag

Tilpassede blokker er et veldig nyttig verktøy i Scratch. Som du har lært i denne opplæringen, kan du bruke dem til å lagre gjentatt et sett med blokker igjen og igjen i prosjektet ditt, eller du kan definere rutiner som du deretter legger til i et skript, noe som gjør skriptene mer overskuelige. Hvis du må gjenta en rutine hvis en tilstand er oppfylt, kan du opprette en rekursiv rutine som den du har laget for katten.

Du kan også inkludere strenge, tall og boolske innganger i dine egendefinerte blokker, noe som betyr at hver gang du legger til en blokk til et skript, kan du endre måten det fungerer på. For mer informasjon om dette, sjekk ut Scratch wiki.

Skrapeløpet ditt er nå fullført! I neste og siste del av denne serien ser vi på hvordan du kan dele arbeidet ditt og lage studioer for å jobbe sammen.