Scratch - Szuper macska
A Super Mario mintájára elkészítjük a Szuper Macska prototípusát! Programozás technikailag az újdonság ebben a láthatatlan szereplővel való érintésvizsgálat.
szupermacska.png

Először készítsük el a pályát!

  • Vektoros módban, a már ismert kitöltött téglalap eszköz segítségével rajzoljunk egy vázlatot:
p%C3%A1lya.png
  • Vigyük középre a pályát (a szereplő feladataiban Mozgás → Ugorj x … y …, írjunk 0, 0-t, és kattintsunk rá duplán).

Most kezdjük el elkészíteni a főszereplő kódját!

  • Az alapértelmezett macska szereplő megteszi. Nevezzük át (pl. Macska), a forgatási stílus legyen bal-jobb, és kicsinyítsük le.
  • Először készítsük el a balra-jobbra mozgás kódját! Balra mozgás esetén nézzen balra, jobbra mozgás esetén jobbra.
macska1.png
  • A következő lépés zsákutca lesz, de fontos, hogy belemenjünk, és később kijavítjuk. Az ugrást a következőképpen valósítjuk meg: létrehozunk egy esés nevű változót, aminek az alapértelmezett értéke 0. Ha a macska nem érinti a zöldet, akkor minden lépésben csökken az értéke. Ha a macska érinti a zöldet, akkor ha a játékos nem nyomja meg a szóközt, 0 marad az értéke, egyébként pedig egy nagyobb értéket kap (a pontos értéket ki kell tapasztalni; pl. a 16 jó értéknek bizonyult), végül az esés értékének megfelelőt csökkent az y koordináta.
macska2.png

A program úgy-ahogy működik, viszont az a probléma vele, hogy nemcsak akkor áll meg, ha a lábával érinti a talajt, hanem akárhogy érint zöldet. Valahogy azt kellene leprogramozni, hogy csak akkor álljon meg, ha a lába érinti a zöldet, egyébként ugorjon tovább. A megoldáshoz egy trükkhöz folyamodunk: rajzolunk egy kis téglalapot, amit a macska lábára helyezünk, az folyamatosan követi a macskát, és azt vizsgáljuk, hogy ez a téglalap érinti-e a talajt. Igen ám, de ha eltüntetjük, akkor az ütközésvizsgálat mindig hamisat ad vissza! A megoldás a következő: ha egy szereplő szellem hatását 100-ra tesszük, akkor nem fogjuk látni (teljesen átlátszó), viszont az továbbra is ott van, és az ütközésvizsgálat megfelelő értéket fog mutatni!

  • Rajzoljunk tehát egy új szereplőt vektoros módban, nevezzük el Lábnak, és ez legyen egy vízszintes téglalap a közepétől valamennyire lejjebb.
alja.png
  • Ahhoz, hogy precízen be tudjuk fejezni, menjünk a Feladatok alatt a Mozgás utasításokhoz, az ugorj … helyére utasításnál válasszuk ki a macskát, majd kattintsunk rá duplán. Menjünk vissza a jelmezekhez, és módosítsuk addig (mozgassuk, méretezzük), amíg a képernyőt megfelelő nem lesz. Végeredményben középen legyen, mivel ha a macska nézhet jobbra és balra is, szimmetrikusnak kell lennie.
ugorj.png
macska%2Balja.png
  • Első lépésben készítsük el az alábbi kis programot, amely folyamatosan a macska helyére ugrik, és próbáljuk ki, hogy tényleg ezt hajtja végre.
aljaprogram1.png
  • Most, hogy meggyőződtünk, hogy úgy működik, ahogy szeretnénk, a szellem hatást állítsuk be 100-ra, valamint az esés logikáját (kivéve az y koordináta megváltoztatását) hozzuk át a macskáról a lábra. (Kódrészletet fogd és vidd módszerre „rá lehet dobni” másik szereplőkre, ami átmásolja; az eredetit utána töröljük ki.) Lent látható a láb szereplő kódja, az alatt pedig a lecsökkentett macska kódja:
aljaprogram2.png
macska3.png

Most következik a falnak ütközés megvalósítása. Ha úgy valósítanánk meg, hogy ha érinti a megfelelő színt, akkor ne mozdulhasson, akkor „beragadna”. Egy fokkal jobb megoldás érintés esetén azonnal visszaléptetni, de az sem tökéletes, mert megfordulás esetén pár képpont még így is „belelóghat” a falba. Ezt is a lábhoz hasonlóan valósítjuk meg.

  • Hozzunk létre először egy jobb szereplőt, ami egy függőleges téglalap lesz, a középtől jobbra. A fenti módon igazítsuk a macskához. Hasonlóan hozzuk létre a bal szereplőt. Mindkét szereplőnek az alapértelmezett programja legyen a mindig ugorj a macska helyére, mint a láb esetén. A macska most kb. így néz ki:
macskak%C3%B6rbe.png
  • Hozzunk létre két, minden szereplőhöz kapcsolt változót: balra mehet és jobbra mehet. A jobb szereplőnél állítjuk azt, hogy jobbra mehet-e: ha érinti a fal színét, akkor nem, egyébként igen. Hasonlóan a bal állítja a balra mehet változót. Végül a macska csak akkor mehet jobbra, ha a jobb gomb le van nyomva, és a macska jobbra mehet, és balra szintúgy. Összefoglalva, sorrendben a jobb, a bal és a macska kódja:
balramehet.png
jobbramehet.png
macska4.png

Most megvalósítjuk azt, hogy a piros csapda érintésével meghal a szereplő.

  • Az egyszerűség érdekében minden leáll; egy teljesebb magvalósításban megfelelő üzenetet írna ki, esetleg több élete is lenne a szereplőnek. A macska kódja tehát a következőre változott:
macska5.png

Utolsó lépésként megvalósítjuk a több pályát.

  • A pálya szereplő jelenlegi egyetlen jelmezét nevezzük el pálya1-nek, majd duplázzuk (ennek automatikusan pálya2 lesz a neve) és tükrözzük a függőleges tengely mentén:
t%C3%B6bbp%C3%A1lya.png
  • A macska kódjába tegyük bele azt, hogy ha az x hely nagyobb mint 230, akkor küldjön új pálya üzenetet. A kódját módosítsuk úgy, hogy zászlóra kattintáskor a megfelelő helyre ugrás és megfelelő irányba nézés után küldjön egy új pálya üzenetet, és a kód többi része kerüljön az új pálya üzenet érkezésekor alá.
macska6.png
  • A pálya szereplő ha új pálya üzenetet kap, akkor felveszi a következő jelmezt.
%C3%BAjp%C3%A1lya.png

A végeredmény itt található: https://scratch.mit.edu/projects/238724770/. Ez a játék is számos ponton módosítható:

  • Az ugrás után a macska nem mindig ér pontosan földet; ezt érdemes javítani.
  • A képernyőn megjelenhetnek jutalompontok, melyeket ha a macska „megeszi”, pontot kap.
  • A játék vége „szebb” kezelése.
  • Több élet.
  • Több, nehezedő pálya.
  • Részletesebben kidolgozott pályák.
  • Mozgó ellenség (mint a Super Marioban).

Egy teljesebb megvalósítás (kicsit más alapokon): https://scratch.mit.edu/projects/189186753/.

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