Prototípus Beadás A prototípus fordítása és futtatása Fordítás 1. Töltsük le és tömörítsük ki a megfelelő file-t. 2. Lépjünk be a kapott lizzard/src könyvtárba. 3. Adjuk ki a javac lizzard/*.java lizzard/bfs/*.java lizzard/proto/ *.java parancsot. A tesztprogramok fordítása teljesen hasonló, itt az adott tesztprogram (pl outputfilter/src) könyvtárba kell belépni, és ott a megfelelő javac parancsot kiadni (pl javac outputfilter/*.java).
A mellékelt állomány tartalma lizzard/dist/javadoc A lizzard projekt javadoc dokumentációja. lizzard/src/lizzard: A lizzard projekt forrás fájljai. Az egyes fájlok az adott nevű osztályt valósítják meg. összesen 122880 bájt 2009 2009-04-16 10:57 Amoeba.java 4096 2009-04-02 12:10 bfs 7066 2009-04-16 10:57 Cell.java 1131 2009-04-16 10:57 Character.java 1052 2009-04-16 10:57 Diamond.java 1678 2009-04-16 10:57 Dynamite.java 1354 2009-04-02 12:10 Entry.java 2672 2009-04-16 10:57 Exit.java 4716 2009-04-16 10:57 FallingObject.java 2292 2009-04-16 10:57 Game.java 8585 2009-04-16 10:57 GameObject.java 3259 2009-04-16 10:57 Ground.java 701 2009-04-16 10:57 Lizzard.java 15871 2009-04-16 10:57 Map.java 4920 2009-04-16 10:57 Monster.java 924 2009-04-16 10:57 Mutant.java 6375 2009-04-16 10:57 Player.java 4096 2009-04-16 10:57 proto 942 2009-04-15 20:45 Rock.java 4096 2009-04-02 12:10 skeleton 411 2009-04-14 23:44 Zombie.java lizzard/src/lizzard/bfs: Az útvonalkereséshez tartozó forrásfájlok. Az egyes fájlok a bfs névtérben az adott nevű osztályt valósítják meg. összesen 16384 bájt 3626 2009-04-14 23:56 BfsSearch.java 381 2009-03-04 10:41 Function.java
Lizzard Entertainment (90), április 16.
1. oldal
726 621
2009-03-04 10:41 MonsterCanEnter.java 2009-03-04 10:41 PlayerFound.java
lizzard/src/lizzard/proto: A prototípushoz tartozó forrásfájlok. Az egyes fájlok a proto névtérben az adott nevű osztályt valósítják meg. összesen 61440 bájt 1501 2009-04-16 10:57 ActivateDynamites.java 1752 2009-04-16 10:57 Block.java 2448 2009-04-16 10:57 CommentFilter.java 1784 2009-04-16 10:57 Display.java 817 2009-04-14 22:26 Exit.java 2259 2009-04-14 22:26 Instruction.java 1241 2009-04-15 11:19 Main.java 1495 2009-04-16 10:57 Move.java 300 2009-04-14 22:26 Noop.java 1436 2009-04-16 10:57 PlaceDynamite.java 728 2009-04-14 22:26 PlayerInstruction.java 1478 2009-04-16 10:57 RandomDir.java 1536 2009-04-16 10:57 Repeat.java 841 2009-04-14 22:26 Restart.java 1285 2009-04-16 10:57 Wait.java lizzard/testfiles: A tesztesetek fájljai. A .map fájlok a pályák, a .input fájlok a vezérlő utasításokat tartalmazzák, míg a .output fájlok a nálunk tapasztalt, specifikáltnak megfelelő kimenetek. összesen 364544 bájt 48 2009-04-16 10:57 collision-2monster.input 16 2009-04-16 10:57 collision-2monster.map 43919 2009-04-16 11:27 collision-2monster.output 78 2009-04-16 10:57 collision-2player.input 16 2009-04-16 10:57 collision-2player.map 2915 2009-04-16 11:27 collision-2player.output 57 2009-04-16 10:57 collision-monster-player.input 16 2009-04-16 10:57 collision-monster-player.map 3019 2009-04-16 11:27 collision-monster-player.output 97 2009-04-16 10:57 collision-player-diamond.input 19 2009-04-16 10:57 collision-player-diamond.map 4850 2009-04-16 11:27 collision-player-diamond.output 105 2009-04-15 20:45 collision-push-rock.input 31 2009-04-15 20:45 collision-push-rock.map 7124 2009-04-16 11:27 collision-push-rock.output 118 2009-04-16 10:57 collision-rock-monster.input 55 2009-04-16 10:57 collision-rock-monster.map 17032 2009-04-16 11:27 collision-rock-monster.output 141 2009-04-15 20:45 collision-rock-player.input 31 2009-04-15 20:45 collision-rock-player.map 8812 2009-04-16 11:27 collision-rock-player.output 61 2009-04-16 10:57 move-fallingobject.input 35 2009-04-15 12:01 move-fallingobject.map 4401 2009-04-16 11:27 move-fallingobject.output 299 2009-04-15 12:01 move-monster.input 84 2009-04-15 12:01 move-monster.map 120704 2009-04-16 11:27 move-monster.output 67 2009-04-16 10:57 move-player.input 23 2009-04-16 10:57 move-player.map 3027 2009-04-16 11:27 move-player.output 169 2009-04-16 10:57 other-explosion.input 37 2009-04-16 10:57 other-explosion.map
Lizzard Entertainment (90), április 16.
2. oldal
9297 80 119 11990
2009-04-16 2009-04-15 2009-04-15 2009-04-16
11:27 12:01 12:01 11:27
other-explosion.output other-follow.input other-follow.map other-follow.output
display/src/display: A display segédprogram forrása. összesen 4096 bájt 1186 2009-04-14 22:48 Main.java jdiff/src/jdiff: A jdiff segédprogram forrása összesen 4096 bájt 1616 2009-04-14 23:49 Main.java output-filter/src/outputfilter: Az outputfilter segédprogram forrása. összesen 4096 bájt 1245 2009-04-16 11:35 Main.java
Futtatás Események Az események rendszere a korábban dokumentáltakhoz képest valamelyest megválzotott, ezen kívül sok új esemény is megjelent, így ezek dokumentációját itt is közöljük. Minden eseménynek van két paramétere, ezek a "function" amely megadja a függvény pontos nevét, ami generála, illetve a "thread" amely a szál azonosító számát írja ki. Bemeneti események Ezek mindig egy bemenetről beolvasott utasítás végrehajtását (nem a betöltését) jelzik. Ez az exec_from_controller_thread() függvényből történik, így a játékosnak adott utasítások is a vezérlő szálban generálnak eseményt. InstExecActivateDynamites
"place_dynamite" utasítás végrehajtása. Kiírja azt, hogy mely játékosra vonatkozik.
InstExecBlock
Egy utasítás blokk kezdete.
InstExecDisplay
"display" utasítás végrehajtása. Tartalmazza a pálya képét is, a pályafile formátumhoz hasonlóan.
InstExecMove
"move" utasítás végrehajtása. Kiírja, hogy mely játékos merre lép.
InstExecPlaceDynamite
"place_dynamite" utasítás végrehajtása.
InstExecRandomDir
"random_dir" utasítás végrehajtása. Kiírja, hogy mi volt a korábbi "véletlenszerű" irány, és mi lett az új.
InstExecRepeat
"repeat" utasítás végrehajtása. Kiírja, hogy hányszor ismétlődik.
Lizzard Entertainment (90), április 16.
3. oldal
InstExecWait
"wait" utasítás végrehajtása. Kiírja, hogy meddig vár.
Szálak eseményei Ezek az egyes szálak indulását és leállását jelzik. ControllerThreadStarted
A vezérlő szál elindult.
ControllerThreadStopped
A vezérlő szál leállt.
FallingObjectMoveThreadStarted
Leeső objektum mozgató szála elindult.
FallingObjectMoveThreadStopped
Leeső objektum mozgató szála leállt.
MonsterFollowMoveThreadStarted
Követő szörny mozgató szála elindult. Kiírja a szörny típusát.
MonsterFollowMoveThreadStopped
Követő szörny mozgató szála leállt. Kiírja a szörny típusát.
MonsterRandomMoveThreadStarted
Össze-vissza mozgó szörny mozgató szála elindult. Kiírja a szörny típusát.
MonsterRandomMoveThreadStopped
Össze-vissza mozgó szörny mozgató szála leállt. Kiírja a szörny típusát.
PlayerMoveThreadStarted
Játékos mozgató szála elindult.
PlayerMoveThreadStarted
Játékos mozgató szála leállt.
Játék eseményei Minden egyéb esemény. Különböző ütközések, mozgások tartoznak ide. Collision
Ütközés történt. Kiírja az ütköző objektumok típusát.
Explosion
Robbanás történt egy cellában. Kiírja a cella típusát.
ExplosionEnd
A robbanás befejeződött. Kiírja a cella típusát.
GameFinished
A játék befejeződött.
GameObjectCreated
Egy új GameObject jött létre. Kiírja az új objektum típusát, és a kezdő cella típusát is.
GameObjectDied
Egy GameObject megsemmisült. Kiírja a típusát.
GameObjectMoveFailed
Egy objektum megpróbált elmozdulni, de nem sikerült. Kiírja az irányt, az objektum típusát, valamint a régi és az új cella típusát is (ezek nyilván megegyeznek).
GameObjectMoved
Egy objektum sikeresen elmozdult. Kiírja az irányt, az objektum típusát, valamint a régi és az új cella típusát is.
Lizzard Entertainment (90), április 16.
4. oldal
GameStarted
A játék elkezdődött.
MapFinished
Egy pálya befejeződött.
MapStarted
Egy pálya elkezdődött.
PlayerExited
Egy játékos belépett a kijáratba.
Split
Egy amőba osztódott.
A tesztek futtatása A futtatás a tesztesetek pályáinak, illetve vezérlő utasításainak megadásával történik. Ezeket tételesen a "Tesztek jegyzőkönyvei" részben soroljuk fel. A "proto" névtér main osztálya tartalmazza a program main függvényét. Ennek megfelelően a futtatás a következő parancs kiadásával történik: java lizzard.proto.Main pályafájl.map ugyanolyan_nevű_vezérlőfájl.input Illetve, hogy a kimenetet összehasonlíthassuk a specifikáltakkal: java lizzard.proto.Main pályafájl.map ugyanolyan_nevű_vezérlőfájl.input > kimenet.output
Segédprogramok használata A kimenetfájlok kezelését segíti a két segédprogram. Ezeket a fordítás után egyszerűen használhatjuk. A teszt kimenetek olvasását könnyíti az output-filter program, ami csak egy bizonyos argumentum szerinti sorokat jelenít meg: java outputfilter.Main kiment.output keresett_sor A jdiff programmal ellenőrihetjük le, hogy a játék tesztesete tényleg a megadottak szerint fut-e le: java jdiff.Main specifikált_kimenet.output kimenet.output
Tesztek jegyzőkönyvei Teszt
Két szörny ütközése
Pálya
collision-2monster.map
Bemenet
collision-2monster.input
Kimenet
collision-2monster.output
Teljes utasítás
java lizzard.proto.Main collision-2monster.map collision-2monster.input > collision-2monster.output
Értékelés
Sikeres teszt. A teszt neve félrevezető, mert ütközés valójában nem történik. A GameObjectMoveFailed események jelzik, hogy a szönyek megpróbáltak összeütközni, de nem léphettek egymásra.
Lizzard Entertainment (90), április 16.
5. oldal
Teszt
Két játékos ütközése
Pálya
collision-2player.map
Bemenet
collision-2player.input
Kimenet
collision-2player.output
Teljes utasítás
java lizzard.proto.Main collision-2player.map collision-2player.input > collision-2player.output
Értékelés
Sikeres teszt. A "két szörny ütközése" esethez hasonlóan itt sem történik tényleges ütközés.
Teszt
Játékos és szörny ütközése
Pálya
collision-monster-player.map
Bemenet
collision-monster-player.input
Kimenet
collision-monster-player.output
Teljes utasítás
java lizzard.proto.Main collision-monster-player.map collision-monster-player.input > collision-monster-player.output
Értékelés
Sikeres teszt. Az ütközést jelző Collision esemény után megfigyelhető, hogy a játékos meghal (GameObjectDied) majd visszakerül a bejárathoz, végül elhagyja a pályát.
Teszt
Szikla eltolása
Pálya
collision-push-rock.map
Bemenet
collision-push-rock.input
Kimenet
collision-push-rock.output
Teljes utasítás
java lizzard.proto.Main collision-push-rock.map collision-push-rock.input > collision-push-rock.output
Értékelés
Sikeres teszt. Látható a tolást jelző Collision és GameObjectMoved esemény, az ezutáni Display eseményekben pedig jól látszik, ahogy a szikla lezuhan.
Teszt
Szikla és szörny ütközése
Pálya
collision-rock-monster.map
Bemenet
collision-rock-monster.input
Kimenet
collision-rock-monster.output
Teljes utasítás
java lizzard.proto.Main collision-rock-monster.map collision-rock-monster.input > collision-rock-monster.output
Lizzard Entertainment (90), április 16.
6. oldal
Értékelés
Sikeres teszt. A teszt eleje "Szila eltolása" tesztesethez hasonló. Ezután látható egy második Collision esemény, valamint egy GameObjectDied és egy GameObjectCreated esemény, amelyek a szörny halálát, és egy gyémánt keletkezését jelzik.
Teszt
Szikla és játékos ütközése
Pálya
collision-rock-player.map
Bemenet
collision-rock-player.input
Kimenet
collision-rock-player.output
Teljes utasítás
java lizzard.proto.Main collision-rock-player.map collision-rock-player.input > collision-rock-player.output
Értékelés
Sikeres teszt. A teszt lényege valójában a második ütközés. (Az első is szikla és játékos közötti, de a már többször tesztelt tolás jellegű.) Látható, hogy ekkor a játékos meghal (GameObjectDied).
Teszt
FallingObject mozgása
Pálya
move-fallingobject.map
Bemenet
move-fallingobject.input
Kimenet
move-fallingobject.output
Teljes utasítás
java lizzard.proto.Main move-fallingobject.map move-fallingobject.input > movefallingobject.output
Értékelés
Sikeres teszt. A teszt Display eseményei érdekesek, ezeken látható, ahogy a szikla magától (tolás nélkül) oldalra elgördül, majd lezuhan.
Teszt
Szörnyek mozgása
Pálya
move-monster.map
Bemenet
move-monster.input
Kimenet
move-monster.output
Teljes utasítás
java lizzard.proto.Main move-monster.map move-monster.input > movemonster.output
Értékelés
Sikeres teszt. Ennél a tesztnél is a legtöbb a Display eseményeken látszik. Megfigyelhető, hogy útvonal hiányában a követő szörnyek is véletlenszerűen mozognak, valamint az amőba osztódása is. Ez utóbbit jelzik a Split események is.
Teszt
Játékosok mozgása
Pálya
move-player.map
Bemenet
move-player.input
Lizzard Entertainment (90), április 16.
7. oldal
Kimenet
move-player.output
Teljes utasítás
java lizzard.proto.Main move-player.map move-player.input > move-player.output
Értékelés
Sikeres teszt. A játékosok valójában minden tesztesetben mozognak, de ebben más nem történik. Ebben a tesztesetben figyelhető meg az is, ahogyan a játékosok kiássák a talajt.
Teszt
Robbantás
Pálya
other-explosion.map
Bemenet
other-explosion.input
Kimenet
other-explosion.output
Teljes utasítás
java lizzard.proto.Main other-explosion.map other-explosion.input > otherexplosion.output
Értékelés
Sikeres teszt. A mozgások után megfigyelhető a PlaceDynamite valamint az ActivateDynamites esemény. Ezután a robbanás (Explosion, ExplosionEnd), valamint ennek hatása (GameObjectDied) is.
Teszt
Követés
Pálya
other-follow.map
Bemenet
other-follow.input
Kimenet
other-follow.output
Teljes utasítás
java lizzard.proto.Main other-follow.map other-follow.input > other-follow.output
Értékelés
Sikeres teszt. Ennél a tesztnél a Display események a leglátványosabbak. Ezeken látható, ahogy a mutáns egyértelműen a játékos felé mozog.
Lizzard Entertainment (90), április 16.
8. oldal
Értékelés Az eddig történt beadásokat mind elkészítettük, emellett úgy gondoljuk hogy a szoftverünk minősége is az ütemtervnek megfelelően alakult. A teszteseteinket világosnak, széleskörűnek, és megbízhatóan működőnek tartjuk. Természetesen még elképzelhető, hogy újabb problémákra derül fény, de úgy érezzük, hogy nagyon sokat megoldottunk. A specifikáció változását is sikerült teljes körűen bevezetnünk. Ennek megfelelően a teszteseteink is tartalmazzák a hatszöges pályaszerkezet és a két játékos kezelése miatt előálló helyzeteket. A többszálúság miatt egyes programhibák megtalálása rendkívül sok időt vett igénybe. Gyakori volt az a jelenség, hogy rendesen lefuttatva a program helytelenül működött, ám a debuggerrel helyesen. Előfordult az is, hogy egy teszteset kijavítása után egy vagy több másik vált hibássá. Ebből az a következtetés vonható le, hogy jobban meg kell tervezni a szálak szinkronizációját, hogy ilyen jellegű hibák eleve ne léphessenek fel. Valószínű, hogy jobb megoldás lett volna a cellánkénti szálak használata, mint a GameObject-enkénti, mert akkor a szálakból állandó mennyiségű van, azok egyszerre indulnak és állnak le, és a szálak közti kommunikáció a GameObject-ek átadására korlátozódik. Csapatunk ismeretségi alapon szerveződött, ezért többféle kommunikációs csatornán tudjuk elérni egymást. Ezt az utóbbi hetekben többször ki is használtuk. Így nem történt meg, hogy valaki elszigetelten dolgozott volna. Azt is sikerült mindig elkerülnünk, hogy valaki megakadjon csak azért, mert más nem megfelelően teljesíti a részfeladatát. A közös fejlesztés tehát működik. Egyetlen dologban akarunk fejlődni, és ez a részhatáridők betartása. Az első hetek leadás előtti hajrája után egymás között megállapodtunk a részfeladatok teljesítésének részhatáridejeiről. Ezt a rendszert azonban nem mindig sikerül tartanunk. Ha ezen a területen tovább fejlődünk, akkor még olajozottabb lesz az együttműködés. Az információáramlás elsődleges módja a forrásba elhelyezett megjegyzések, illetve a tároló mellett használt wiki oldalak. Ezek mindenki számára ugyanúgy elérhetőek, egyre bővülő, de archívummal rendelkező csatornák. Ez a beadások előtt az addigi fejlődés összegyűjtését is nagyban segíti. Emellett a legtöbb kommunikáció azonnali üzeneteken (MSN), illetve emailen zajlott. A feladatok felosztása mindig megtörtént, bár hét közben volt rá példa, hogy módosítottuk. Végül a leadott dokumentumok kivétel nélkül mindhármunk közreműködésével jöttek létre. Ezért a kapott pontokat illetően egyenlő felosztást javaslunk.
Lizzard Entertainment (90), április 16.
9. oldal
Napló Dátum
Alany
Tárgy
2009-04-03
Fernczy Szabolcs, Stribik András, Széll Tamás
Megbeszélés
2009-04-08
Fernczy Szabolcs
Kisebb javítások
2009-04-09
Stribik András
Kisebb javítások
2009-04-10
Széll Tamás
Kisebb javítások
2009-04-12
Stribik András
Bemeneti események GameObject mozgás események
2009-04-12
Stribik András
GameObject létrehozás és megszűnés események
2009-04-12
Széll Tamás
Collision esemény
2009-04-12
Fernczy Szabolcs
Monster*MoveThread események
2009-04-12
Fernczy Szabolcs
ControllerThread események
2009-04-13
Stribik András
Blokkok értelmezése
2009-04-14
Fernczy Szabolcs
Repeat esemény
2009-04-14
Stribik András
Mozgató szálak indításának rendszere.
2009-04-14
Széll Tamás
Output-filter program
2009-04-14
Stribik András
Display program
2009-04-14
Fernczy Szabolcs
Tesztesetek implementálása, hozzá tartozó kisebb javítások
2009-04-14
Stribik András
Tesztesetek implementálása, hozzá tartozó kisebb javítások
2009-04-14
Széll Tamás
Tesztesetek implementálása, hozzá tartozó kisebb javítások
2009-04-15
Stribik András
Követés javítása
2009-04-15
Széll Tamás
Jdiff program
2009-04-15
Fernczy Szabolcs
CommentFilter osztály
2009-04-15
Stribik András
Teszt kimenetek feltöltése
Lizzard Entertainment (90), április 16.
10. oldal