Rajzlisták használata az Imagine-ben (II. rész)

Továbbfejlesztjük az előző részben elkezdett alkalmazásunkat, most már animált rajzlistákat is használunk.

 

Vadnyugati játék

Cikkünk első részében önálló feladatként adtuk fel a céltábla megrajzolását. Most nézzük meg, hogy mi volt (egy lehetséges) megoldás.

Amint látjuk a rajz igazából 6 darab koncentrikus körből áll, amely váltakozó színekkel (fekete, piros) van kitöltve. A legnagyobb kör átmérője 60 képpont. Ilyen köröket a korábban már használt töltöttkör (filledcircle) eljárással tudunk rajzolni, a kitöltés színét pedig a töltőszín! (setfillcolour, stfc) paranccsal állíthatjuk be.

A céltábla közepén egy célkereszt is látható. Ezt például megrajzolhatjuk úgy, hogy megkérjük a teknőcöt, hogy lépjen előre 30 lépést, majd lépjen hátra ugyanennyit (megrajzolva a célkereszt egyik negyedét), majd forduljon jobbra 90 fokkal és ezeket a lépéseket még háromszor ismételje meg. Vagyis összesen négyszer kell megismételni a következő parancsokat, úgy hogy a teknőc tolla leengedett állapotban legyen:  (tollvastagság! (setpenwidth, setpw))

A célkereszt megrajzolása előtt állítsuk be a toll vastagságát 2-re!

Vagyis a rajzlista létrehozásához szükséges parancsok:

