06 70 451 7867
hello@skool.org.hu

Switchie

27 szept 2019

Switchie

How Can We Help?
← Vissza

Nehézség

(majdnem kezdő: azoknak, akik Scratcheztek már legalább egyszer)

Korosztály

 (hatodik-hetedik-nyolcadik 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?

Ennek a játéknak a látványvilágát egy népszerű telefonos platformer játék, a Geometry Dash inspirálta, de a platformer játékoknál sokkal egyszerűbb elven működik. A játékos két szint között mozgatja a szereplőt, ezzel kerülve el az egyes szinteken érkező akadályokat. Elkészítését nyolc lépésre bontottuk; a negyedik végén már játszható a játék. A végeredményt itt találjátok meg.

Az elkészítés lépései

1.  A projekt megnyitása

A projekt kezdő változatát itt találjátok meg. Ebben az összes grafikai elem és a kódok nagy része is benne van. A feladat a hiányzó részek pótlása közös munkával. Ha online szerkesztővel dolgoztok, nyissátok meg a linket az összes gépen; ha pedig offline, akkor mentsétek el a gépekre a projektet, és ott nyissátok meg. A foglalkozás elején mutassátok be a kész változatot, de ezt ne osszátok meg a résztvevőkkel, hogy megmaradjon a motiváció.

2. Switchie mozgatása forgatás nélkül

Ez egy “egybillentyűs” játék; bármelyik billentyűt használhatjátok az irányításához, kinek mi a szimpatikus. A mintaprojektben azt az opciót választotttuk, hogy bármelyik billentyűvel irányítható legyen.

A billentyűzetfigyelésre a Scratch két megoldást kínál: egy eseményblokkot és egy feltétel-blokkot.

Bár elsőre az eseményblokk használata tűnik egyszerűbbnek, általában ez a nehézkesebb, és komplexebb projekteknél sokszor nem is működik. Ez a játék kivétel; itt meglepően jól használható az eseményblokkos billentyűzetfigyelés is. Az alapvető különbség a két megoldás között, hogy míg feltétel-blokk használatával a szereplőmozgatást egyetlen közös folyamatba szervezhetjük, addig eseményblokkal külön kell majd figyelni arra, felfelé vagy lefelé kell-e mennünk billentyűnyomáskor.

A szereplőmozgatásra is több opciót találunk a Scratch-ben. A legegyszerűbb a “csússz” blokk használata. A koordinátákat ennél a blokknál nem is kell előre kiszámolni; elég, ha a szereplőt letesszük a megfelelő helyre, és a koordináták automatikusan a blokkba kerülnek. Csak az időtartamot kell beállítani (a Scratch az angolszász hagyományt követve tizedespontot és nem tizedesvesszőt használ; erre hívjátok fel a résztvevők figyelmét):

Természetesen a számok hozzávetőlegesek; bármilyen hasonló számok megfelelnek.

Ennél a megoldásnál az a nehézség, hogy a szereplő mozgatása egyszerre történik, így elsőre nem világos, hogyan tudjuk menet közben forgatni is a szereplőt. Ezt szem előtt tartva érdemesebbnek tűnhet a mozgást inkább az y koordináta fokozatos megváltoztatásával animálni:

Ennek a megoldásnak az az előnye, hogy a forgatás-blokkok helye elő van készítve; és az a hátránya, hogy tudatosan kell hozzá koordinátákkal számolni. A meglévő kódból láthatjuk, hogy y = -90-től indulunk. Középen van az origo, felül ugyanolyan messze az origótól az y = 90 lesz. Összesen tehát 180-at akarunk menni fölfelé. Ha ezt felbontjuk 10 lépésre, akkor lépésenként 18-cal változik y. Ez felnőtt fejjel nem nagy matek ugyan, de ha a résztvevők nincsenek matekos hangulatban, akkor nem érdemes erőltetni, és inkább a csúszás-blokkot használjátok.

Mégis, melyik a jó megoldás? Az a helyzet, hogy a programozásban ritkán van egyetlen jó megoldás egy feladatra. Több lehetséges kód van, amelyek közül az egyik ebből, a másik pedig abból a szempontból kedvezőbb. A következőkben két változatot mutatunk be: (a) eseményblokk használata a billentyűfigyeléshez és “csússz” a mozgatáshoz; (b) feltétel-blokk használata a billentyűfigyeléshez és “y változzon” a mozgatáshoz. Mindkét megoldásnak vannak előnyei és hátrányai; és természetesen szabadon kombinálhatók. Válasszátok azt, amelyik nektek szimpatikusabb, és amelyik a foglalkozás résztvevőinek a legjobban megfelel.

(a) megoldás:

Az esemény- és a mozgás-blokkot összeillesztve ehhez a kódhoz juttok:

Sajnos ez a projekt minden elindításakor csak egyszer működik; a második billentyűnyomáskor a szereplő már eleve azon a helyen van, ahova csúsznia kellene, így helyben marad. Most már erre a változatra lenne szükség:

 

De ha mindkét kódot betesszük a projektbe, akkor versenyezni fognak egymással, ahelyett, hogy mindegyik a maga helyén működne. A megoldás az lesz, ha feltételhez kötjük a csúszás irányát: ha alul vagy, csússz felülre; máskülönben csússz lefelé. Már csak azt kellene tudni, hogy fogalmazhatnánk meg Scratch-blokkokkal a “fölül vagy” feltételt. De ezt sem nehéz kitalálni. A felső y-koordináta pozitív szám, az alsó pedig negatív, tehát a csúszás iránya attól fog függeni, hogy y kisebb-e, mint 0:

(b) megoldás:

Ha egy folyamatban szeretnénk elhelyezni a váltakozó irányú mozgást, egymás után írva a végrehajtandó lépéseket, akkor a “ha-akkor-különben” blokk helyett érdemesebba “várj eddig”-et használni:

 

Ezt és a mozgatást a “start üzenet érkezése” eseményhez kötve pedig ezt a kódot kapjuk:

A lefelé mozgás pedig ezután következik, ugyanezzel a feltétellel; és természetesen mindez nem csak egyszer fog bekövetkezni, hanem újra meg újra, vagyis kell még egy “mindig” blokk is:

És íme, a második változatban is kész a kódunk.

3. Akadálymozgatás, első közelítés

Most áttérünk az akadályok mozgatására. Az egyszerűség kedvéért eleinte indítsuk az összeset alul. Itt használhatjátok bátran a “csússz” blokkot. Hogy ne kelljen koordinátákat számolgatni, tegyétek le az akadályt oda, ahonnan be fog jönni. A koordinátái automatikusan meg fognak jelenni az “ugorj” blokkban:

Most jöhet a “csússz” blokk. Tegyétek le a szereplőt oda, ahol elhagyja majd a játékteret:

Természetesen a számok csak hozzávetőlegesek; nincs szükség arra, hogy mindenkinél pontosan ugyanaz legyen.

A szereplő jobboldalt megjelenik, baloldalt eltűnik, aztán kisvártatva újra megjelenik jobboldalt, és így tovább a végtelenségig:

4. Érintésfigyelés és játék vége

A játszhatósághoz annyi hiányzik még, hogy az akadályok ne haladjanak át Switchie-n, hanem az első érintéskor véget érjen a játék. Tehát a játék kezdetétől addig kell várni, amíg az érintés be nem következik:

Na de hogy legyen vége a játéknak? Ha körülnéztek az előre elkészített kódok között, láthatjátok, hogy a játék a “vége” üzenettel ér véget. Ezt kell tehát elküldenünk:

Most már játszható a játék. Ha eddig a pontig eljuttok, sikerélménnyel tudjátok lezárni a foglalkozást. A következő lépések már csak még teljesebbé teszik a játékélményt.

5. Véletlen választások

Ha belenéztek az akadály-szereplő jelmezeibe, láthatjátok, hogy három is rendelkezésre áll. Szeretnénk, ha ezek közül hol az egyik, hol a másik jelenne meg. És hasonlóképpen szeretnénk, ha az akadályok nem csak alul, hanem fölül is jönnének, véletlenszerűen váltogatva. Ha nekünk kell több lehetőség között véletlenszerűen döntenünk, akkor sorsolni szoktunk, például pénzfeldobással, kockadobással vagy sorshúzással. A Scratch-ben is van ilyen sorsoló eszköz: a “véletlen” blokk egy számot fog adni nekünk adott határok között. Az 1-es, 2-es és 3-as sorszámú jelmezek közötti választáshoz a határokat 1-re és 3-ra állíthatjuk:

Az alsó és a fölső szegmens közötti választáshoz pedig 1 és 2 közötti véletlenszámot generálhatunk:

Ez az elágazás pontosan megfelel annak, ami pénzfeldobáskor történik. A “ha-akkor” egyik ágába kerül az akadálymozgatás eddigi kódja, a másikba pedig a másik:

 

6. Akadályok másolatkészítéssel

Izgalmasabb lenne a játék, ha gyorsabban jönnének egymás után az akadályok, és már azelőtt megjelenne a következő a jobb szélen, hogy az előző eltűnik a bal szélen. Ehhez arra van szükségünk, hogy ugyanaz a szereplő több példányban álljon a rendelkezésünkre.

Szerencsére a Scratch-nek van erre is eszköze: a másolatkészítés. Ha nem magát a szereplőt mozgatjuk, hanem a belőle készített másolatokat, akkor akár több száz is lehet belőle a játéktéren. A másolatkészítés szuperhasznos eszköz, ami a Scratch-et a modern objektumorientált nyelvek közé emeli. Kevés gyerekek számára fejlesztett programozási nyelv rendelkezik ilyen fejlett eszközökkel.

A másolatkészítés-blokkot oda illeszthetjük a kódban, ahol eddig a sorsolás és a szereplőmozgatás volt. Érdemes egy kis késleltetést is beiktatni a kódba, különben túl nagy lenne a tolongás a játéktéren:

A sorsolás és a szereplőmozgatás eddigi kódja pedig a “másolatként kezdéskor” eseménybe kerül. Érdemes a másolatokat a puszta eltűntetés helyett törölni, hogy ne terheljük fölöslegesen a rendszer erőforrásait:

7. Switchie mozgása forgatással

Izgalmas látványelem, ha Switchie ugrás közben szaltózik is. Ezt ismételt forgatással tudjuk animálni. Hogy hogyan illesztjhetitek be a már meglévő kódba, az attól függ, hogy a 2. lépésben az (a) vagy a (b) lehetőséget választottátok.

Ha az (a) változat szerint eseményblokkot használtatok, akkor a forgatás is eseményblokkhoz fog tartozni:

Összesen 180 fokot kell forogni. Ez lehet ötször 36 fok, hatszor 30 fok, 10-szer 18 fok, 12-szer 15 fok és így tovább; válasszátok azt a lehetőséget, amelyiknél a forgás időtartama a legközelebb lesz az ugráséhoz.

A (b) változatnál már teljesen elő van készítve a terep; csak a forgás-blokkot kell a helyére rakni. Mivel az y koordináta és az irány is összesen 180-at változik, a számértéket át lehet másolni:  

8. Pontozás

És végül még pontozást is teszünk a játékba, hogy a foglalkozás résztvevői egymással is versenyre kelhessenek. Ehhez is minden elő van készítve a kódban, csak “pont változzon” blokkot kell beilleszteni a kódban oda, ahol az akadály célba ér:

Previous Pattogós játék
Next Dínós játék
Table of Contents

Leave a Reply