. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .




 
 
SEGÉDLETEK Flash játékok

Kígyójáték megoldása minimális ActionScript kóddal
  feltöltve: 2004.10.25 | szerző: ismeretlen | olvasva: 6759 alkalommal

           
 
2003-ban került sor egy kisebb AS programozói versenyere, ahol a feladat a megszokottól egy kicsit eltérő irányítású kígyójáték megoldása volt, minél rövidebb AS kóddal. Összesen 6 munka érkezett, melyek forrását és az alkotók megjegyzéseit ismét elérhetővé tettük.

A feladat leírása

A játék alapjában véve a közszeretett kígyó játék, annyi különbséggel, hogy ez a kígyó nem szögletesen 90 fokot fordul egyszerre, hanem szabadon kormányozható. A fordulási ív sugarát egy options mezőben lehet meghatározni. A játék egy 400x400-as arénában fut. A kígyót 10x10-es darabokból kell készíteni, és ekkora lépésközönként halad előre. A feje és a farka legyen megkülönböztethető és ügyelni kell arra, hogy mindig a jó irányba mutassanak. A billentyűket a felhasználó is definiálhatja. A kígyó 5x5-ös, véletlenszerűen felbukkanó prédákra vadászik. A vadászat sikeres, ha a kígyó a prédát érinti. Amikor a kígyó bekajál egy-egy áldozatot, legyen látható rajta a jóllakottság öröme valamilyen egyszeru animáció formájában. Közben a jó, egészséges tápláléktól növekedjen egy 10x10-es egységnyit. A játéknak akkor van vége, ha a kígyó beleütközik a játékterületet behatároló falba, vagy saját testének marcangolásába fog.

Megoldás by Shr

.as összméret: 465 byte (az egyetlen sortörést tartalmazó file unix stílusú,
egy byte-os újsorral, így jobban olvasható, de ugyanakkora, mintha
pontosvesszőket alkalmaztunk volna), egy .as azonban több helyen is szerepelhet

A(z utólag) triviális, általánosabb, egyszerű optimalizálási lépéseken túlmutató ötletek:

• az f.as mindenhová bekerült, ahol stop()-ra volt szükség... ez Náncsi ötlete, s korábban tudtam meg, mielőtt nekiestem volna a sajátomnak... hasonló az assembly optimnál a program végi ret elhagyásához, ha van utána egy szubrutin =) az én esetemben az onenterframe definíciója, amit a stop()-on kívül tartalmas az f.as, nem árt sehol.
• némi ciklusszervezés... a kígyó mozgatásánál felhasználjuk, hogy az előző körben már az u változóba került az aktuális utáni farokrész. a ciklusba lépéskor u szám, semmi gondot nem okoz az _x, _y értékének állítása.
• a beállításoknál a gombokon ugyanaz a script: on(press){_root.gotoandstop(_x)} a szükséges értékek: 2,3,4. minden gombot egy ilyen _x értékkel rendelkező movie clipbe pakoltam bele.
• az étel randomicitása picit meg van nyirbálva: az új _y az előző _x értékét veszi fel.
• az ételt nyilván nem célszerű nagyon közel helyezni a falhoz, kellemes, ha egy ésszerű közelséget nem lép át. továbbá nekem vastag fal kellett... az étel movie clip középpontja ezért jóval balra és fent van a tényleges tartalomtól.
• amikor létrehozunk egy kígyódarabot, teljesen felesleges elhelyezni a farok végére. a következő lépésben úgyis odakerül a helyére.
• a fal 4 darabból áll, neveik s98, s97, s96, s95, mintha kígyótest-darabok lennének. így nem kell külön vizsgálni, hogy falnak ütköztünk-e, csak az s4,s5,...s98 elemekre kell hitTest-et végezni egyetlen ciklusban. a fal névleg kígyótest-darabok közé besorolását az egységes hitTest alapján az én ötletem volt, sajna a hitTest bounding boxot használ... a darabolás Náncsi fejéből pattant ki, így ez a lépés közös munka, de ha már ilyen trükkösen sikerült megoldanunk, nem hagytam ki a proggymból.

apró hibák, melyek a játszhatóságot nem különösebben befolyásolják, de a maximalista énem leíratja velem:

• ha sokat forgunk az egyik irányba, akkor a fej és a test nem pontosan irányba mutat. ugyanis 180/pi értékét pontatlanul tartalmazza a script (57), s nagyon sok radiánnyi forgásplusznál valamely irányba sajna felszorzódik a hiba. ez a mozgásirányt nem befolyásolja, csak a kígyóelemek elforgatását.
• nyilván nem tökéletes a hitTest, a Flash bounding box technikája miatt, aminek az elforgatott movie clip bounding boxa adja a kegyelemdöfést...

 
           
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .