Scratch - Versenypálya

Ebben a játékban a játékosnak végig kell vezetnie járművét a versenypályán. A játék elkészítése során mélyebben megismerkednünk az irányokkal, változókat hozunk létre, valamint használjuk a színérintést.

versenyp%C3%A1lya.png

Az egyszerűség érdekében a pálya a játéktérre lesz rajzolva. Profibb megvalósításban persze célszerű ezt is külön szereplőként kezelni.

  • Célszerű nevet adni a háttérnek, pl. pálya, vagy pálya1, ha több pályát szeretnénk készíteni.
  • A háttér alapértelmezésben pixeles. Mivel vektoros módban csak konkrét objektumokat tudunk színezni, most töltsük ki pixeles módban a játékteret a háttér színével, pl. zölddel, a kitöltés eszköz segítségével.
kit%C3%B6lt%C3%A9s.png
  • Most váltsunk át vektoros módra, és rajzoljuk meg magát a pályát. Most egyszerűen rajzoljunk egy nagy szürke kitöltött ellipszist, bele pedig egy zöld ellipszist pont olyan színnel (ez nagyon fontos!) mint amilyen a héttér színe. Mivel vektoros módban vagyunk, nem kell elsőre tökéleteset rajzolnunk, utólag tudjuk igazítani. Végül egy vastag fekete vonallal rajzoljuk meg a célvonalat. A végeredmény kb. így néz ki:
p%C3%A1lya.png

Most megalkotjuk a szereplőt, amelyiket vezetni fogunk!

  • Ehhez az alapértelmezett macska nemigazán alkalmas, mivel érdemes felülnézetből ábrázolt szereplőt választani. Töröljük tehát ki a macskát, és válasszunk (vagy rajzoljunk, esetleg töltsünk fel) egy megfelelőt, pl. ezt: Állatok → Cat2. Adjunk neki megfelelő nevet, pl. ezt: Versenyző.
  • Méretezzük át a szereplőt úgy, hogy kényelmesen elférjen a pályán, és mozgassuk a cél elé úgy, hogy ne érjen hozzá a feketéhez.
versenyz%C5%91.png
  • Magyarázzuk el a szereplők irányával kapcsolatos tudnivalókat. A szereplő tulajdonságainál játsszunk el az iránnyal, bemutatva azt, hogy hogyan forog.
  • A versenyző kódja kezdődjön úgy, hogy a megfelelő helyre ugrik (ha odatesszük kézzel, akkor az ugorj x … y … utasítás alapértelmezésben a megfelelő értékeket fogja tartalmazni) és a megfelelő irányba néz (tipikusan 90°).
  • Majd valósítsuk meg a vezérlést! Ha a játékos a bal billentyűjt nyomja meg, akkor balra fordul, jobb billentyűvel jobbra, a felfele billentyűvel előre, a lefele billentyűvel pedig hátra halad:
ir%C3%A1ny%C3%ADt%C3%A1s.png

Jelenleg a versenyző fix sebességgel tud előre-hátra haladni. Most úgy módosítjuk a kódot, hogy a sebesség változtatható legyen. Ez hasznos lesz majd az ütközésvizsgálatkor is.

  • Mutassuk be a változókat, és magyarázzuk el, hogy ezek mire jók.
  • Ehhez hozzunk létre egy változót: Adatok → Változó létrehozása. A változónév legyen sebesség, és legyen a kiválasztott szereplőé, mivel a versenyző sebességét állítjuk be, és nem mondjuk a teljes játék sebességét. Itt a következőképpen magyarázhatjuk el a minden szereplőhöz és a kiválasztott szereplőhöz kapcsolódó változók közötti különbséget: ha nem egy, hanem több versenyző lenne, akkor mindegyiknek lenne egy saját sebessége, és nem egy közös. Az új változó egyelőre maradjon látható, idővel eltüntetjük.
  • Módosítsuk a kódot a következőképpen: az elején a sebesség legyen 0, a fel és le gomb megnyomásakor pedig ne menjen semennyit, csak a sebesség nőjön vagy csökkenjen valamennyit. Végül menjen sebesség lépést. A módosított kód a következőképpen néz ki:
sebess%C3%A9g.png

