Igértem, hogy legközelebb is app inventor jön.
Célszerű az alaplépéseken túlesni, erre szerintem megfelelő az előző poszt. Megismerkedtünk már az app inventor felületével, ha minden igaz, már pattog a labdánk szépen. Lehet hogy valaki már azt is megcsinálta (sőt, biztos, még a poszt írása előtt), hogy belül egy mozgó dobozon is pattoghatnak a golyók, vagy változtatják a színüket, ha hosszan nyomjuk meg valamelyik gombot (longclikk esemény). Jó kis játék, de szeretnénk eme egyszerű eszközökkel csinálni valami látványosabbat. Az egyik diák (Sohár Attila) mutatott egy játékot a telefonján, egyből megtetszett, ezt egyszerű megcsinálni, és annó a mikrogépeken számtalan hasonló egyszerű kis játék futott. Sokkal könnyebb feladat, mint a tévéfoci megcsinálása, bár az sem olyan nagy ördöngösség. Azt a projektet azért ignorálom egyébként, mert annál kiütközött ennek az eszköznek egy komoly hiányossága, nem támogatja a multitouch-ot, mert a cél android rendszer túl régi, az még nem tudta ezt. Ezért is idegesít az, hogy bezzeg a telefonhívást belepakolták. Mindegy, ajándék lónak ne nézzük a fogát.Tűzzük ki a célt.
Egy repülővel - én egy barna téglalappal helyettesítem - repülünk egyre lejjebb, és az alattunk levő oszlopokat próbáljuk eltüntetni, hogy nehogy nekik menjünk. Hajjaj, ez bonyolultnak tűnik.Nem az.
Ha még emlékszünk a sprite-okra, akkor tudjuk, hogy figyelni tudják az egymásnak ütközésüket, van sebességük, irányuk, jobban belegondolva csak össze kell dobálni az elemeket, és készen is vagyunk. A legószerű programalkotás nagyon aranyos, de itt már lassan előjön a leírt programkód előnye. Nem is fogom lépésenként "lefotózni" most, én sem szeretek feleslegesen kattintgatni. (A jövő egyébként szerintem valami vegyes megoldás lesz, 3d-ben úszkáló objektumokkal...)
A design rész elkészítésére nem pazarlok helyet, azt megtettem már az előzőekben. Itt már használunk képi elemeket, azt az általunk kedvelt képszerkesztővel - windows alatt paint, én linux alatt pinta-t használtam, de ott van az ingyenesen elérhető, komoly tudású Gimp is mindkét rendszeren - készíthetjük el.
A bombánk alapesetben nem látható, csak a kép miatt tettem azzá. Gyanús, hogy nem a legutolsó változattal dolgozom most, ha kiderül, akkor majd cserélem az exportált fájlt.
Ugyanúgy mint a múltkor, a képernyőnkre dobozokat helyezhetünk el, amelyekbe belül vagy újabb dobozokat rakhatunk, vagy ha az illető dobozobjektumunknak más a "feladata", akkor "befelé" azt tesz, ami akar. Illetve amit az objektum készítője akart. Szövegdobozt még nem raktunk ki, pedig a legeslegelső appnak elvileg csak annyit kellett volna tartalmaznia, hogy egy szövegdobozba feliratot írunk egy gomb lenyomásakor, a hosszú lenyomáskor meg egy másik feliratot, pl azt, hogy hú de erős vagy ;). Szerintem ezt mindenki meg tudja már csinálni, ha nem, akkor majd leírom azt is nulladik lépésként egyszer. A szövegdoboz belsejébe nem más dobozokat, hanem szöveget rakhatunk.
Nekünk egy canvasra van szükségünk most, meg két gombra. Az objektumok elnevezése itt válik fontossá, már elég sokan vannak :D.
A nem látható objektumokat is tekinthetjük dobozoknak :D. Rájuk később térek ki.
Célszerű megnézni az objektumok tulajdonságait (property-k, adattagok), például a gombok lehetnek lekerekítettek is akár (shape/oval), tehetünk hátteret, változtathatunk a színeken, satöbbi.
A repülő
A repülőnk fenn kezd, az iránya 0 - emlékszünk, az a vízszintes irány -, be kell állítanunk a sebességét, innen csak annyi a dolgunk, hogy a szélnek ütközésnél vagy lejjebb megyünk, vagy ha a képernyő alján vagyunk, nyert a játékos. Ha egy másik objektumnak ütköztünk, akkor meghaltunk. Itt az ügyesek csinálhatnak robbanás effektet. (Egy sprite amit láthatóvá teszünk, esetleg egy hangfile lejátszása.)A "bomba"
Ha megnyomjuk a bombagomb-ot, akkor amennyiben nem látható - magyarul nem zuhan éppen -, akkor a repülő alá álltjuk be az x,y koordinátáit, az iránya 270 fok (lefelé), aztán csak sebességet kell beállítanunk neki. Onnan két esemény történhet vele. Vagy a képernyő aljának ütközik, vagy valamelyik oszlopnak. Ha a képernyő aljára ér (edgereached esemény), akkor láthatatlanná tesszük és kész, jöhet az újabb gombnyomás. Ha egy oszlopnak ütközik, akkor az ütközés eseménynél rendelkezésünkre áll a másik objektum neve. Így nem kell minden egyes oszlopra ugyanazt a parancssorozatot beírnunk. (Ez egy aránylag új lehetőség az app inventorban.)Az oszlop magasságát csökkentjük. Ennyivel lejjebb is kell raknunk, mert a koordinátáink felülről lefelé "nőnek". Ha csökkentjük a magasságot, alulról fog hiányozni a megfelelő darab.
Sajna most sem tudom kihagyni a tanulságot :). Bármilyen alkalmazás készítésénél az egyik legfontosabb dolog a tesztelés. Minden eddigi kornak megvolt az aktuális megváltó csodaszere, ilyen volt annak idején a struktúrált programozási módszerek elterjedése, ide tartozik az OOP is természetesen, manapság a TDD (test driven development), vagyis a tesztelés központú fejlesztés az aktuális megmentő. Nem véletlenül alakulnak ezek ki, ne feledjük.
Az előbb rátekintettem a blokk nézetre, és a gyanúm beigazolódott. Nem a végleges változat van itt nálam, és nem is emlékszem hogy melyik diáknál van a legjobb, letesztelt példány. No de sebaj. Így marad, legalább kapok visszajelzést hogy hol van bug :). (Ha nem, akkor majd tesztelek, javítok magam, de jobban örülnék a visszajelzésnek.)
Térjünk át a blokkokhoz.
Az imént említettem a tesztelést. Sajna hiába pakoltuk a képernyőnk aljára az oszlopainkat, bizonyos telefonokon a levegőben lógtak. Úgyhogy meg kellett oldanunk ezt a problémát. A képernyőnkhöz is tartoznak események. Amire nekünk szükségünk van most, az az inicializálás.A bombánk láthatóságát megszüntetjük, beállítjuk az oszlopok magasságát, és a canvas magasságát figyelembe véve mindet elhelyezzük alulra. A repülőnket a bal felső sarokba, az irányát jobbra, és kész is vagyunk. Ha valaki ügyes, megoldhatja, hogy minden ütközésnél megforduljon. (Hint: a bounce metódus pont ezt csinálja, csak az y koordinátát szintén lejjebb kell tenni.)
A startgomb lenyomásával indul a játék
Azért hogy elférjen a képen, kivettem a blokk aljáról elemeket, és mellétettem balra, természetesen vissza is helyeztem utána a helyére.Ugyanazt megtesszük, amit az initnél is - igen, lehetne rá eljárást is írni és meghívni, így nem lenne duplikálás, javításnál nem kell két helyre figyelni, ha ez valakinek eszébe jutott, gratula ;) -, Mindegyik torony láthatóságát beállítjuk, ne feledjük el, hogy lehet hogy mindegyiket eltüntettük már...
A végén "sebességbe" tesszük a repülőnket, és indulhatunk is. Itt még illene a bombagombot is engedélyezni, illetve az indítás előtt letiltani, de mint említettem, szeretjük a hibákat. Most még. Hogy majd ne kövessük el őket élesben :D. No meg a start lenyomása előtt bombázhatunk így :D. Hiába persze, mert a torony visszaemelkedik aljas módon ;).
Három apró részlet.
Itt még az előbb az repülő.edgereached-nél nem volt ott az if. Azt hittem, hogy lementettem azt a képernyőképet, de úgy fest az kimaradt. Itt az volt a hiba, hogy alulra érve nem történt semmi. Az else ágban most csak annyi található, hogy megáll a repülőnk. Itt lehet új képernyőt nyitni, pontszámot növelni, ízlés szerint.Itt lehetne megtenni azt amit fent említettem. Ha az x koordináta 5-re állítása helyett a repülő bounce metódusát hívnánk meg az edge-t paraméterként megadva, akkor visszafordulna..Érdemes kipróbálni. Akár be is lehet kérni, hogy így, vagy úgy viselkedjen. Nem bonyolult :D.
Ha a repülönk nekimegy valaminek, akkor most nemes egyszerűséggel bezárjuk az applikációnkat.
Ha lenyomjuk a bomba gombot, akkor amennyiben nem látható, illetve nincs engedélyezve - tehát nem zuhan épp -, akkor berakjuk a repülő alá, beállítjuk az irányát - mit is jelent egy imagesprite-nál a rotate tulajdonság :D? -, sebességét, engedélyezzük, láthatóvá tesszük, és már mehet is :D.
Ha a bombánk leér (edgereached esemény), akkor megszüntetjük a láthatóságát, és nem engedélyezzük.
Mindjárt készen is vagyunk :).
Nem tudjuk, hogy melyik toronynak ütköztünk, de nem is érdekes, megkapjuk paraméterként, és kihasználva az új lehetőséget
hogy megjelent az anycomponent elem a programban, mivel bármelyik oszloppal ugyanazt kell tennünk, megtesszük azt.
A legalsó néhány elemet most is elmozgattam a helyéről, hogy elférjen a képen.
Először elimináljuk a bombát.
Ha az adott oszlop magassága nagyobb mint 20, akkor csökkentjük a magasságát, majd ugyanennyivel lejjebb toljuk.
Ha kisebb mint 20, akkor a hosszát nullára állítjuk, a láthatóságát megszüntetjük, ugyanúgy ez engedélyezettségét is. (Különben ütközne vele a repülőnk, hiába nem látszik.)
Kész is vagyunk :D.
Az importálható program itt található.
Ha nem működik, sikítsatok :D.
Nincsenek megjegyzések:
Megjegyzés küldése