Scratch kiegészítések

Ezen az oldalon a Scratch játékok lehetséges kiegészítéseit találjuk. A példában a Lebegő madár játékot (https://scratch.mit.edu/projects/238527445/) fogjuk pontról pontra kiegészíteni.

Egy-egy másfél órás alkalmon nem célszerű ezeket megvalósítani, mivel jó eséllyel nem lesz rá idő, viszont a tanfolyam sorozat végén a saját program elkészítésekor ezeket is érdemes bele venni.

Játék vége

Kattintsunk a Játéktérre, azon belül pedig a hátterekre. Alapértelmezésben jó eséllyel egy darab háttér1 nevű jelmez van. Tegyük a következőt:

  • Nevezzük át a háttér1-et valami másra, pl. játék.
  • Hozzunk létre egy új hátteret (Új háttér festése), alakítsuk át vektorossá, jobb oldalon a válasszuk ki a Szöveget (alulról a harmadik ikon), kattintsunk a rajzasztalra, majd írjuk le, hogy Vége. Az alapértelmezett Helvetica betűtípus sajnos rosszul jeleníti meg a magyar ékezeteket, ezért változtassuk azt meg a bal alsó sarokban, pl. erre: Donegal.
  • Kattintsunk jobbra fent a Kijelölésre ikonra, méretezzük át a Vége szöveget, és helyezzük középre.
  • Nevezzük át a háttér nevét balra fent arra, hogy vége.
v%C3%A9ge.png
  • Válasszuk ki a valamilyen értelembe vett főszereplőt; azt, ahol eldől, hogy véget ér-e a játék. Jelen esetben ez a Papagáj. Ott szúrjuk be a következőket:
    • A játék elejére ezt: Kinézet -> Háttér legyen játék.
    • Ahol véget ér a játék, és jelenleg az látható, hogy minden álljon le, ezt: Kinézet -> Háttér legyen vége.
    • Ezt követően tűnjön el a szereplő.
    • Ha egyszer eltűnik, akkor meg is kell jeleníteni: ez az elején az ugorj x … y … után történjen.
    • Ne minden álljon le, csak ez a feladat.
    • Bizonyos esetekben szükség lehet arra is, hogy mielőtt az adott feladat megáll, a szereplő többi feladatát is leállítsuk. Jelen esetben a Papagáj esetén erre nincs szükség.
    • A korábbi játék vége kezelés sorait tüntessük el. Pl. ha úgy valósítottuk meg, hogy az egyik szereplő azt mondta, hogy Vége, akkor ezt a sort töröljük ki.
papag%C3%A1jv%C3%A9ge.png
  • Ha most elindítjuk a programot, azt tapasztaljuk, hogy a játék végén a Vége felirat megjelenik, a papagáj eltűnik, újraindításkor pedig ismét a megfelelő háttér látszódik és a papagáj ismét megjelenik, viszont miután véget ért, az akadály továbbra is mozog. Általában: a játék végét minden szereplőnél megfelelően kell kezelni. Jelenleg ez csak az Akadály szereplőt jeleni, de általános esetben több szereplő is érintett lehet.
    • Nyissuk meg az Akadály szereplő feladatait.
    • Események -> Vége háttér beállításakor a szereplő tűnjön el. Ha csak eltüntetjük, attól még a háttérben továbbra is menne jobbról balra, ezt célszerű leállítani. A szereplő többi feladata is itt álljon le.
    • A egy szereplőt valahol eltüntetünk, akkor azt valahol meg is kell jeleníteni. Ezt induláskor, a zászlóra kattintás alatt tehetjük meg.
akad%C3%A1lyv%C3%A9ge.png

A program aktuális állapota a következő: https://scratch.mit.edu/projects/262884304/.

Egy másik általánosabb játék vége kezelése során külön szereplőt hozunk létre a a Vége (és esetleg egyéb) feliratoknak. Ez esetben az esemény bekövetkeztekor az adott szereplőt kell megjeleníteni (ill. máshol eltüntetni), valamint célszerű Vége üzenetet küldeni a többi szereplőnek (Események: Küldj üzenetet: Vége). A többi szereplőnél a vége háttér beállítása helyett a Vége üzenet érkezésére kell figyelni.

Több élet

A legtöbb játék nem ér véget azonnal, miután a játékos elveszítette az életét, általában több élete van egy játékosnak a játék során. Most a lebegő madár fenti állapotát fejlesztjük tovább úgy, hogy a játékosnak 3 élete legyen.

  • Hozzunk létre egy változót, az az életek számát kezeli. Elvileg elég lenne ahhoz a szereplőhöz kapcsolni, amely a játék végét kezeli, viszont mivel célszerű megjeleníteni, annak érdekében, hogy szépen nézzen ki, a változó neve legyen ez: "Életek száma:", és legyen minden szereplőé. A változó legyen látható, és helyezzük olyan helyre, ahol nem zavaró, pl. ennél a játéknál a jobb felső sarokba.
%C3%A9letek%20sz%C3%A1ma.png
  • A főszereplő főprogramjában, ami jelen esetben a Papagáj, az elején állítsuk be a változó értékét háromra.
  • Ahol a játék véget ér, csökkentsük az életek számát. Vizsgáljuk meg, hogy elérte-e a 0-t. Ha igen, akkor a kód legyen az, ami az eddigi játék vége kezelés. Ha nem, akkor küldjön a program egy új élet üzenetet.
  • Az egész fő ciklust a kezdőhelyre ugrással együtt válasszuk le a főprogramról, és tegyük az új élet üzenet érkezésekor alá.
  • A főprogram utolsó sora legyen ez: küldj üzenetet: új élet.
papag%C3%A1j%20%C3%BAj%20%C3%A9let.png

A többi szereplőnél is végig kell vezetni az új élet logikát. Jelenleg az akadály érintett.

  • A főprogram kódját helyezzük át az új élet üzenet érkezésekor alá.
  • Maradhat egy kezdeti inicializálást végrehajtó fő program rész. Azt a kódot célszerű ide helyezni, ami a játék vége párja. Jelen esetben: a játék végén eltüntetjük a szereplőt, amit a játék elején célszerű megjeleníteni. Valójában megjeleníthetnénk minden új élet üzenet érkezésekor is, és ez esetben megspórolnánk a zöld zászlóra kattintást, viszont mégis célszerű megtartani annak érdekében, hogy logikailag megfelelő helyen legyen.
akad%C3%A1ly%20%C3%BAj%20%C3%A9let.png

A játék aktuális állapota a következő: https://scratch.mit.edu/projects/262888831/. További lehetőség: az életek száma változó eltüntetése a végén (mivel az úgyis 0), és ez esetben az elején meg kell jeleníteni.

Pontszámítás

A játékosok tipikusan szeretnek egymással vagy saját maguk korábbi teljesítményével versengeni, emiatt a legtöbb játéknál kialakult egyfajta pontszámítás. Vezessük be most mi is!

  • Hozzunk létre egy minden szereplőhöz tartozó Pontszám: változót!
  • Tervezzük meg, hogy a játékos hol kaphat pontot! Jelen esetben egy lehetőség: ha a játékosnak sikerült átmennie az akadályon. Nem teljesen precízen, ám legkönnyebben ezt úgy tudjuk megvalósítani, hogy a játékos akkor kap pontot, amikor az akadály elérte a pálya bal szélét. (Precízebb megoldást, ám bonyolultabb kódot eredményezne, ha ketté bontanánk az akadály mozgását, és a pontszámot a kettő között növelnénk. Jelenleg ugyanis elvben előfordulhat a következő: ha olyan akadályt készítünk, hogy a sikeres elkerülését követően még beleütközhetünk a szélébe, akkor a játékos igazságtalanul veszít pontot. Viszont az ilyen precíz megoldás jelentősen elbonyolítja a kódot; gondoljuk csak pl. arra, ha gyorsítani szeretnénk a játékot, így az oktatás szintjén ettől eltekintünk.)
  • Következő kérdés: hol állítsuk be 0-ra a pontszámot. Ezt általában célszerű a főszereplő főprogramjának az elején, viszont mivel most a pontszámítást teljes egészében az Akadály szereplőben tudjuk tartani, oda is tehetjük. (De pl. a játék egy lehetséges tovább fejlesztése: pontot érő jutalomfalatok; ez esetben már több szereplő osztozik a pontszámításon, és ilyenkor a kezdeti érték beállítást a főszereplőnél érdemes megvalósítani.)
  • Ha már elértük a Scratcher szintet (a rendszer pár hónap aktív időszak után automatikusan felkínálja a lehetőséget), akkor el tudjuk menteni a rekordot. Hozzunk létre egy szerveren tárolt Rekord: változót, helyezzük megfelelő helyre a képernyőn, és a játék végén, ha megdöntöttük a rekordot, akkor vegye fel a rekord változó a pontszám értékét.
rekord.png
pontsz%C3%A1m.png

Itt is végrehajthatunk további fejlesztéseket, pl. valamilyen gratuláló üzenetet írhatunk ki abban az esetben, ha a játékos megdöntötte a rekordot. Sőt, trükkös módon akár rekord listát hozhatunk létre, akár a játékos nevét is lementve. (Ez utóbbi nem egyszerű!) Ezektől a finomságoktól most eltekintünk, a játék aktuális változata az alábbi: https://scratch.mit.edu/projects/262894638/.

Időmérés

A Scratch rendszerben van egy beépített időmérő, de az egyrészt folyamatosan halad, nem lehet leállítani, másrészt csak előre számol, harmadrészt programból nem is lehet eltüntetni. Most egy saját időzítőt készítünk amelyet az elején beállítunk egy adott értékre, várunk egy másodpercet, és csökkentjük az értéket. Ehhez célszerűen ki kell választani a megfelelő szereplőt: akár lehet egy már létező, de új is. Mi a Papagáj szereplőhöz tesszük.

Az idő letelte jelenthet győzelmet vagy vereséget. Jelen esetben ez inkább győzelmet jelent. Érdemes különbséget tenni a győzelmet és a vereséget jelentő vége között. Most létrehozunk egy Nyertél feliratú hátteret.

Viszont most már a vége kezelést is célszerű megváltoztatni, ugyanis kétféle véget érhet a játék. Megoldható persze kód kétszerezéssel (ugyanaz fut le mindkét esetben), esetleg parancs létrehozásával, viszont elegánsabb vége üzenetet küldeni.

A Papagáj szereplő kódja az alábbira módosult:
papag%C3%A1j%20id%C5%91.pngAz Akadály kódjában a vége kezelése változott a következőre:
akad%C3%A1ly%20id%C5%91.png

A program aktuális változata az alábbi: https://scratch.mit.edu/projects/262897489/.

További lehetőségek: olyan "jutalomfalatok" elhelyezése, melyeknek felvétele megnöveli a hátralevő időt. Ez amiatt is hasznos lenne, mert az időmérés és a rekord számítás egymásnak lényegében ellentmond egymásnak. Oktatási céllal készült el mégis a Lebegő madár játék időzítős kiegészítése.

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