Dínós játék
Nehézség
(majdnem kezdő: azoknak, akik Scratcheztek már legalább egyszer)
Korosztály
(ötödik-hatodik osztály)
Elkészítési idő
90 perc a teljes projekthez (45 perc a 4. lépés végéig, az első játszható változathoz)
Eszköz
(online vagy offline szerkesztő)
Elvárás az oktatótól
A Scratch felületének ismerete
Miről szól a projekt?
Ez a Chrome böngésző dínós játékának egyszerűsített Scratch változata. A játékos billentyűvel irányít egy dínó-figurát, akinek át kell ugrálnia a szembe jövő akadályokon. A játék grafikai elemei és a kód nagy része is elő van készítve, a foglalkozás során csak néhány hiányzó részt kell kitölteni. A végeredményt a kitöltött részletekkel megtaláljátok itt.
Az elkészítés lépései
A teljes projekt nyolc logikailag elkülönülő lépésben készíthető el. A negyedik lépés végére már játszható játékot kaptok; eddig mindenképpen érdemes eljutni, hogy a résztvevőknek meglegyen a sikerélménye. Az utolsó négy lépés egy kicsit trükkösebb az előzőeknél; ezek közül bármelyiket kihagyhatjátok.
1. A projekt megnyitása
A kiinduló projektet itt találjátok. Ez legyen bekészítve a gépekre, hogy a résztvevők dupla kattintással meg tudják nyitni. Mutassátok be a résztvevőknek a kész játékot, és beszéljétek meg közösen, milyen lépésekre lesz majd szükség az elkészítéséhez.
2. Billentyűfigyelés és a dínó mozgatása
Érdemes a dínó mozgatásával kezdeni. Itt ezt a kódrészt kell majd kiegészíteni:
A billennyűnyomások figyelését kétféleképpen lehet lekódolni. Az egyszerűbb megoldás a külön eseményblokk használata:
Ennek a megoldásnak az a hátránya, hogy a szóköz lenyomását nem csak akkor figyeli, ha a játék éppen fut, hanem akkor is, amikor már leállítottuk. Profibb megoldás, ha érzékelés-blokkot használunk a billentyűfigyeléshez, a már megkezdett kódot egészítve ki:
Mivel itt a “start üzenet érkezésekor” eseményhez kötjük a billentyűfigyelést, elkerüljük azt, hogy a dínó akkor is ugráljon, ha még nem megy a játék.
Most jöhet az ugrás. A gyorsulás szimulációja ebben az életkorban még túl komplex lenne, ezért állandó sebességű szakaszokból rakjuk össze, trapézzal közelítve a parabolapályát: a szereplő felfele mozog, ott megáll, aztán lefele mozog. A mozgatás teljes kódja így ez lesz:
A számértékek természetesen eltérhetnek; sőt, szükségképpen el is fognak térni. Hogy ne kelljen koordinátákat számolni, itt is és máshol is kihasználhatjuk azt a Scratch-trükköt, hogy ha leteszünk valahova egy Scratch-szereplőt, akkor az aktuális koordinátái megjelennek a mozgás-blokkokban:
Ha a szereplőt néhány képponttal odébb tesszük le, más koordináták kerülnek a blokkba. Ezek az eltérések teljesen rendben vannak. Semmiképpen ne diktáljátok le a mintaprojektben szereplő számokat a résztvevőknek.
A három időérték beállítása némi türelmet igényel. Az alapérték minden blokknál 1 mp; ezt állítgassuk át mindaddig, ameddig a szereplő ugrása nem lesz megfelelő. Később majd érdemes lesz ezeket az értékeket újraállítani, a legszélesebb akadályhoz igazítva.
Fontos apróság, hogy a tizedesvessző helyett az angolszász világban tizedespontot használnak. Vesszőt nem is enged a számmezőkbe írni a Scratch-szerkesztő:
Az utolsó mozzanat ebben a lépésben az, hogy a billentyűfigyelés és a mozgatás kódját betesszük egy mindig-ciklusba:
3. Az akadály mozgatása
Az akadály- szereplő a jobb szélen jelenik meg, onnan csúszik át a bal szélre és tűnik el. Tehát két mozgás- és két kinézet-blokkal egészítjük ki a kiinduló projektben megkezdett kódot:
A számoknak természetesen itt sem kell pontosan ugyanezeknek lenni; itt is használhatjuk a fenti trükköt, hogy először lerakjuk a szereplőt, aztán vesszük ki a blokkot a megfelelő koordinátákkal.
Természetesen az akadály nem csak egyszer indul útnak; itt is eg mindig-blokkba kell tennünk a mozgatás kódját:
Most jöhet a jelmezválasztás. Az akadály lehet szimpla kaktusz, dupla kaktusz, tripla kaktusz, magasan szálló madár és alacsonyan szálló madár; ez öt lehetőség. Ezek közül választunk véletlenszerűen:
Az a leglogikusabb, ha a jelmezválasztás közvetlenül a szereplő megjelenése előtt történik.
A jelmezváltás nem elengedhetetlen a játékhoz. Ha nagyon lassan halad a csoportmunka, akkor akár ki is hagyhatjátok. Ha viszont gyorsan haladtok, akkor érdemes most bekalibrálni a dínó ugrásának kódjában az időértékeket a legszélesebb akadály-jelmezhez igazítva.
A pontozás szintén nem elengedhetetlen, de sokat ad hozzá a játékélményhez. Logikus akkor sort keríteni rá, amikor az akadály célba ért. Így a teljes kód a következő lesz:
Ez még nem a végleges változat, hiszen később majd szeretnénk, ha egyszerre több akadály is szembe jönne; de erre még ráérünk, hiszen ez sem elengedhetetlen a játszhatósághoz.
4. Érintésfigyelés és játék vége
A játék akkor ér véget, ha a dínó hozzáér az akadályhoz. Ezt érintésfigyelő blokkal lehet tesztelni. A kód rendkívül egyszerű:
De honnan tudjuk, hogy a játék pont a “vége” üzenettel ér véget? Hát onnan, hogy megnézzük a “felirat” szereplőnél, mi a feltétele a “vége” felirat megjelenésének:
Mivel ez már készen benne van a kódban, ehhez érdemes alkalmazkodnunk.
Az érintésfigyeléssel eljutottunk az első olyan pontra, ahol már játszható játék van a birtokunkban. Ha elment az idő vagy türelmetlenek a résztvevők, itt már akár abba is lehet hagyni a munkát. Természetesen ha van idő és kitartás, érdemes folytatni, hiszen már nincs messze a teljes játékélményt nyújtó cél sem.
5. A dínó animálása
Megmozgatjuk a dínó lábait. Ha belenézünk a dínó szereplő jelmezeibe, láthatjuk, hogy a három jelmez a dínó mozgásának három fázisa:
Ezeket váltogatva kapjuk meg a futás illúzióját. “várj” blokkal és a töredékmásodpercek igazítgatásával tudjuk elérni, hogy a futás se túl gyors ne legyen, se túl lassú:
A dínó mozgása még mindig nem tökéletes, hiszen most akkor is mozgatja a lábait, amikor a levegőben van. Ezt majd a legvégén javítjuk.
6. egyszerre több akadály
Most lehetővé tesszük, hogy az akadály egyszerre több példányban érkezzen egymás után. Erre a Scratch-nek van egy nagyon profi eszköze, a másolatkészítés. A meglevő kódot kicsit át kell alakítanunk. A mindig-blokkba az akadály mozgatása helyett az fog kerülni, hogy adott időközönként keletkezzen egy újabb akadály-példány:
Természetesen a számérték itt sem fix; érdemes próbálgatni az időtartamokat. Vagy akár kerülhet véletlen-blokk is ide, hogy még izgalmasabb legyen a játékmenet:
Az akadály mozgatására pedig akkor kerül sor, ha már létrehoztuk a másolatot:
A Scratch csak korlátozott mennyiségű másolatot képes kezelni; ezért a célba ért akadály-példányokat érdemesebb eltűntetés helyett törölni:
7. Az akadályok animálása
A kaktuszoknek nincsenek fázisai, de a madaraknak verdesiük kell a szárnyukkal. Ehhez feltételes blokkokra van szükség, például az alul jövő madár esetében így:
És persze hasonlóan a többi jelmezre, összesen négy változatban:
Ez nem túl elegáns megoldás, de működik, ráadásul logikus és áttekinthető is. Duplikálással (jobb klikk a legfelső blokkra) ráadásul egész gyorsan megvan:
Van azonban egy egyszerűbb megoldás is. A jelmezeket úgy raktuk sorrendbe, hogy öttel később mindig a következő mozgási fázishoz jussunk. Így a fenti sok kód ennyivel megoldható:
Vagy ha nem akartok jelmezsorszámokkal bíbelődni:
Vigyázat, a következő változat viszont már nem fog működni:
Ennek az az oka, hogy a Scratch a ciklusok lépései között frissíti a kijelzőt; egymás után rakott blokkok között viszont nem.
8. A dínó mozgásának és fázisainak összehangolása
Végül arról gondoskodunk, hogy a dínó ne tudjon egyszerre ugrani és futni. Ezt többféleképpen meg lehet oldani, de a legegyszerűbb, ha a két kódot egymáshoz illesztjük. Ehhez elég, ha a “várj eddig” blokkot lecseréljük “ismételd eddig”-re. Ez egyszerű lépés, de trükkös; jól irányzott rávezető kérdésekkel fogtok tudni közösen rájönni: