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.
falbont%C3%B3.png

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.
haj%C3%B3.png
  • Majd írjuk meg az alapértelmezett elhelyezés és a balra-jobbra mozgatás kódját.
haj%C3%B3program.png

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.
goly%C3%B3.png
  • 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.
goly%C3%B3program1.png
  • 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ő.
goly%C3%B3program2.png
  • 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.
goly%C3%B3program3.png

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.
t%C3%A9gla.png
  • 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:
t%C3%A9glaprogram.png

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:
goly%C3%B3program4.png

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.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License