Scratch - Falbontó
A Breakout vagy Arkanoid néven ismert játék prototípusát fogjuk most elkészíteni. Megjelenik benne az üzenetküldés, valamint a „ha szélen vagy, pattanj vissza” utasítás. A program alapja ez a videó: https://www.youtube.com/watch?v=LLSHUFGRoww&t=429s.
A játékban az összes szereplőt mi magunk fogjuk rajzolni. Először hozzuk létre a hajót!
- Vektoros módban rajzoljuk meg, pl. egy 16 egységnyi széles, 4 egységnyi magas tömött téglalapot. Fontos, hogy a képernyő közepén legyen.
- Majd írjuk meg az alapértelmezett elhelyezés és a balra-jobbra mozgatás kódját.
Most fokozatosan elkészítjük a labdát.
- Rajzoljunk egy kisméretű kört. Ügyeljünk arra, hogy középen legyen! A labda esetében ez kritikus a megfelelő működéshez; nagyon minimális eltérés nem várt működéshez vezethet.
- Valósítsuk meg a következőt: az elején a labda a képernyő közepére ugrik, jobbra fel néz 30°-os szögbe, majd folyamatosan lép előre, és ha falnak ütközik, akkor visszapattan.
- Tegyük hozzá azt a kódot, hogy a hajóról is pattanjon vissza! A függőleges visszapattanás után az új irány: -irány+180°. Fentről valójában csak 150° vagy -150°-os szögben eshet be; az első esetben 30° lesz az új irány, a másodikban pedig 330°, ami nem más, mint -30°, tehát megfelelő.
- Egészítsük ki azzal a logikával, hogy ha érinti az alját, akkor a játékos veszített. Ezt úgy fogalmazzuk meg, hogy akkor van vége, ha az x koordináta -170 alá megy. Az egyszerűség érdekében a játék vége kezelése eléggé minimalista; egy teljesebb megvalósítás pontosabb ellenőrzést igényel.
Most hozzuk létre a téglát!
- Rajzoljunk egy kb. ugyanakkora téglalapot, mint a hajó, de célszerűen más színnel.
- A téglák kirajzolásának a logikája nagyon hasonló a békák kirajzolásához. A téglákat szintén számoljuk. Ha a labda hozzáér egy téglához, azt töröljük.
- Valamint mivel a téglák kirajzolása észrevehető ideig tart, a nemkívánt működés elkerülése érdekében küldünk egy start üzenetet, és a labda szereplő majd ennek hatására kezd mozogni. Mielőtt ezt megvalósítjuk, mondjuk el az üzenetküldés lényegét.
- A tégla szereplő kódja tehát ez:
Most ismét térjünk vissza a golyóra!
- Zászlóra kattintva ugorjon a labda középre, viszont még ne induljon el. Erre egyrészt azért van szükség, hogy újraindításkor ne törölje egyből azt a téglát, amivel befejezte, másrészt meg ne induljon el azelőtt, hogy az összes tégla kirajzolódott volna.
- A többi része akkor fusson le, amikor megérkezett a start üzenet. (Ugyanezt megtehetnénk a hajó esetében is, de ott nem feltétlenül szükséges.)
- Ha a téglák száma elérte a 0-t, akkor szintén fejeződjön be a megfelelő felirattal.
- Érdemes ezen a ponton lefuttatni: a tégláról nem pattan vissza, így hamar véget ér. Ezzel gyorsan tesztelhető a nyerő funkció is. Téglának ütközve viszont vissza kell pattannia. Itt vegyük észre, hogy a hajónál alkalmazott képlet itt is használható: ha felülről pattan, akkor nyilvánvaló, ha meg alulról, akkor az kétféle szögből lehetséges: 30°, melyből 150° lesz, ill. -30°, melyből 210° lesz, ami egyenlő -150°-kal; mindkettő megfelelő. (Az oldalsó pattanást már másképp kellene kiszámolni.)
- Mindent megvalósítva a golyó kódja az alábbi:
Ezzel kész vagyunk. A megvalósítás itt elérhető: https://scratch.mit.edu/projects/238676656/.
Számos továbbfejlesztési lehetőséget rejt magában ez a játék:
- Szélsőséges esetben előfordul az, hogy párat pattan a labda a hajón, mire ténylegesen lehagyja. A hiba oka az, hogy 10 képpontnyit lép egyszerre, majd elvileg vissza, de a megfordulásnál egy-egy pixel „belelóghat” még hajóba. Ezt a hibát célszerű javítani.
- Hiányossága a játék jelenlegi megvalósításának az, hogy csak a vízszintes ütközésre van felkészítve, a függőlegesre nem. Ha a labda a téglát oldalról találja el, akkor más irányba kellene pattannia.
- A játék végét célszerű lenne precízebben kezelni.
- Lehetne több élet, több pálya, nehezedő pályák.
- A visszapattanás szöge függhetne attól is, hogy a hajó melyik részére pattant a labda.
- Lehetne többféle tégla: pl. amelyet többször el kellene találni, vagy ad valamilyen „jutalmat”, amit „fel kell venni” (pl.: szélesebb hajó, lövöldözési lehetőség, több labda, lassított labda) vagy akár büntetést (pl. gyorsuló labda).
- A játék idővel nehezedhet, pl. begyorsulhat.
- Pontszámítást lehetne bevezetni, és a rekordot szerveren tárolni.
- Érdekes játékvariáns: kétféle tégla, pl. kék és zöld, és a hajó egyik oldala kék, a másik zöld. Pattanáskor a golyó felveszi azt a színt, amelyen a hajón megpattant. Csak a neki megfelelő színt képes eltüntetni.
oldalváltozat: 21, utoljára szerkesztve: 11 Jan 2019 19:17