Egyelőre büntetés nélkül rá tudunk hajtani a „fűre”; most ezen változtatunk.

  • Adjuk hozzá az alábbi vizsgálatot a kódhoz: ha a szereplő érinti a háttér zöld színét (emiatt volt fontos, hogy a belseje pont ugyanaz a szín legyen, mint a külseje), akkor a sebesség legyen nulla. Mivel ez a kódrészlet a lépés után van, nem ragad be végleg, viszont nagyon lassan tudunk csak haladni, amíg érinti a versenyző a pálya szélét. Próbáljuk ki!
kisodr%C3%B3d%C3%A1s.png

Most valósítsuk meg azt, hogy két teljes kört kelljen megtennie a szereplőnek! Az fogjuk számolni, hogy hányszor érinti a fekete célmezőt. Két érintés között viszont meg kell tennie egy kört; ezt úgy vizsgáljuk, hogy az y koordináta volt-e eléggé lent. (Precízebb megvalósításban azt is ellenőrizni kellene, hogy először elment-e eléggé jobbra, majd eléggé balra.)

  • Hozzunk létre egy kör nevű változót, ez is a kiválasztott szereplőé legyen (hiszen több versenyző esetén más körben lehetnek).
  • Egy véges belső ciklusban ("ismételd eddig") először megvizsgáljuk, hogy elérte-e a megfelel y koordinátát, majd azt, hogy érint-e fekete színt.
  • Addig ismételjük, még el nem éri a körök száma a kettőt, és ekkor leáll a program.
k%C3%B6r.png

Valósítsuk meg az időmérést! Van egy beépített időmérő funkció a Scratch-ben, mégpedig az érzékelőben.

  • Kattintsunk az időmérő melletti kiválasztó gombra, hogy létható legyen.
  • Helyezzük a bal alsó sarokba.
  • Hozzunk létre egy minden szereplőhöz kötött változót, "A játékos ideje:" névvel, ezt ugyanis kijelzésre fogjuk használni.
  • Helyezzük a kék időmérőre a bal alsó sarokban úgy, hogy azt teljesen eltakarja. Erre amiatt van szükség, mert egyrészt az időmérő nem állítható le, másrészt programból nem tüntethető el.
  • A programban a köröket számoló zászlóra kattintás első két utasítása a következő legyen: "A játékos ideje:" változó tűnjön el és nullázd az időmérőt. A minden álljon le elé pedig szúrjuk be az alábbiakat: "A játékos ideje:" legyen időmérő, majd "A játékos ideje:" változó jelenjen meg. A kérdéses kódrészlet a következőképpen néz ki:
id%C5%91m%C3%A9r%C5%91.png
Mindent összerakva a versenyző teljes kódja az alábbi:
versenyz%C5%91k%C3%B3d.png

Megvalósítás: https://scratch.mit.edu/projects/238627160/. A játék alapötletét ez a videó adta: https://www.youtube.com/watch?v=J6WnoJSQ3iQ.

Lehetséges kiterjesztések:

  • Megfelelő játék vége kezelés.
  • A rekord idő lementése a szerverre, és megmutatása a játékosnak.
  • Több szereplő. Ez esetben a többi szereplőnek más billentyűket kell használnia (pl. a másodiknak célszerűen a, s, d, w). A megvalósítás itt trükkös, mert egyrészt lehet kódot ismételni, ami nem elegáns, másrészt másolatot készíteni, az viszont nagyofokú precizitást igényel: a szereplőnek célszerűen több jelmeze kell, hogy legyen, és a jelmez sorszámától kell függenie az iránytó gomboknak.
  • Érdemes saját szereplőt létrehozni, pl. sematikus felülnézeti autót rajzolni, vagy keresni az interneten (keresési tipp: „car above view”).
  • Kicsit bonyolultabb pálya és/vagy több pálya.
  • A pálya a háttér helyett lehet szereplő, és a cél szintúgy. A színvizsgálat sok hibát okozhat, mert egy esetleges tovább fejlesztésnél, ha ugyanaz a szín előfordul máshol (pl. egy másik versenyző karakterében), az nem várt hibákhoz vezetne. Valójában a szín érintés vizsgálatot érdemes elkerülni. Ez esetben a pálya csak maga a szürke sáv legyen, a belseje pedig legyen átlátszó. Így azt picit más technológiával tudjuk megrajzolni, mint a fentit.

Egy teljesebb megvalósítás (kicsit más alapokon) az alábbi: https://scratch.mit.edu/projects/182800573/.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License