töltőszín! fekete töltöttkör 60 (setfc "black filledcircle 60)
töltőszín! piros töltöttkör 50 (setfc "red filledcircle 50)
töltőszín! fekete töltöttkör 40 (setfc "black filledcircle 40)
töltőszín! piros töltöttkör 30 (setfc "red filledcircle 30)
töltőszín! fekete töltöttkör 20 (setfc "black filledcircle 20)
töltőszín! piros töltöttkör 10 (setfc "red filledcircle 10)
tollvastagság! 2 ismétlés 4 [előre 30 hátra 30 jobbra 90] (setpenwidth 2 repeat 4 [forward 30 back 30 right 90 ])

(Megjegyzés: a színkonstansok (fekete, piros, stb.) megadásánál a rajzlistában nem kell " jelet írni a színnév elé. Ha viszont ugyanezt az ábrát a teknőccel akarjuk megrajzoltatni, szerepeltetnünk kell az " jelet (töltőszín! "fekete, töltőszín! "piros, stb.)

Ha létrehozunk egy céltábla nevű teknőcöt, akkor a fentiek alapján a következő paranccsal adhatjuk meg az alakját:

céltábla'alak! [töltőszín! fekete töltöttkör 60 töltőszín! piros töltöttkör 50 töltőszín! fekete töltöttkör 40 töltőszín! piros töltöttkör 30 töltőszín! fekete töltöttkör 20 töltőszín! piros töltöttkör 10 tollvastagság! 2 ismétlés 4 [előre 30 hátra 30 jobbra 90 ]]

céltábla'setshape [setfc black filledcircle 60 setfc red filledcircle 50 setfc black filledcircle 40 setfc red filledcircle 30 setfc black filledcircle 20 setfc red filledcircle 10 setpenwidth 2 repeat 4 [forward 30 back 30 right 90 ]]

Animált rajzlisták

A teknőc alakja akkor is lehet animált, ha rajzlistákkal dolgozunk. Ekkor a rajzlistán belül az egyes animációs fázisokat önálló listában kell megadnunk.

teknőcneve'alak! [[1. fázis][2. fázis] [3. fázis][stb...]]
teknőcneve'setshape [[1. fázis][2. fázis] [3. fázis][stb...]]

Készítsünk egy egyszerű animációt, amelyben a Seriff szó fokozatosan, betűről betűre jelenik meg. A rajzlistában úgy írhatunk ki szöveget, ha a címke (label) parancsot használjuk. Ha a szöveg több szóból áll, akkor a címke |ide jön a szöveg| formát kell használnunk, vagyis a szöveget | és | jelek közé kell tennünk.

Először hozzunk létre egy teknőcöt teki néven! Ezután adjuk meg az alakját rajzlista segítségével. Az alakja kezdetben legyen az S betű. A rajzolószínt a tollszín! (setpencolour, setpc) paranccsal tudjuk beállítani. Tehát a megfelelő parancs:

teki'alak! [tollszín! piros címke S]
teki'setshape [setpencolour red label S]

Ekkor a teknőc alakjaként a piros S betű jelenik meg.

Hogyan lesz ebből animáció? Módosítsuk a rajzlistánkat! Állítsuk be, hogy a teknőc alakjaként az S, Se, Ser, Seri, Serif, Seriff szövegek - váltakozó színnel (piros és kék) -, mint animációs fázisok jelenjenek meg.

A megfelelő parancs:

teki'alak! [[tollszín! piros címke S][tollszín! kék címke Se][tollszín! piros címke Ser][tollszín! kék címke Seri][tollszín! piros címke Serif][tollszín! kék címke Seriff]]

teki'setshape [[setpc red label S][setpc blue label Se][setpc red label Ser][setpc blue label Seri][setpc red label Serif][setpc blue label Seriff]]

Eredményül a következőt kapjuk:

Az animáció elkészítését a teknőc beállítási párbeszédablak segítségével  és eredményét videóállomány segítségével is megtekintheted. Az egyes parancsok többszörözésénél a vágólap adta lehetőségeket is kihasználtuk, hogy kevesebbet kelljen gépelnünk:

Ezt az animációt később felhasználhatjuk az alkalmazásunkban.

De térjünk vissza a céltáblánkhoz. Lehetne abból is animációt csinálni?

Természetesen. Módosíthatjuk például úgy, hogy a közepén lévő célkereszt változtassa meg a színét, mondjuk legyen sárga. Ezt viszonylag egyszerűen megcsinálhatjuk.

A korábban meghatározott rajzlista lesz az animáció 1. fázisa. E mögé mégegyszer el kell helyeznünk ugyanazt a rajzlistát, annyi különbséggel, hogy a 2. fázisban a célkereszt kirajzolása előtt átállítjuk a rajzolószínt sárgára (tollszín! sárga, setpc yellow).

Vagyis a módosított parancsunk:

céltábla'alak! [[töltőszín! fekete töltöttkör 60 töltőszín! piros töltöttkör 50 töltőszín! fekete töltöttkör 40 töltőszín! piros töltöttkör 30 töltőszín! fekete töltöttkör 20 töltőszín! piros töltöttkör 10 tollvastagság! 2 ismétlés 4 [előre 30 hátra 30 jobbra 90 ]][töltőszín! fekete töltöttkör 60 töltőszín! piros töltöttkör 50 töltőszín! fekete töltöttkör 40 töltőszín! piros töltöttkör 30 töltőszín! fekete töltöttkör 20 töltőszín! piros töltöttkör 10 tollvastagság! 2 tollszín! sárga ismétlés 4 [előre 30 hátra 30 jobbra 90 ]]]

céltábla'setshape [[setfc black filledcircle 60 setfc red filledcircle 50 setfc black filledcircle 40 setfc red filledcircle 30 setfc black filledcircle 20 setfc red filledcircle 10 setpw 2 repeat 4 [forward 30 back 30 right 90]][setfc black filledcircle 60 setfc red filledcircle 50 setfc black filledcircle 40 setfc red filledcircle 30 setfc black filledcircle 20 setfc red filledcircle 10 setpw 2 setpc yellow repeat 4 [forward 30 back 30 right 90 ]]]

(pirossal jelöltük az eredeti rajzlistát, lilával pedig a 2. fázisban elvégzett módosítást)

Hogy lesz ebből játék?

Fejlesszük tovább a seriff projektünket úgy, hogy a céltábla véletlenszerűen jelenjen meg, majd rövid időn belül tűnjön el. Amíg a céltábla látható, rá tudunk kattintani (lőni). A találati eredményt két szövegdobozban jelenítjük meg. Az egyikben a találatokat (találat névvel) tartjuk nyilván, a másikban (alkalom névvel) pedig azt, hogy a céltábla hány alkalommal jelent meg a képernyőn. 

A szükséges lépések:

1. Az előző részben elkészített seriff alkalmazást olvassuk be, majd hozzunk létre egy teknőcöt céltábla néven, és a korábban ismertetett paranccsal állítsuk be az alakját! Szintén állítsuk be, hogy a céltábla teknőcnek a tolla legyen felemelt állapotban, különben az áthelyezésnél vonalat húzna maga után. A szükséges parancs:

céltábla'tollatfel
céltábla'penup

2. Az új szövegdoboz ikon segítségével hozzunk létre két szövegdobozt. Nevezzük át ezeket találatra, illetve alkalomra. Mozgassuk ezeket a képernyő jobb alsó sarkába.

3. Hozzuk létre a teki nevű teknőcöt, és adjuk az alakjának a korábban bemutatott rajzlistát, amely a Seriff szót animálja. Mozgassuk ezt a szövegdobozok fölé.

4. Ezek után meg kell írnunk azt az eljárást, amely véletlenszerűen kiválasztott helyen elhelyezi a céltáblát, majd mondjuk 2 másodperc múlva eltünteti azt, és nyilvántartja a találati arányokat is.

 Az eljárás neve legyen: céltábla_kirak

A tartalma:

 

1.
2.
3.
4.
5.
6.
7.
eljárás céltábla_kirak
céltábla'poz! (lista tetsz tetsz)
céltábla'látható! "igaz
alkalom'érték! alkalom'érték + 1
miután 2000 [céltábla'látható! "hamis  céltábla_kirak]
vége
to céltábla_kirak
céltábla'setpos (list any any)
céltábla'setshown "true
alkalom'setvalue alkalom'value + 1
after 2000 [céltábla'setshown "false  céltábla_kirak]
end

Magyarázat:

2. sor: véletlenhelyre helyezi a céltáblát
3. sor: láthatóvá teszi a céltáblát
4. sor: megnöveli 1-el az alkalom szövegdobozban található értéket
5. - 6. sor: 2 másodperc múlva eltünteti a céltáblát, és és újra meghívja a céltábla_kirak eljárást

5. Adjuk meg az indító (startup) eljárást is, amelynek tartalma automatikusan végrehajtódik a projekt betöltésekor

1.
2.
3.
4.
5.
6.
7.
8.
9.
eljárás indító
örökké [kéregyenként [szem1 szem2]
[irány! irányszög egérpoz]]
céltábla'látható! "hamis
céltábla'fölülre
találat'érték! 0
alkalom'érték! 0
miután 3000 [céltábla_kirak]
vége
to startup
forever [askeach [szem1 szem2]
[setheading towards mousepos]]
céltábla'setshown "false
céltábla'tofront
találat'setvalue 0
alkalom'setvalue 0
after 3000 [céltábla_kirak]
end

Magyarázat:

2. - 3. sor: a szemek mozgatását végzi
4. sor: kezdetben eltünteti a céltáblát
5. sor: a céltábla teknőcöt felülre helyezi, így nem lesz gond, ha például a szövegdobozra kerül, mert rá tudunk kattintani
6. sor: a találat szövegdoboz tartalmát 0-ra állítja
7. sor: az  alkalom szövegdoboz tartalmát 0-ra állítja
8. sor: 3 másodperc eltelte után meghívja a céltábla_kirak eljárást

6. Állítsuk be, hogy ha a lapra kattintunk halljunk egy puskalövést. Ehhez a lapon állva nyomjuk meg a jobb egérgombot, és válasszuk ki a ... változtatása menüpontot.  A megjelenő ablak Haklikk mezőjébe írjuk be a következőt:

hangsor [S0 I127 T120 L4 O3 F] 
play [S0 I127 T120 L4 O3 F]

(Magyarázat: Korábbi cikkünkben már volt szó arról, hogy az Imagineben lehetőségünk van arra, hogy mi magunk hozzunk létre hangsorokat. (lásd a jobb oldali képet.) A hangsor megadásánál a legkülönfélébb hangszerek kiválasztására van lehetőségünk, amelyben akár egy puskalövést is beállíthatunk hangszerként (A hangszer sorszáma és neve: 127 lövés). Az így létrejött hangnak megfelelő listát leolvashatjuk a Hangsor ablakban, amelyet a Hangsor (play) parancs paraméterének is átadhatunk.)

7. Állítsuk be, hogy ha a céltáblára rákattintunk, akkor a lövés hangja után halljunk egy másik hanghatást is (amely jelzi a találatot), és növeljük meg a találatok számát.

Vagyis a céltábla teknőc haklikk eseményeként adjuk meg a következő parancsokat:

találat'érték! találat'érték + 1 hangsor [S0 I127 T120 L4 O3 F] hangsor [S0 I114 T120 L4 O2 A]
(találat'setvalue találat'value + 1 play [S0 I127 T120 L4 O3 F] play [S0 I114 T120 L4 O2 A])

8. Mentsük el az alkalmazást vadnyugat néven. Ha a fenti lépéseket hibátlanul elvégeztük, akkor a projekt újbóli megnyitásakor már játszhatunk is az alkalmazásunkkal.

Jó szórakozást!

Abonyi-Tóth Andor

Módszertani ajánló

 

tantárgy informatika
témakör Imagine rajzlisták használata
évfolyam/korosztály 6. - 12. évfolyam
módszer A tanár a tananyagot követve mutatja be az egyes funkciókat, vagy önálló feldolgozásra adja ki az anyagot.
idő korcsoport és előismeret függő
célok A tanulók ismerkedjenek meg egy multimédiás szerzői környezettel, amelynek scriptnyelve egyszerű, a hazai oktatásban hagyományokkal rendelkező nyelv, képesek legyen egyszerű rajzlisták készítésére
tanulási helyzet A tanulók a tanár útmutatása szerint  ismerkednek meg a rajzlisták fogalmával, majd egy feladatokat kapnak, amelyet meg kell valósítaniuk.
szükséges számítógépterem, kivetítő
szerző Abonyi-Tóth Andor