Kígyófarm játék 16 – Háztartási Létra Konzulens:
Bóka Gábor
Csapattagok Bertók Zsófia A6MHQV
[email protected] Tönköl Viktor VU6IT6
[email protected] Veres-Szentkirályi András YZIOAW
[email protected]
2008. május 14.
TARTALOMJEGYZÉK
TARTALOMJEGYZÉK
Tartalomjegyzék 1. Feladat leírása 1.1. A feladat leírása . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Szótár . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 8 10
2. Követelmény, projekt, funkcionalitás 2.1. Követelmény definíció . . . . . . . . . . 2.1.1. A program célja, alapvet˝o feladata 2.1.2. A fejleszt˝okörnyezet . . . . . . . 2.1.3. A futtatáshoz szükséges környezet 2.1.4. A felhasználói felület . . . . . . . 2.1.5. Min˝oségi tényez˝ok . . . . . . . . 2.1.6. A szoftver min˝osítése . . . . . . . 2.1.7. A kibocsátás . . . . . . . . . . . 2.2. Projekt terv . . . . . . . . . . . . . . . . 2.2.1. A fejleszt˝oi csapat . . . . . . . . 2.2.2. Életciklus modell . . . . . . . . . 2.2.3. Szervezési struktúra . . . . . . . 2.2.4. Fejlesztési ütemterv . . . . . . . 2.2.5. Határid˝ok . . . . . . . . . . . . . 2.2.6. Szükséges dokumentációk . . . . 2.3. Essential Use Case-ek . . . . . . . . . . . 2.3.1. Diagramok . . . . . . . . . . . . 2.3.2. Use Case leírások . . . . . . . . .
. . . . . . . . . . . . . . . . . .
14 14 14 14 15 15 15 16 16 16 16 17 18 19 19 20 21 21 21
. . . . . . . .
22 22 22 23 24 25 26 27 28
3. Analízis modell kidolgozása 3.1. Objektum katalógus . . 3.1.1. Fieldberry . . . 3.1.2. Foreground . . 3.1.3. Game . . . . . 3.1.4. GameField . . 3.1.5. Hedge . . . . . 3.1.6. Sawberry . . . 3.1.7. SnakeHead . . Háztartási Létra
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . . 2
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . .
2008. május 14.
TARTALOMJEGYZÉK
TARTALOMJEGYZÉK
. . . . . . . . . . . . . . . . . . . . . . .
29 32 34 35 36 36 36 37 37 37 37 37 38 38 38 38 39 40 40 43 51 51 52
4. Szkeleton tervezése 4.1. A szkeleton modell valóságos use case-ei . . . . . . . . . . . . 4.2. Architektúra . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1. Tesztpálya . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2. Tesztesetek konkrét pályái . . . . . . . . . . . . . . . . 4.2.3. Ütemezés . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. A szkeleton kezel˝oi felületének terve, dialógusok . . . . . . . . 4.4. Szekvencia diagramok a bels˝o m˝uködésre . . . . . . . . . . . . 4.4.1. Szekvencia diagram a „0. – Initialize the gamefield” use case-hez . . . . . . . . . . . . . . . . . . . . . . . . . .
53 53 58 59 59 60 61 62
3.2.
3.3. 3.4.
3.5.
3.1.8. SnakeSection . . . . . . . . . . . . . . 3.1.9. SnakeWrapper . . . . . . . . . . . . . 3.1.10. Stoneberry . . . . . . . . . . . . . . . 3.1.11. Tile . . . . . . . . . . . . . . . . . . . Osztályok leírása . . . . . . . . . . . . . . . . 3.2.1. Fieldberry . . . . . . . . . . . . . . . . 3.2.2. Foreground . . . . . . . . . . . . . . . 3.2.3. Game . . . . . . . . . . . . . . . . . . 3.2.4. GameField . . . . . . . . . . . . . . . 3.2.5. Hedge . . . . . . . . . . . . . . . . . . 3.2.6. Sawberry . . . . . . . . . . . . . . . . 3.2.7. SnakeHead . . . . . . . . . . . . . . . 3.2.8. SnakeSection . . . . . . . . . . . . . . 3.2.9. SnakeWrapper . . . . . . . . . . . . . 3.2.10. Stoneberry . . . . . . . . . . . . . . . 3.2.11. Tile . . . . . . . . . . . . . . . . . . . Statikus struktúra diagramok . . . . . . . . . . Use case-ek és szekvencia diagramok . . . . . 3.4.1. Use case-ek . . . . . . . . . . . . . . . 3.4.2. Szekvencia diagramok . . . . . . . . . State-chartok . . . . . . . . . . . . . . . . . . 3.5.1. A SnakeSection objektum state-chartja 3.5.2. A SnakeHead objektum state-chartja . .
Háztartási Létra
3
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
62
2008. május 14.
TARTALOMJEGYZÉK
TARTALOMJEGYZÉK
4.4.2. Szekvencia diagram az „1. – Feed a snake with fieldberry” use case-hez . . . . . . . . . . . . . . . . . . 4.4.3. Szekvencia diagram a „2. – Feed a snake with sawberry” use case-hez . . . . . . . . . . . . . . . . . . . . . . . 4.4.4. Szekvencia diagram a „3. – Feed a snake with stoneberry” use case-hez . . . . . . . . . . . . . . . . . . . . 4.4.5. Szekvencia diagram a „4. – Crash a snake into a hedge” use case-hez . . . . . . . . . . . . . . . . . . . . . . . 4.4.6. Szekvencia diagram az „5. – Crash a snake into a snake’s body” use case-hez . . . . . . . . . . . . . . . . . . . . 4.4.7. Szekvencia diagram a „6. – Crash a snake into a normal snakehead (odd distance)” use case-hez . . . . . . . . . 4.4.8. Szekvencia diagram a „7. – Crash a snake into a normal snakehead (even distance)” use case-hez . . . . . . . . . 4.4.9. Szekvencia diagram a „8. – Crash a powerful snake into a snakesection with stone” use case-hez . . . . . . . . . 4.4.10. Szekvencia diagram a „9. – Put a berry or a hedge to the gamefield” use case-hez . . . . . . . . . . . . . . . . . 4.4.11. Szekvencia diagram a „10. – Put a snake to the gamefield” use case-hez . . . . . . . . . . . . . . . . . . . . . 4.4.12. Szekvencia diagram a „11. – Grow a snake and the snake digests stoneberry” use case-hez . . . . . . . . . . . . . 4.4.13. Szekvencia diagram a „12. – Delete ghosts” use case-hez 4.4.14. Segédszekvenciák . . . . . . . . . . . . . . . . . . . . 5. Szkeleton beadása 5.1. Feltöltött szkeleton ismertetése . . . . . . . . . . . . . . . . . . 5.1.1. Telepítés . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2. Fordítás . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.3. Futtatás . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.4. Javadoc dokumentáció generálása . . . . . . . . . . . . 5.1.5. A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.6. A java forráskód fájlok ismertetése . . . . . . . . . . . 5.1.7. Szkeleton használata . . . . . . . . . . . . . . . . . . . Háztartási Létra
4
63 64 65 66 66 68 68 71 72 72 73 74 75 81 81 81 81 81 81 81 83 84
2008. május 14.
TARTALOMJEGYZÉK
TARTALOMJEGYZÉK
5.2. Értékelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Prototípus koncepciója 6.1. Prototípus interface definíciója . . . . . . . . . . . . . . . . . 6.1.1. Pályakészít˝o utasítások . . . . . . . . . . . . . . . . . 6.1.2. Prototípusvezérl˝o utasítások . . . . . . . . . . . . . . 6.1.3. Prototípus kimeneti üzeneteinek formátuma . . . . . 6.2. Összes részletes use case . . . . . . . . . . . . . . . . . . . . 6.3. Tesztelési terv, tesztel˝o nyelv definiálása . . . . . . . . . . . . 6.3.1. Prototípus használata a tesztelésre . . . . . . . . . . . 6.3.2. Tesztforgatókönyvek . . . . . . . . . . . . . . . . . . 6.4. Tesztelést támogató segéd- és fordító programok specifikálása 6.5. Modell illesztése a megváltozott specifikációhoz . . . . . . . . 6.5.1. Leharapott kígyófarok további élete . . . . . . . . . . 6.5.2. K˝obogyók vándorlási sebessége . . . . . . . . . . . . 7. Részletes tervek 7.1. Objektumok és metódusok tervei . . . . . . . . . 7.1.1. Fieldberry . . . . . . . . . . . . . . . . . 7.1.2. Foreground . . . . . . . . . . . . . . . . 7.1.3. GameField . . . . . . . . . . . . . . . . 7.1.4. Hedge . . . . . . . . . . . . . . . . . . . 7.1.5. Sawberry . . . . . . . . . . . . . . . . . 7.1.6. SnakeHead . . . . . . . . . . . . . . . . 7.1.7. SnakeSection . . . . . . . . . . . . . . . 7.1.8. SnakeWrapper . . . . . . . . . . . . . . 7.1.9. Stoneberry . . . . . . . . . . . . . . . . 7.1.10. Tile . . . . . . . . . . . . . . . . . . . . 7.2. A tesztek részletes tervei, leírásuk a teszt nyelvén 7.2.1. Inicializálás . . . . . . . . . . . . . . . . 7.2.2. Kígyó bogyót eszik . . . . . . . . . . . . 7.2.3. Kígyók összeütköznek . . . . . . . . . . 7.2.4. Egyéb tesztesetek . . . . . . . . . . . . . 7.3. A tesztelést támogató programok tervei . . . . . 7.3.1. testall.bat . . . . . . . . . . . . . . . . . Háztartási Létra
5
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
84
. . . . . . . . . . . .
85 85 85 86 88 89 91 91 91 94 96 96 96
. . . . . . . . . . . . . . . . . .
97 97 97 97 98 98 99 99 101 109 110 110 114 114 117 121 128 131 131
2008. május 14.
TARTALOMJEGYZÉK
TARTALOMJEGYZÉK
7.3.2. test.bat . . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.3.3. Compare.java . . . . . . . . . . . . . . . . . . . . . . . 132 8. Prototípus beadása 8.1. Feltöltött prototípus ismertetése . . . . . . . . . . . . . . . . . 8.1.1. Telepítés . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.2. Fordítás . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.3. Futtatás . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.4. Javadoc dokumentáció generálása . . . . . . . . . . . . 8.1.5. A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.6. A java forráskód fájlok ismertetése . . . . . . . . . . . 8.1.7. Prototípus használata . . . . . . . . . . . . . . . . . . . 8.2. Tesztek jegyz˝okönyvei . . . . . . . . . . . . . . . . . . . . . . 8.3. Értékelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. Grafikus felület specifikációja 9.1. A kezel˝oi felület grafikus képe . . . . . . . . . . . . . . . . . . 9.2. A grafikus rendszer architektúrája . . . . . . . . . . . . . . . . 9.2.1. SnakeExplorer . . . . . . . . . . . . . . . . . . . . . . 9.2.2. TileDrawer . . . . . . . . . . . . . . . . . . . . . . . . 9.2.3. GlyphCache . . . . . . . . . . . . . . . . . . . . . . . . 9.2.4. GameScreen . . . . . . . . . . . . . . . . . . . . . . . 9.2.5. StaticScreen . . . . . . . . . . . . . . . . . . . . . . . . 9.2.6. MenuScreen és gyermekei: MainMenuScreen, InGameMenuScreen . . . . . . . . . . . . . . . . . . . . . . . 9.2.7. Struktúra diagram . . . . . . . . . . . . . . . . . . . . . 9.3. A grafikus objektumok felsorolása . . . . . . . . . . . . . . . . 9.3.1. SnakeExplorer . . . . . . . . . . . . . . . . . . . . . . 9.3.2. TileDrawer . . . . . . . . . . . . . . . . . . . . . . . . 9.3.3. GlyphCache . . . . . . . . . . . . . . . . . . . . . . . . 9.3.4. GameScreen . . . . . . . . . . . . . . . . . . . . . . . 9.3.5. StaticScreen . . . . . . . . . . . . . . . . . . . . . . . . 9.3.6. MenuScreen . . . . . . . . . . . . . . . . . . . . . . . 9.3.7. MainMenuScreen . . . . . . . . . . . . . . . . . . . . . Háztartási Létra
6
135 135 135 135 135 135 135 138 138 140 148 149 149 153 153 153 154 154 154 154 155 156 156 157 158 159 160 160 161
2008. május 14.
TARTALOMJEGYZÉK
TARTALOMJEGYZÉK
9.3.8. InGameMenuScreen . . . . . . . . . . . . . . . . . . . 162 9.3.9. Szekvencia diagramok . . . . . . . . . . . . . . . . . . 163 10. Grafikus változat beadása 10.1. Feltöltött grafikus változat ismertetése . . . . . . . . . . . . . . 10.1.1. Telepítés . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.2. Fordítás . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.3. Futtatás . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.4. Javadoc dokumentáció generálása . . . . . . . . . . . . 10.1.5. A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.6. A java forráskód fájlok ismertetése . . . . . . . . . . . 10.1.7. Grafikus változat használata . . . . . . . . . . . . . . . 10.2. Értékelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
167 167 167 167 167 167 167 171 171 172
11. Összefoglalás 173 11.1. Projekt összegzés . . . . . . . . . . . . . . . . . . . . . . . . . 173 12. Napló
Háztartási Létra
175
7
2008. május 14.
1 FELADAT LEÍRÁSA
1. Feladat leírása 1.1. A feladat leírása A megvalósítandó feladat egy kígyójáték, melyben több (2–4) játékos versenyezhet egymással kígyó formájában. A játékos feladata a kígyója navigálása és etetése. A játékos célja, hogy a játék végéig életben maradjon a kígyója, és az minél hosszabb legyen. A játékhoz meghatározott id˝o áll rendelkezésre. A kígyók csak egy meghatározott területen, a játéktéren mozoghatnak adott irányokban. A játékosok által irányított kígyók haladása úgy történik, hogy a megadott irányban egy egységet halad el˝ore a kígyó feje, míg a teste követi az általa kijelölt addigi nyomvonalat. Hátrafelé haladni egyik kígyó se tud. Minden kígyó azonos sebességgel halad, egyik sem gyorsabb a másiknál. A játék elején a játékosok kígyói a játéktér valamely pontjáról indulnak útjukra egymás felé . A játék közben a kígyókat különböz˝o akadályok hátráltathatják. A játéktér egy nagy rét, melyen vannak mérgez˝o tüskés sövények, ezek falakat jelentenek a kígyók számára, amelyeken nem tudnak áthatolni. Ha egy kígyó a játék során a sövénynek (falnak) ütközik, akkor az megszúrja és a kígyó meghal. Ekkor a kígyó elt˝unik a játéktérr˝ol, a játékos pedig kiesik a játékból. A kígyók b˝ore kemény, és a mirigyeikben mérget termelnek. Így ha egy kígyó összeütközik egy másik kígyóval vagy önmagával (becsavarodik), akkor a kígyó meghal a másik méregmirigye által termelt méregt˝ol. Ha két kígyó szemben halad egymással, és fejük összeütközik, akkor vagy egyikük vagy mindkettejük megsemmisül a köztük lév˝o távolság függvényében. A játékban minden játékosnak van egy adott sorszáma, amely alapján a körön belüli haladási sorrendjük eld˝ol. Összeütközés esetén ez is dönt˝o szerep˝u lehet, mindig az el˝obbre lév˝o sorszámú játékos van el˝onyben. A játékban minden kígyó csíkos, a játékosok kiválaszthatják milyen szín˝u csíkokkal rendelkez˝ovel szeretnének játszani, és kés˝obb a játéktéren ez különbözteti meg o˝ ket. Ezen kívül a játék elején választani lehet különböz˝o nehézségi szintek között. Az egyes szinteket az különbözteti meg egymástól, hogy melyik játéktéren mennyi sövény helyezkedik el. Ezen kívül a játékosok kiválaszthatják a sebességet is, amilyen gyorsasággal a pályán haladni szeretnének, tudásukhoz mérten. Minden játékos rendelkezik egy pontszámmal, a pontszám a kígyó hosszától függ. Mindenkinek annyi pontja van, ahány egységgel hosszú kígyóval Háztartási Létra
8
2008. május 14.
1.1 A feladat leírása
1 FELADAT LEÍRÁSA
rendelkezik. A játék elején minden kígyó adott hosszúságúra megn˝o. A játéktéren különböz˝o bogyók helyezkednek el, melyeket a kígyó megeszik, ha fejével áthalad rajtuk. A bogyók fajtájuktól függ˝oen különböz˝o hatással lehetnek az állatra. Alapvet˝oen három féle bogyót különböztetünk meg: mezei bogyó, f˝urészbogyó, k˝obogyó. A kígyó a színe alapján tudja megítélni, hogy melyik bogyó milyen fajta. Mindegyik bogyó egy egység méret˝u. A pályán véletlenszer˝u helyeken bármikor növekedhet újabb bogyó szabad területen. A mezei bogyó a legegyszer˝ubb bogyó ez segíti a kígyót a növekedésben. Ha ezt megeszi az állat, akkor egységnyivel n˝o a testhossza, tehát 1 ponttal növeli a pontszámát a kígyót irányító játékos. A furészbogyó ˝ semlegesíti a kígyó mérgének hatását. Így ha megeszik egyet egy kígyó, akkor meghatározott ideig olyan er˝os lesz a harapása, hogy ha egy másik kígyónak vagy saját magának nekimegy, akkor át tud haladni rajta probléma nélkül, mégpedig úgy, hogy levágja a másik kígyó vagy a saját farkát. Ekkor a levágott farokból új kígyó keletkezik, ám az eredeti kígyó nem hal meg. A levágott farkú kígyó testhossza értelemszer˝uen a levágott rész hosszával csökken. Így a játékos pontszáma is csökken annyival, ahány egységb˝ol állt a levágott rész. A keletkezett kígyót nem a játékos irányítja, hanem magától halad, ugyanolyan szerepet betöltve, mintha o˝ t is egy játékos vezérelné, azzal a különbséggel, hogy nem nyerheti meg a játékot. Ha egy f˝urészbogyó hatása alatt álló kígyó a másik nem f˝urészes kígyó fejének megy neki, a másik kígyó meghal, elt˝unik a játéktérr˝ol, az o˝ t irányító játékos pedig kiesik a játékból. Két f˝urészbogyót evett kígyó egymás fejébe ütközés esetén ugyanazon elvek alapján, mint két f˝urésztulajdonsággal nem rendelkez˝o kígyó esetén, vagy egyikük vagy mindkettejük meghal. A k˝obogyó elfogyasztása után a kígyó testén végigvándorol egységr˝ol egységre. A vándorlási sebesség változik az egyes sebességszinteken. A k˝obogyók annyira kemények, hogy a kígyó nem tudja megemészteni o˝ ket. Így a bogyók a kígyó testéb˝ol nem távoznak, ha elérik a kígyó végét, hanem a farkától kezdve felhalmozódnak a testében. Ha egy k˝obogyókat is tartalmazó részt harap le a kígyóból a másik kígyó, akkor értelem szer˝uen a k˝obogyók is megsemmisülnek a levágott résszel együtt. A bogyó azt akadályozza meg, hogy egy másik kígyó leharaphassa a k˝obogyót evett kígyó farkát. Ezt olyan módon teszi, hogy ha egy másik, f˝urészbogyót evett kígyó a köves részre harap, akkor az még így sem tud Háztartási Létra
9
2008. május 14.
1.2 Szótár
1 FELADAT LEÍRÁSA
áthaladni rajta, mivel a k˝obogyó olyan kemény, hogy még a f˝urészbogyó ellenére is beletörik a foga. Így már nem lesz tovább immúnis a méregre az áthaladást megkísérl˝o kígyó és megsemmisül, az o˝ t irányító játékos kiesik a játékból. Ha egy kígyó fejében van már k˝o, akkor egy újabb k˝obogyó felvétele esetén a kövek összeütköznek, és a k˝obogyó elporlad, nem tudja már megenni. A játék háromféleképpen érhet véget. Els˝o esetben úgy, hogy már csak egy kígyó maradt életben, ekkor értelemszer˝uen az egyetlen él˝o kígyót irányító játékos nyer. Ezen kívül a játék kett˝o vagy több kígyó egymásnak ütközésekor is véget érhet, ha mindnyájan meghalnak. Ekkor a játék döntetlennel ér véget. A legutóbbi eset az, amikor a játékra rendelkezésre álló id˝o lejár. Ebben az esetben pedig a leghosszabb kígyó nyer, azaz ekkor a legtöbb ponttal rendelkez˝o játékos. Ha holtverseny alakult ki – két vagy több játékosnak ugyanolyan hosszú a kígyója, akkor az a játékos a gy˝oztes, akinek a kígyója a legkevesebb k˝obogyót fogyasztotta el. Ha még ekkor sem lehet eldönteni a gy˝oztest, akkor döntetlent kell megállapítani. 1.2. Szótár Szó akadály becsavarodik bogyó
megeszik
csík egység er˝os harapás
Háztartási Létra
Magyarázat Olyan objektum a játéktéren, amelyen a kígyó nem tud áthatolni, pl. sövény. Amikor egy kígyó saját testének ütközik. A réten term˝o növény, melynek három fajtája van: mezei bogyó, f˝urészbogyó, k˝obogyó. A kígyó elesége, színük alapján lehet megkülönböztetni o˝ ket. Ha egy kígyó fej e áthalad azon a helyen, ahol egy bogyó van. Ekkor a bogyó a kígyóra különböz˝o hatásokat fejthet ki. Minden kígyó testén van, mégpedig minden játékos kígyóján más szín˝u. Egy adott hossz, amellyel a kígyó egy mezei bogyó fogyasztása során növekszik. Ha egy kígyó f˝urészbogyót evett, akkor immúnis lesz a méregre, ekkor er˝os lesz a harapása. A kígyó le tudja harapni a másik farkát így. 10
2008. május 14.
1.2 Szótár
él˝o kígyó fal farok fej f˝urészbogyó
f˝urésztulajdonság halad holtverseny
játékos játéktér játék vége
kiesik kígyó kígyójáték k˝o k˝obogyó
Háztartási Létra
1 FELADAT LEÍRÁSA
Olyan kígyó, amely még versenyben van a gy˝ozelemért, látszik a játéktéren a figurája. Lásd sövény. A kígyónak a fejét˝ol legtávolabbi vége. Az a része a kígyónak, melyet a játékos irányítani képes. A réten term˝o bogyó, melyet ha egy kígyó megesz, semlegesíti a mérget, így képes egyik kígyó leharapni a másik farkát. F˝urészbogyót evett kígyó jellemz˝oje. A kígyó bizonyos id˝oközönként egy egység hosszal el˝obbre kerül. Akkor beszélünk holtversenyr˝ol, ha a játéknak vége, és két vagy több játékos kígyójának testhossza megegyezik, valamint az általuk megevett k˝obogyók száma is egyenl˝o, vagy két vagy több játékos kígyója egyszerre halt meg. A játék felhasználója, aki egy kígyót irányít. 2, 3 vagy 4 játékos játszhat a játékkal. Az a terület, amelyen a kígyók szabadon haladhatnak. A játéktér egy rét. A játéknak akkor van vége, ha lejár a rendelkezésre álló id˝o vagy már csak egy kígyó van életben, illetve ha az utolsó él˝o kígyók egymás fejének ütközve egyszerre semmisülnek meg. Egy játékos kiesik, ha a kígyója meghal. A játék f˝o figurája, a játékosok irányítják, a csíkjaik színe különbözteti meg o˝ ket, bogyókat esznek. Olyan játék, amelyben kígyók versenyeznek egymással. K˝obogyó ezzé válik a kígyó hasában megevése után. A réten term˝o bogyó, melyet ha egy kígyó megeszik, nem tudja megemészteni, és a testében felhalmozódva megakadályozza, hogy leharapják a farkát.
11
2008. május 14.
1.2 Szótár
1 FELADAT LEÍRÁSA
leharap
Ha egy f˝urészbogyót evett kígyó összeütközik egy másikkal, akkor a másik kígyó testének összeütközési pont mögötti rész megsemmisül. Ekkor mondjuk, hogy az egyik kígyó leharapta a másik farkát. meghal Egy kígyó meghal, ha nem rendelkezik f˝urésztulajdonsággal és összeütközik egy másik kígyóval vagy saját testével, vagy ha leharapta egy f˝urészbogyót evett kígyó a fejét, vagy ha sövénynek ütközik, illetve ha f˝urészbogyó fogyasztása után k˝onek ütközik. Ilyenkor a kígyó figurája megsemmisül, és nem vesz tovább részt a küzdelemben. Csak összeütközés válthatja ki. megsemmisül Elt˝unik a játéktérr˝ol a figura. méregmirigy Minden kígyó rendelkezik vele, mérget termel. méreg Olyan anyag, melyet minden kígyó termel a méregmirigyeiben. Ha egy másik kígyó érintkezik vele, akkor meghal t˝ole. mérgez˝o tüske A sövényeken elhelyezked˝o tüskék, amelyek a kígyókkal érintkezve megölik o˝ ket. mezei bogyó A réten term˝o bogyó, melyet ha egy kígyó megeszik, egy egységgel n˝o a testhossza. nehézségi szint A játékos tudásának megfelel˝oen választhat a különböz˝o nehézségi szintek közül, melyekben a sövények száma határozza meg a nehézséget. nyertes A játék végén az a játékos, aki a legtöbb pontszámmal rendelkezik. Ha több ilyen is van, akkor közülük a legkevesebb k˝obogyót ev˝o. Ha még ebb˝ol is több van, akkor holtversenyben több nyertes is van. nyomvonal A kígyó teste által az adott id˝oben elfoglalt terület. összeütközési pont A kígyó testének azon része, ahol a másik kígyó beleütközött, összeütköztek. összeütközik Amikor az egyik kígyó feje összetalálkozik egy másik kígyó vagy saját testével, vagy egy sövénnyel.
Háztartási Létra
12
2008. május 14.
1.2 Szótár
pontszám
rét sebesség
sövény testhossz ütközik
Háztartási Létra
1 FELADAT LEÍRÁSA
Egy szám, amellyel minden játékos rendelkezik a játék során. Minden játékos pontszáma annyi, ahány egység a testhossza. A játék elején minden játékos 5 hosszú kígyóval indulhat, így pontszámuk 5. Olyan terület, amelyen sövények vannak, és bogyók n˝onek rajta. A kígyók él˝ohelye. Azt határozza meg, hogy egy kígyó hány egységnyi távolságot halad a játéktéren egységnyi id˝o alatt. Minden kígyónál megegyezik. A játék elején választható. A játéktéren helyezkedik el, mérgez˝o tüskéi vannak, ezért a kígyók nem tudnak áthatolni rajta, meghalnak t˝ole. A kígyó testének hossza egységekben. Lásd összeütközik.
13
2008. május 14.
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
2. Követelmény, projekt, funkcionalitás 2.1. Követelmény definíció 2.1.1.
A program célja, alapvet˝o feladata
A program egy ügyességi játék, ahol a feladat kígyók irányítása. A játék célja, hogy a játékos által irányított kígyó minél tovább éljen és a játék végén minél hosszabb testtel rendelkezzen. Részletesebb leírás a játék ismertetésénél található. A fejlesztés célja egy olyan játékprogram el˝oállítása, amely m˝uköd˝oképes, élvezhet˝oen játszható, megfelel˝o kikapcsolódást nyújt és minden olyan gépen futtatható, melyen a megfelel˝o Java futtatókörnyezet található. A fejlesztés során különleges hangsúlyt kap az UML modellez˝orendszer minél tökéletesebb használata. Emellett fontos szempont még számunkra a csapatban történ˝o fejlesztés sajátosságainak megismerése. 2.1.2. A fejleszt˝okörnyezet
A fejlesztéshez használt számítógépeken Debian Linux, illetve Microsoft Windows XP Professional operációs rendszer fut. A szoftver implementációjára Java nyelven kerül sor, fordításhoz a HSZK számítógépein futó régebbi környezettel való kompatibilitás érdekében – a megbízó külön kérésére – a Sun Java Development Kit (továbbiakban JDK) 1.4.2 verzióját használjuk. A modellezés és tervezés a nyílt forrású, platformfüggetlen BOUML 4.2.1 felhasználásával történik, segítségével az UML osztálydiagramból Java forráskód generálható. A kapott vázat az implementáció során szövegszerkeszt˝ovel (KDE alatt Kate, Windows alatt Notepad) szerkesztjük és JDK fordítót használó shell scriptekkel ill. batch fájlokkal készítünk bel˝ole bájtkódot. A dokumentumok szerkesztése (beleértve a naplóbejegyzéseket is) TWiki rendszerben történik, ezt egy saját készítés˝u script kinyomtatás el˝ott LATEX formátumba alakítja. Az egyes részeket (fejezeteket, alfejezeteket) a nyílt forrású Kile 2.0.0 programmal szerkesztjük össze, majd végül pdfTeXk 1.40.3-cal DVI fájllá alakítjuk, melyb˝ol a dvipdfm 0.13.2c programmal nyomtatható PDF állományt tudunk el˝oállítani.
Háztartási Létra
14
2008. május 14.
2.1 Követelmény definíció
2.1.3.
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
A futtatáshoz szükséges környezet
Sun Java Runtime Environment (továbbiakban JRE) 1.4.2, illetve az a számítógép, mely ezt futtatni képes. (A Sun ajánlásai PC-re: Pentium 166 MHz vagy gyorsabb processzor és 32 MB memória.) A játék használatához grafikus képerny˝o és billenty˝uzet szükséges. Ez egy minimum követelmény, zökken˝omentes játékmenethez kicsit er˝osebb gép javallott, különösen, ha a felhasználó számítógépén a háttérben játék közben futnak még más programok is. Magának a programnak nem lesz nagy a memóriaigénye, de elképzelhet˝o, hogy a grafikus részek miatt meghaladja az 1 MB-ot. (Ez csak becslés.) 2.1.4.
A felhasználói felület
A játékprogram végs˝o változata grafikus felhasználói felülettel rendelkezik. A programot a felhasználó a billenty˝uzet segítségével vezérelheti, több felhasználó esetén eltér˝o billenty˝ukombinációk használatával. Utóbbiakat igyekezünk úgy kialakítani, hogy – magyar billenty˝uzetkiosztás feltételezve – több játékos esetén sem okozzon gondot a közös billenty˝uzet használata. A játékmenetr˝ol további információ a felhasználói kézikönyvben található. 2.1.5.
Min˝oségi tényez˝ok
Újrafelhasználhatóság
A cél az, hogy a grafikus felhasználói felületet a program többi részét˝ol teljesen különválasszuk a Model-View-Controller elv szerint, így lehet˝ové téve azt, hogy kés˝obb a grafikus felület egyszer˝uen és gyorsan változtatható legyen. A szoftver megtervezésekor a korszer˝u szoftvertechnológia és tervezési minták alkalmazásával törekszünk a kód minél magasabb szint˝u újrafelhasználhatóságát biztosítani, így a grafikus felület például átültethet˝o egy másik alkalmazásba, vagy újabb tulajdonságokkal ruházható fel. Rugalmasság és teljesítmény
A rugalmasságot a fejleszt˝okörnyezet biztosítja, a játéknak ugyanis minden olyan környezetben futtathatónak kell lennie, melyben létezik megfelel˝o Java futtatókörnyezet. A cél olyan szoftver létrehozása, amely átlagos vagy átlagosnál Háztartási Létra
15
2008. május 14.
2.2 Projekt terv
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
alacsonyabb teljesítmény˝u személyi számítógépeken is élvezhet˝oen futtatható, a Java technológia lehet˝oségeit optimálisan kihasználva. A grafikus felületnél törekedni fogunk a folyamatos animációk alkalmazására és ügyelni fogunk az élményteli kikapcsolódást nyújtani képes játékmenet biztosítására. Felhasználhatóság
A használat különösebb tanítást nem igényel, alapfokú számítástechnikai tudással akár a felhasználói kézikönyv elolvasása nélkül is könnyen játszható. A felhasználó részér˝ol feltételezzük, hogy képes elindítani a számítógépet és a játékot. A cél olyan min˝oségi grafikus felület és intuitív irányítási rendszer létrehozása, amely a szoftver használatának könny˝u elsajátíthatóságát, és élvezhet˝o játékmenetet biztosít. 2.1.6. A szoftver min˝osítése
A kifejlesztett szoftver akkor megfelel˝o, ha minél pontosabban megegyezik a fentebb leírtakkal. Ezt ellen˝orizni lehet a játék futtatásával és kipróbálásával, illetve a forráskód és a modell összevetésével. A min˝oség biztosítása korszer˝u tervezési, tesztelési és validációs eljárásokkal lehetséges. 2.1.7. A kibocsátás
A program kibocsátására el˝oször a megbízó által meghatározott módon és id˝oben kerül sor. Ellen˝orzés és értékelés után a program hozzáférhet˝o lesz a világhálón is. 2.2. Projekt terv 2.2.1. A fejleszt˝oi csapat
Csapat tagjai Bertók Zsófia Tönköl Viktor Veres-Szentkirályi András (csapatvezet˝o)
Háztartási Létra
16
2008. május 14.
2.2 Projekt terv
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
A csapatunk három f˝ob˝ol áll. A tudásunk és érdekl˝odésünk különböz˝o, így nyilván ennek figyelembevételével osztjuk ki a feladatokat. Azonban a kiosztásnál ügyelünk arra, hogy mindenki részt vegyen a fejlesztés minden mozzanatában. Hiszen a kurzus célja éppen az, hogy mindenkit megismertessen a csoportos fejlesztéssel. A csapat minden tagja körülbelül azonos mértékben fog dokumentálni, implementálni, tesztelni. A csapat rendszergazdája a csapatvezet˝o, Veres˝ a vezet˝o programozó is. A dokumentációért els˝o sorban Szentkirályi András. O Bertók Zsófia felel, az UML felel˝ose pedig Tönköl Viktor. A tesztelést közösen végezzük. 2.2.2. Életciklus modell Követelmények
Az egész projektet a követelmények rögzítésével kezdjük. Azonban figyelünk arra, hogy semmilyen konkrét implementációs részletet ne rögzítsünk. Analízis modell
Megtervezzük a program szerkezetét leíró dinamikus- és osztálydiagrammokat. State-chartokkal és szekvencia diagrammokkal modellezzük az inicializálást és bels˝o m˝uködést. Az itt elkészült dokumentumok és UML elemek az egész projekt elvi alapját képezik. Szkeleton
Az analízis modell szakaszban készült dokumentumok alapján megkezdjük az implementálást. Itt kiderülnek az el˝oz˝o szakaszban elkövetett hibák és hiányosságok. Tartalmazza valamennyi a végs˝o rendszerben szerepl˝o business objektumot, ám ezek törzse még nincs kitöltve. Minden metódus indulásakor kiírja a saját nevét és a meghívja a végrehajtáshoz szükséges további metódusokat. Csak karakteres I/O felülettel rendelkezik, esetleges elágazásoknál a program interaktívan a felhasználó válasza alapján halad tovább. A szkeletonon ellen˝orizhet˝onek kell lennie az elkészült szekvencia diagrammoknak.
Háztartási Létra
17
2008. május 14.
2.2 Projekt terv
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
Prototípus (proto)
A szkeletont algoritmusokkal és egyéb funkciókkal egészítjük ki. A proto csak karakteres I/O felülettel rendelkezik, amelyet úgy valósítunk meg, hogy mind az input, mind az output fájl is lehessen. Ennek már tökéletesen m˝uköd˝oképesnek kell lennie, a program tesztelése ennek a szakasznak kiemelked˝oen fontos része. A teszt kiterjed a megvalósított objektumokra azok függvényeire és a köztük lév˝o kapcsolatok helyességére. Grafikus változat
Az el˝oz˝o szakasz lezárása után indul meg a már hibátlanul m˝uköd˝o prototípushoz a grafikus felület tervezése és megvalósítása. A végleges irányítás, a szinkronizáció és a további tesztek elvégzése is e szakasz része. Fontos hogy a grafikus felület nem része magának a prototípusnak attól leválasztható és akár egy másik grafikus felület helyezhet˝o a protora, a MVC modellnek megfelel˝oen. A ezen részek sikeres lezárulása után a program elkészült leadható, maga a kód és az egyes szakaszokban folyamatosan b˝ovült dokumentáció. 2.2.3.
Szervezési struktúra
Személyes megbeszéléseken a feladatok szétosztása történik. Figyelmet fordítunk arra, hogy minden feladat szétosztásra kerüljön. A személyes határid˝ok megszabása egyénileg történik, majd rögzítésre kerül a TWiki rendszerben. Így tudjuk biztosítani azt, hogy mindenki tisztában legyen a feladatával és az kés˝obb is felidézhet˝o legyen. Ezekre a megbeszélésekre a hét elején szakítunk id˝ot a konzultációs id˝opontunk után. Elektronikus kommunikáció
Skype IRC
Háztartási Létra
A kisebb egyéni feladatot érint˝o problémák gyors megbeszélését intézzük itt. A projektnek létrehoztunk egy csatornát és ezen beszéljük meg a fejlesztés közben felmerül˝o nagyobb mindenkit érint˝o, de személyes megbeszélést nem igényl˝o problémákat.
18
2008. május 14.
2.2 Projekt terv
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
A napló vezetésén és a dokumentumok tároló, szerkeszt˝o helyén kívül, a projektet érint˝o fontosabb dokumentumok feltöltésére is használjuk. Subversion Az elkészült kódokat tároljuk itt, hogy mindenki a legfrissebb verzióhoz férjen hozzá és ne tudjuk követhetetlenül felülírni egymás változtatásait.
TWiki
2.2.4.
Fejlesztési ütemterv
A program fejlesztésének három f˝o állapotát különböztetjük meg: • Szkeleton: a dinamikus- és objektum modell helyes implementációja a cél. Ha ezt megoldottuk tovább mehetünk a résztelesebb implementáció felé. • Prototípus: a program m˝uköd˝oképes, ám még grafikus felület nélküli változata. Ezen hajtjuk végre a program els˝o átfogó tesztelését. • Grafikus változat: a prototípust kiegészítjük a grafikus felülettel, ez adja a program végs˝o változatát. 2.2.5.
Határid˝ok
febr. 20 febr. 27. márc. 5. márc. 12. márc. 19. márc. 26. ápr. 2. ápr. 16. ápr. 23. máj. 7. máj. 14.
Követelmény, projekt, funkcionalitás – beadás Analízis modell kidolgozása 1. – beadás Analízis modell kidolgozása 2. – beadás Szkeleton tervezése – beadás Szkeleton – beadás Prototípus koncepciója – beadás Részletes tervek – beadás Prototípus – beadás Grafikus felület specifikációja – beadás Grafikus változat – beadás Összefoglalás – beadás
Háztartási Létra
19
2008. május 14.
2.2 Projekt terv
2.2.6.
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
Szükséges dokumentációk
A projekt folyamán a megbízó által megadott formában elkészül˝o dokumentációkat két nagyobb csoportra osztjuk. Felhasználói dokumentációk
Ezek az anyagok a játékosnak készülnek. Az átlag felhasználóról nem tételezünk fel semmilyen mélyebb szaktudást, tehát nagy figyelmet fordítunk arra, hogy egyszer˝uen, számítástechnikai szakszavak használata nélkül írjuk meg. Ide tartozik például a telepítési útmutató, felhasználói kézikönyv. Fejleszt˝oi dokumentáció
A program bels˝o szerkezetét, m˝uködését leíró dokumentumok és a projekt napló alkotják. Célja, hogy egy másik programozó megértse a program m˝uködését, illetve a kés˝obbi fejlesztést megkönnyítése. A fejlesztés alatt folyamatosan készítjük a fent említett dokumentumokat, és a megbízó által meghatározott id˝opontokban leadjuk o˝ ket. Az elkészült dokumentumok mindegyikét az egész csapat elolvassa, véleményezi és elfogadja, csak ezután kerül kibocsátásra.
Háztartási Létra
20
2008. május 14.
2.3 Essential Use Case-ek
2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS
2.3. Essential Use Case-ek 2.3.1.
Diagramok
2.3.2.
Use Case leírások
Use Case Új játékot indít Actor Játékosok Leírás A játékosok kiválasztják a nehézségi szintet és sebességet. Ezután elindítják a játékot. Use Case Kígyót mozgat Actor Játékosok Leírás A játékosok versenyeznek egymással. Ezt úgy teszik, hogy a játék során az általuk irányított kígyó mozgási irányát megváltoztatják.
Háztartási Létra
21
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
3. Analízis modell kidolgozása 3.1. Objektum katalógus 3.1.1.
Fieldberry
Leírás
Mezei bogyó Alaposztály
Foreground Példányok száma
N Változók
nincsenek Komponensek
nincsenek Metódusok
void meetSnake(SnakeHead otherParty) A paraméterül kapott SnakeHead fejnek meghívja a fieldberryInWay() metódusát. Felel˝osségei
Kígyó értesítése az ütközésr˝ol.
Háztartási Létra
22
2008. május 14.
3.1 Objektum katalógus
3.1.2.
3 ANALÍZIS MODELL KIDOLGOZÁSA
Foreground
Leírás
A játéktéren elhelyezked˝o objektumok absztrakt alaposztálya. Alaposztály
nincs Példányok száma
közvetlenül nem példányosítható Változók
nincsenek Komponensek
nincsenek Metódusok
Visszatérési értéke true, ha a kör végén törl˝odik az objektum, egyébként false. Foreground osztály beli megvalósítása konstans false értéket ad vissza. void meetSnake(SnakeHead otherParty) Absztrakt metódus, minden gyermekosztály számára kötelez˝oen megvalósítandó.
bool isGhost()
Felel˝osségei
nincsenek
Háztartási Létra
23
2008. május 14.
3.1 Objektum katalógus
3.1.3.
3 ANALÍZIS MODELL KIDOLGOZÁSA
Game
Leírás
Az osztály-hierarchia f˝o objektuma, a játék main függvénye ennek statikus része, olyan alapvet˝o funkciókért felel mint a játék indítása, leállítása illetve a programból való kilépés végrehajtása. Alaposztály
nincs Példányok száma
1 Változók
nincsenek Komponensek
GameField field A játéktér Metódusok
void gameOver(List winner) Winner játékos(ok) nyert(ek), a játéknak vége. void pause() Megállítja a játékot GameField pauseTimer() metódusának meghívásával. void start() Elindítja a játékot, létrehozza a GameField objektumot, majd meghívja annak initField() metódusát, mely létrehozza a játékteret. void quit() Befejezi a program futtatását. Felel˝osségei
A játék alapvet˝o funkcióiért felel; játék indítása, leállítása.
Háztartási Létra
24
2008. május 14.
3.1 Objektum katalógus
3.1.4.
3 ANALÍZIS MODELL KIDOLGOZÁSA
GameField
Leírás
A játékteret reprezentáló objektum, inicializálásakor létrehozza a pályát, f˝o feladata program futása közben a kígyók mozgásának és a bogyók megjelenésének az összehangolása. Alaposztály
nincsen Példányok száma
1 Változók
nincsenek Komponensek
List MovingObjects A játékosok SnakeWrapper objektumai. List Tiles A játékteret alkotó mez˝ok. Metódusok
void gameRound() A játék egy körét futtatja le, id˝ozít˝o hívja meg. A kör során minden játékos elmozdul SnakeWrapper objektumainak steerSnake() metódusával, megtörténnek az esetleges ütközések más Foreground objektumokkal, a kör végén pedig ellen˝orzi, hogy futhat-e még tovább a játék, avagy gy˝oztest kell hirdetni. A kör végén meghatározott valószín˝uséggel bogyó(ka)t helyez el véletlenszer˝u helyeken.
Háztartási Létra
25
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
Létrehozza a játékteret alkotó Tile objektumokat és a rajtuk elhelyezked˝o statikus objektumokat (pl. sövény). A játékosok SnakeWrapper objektumait létrehozza, majd elhelyezni o˝ ket a kiindulási helyükön a createSnake() metódussal. Végül elindítja az id˝ozít˝ot. void pauseTimer() Leállítja az id˝ozít˝ot, ezzel szünetelteti a játékot. A szünet után startTimer() tudja újraindítani. void startTimer() Elindítja az id˝ozít˝ot, amely rendszeres id˝oközönként meghívja a gameRount() metódust. void stopTimer() Leállítja és megsemmisíti az id˝ozít˝ot. void initField()
Felel˝osségei
Játéktér létrehozása, játékosok mozgásának összehangolása, játék végének figyelése, bogyók pályára szórása. 3.1.5.
Hedge
Leírás
Sövény Alaposztály
Foreground Példányok száma
N Változók
nincsenek Komponensek
nincsenek
Háztartási Létra
26
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
Metódusok
void meetSnake(SnakeHead otherParty) A paraméterül kapott SnakeHead szelvénynek meghívja a hedgeInWay() metódusát. Felel˝osségei
Kígyó értesítése az ütközésr˝ol. 3.1.6.
Sawberry
Leírás
F˝urészbogyó Alaposztály
Foreground Példányok száma
N Változók
nincsenek Komponensek
nincsenek Metódusok
void meetSnake(SnakeHead otherParty) A paraméterül kapott SnakeHead szelvénynek meghívja a sawberryInWay() metódusát.
Háztartási Létra
27
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
Felel˝osségei
Kígyó értesítése az ütközésr˝ol. 3.1.7.
SnakeHead
Leírás
A kígyó egy megkülönbözetett szelvénye, a feje. Alaposztály
SnakeSection Példányok száma
0..4 Változók
Amennyiben a fej képes más szelvényeket átharapni, true, egyébként false. Stoneberry stonePickup A fejbe kerül˝o esetleges k˝obogyó.
bool isPowerful
Komponensek
nincsenek Metódusok
void fieldberryInWay (Fieldberry A fej mezei bogyóval ütközött, melyfieldberry) nek hatására megnöveli a kígyót a proposeEnlargement() metódus rekurzív meghívásával. void hedgeInWay (Hedge hedge) A fej sövénynek ütközött, melynek hatására megöli a kígyót a splitOff() metódus rekurzív meghívásával.
Háztartási Létra
28
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
void initAtTile (Tile initPos, int init- Beállítja position és proposedEnlarLen) gement értékét. void pullToTile(Tile newPos) Az örökölt pullToTile() metódus lefutása után elindítja a rekurzív passStoneDown() metódust, visszatérési értékt˝ol függ˝oen meghívja a giveStone() metódust stonePickup értékét átadva, majd törli azt. void sawberryInWay (Sawberry A fej f˝urészbogyóval ütközött, melysawberry) nek hatására isPowerful változót true értékre állítja és elindít egy id˝ozít˝ot, melynek lejártakor isPowerful változó visszaáll false értékre. void snakeInWay (SnakeHead A fej másik kígyónak ütközött, melysnake) nek hatására megöli kígyót a splitOff() metódus rekurzív meghívásával. void stoneberryInWay (Stoneberry A fej k˝obogyóval ütközött, melynek stoneberry) hatására a k˝obogyót lenyeli a stonePickup változó beállításával. Felel˝osségei
Bogyókkal való ütközések kezelése, fej állapotának nyilvántartása. 3.1.8.
SnakeSection
Leírás
A kígyó egy szelvénye. Alaposztály
Foreground Példányok száma
N Háztartási Létra
29
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
Változók
Amennyiben a szelvény halottnak számít, true, egyébként false. Stoneberry stone A szelvényben lév˝o esetleges k˝obogyó. Tile position Az a mez˝o, amelyen a szelvény éppen tartózkodik. int proposedEnlargement Ha a szelvény növekedésben van, akkor a hátralév˝o növekedés mértéke szelvény darabszámban, egyébként 0. bool isDead
Komponensek
SnakeSection next A sorban következ˝o szelvény. Metódusok
(Stoneberry A szelvénybe átad egy StoneBerry k˝obogyót, melynek hatására saját stone értékét lecseréli a kapottra. bool isGhost() IsDead értékét adja vissza. void meetSnake (SnakeHead other- Ha követ tartalmaz, vagy a másik kíParty) gyó nem evett f˝urészbogyót, a paraméterül kapott SnakeHead fejnek meghívja a snakeInWay() metódusát, egyébként levágja a saját farkát a splitOff() metódussal. void giveStone newStone)
Háztartási Létra
30
2008. május 14.
3.1 Objektum katalógus
bool passStoneDown()
void proposeEnlargement length)
Háztartási Létra
3 ANALÍZIS MODELL KIDOLGOZÁSA
Rekurzívan végighalad a szelvényeken, megvizsgálva, hogy van-e hely kövek mozgatásához. Amikor a kígyó farkára (next értéke NULL) hívódik meg, visszatérési értéke false, ha a farok tartalmaz k˝obógyot, egyébként true. Minden más szelvény a next szelvényre meghívott metódus true értékkel való visszatérése után – ha van benne k˝o – átadja azt a giveStone() metódussal, majd visszatér true értékkel. Amennyiben a szelvényben van is k˝o, és a következ˝o szelvény is jelzi false értékkel, hogy nincs neki hely, o˝ is false értékkel tér vissza. (int A kígyó hosszát megnöveli length egységgel. Amennyiben a szelvény nem a kígyó farka (next változó értéke nem NULL), rekurzívan továbbadja az üzenetet, egyébként hozzáad a proposedEnlargement változóhoz length egységet.
31
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
A szelvényt newPos mez˝ore rántja, melynek hatására a szelvény a paraméterként kapott Tile objektumra ráhelyezi magát az addForeground() metódussal, majd a mögötte lev˝ovel is – ha létezik ilyen – ugyanezt teszi, position átadásával. Amennyiben next értéke NULL (tehát a kígyó farka a szelvény) és proposedEnlargement pozitív, az eddig elfoglalt Tile mez˝on létrehoz egy új szelvényt (ez lesz az új farok), majd átadja neki az initAtTile() metóduson keresztül eddigi pozícióját és proposedEnlargement eggyel csökkentett értékét. Amennyiben a farok nem végez növekedést, az éppen elhagyott mez˝ot (position változó) letörli egy addForeground(NULL) hívással. Végül a position változót beállítja newPos értékre. Levágja (azaz szellemmé változtatja) a kígyó adott szelvényét, melynek hatására a szelvény a mögötte lev˝ovel – ha létezik ilyen – is ugyanezt teszi.
void pullToTile (Tile newPos)
void splitOff()
Felel˝osségei
Kígyók közötti ütközések kezelése, szelvény állapotának tárolása, üzenetek rekurzív közvetítése a kígyó testében. 3.1.9.
SnakeWrapper
Leírás
A SnakeHead fej objektum burkolója, mely a térben tájékozódást kezeli.
Háztartási Létra
32
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
Alaposztály
nincs Példányok száma
2–4 Változók
Tile curHeadPos A kígyó fejének aktuális helye. int snakeDir A kígyó sebességének iránya. int snakeSpeed A kígyó sebességének nagysága. Komponensek
SnakeHead RealSnake Ha a kezelt kígyó él, a kezelt kígyó feje, egyébként NULL. Metódusok
void createSnake(Tile where, int InitLen hosszal, initDir irányú és initinitLen, int initDir, int initSpeed) Speed nagyságú sebességgel induló kígyó létrehozása a where mez˝on. bool isAlive() Ha RealSnake értéke nem NULL, RealSnake isGhost változójának értékét, egyébként false értéket ad vissza. void steerSnake(int angle) A kígyó mozgatása és esetleges elfordulása angle egységgel. A metódus lekérdezi curHeadPos objektumtól nextInDir() metóduson keresztül snakeSpeed és angle figyelembevételével a következ˝o mez˝ot, ahova a kígyó feje kerül, majd meghívja a kapott Tile mez˝o moveSnakeHere() metódusát, átadva neki a RealSnake objektumot. Háztartási Létra
33
2008. május 14.
3.1 Objektum katalógus
3 ANALÍZIS MODELL KIDOLGOZÁSA
Felel˝osségei
Egy kígyó térbeli mozgásának kezelése. 3.1.10.
Stoneberry
Leírás
K˝obogyó Alaposztály
Foreground Példányok száma
N Változók
nincsenek Komponensek
nincsenek Metódusok
void meetSnake(SnakeHead otherParty) A paraméterül kapott SnakeHead szelvénynek meghívja a stoneberryInWay() metódusát. Felel˝osségei
Kígyó értesítése az ütközésr˝ol.
Háztartási Létra
34
2008. május 14.
3.1 Objektum katalógus
3.1.11.
3 ANALÍZIS MODELL KIDOLGOZÁSA
Tile
Leírás
A játéktér egy mez˝oje, amely kizárólag Tile szomszédait és a rajta elhelyezked˝o Foreground objektumot ismeri. Alaposztály
nincs Példányok száma
N Változók
List neightbours Szomszéd mez˝ok listája. Komponensek
Foreground Object A mez˝on elhelyezked˝o objektum. Amennyiben a mez˝o üres, értéke NULL. Metódusok
void addForeground(Foreground Elhelyez egy Foreground objektumot toAdd) a mez˝on. Amennyiben a mez˝on volt el˝otte objektum, az megsemmisítésre kerül, ezért csak a pálya inicializálásakor használjuk. bool isOccupied() Amennyiben a mez˝o üres (Object értéke NULL), visszatérési értéke false, egyébként true. Bogyók pályára helyezésekor használjuk, mivel bogyó csak szabad területre kerülhet.
Háztartási Létra
35
2008. május 14.
3.2 Osztályok leírása
3 ANALÍZIS MODELL KIDOLGOZÁSA
void moveSnakeHere(SnakeHead A snake fejjel rendelkez˝o kígyót a mesnake) z˝ore mozgatja. Ha a mez˝o foglalt, a már ott lév˝o Foreground objektumnak meghívja a meetSnake() metódusát, paraméterként átadva neki a kígyó fejét. Ha a kígyó az ütközés után még él, fejét a mez˝ore helyezi a pullToTile() metódus meghívásával. void deleteGhost() Amennyiben Object szellemmé vált, letörli a mez˝or˝ol. Erre a körök végén van szükség. Tile nextInDir(int dir) Visszaadja a mez˝o dir irányban lév˝o szomszédját. void setNeighbour(Tile otherEle- Beállítja a dir irányban lév˝o szomszément, int dir, bool notify) dosságot otherElement mez˝ovel, majd amennyiben notify értéke false, értesíti a szomszédot önmaga meghívásával az ellenkez˝o irányban a szomszédra, notify=true paraméterrel. Felel˝osségei
Mez˝ok szomszédosságának kezelése, ütközések elindítása, szellemek törlése. 3.2.
Osztályok leírása
3.2.1.
Fieldberry
Mezei bogyó, az o˝ t megev˝o kígyó hossza egy szelvénnyel n˝o. GameField hozza létre és megsemmisül megevésekor ill. ha a játék véget ér. 3.2.2.
Foreground
A játéktéren elhelyezked˝o objektumok absztrakt alaposztálya, gyermekosztályai számára egységes értesítési felületet biztosít kígyóval való ütközés esetére a meetSnake() metóduson keresztül. Képes szellemként létezni, ezt akkor használjuk Háztartási Létra
36
2008. május 14.
3.2 Osztályok leírása
3 ANALÍZIS MODELL KIDOLGOZÁSA
ki, ha egy kör során több kígyó ütközik, ezért szükség van arra, hogy az ütközések kiszámítása érdekében megsemmisülés el˝ott a testrészek a kör végéig a pályán maradjanak. A szellem objektumokat a tulajdonos Tile minden kör végén megsemmisíti. 3.2.3.
Game
A játékot képvisel˝o objektum, a program elindításakor jön létre, kilépéskor semmisül meg. A játék elindulásakor létrehozza a játékteret és elindítja az eseményeket. A játék végekor eltakarítja a játék idejére létrejött objektumokat. 3.2.4.
GameField
A játéktér objektuma, Game hozza létre a játék indításakor. Inicializálásakor létrehozza a játékteret alkotó Tile mez˝oket és a kígyók SnakeWrapper objektumait, majd elindítja saját id˝ozít˝ojét. Játék közben körönként lehet˝oséget ad a kígyóknak mozgásra, továbbá véletlenszer˝uen megjelenít bogyó(ka)t. Körök végén ellen˝orzi, hogy véget ért-e a játék, és ha igen, a gy˝oztes(ek) átadása után Game objektum megsemmisíti. 3.2.5.
Hedge
Sövény, a nekiütköz˝o kígyók meghalnak t˝ole. GameField hozza létre a játék kezdetén és csak a játék végén semmisül meg a pályával együtt. 3.2.6.
Sawberry
F˝urészbogyó, amit˝ol o˝ t megev˝o kígyó feje er˝ossé válik. GameField hozza létre és megsemmisül megevésekor ill. ha a játék véget ér. 3.2.7.
SnakeHead
A kígyó kiemelt szelvénye, a feje, az ütközéseket SnakeSection osztályból örökölt módon kezeli. A bogyók közvetlenül rá vannak hatással. SnakeWrapper hozza létre a játék kezdetekor, a kígyó halálakor, vagy a játék végén semmisül meg.
Háztartási Létra
37
2008. május 14.
3.2 Osztályok leírása
3.2.8.
3 ANALÍZIS MODELL KIDOLGOZÁSA
SnakeSection
A kígyó egy szelvénye, akár másik kígyó, akár saját fejével ütközik, a feladat leírásában megadottaknak megfelel˝oen megöli a másik kígyót vagy megcsonkítja magát. SnakeHead, ill. másik SnakeSection hozza létre növekedéskor. Leharapás esetén, a kígyó halálakor, vagy a játék végén semmisül meg. 3.2.9.
SnakeWrapper
A SnakeWrapper objektum burkolója, a térbeli tájékozódást kezeli. Ismeri és kezeli a kígyó sebességének nagyságát és irányát, valamint fejének helyét. A játék kezdetekor GameField hozza létre és a játék végén semmisül csak meg – akkor is, ha a kezelt kígyó már halott. 3.2.10. Stoneberry
K˝obogyó, az o˝ t megev˝o kígyó lenyeli. GameField hozza létre és megsemmisül, ha – amennyiben megette egy kígyó – a SnakeSection szelvény, amelyik tartalmazza, megsemmisül, vagy a játék véget ér. 3.2.11.
Tile
A játéktér egy mez˝oje, melyen egy vagy nulla objektum tartózkodhat. Figyel arra, hogy ha kígyó kerül rá, az esetlegesen már ott lév˝o másik objektumot tájékoztassa az ütközésr˝ol. A játék kezdetekor GameField hozza létre és a játék végén semmisül meg.
Háztartási Létra
38
2008. május 14.
3.3 Statikus struktúra diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
3.3. Statikus struktúra diagramok
Háztartási Létra
39
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
3.4. Use case-ek és szekvencia diagramok 3.4.1.
Use case-ek
Háztartási Létra
40
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Use Case Start new game Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok elindítanak egy új játékot. A játéktér inicializálódik, létrejönnek a pályaelemek, melyek csatolódnak egymáshoz. Létrejönnek a játékban szerepl˝o objektumok is, pl. kígyó, bogyók, sövény. Use Case Play a round Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok játszanak egy kört. Ennek során mozgatják a kígyót és versenyeznek a gy˝ozelemért. Use Case Meet with an object Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok találkoznak egy objektummal a pályán. Az objektum típusától függ˝oen máshogy reagálnak rá. Use Case Meet with snake Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok egy másik játékos kígyójával találkoznak. Ekkor vagy leharapják a másik kígyó farkát, vagy meghalnak. Use Case Meet with fieldberry Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok mezei bogyóval találkoznak. A kígyójuk hossza ilyenkor eggyel n˝o.
Háztartási Létra
41
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Use Case Meet with stoneberry Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok k˝obogyóval találkoznak. A kígyójuk testébe ilyenkor egy k˝o kerül. Use Case Meet with sawberry Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok f˝urészbogyóval találkoznak. A kígyójuk harapása ilyenkor er˝os lesz. Use Case Meet with hedge Actor Players Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok sövénnyel találkoznak. A kígyójuk ilyenkor meghal.
Háztartási Létra
42
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3.4.2.
3 ANALÍZIS MODELL KIDOLGOZÁSA
Szekvencia diagramok
Init
A Game objektum start() függvényével indítható a játék, ami létrehozza a játékmez˝ot (GameField). A Game Field néven letárolja a létrehozott GameFiledet, ezután meghívja a GameField initField() metódusát. Most csak egy kis példa pályát hozunk létre. A pálya három egymás melletti mez˝ob˝ol áll, aminek az egyik szélére létrehozunk egy kígyófejet a másikra pedig Háztartási Létra
43
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
egy sövényt. Azért csak egy kígyófej fog létrejönni, mert a játék indulásánál még nincs a kígyónak teste, azonban be van állítva valamekkora növekedés. Ez olyan mintha a kígyó egy lyukból jönne el˝o. A diagramon jól látszik a setNeighbour(Tile) metódus használata. Minden lépésben egy kölcsönös kapcsolat épül ki. Bogyók létrehozás után egy Tile mez˝ore lesznek elhelyezve az addForeground(Foreground) metódus meghívásával. Kígyók létrehozásához el˝oször egy SnakeWrapper -t példányosítunk, amit letárol a GameField osztály a MovingObject attribútumába. Majd a SnakeWrapper létrehoz egy fejet (SnakeHead), az initAtTile(Tile) metódus meghívásának hatására elhelyezi a fej magát egy Tile objektumon. Az egyes lépesek természetesen egymás után többször elvégezhet˝oek, hogy a kívánt pályát kapjuk.
Háztartási Létra
44
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Round
Háztartási Létra
45
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Egy kör lefutását a GameField objektum gameRound() függvényének lefutása jelenti. El˝oször végigmegy az összes kigyón és lekezeli az ütközéseket. Fontos, hogy mivel ezek sorban futnak le, ezért kígyó elt˝unni csak akkor fog, ha már minden kígyón végigment a léptetés. Az ütközések több módon lefuthatnak, ezért azok egy másik (meetSnake szekvenciák) diagramon kaptak helyet a jobb áttekinthet˝oség érdekében. Amennyiben a kígyó nem vált szellemé (ghost állapot) megtörténik a kígyó el˝oremozdítása a pullToTile() metódus meghívásával. Ez az objektum katalógusban részletezett lépeseket végrehajtja. Ha a kígyónak növekednie kell, akkor a legutolsó SnankeSection helyére létrejön egy új farok rész. A pullToTile() metódus végén kövek kezelését a katalógusban ismertetett módon a passStoneDown() metódus hajtja végre A kör lefutása a szellemé változott kígyók törlésével, majd új bogyók esetleges elhelyezésével folytatódik. Végül, ha nem maradt egynél több kígyó életben, akkor a függvény meghívja a Game gameOver() függvényét, ami megsemmisíti az összes aktuális játékhoz tartozó objektumot. Ha maradt még elegend˝o kígyó, akkor a játék folytatódik tovább. A kígyók ütközéseinek kiértékelése és mozgatása a kígyókon sorba megyünk végig, így az el˝obb lév˝o kígyók el˝onyben lesznek. Ez versenyhelyzetekben (pl.: két kígyó között egy üres mez˝o van) okozhat "igazságtalan" kiértékelést.
Háztartási Létra
46
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
MeetSnake
A Round szekvencia diagramról hivatkozunk erre. Ez a diagram tartalmazza az összes olyan objektum szekvenciájára való hivatkozást, amivel a kígyó ütközhet.
Háztartási Létra
47
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Snake&Sawberry
Kígyó Sawberry-t eszik. Snake&Fieldberry
Kígyó Fieldberry-t eszik.
Háztartási Létra
48
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Snake&Stoneberry
Kígyó Stoneberry-t eszik. Snake&Hedge
Kígyó sövénnyel ütközik.
Háztartási Létra
49
2008. május 14.
3.4 Use case-ek és szekvencia diagramok
3 ANALÍZIS MODELL KIDOLGOZÁSA
Snake&Snake
Kígyó kígyóval ütközik. Fontos, hogy itt a masik kígyó szerepeben önmaga is lehet, azaz becsavarodhat a kígyó. Az ütközésnek két különböz˝o kimenetele lehet, amint az az ábráról is leolvasható.
Háztartási Létra
50
2008. május 14.
3.5 State-chartok
3 ANALÍZIS MODELL KIDOLGOZÁSA
3.5. State-chartok 3.5.1.
A SnakeSection objektum state-chartja
A SnakeSection objektumnak, amely egy kígyó egy szelvényét jelenti, az alapállapota az Existing snakesection, azaz a „létez˝o kígyószelvény” állapot. A játék során keletkezhetnek új szelvények és meg is semmisülhetnek. Létezésük közben három állapotot vehetnek fel: without stone, with stone és ghost. Ha egy szelvényben van k˝o, akkor with stone állapotban van, ha nincs benne k˝o, de még létezik, akkor a without stone állapotban van. Ha egy szelvény splitOff üzenetet kap, akkor a kör végéig ghost állapotba kerül. A kör végén a ghost állapotban lév˝o szelvények megsemmisülnek. A szelvény létrejöttekor without stone állapotban van.
Háztartási Létra
51
2008. május 14.
3.5 State-chartok
3.5.2.
3 ANALÍZIS MODELL KIDOLGOZÁSA
A SnakeHead objektum state-chartja
A SnakeHead objektum a SnakeSection leszármazottja, így az összes SnakeSection-ben létez˝o állapotot örökli. Így a diagramon csak a SnakeHeadspecifikus állapotok vannak feltüntetve. A kígyó egész létezése során a feje két állapot között ingázik: a normal és a powerful állapotok között. A kígyó létrejöttekor a kígyó feje normal állapotban van egészen addig, amíg f˝urészbogyót nem eszik a kígyó. Ekkor a kígyófej powerful állapotba kerül át. Powerful állapotból akkor kerül vissza normal állapotba a kígyó feje, ha lejárt a f˝urészbogyó hatása, azaz eltelt egy bizonyos mennyiség˝u id˝o.
Háztartási Létra
52
2008. május 14.
4 SZKELETON TERVEZÉSE
4. Szkeleton tervezése 4.1. A szkeleton modell valóságos use case-ei
Háztartási Létra
53
2008. május 14.
4.1 A szkeleton modell valóságos use case-ei
4 SZKELETON TERVEZÉSE
Use case 0. Initialize the gamefield Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o létrehozza a pályát. Létrejönnek az egyes pályaelemek és beállítódnak a szomszédsági viszonyok. Use case 1. Feed a snake with fieldberry Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o mezei bogyót etet a kígyóval. A kígyó összeütközik a bogyóval, majd felveszi azt, amely valamilyen hatást fejt ki rá, ebben az esetben növekedést. Use case 2. Feed a snake with sawberry Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o f˝urészbogyót etet a kígyóval. A kígyó összeütközik a bogyóval, majd felveszi azt, amely valamilyen hatást fejt ki rá, ebben az esetben f˝urésztulajdonsággal ruházza fel. Use case 3. Feed a snake with stoneberry Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o k˝obogyót etet a kígyóval. A kígyó összeütközik a bogyóval, majd felveszi azt, amely valamilyen hatást fejt ki rá, ebben az esetben k˝o kerül a testébe. Use case 4. Crash a snake into a hedge Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy sövénybe ütközik a kígyójával. Ekkor a kígyó meghal (szellemmé válik), a kör végén pedig törl˝odik a szelleme.
Háztartási Létra
54
2008. május 14.
4.1 A szkeleton modell valóságos use case-ei
4 SZKELETON TERVEZÉSE
Use case 5. Crash a snake into a snake’s a body Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy kígyóval egy másik kígyó testébe ütközik. Különböz˝o események hajtódnak végre annak függvényében, hogy a kígyó f˝urésztulajdonsággal rendelkezik-e vagy sem. Use case 5/a. Crash a normal snake into a snake’s body Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy normál – azaz f˝urésztulajdonsággal nem rendelkez˝o – kígyóval egy másik kígyó testébe ütközik. Ekkor a másikba ütköz˝o kígyó mindenképpen meghal, vagyis szellem lesz. A kör végén törl˝odik a szelleme. Use case 5/b. Crash a powerful snake into a section without stone in a snake’s body Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy f˝urésztulajdonsággal rendelkez˝o kígyóval egy másik kígyó testébe ütközik, mégpedig olyan részre, ahol nincs k˝o. Ekkor leharapja a másik kígyó farkát, o˝ pedig haladhat tovább változatlanul. Use case 6. Crash a snake into a normal snakehead (odd distance) Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy kígyóval egy normál – követ nem tartalmazó, nem f˝urészes – kígyófejbe ütközik úgy, hogy páratlan (egyetlen mez˝o) távolság van közöttük. Ekkor különböz˝o események hajtódnak végre annak függvényében, hogy a kígyó f˝urésztulajdonsággal rendelkezike vagy nem.
Háztartási Létra
55
2008. május 14.
4.1 A szkeleton modell valóságos use case-ei
4 SZKELETON TERVEZÉSE
Use case 6/a. Crash a normal snake into a normal snakehead (odd distance) Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy normál kígyóval egy normál kígyófejbe ütközik úgy, hogy páratlan (egyetlen mez˝o) távolság van közöttük. Ekkor el˝oször lép az egyik kígyó a másik felé, majd a másik kígyó is lép egyet az els˝o felé. Ekkor o˝ már érzékeli, hogy egy kígyónak ütközött, így meghal (szellem lesz). A kör végén törl˝odik a szelleme. Az els˝o kígyó pedig változatlanul haladhat tovább. Use case 6/b. Crash a powerful snake into a snakehead without stone (odd distance) Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy f˝urésztulajdonsággal rendelkez˝o kígyóval nekiütközik egy követ nem tartalmazó kígyófejnek, úgy hogy páratlan (egyetlen mez˝o) távolság van közöttük. Ekkor el˝oször lép a normál kígyó a f˝urészes felé, majd a f˝urészes lépne a normál felé. Ám ekkor o˝ már érzékeli, hogy egy kígyónak ütközött, de mivel f˝urésztulajdonsággal rendelkezik, leharapja a másik kígyónak az egész testét, aki ennek következtében meghal (szellemmé válik). A kör végén törl˝odik a szelleme. Az f˝urészkígyó pedig változatlanul haladhat tovább. Use case 7. Crash a snake into a normal snakehead (even distance) Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy kígyóval egy normál kígyófejbe ütközik úgy, hogy páros távolság van közöttük (nincs köztük üres mez˝o), tehát a kígyók "farkasszemet néznek egymással". Ekkor különböz˝o események hajtódnak végre annak függvényében, hogy a kígyó f˝urésztulajdonsággal rendelkezik-e vagy nem.
Háztartási Létra
56
2008. május 14.
4.1 A szkeleton modell valóságos use case-ei
4 SZKELETON TERVEZÉSE
Use case 7/a. Crash a normal snake into a normal snakehead (even distance) Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy normál kígyóval egy normál kígyófejbe ütközik úgy, hogy páros távolság van közöttük. Ekkor el˝oször az egyik kígyó lép a másik felé, ám beleütközik, és ennek következtében meghal (szellem lesz). Ezután lépne a másik kígyó is az egyik felé, ám o˝ is beleütközik a kígyóba (aki még szellemként szerepel a pályán), o˝ is meghal, vagyis szellem lesz. A kör végén törl˝odik a szellemük. Use case 7/b. Crash a powerful snake into a snakehead without stone (even distance) Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy f˝urésztulajdonsággal rendelkez˝o kígyóval nekiütközik egy követ nem tartalmazó kígyófejnek, úgy hogy páros távolság van közöttük. Ekkor el˝oször lépne a f˝urészkígyó, de mivel érzékeli, hogy egy másik kígyóba ütközött, leharapja a farkát, ebben az esetben az egész testét. Így a normál kígyó meghal, azaz szellemé válik, a kör végén pedig törl˝odik a szelleme. A f˝urészes kígyó a következ˝o kört˝ol változatlanul haladhat tovább. Use case 8. Crash a powerful snake into a snakesection with stone Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy f˝urésztulajdonsággal rendelkez˝o kígyóval nekiütközik egy követ tartalmazó szelvénynek. Ekkor a f˝urészkígyó meghal, vagyis szellem állapotba kerül. A kör végén törl˝odik a szelleme. Use case 9. Put a berry or a hedge to the gamefield Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy bogyót vagy sövényt helyez el a játéktéren. Létrehozza a megadott objektumot, majd elhelyezi a megfelel˝o pályaelemre Háztartási Létra
57
2008. május 14.
4.2 Architektúra
4 SZKELETON TERVEZÉSE
Use case 10. Put a snake to the gamefield Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy kígyót helyez el a játéktéren. Létrehozza a kígyót, amely az elején még csak egy fejb˝ol áll, majd elhelyezi a megfelel˝o pályaelemre. Use case 11. Grow a snake and the snake digests stoneberry Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy kígyóval követ eszik, amelyet meg kell emésztenie. A következ˝o kör során a kígyó növeli hosszát, és eközben a k˝o is legurul a hasában Use case 12. Delete ghosts Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor egy kör végén a szellemek törl˝odnek. Minden pályaelemen végighaladva törli a szellemelemeket azon a mez˝on, ahol elhelyezkedik. 4.2.
Architektúra
Ahhoz, hogy a modell helyes m˝uködését megfelel˝oen tudjuk tesztelni, megvalósítottunk különböz˝o pályákat, amelyeken az egyes use-case-k m˝uködését lehet ellen˝orizni. A pályák mérete és a mez˝ok elrendezése azonos. Az egyes tesztesetek által használt pályák kiindulási elrendezésükben különböznek egymástól, ezeket a jellegzetességeket inicializálás közben, az alábbi tesztpályák egyikén hozzuk létre, például k˝obogyók felhelyezésével. A szkeleton induláskor létrehozza a választott pályát, majd lefuttatja a szükséges számú kört. Ha elágazáshoz ér, a felhasználó válasza alapján halad tovább. A szkeleton nem tartalmaz algoritmusokat, így ellen˝orzéseket sem végez a felhasználó által bemenetként átadott adatokon. Minden függvény belépése és kilépése kiírásra kerül a szöveges konzolra, így követhet˝o a program futása és kés˝obb összevethet˝o a szekvenciadiagramokkal. Háztartási Létra
58
2008. május 14.
4.2 Architektúra
4.2.1.
4 SZKELETON TERVEZÉSE
Tesztpálya
A pálya hat egymással szomszédossági viszonyban lév˝o, a jobboldali ábrán látható módon elrendezett mez˝ob˝ol áll. Az összes tesztesetet ezen a pályán valósítjuk meg, a mez˝ok számozása 0tól kezd˝odik és jobbra ill. lefelé egyértelm˝u. A tesztesetekben ezekre a mez˝okre helyezzük rá az objektumokat. A pályát nem határolja sövény. 4.2.2.
Tesztesetek konkrét pályái
Kígyóütköztet˝o pálya
A tesztpályára telepít rá inicializáláskor a jobboldali és az alsó végébe egy-egy kígyót. A pályán két kígyó ütközése tesztelhet˝o abban az – egyébként gyakoribb – esetben, amikor az egyik kígyó a másik „oldalába” megy bele, azaz nem a fejét találja el. K˝obogyós ütköztet˝o pálya
Az el˝obbi pályához hasonló módon helyezi el az objektumokat, a „keresztez˝odésbe” azonban egy Stoneberry k˝obogyót tesz. A pályán f˝urészbogyót evett kígyó köves SnakeSection szelvénnyel találkozása tesztelhet˝o. Mezei bogyós pálya
A tesztpályára telepít rá inicializáláskor a baloldali végébe egy kígyót, t˝ole egy mez˝ovel jobbra pedig egy Fieldberry mezei bogyót. A pályán a mezei bogyó kígyóra kifejtett hatása (növekedés) tesztelhet˝o. K˝obogyós pálya
Az el˝obbi pályához hasonló módon helyezi el az objektumokat, ám mezei bogyó helyett Stoneberry k˝obogyót tesz fel. A pályán a k˝obogyó kígyóra kifejtett hatása tesztelhet˝o.
Háztartási Létra
59
2008. május 14.
4.2 Architektúra
4 SZKELETON TERVEZÉSE
Sövényes pálya
Az el˝obbi pályához hasonló módon helyezi el az objektumokat, ám mezei bogyó helyett Hedge sövényt tesz fel. A pályán a kígyó sövénynek ütközése tesztelhet˝o. Furészbogyós ˝ pálya
Szintén a mezei bogyós pályához hasonló módon helyezi el az objektumokat, ám mezei bogyó helyett Sawberry f˝urészbogyót tesz fel. A pályán a f˝urészbogyó kígyóra kifejtett hatása tesztelhet˝o, amely azonban nem perzisztens, hiszen a modell nem tárol állapotokat. Kígyók „farkasszemet néznek” pálya
Az 1. tesztpályára telepít rá inicializáláskor a fels˝o sor középs˝o két mez˝ojére egyegy kígyót. A pályán páros számú mez˝onyi távolságra elhelyezked˝o, egymás felé mozgó kígyók ütközése tesztelhet˝o. Kígyók „szétválasztva” pálya
Az el˝obbi pályához hasonló módon helyezi el az objektumokat, ám a baloldali kígyót a 0. mez˝ore helyezi, így a két kígyó között egy mez˝o távolság lesz. A pályán páratlan számú mez˝onyi távolságra elhelyezked˝o, egymás felé mozgó kígyók ütközése tesztelhet˝o. 4.2.3.
Ütemezés
A játék „lelke” a GameField osztály gameRound metódusa, melyet a végleges változatban id˝ozít˝o fog meghívni periodikusan. A modell ellen˝orzése során azonban az ütemezés kézzel fog történni, így amint egy kör véget ért (gameRound visszatért), máris kezd˝odik egy új, és ez egészen addig így megy, ameddig a teszteset végére nem érünk.
Háztartási Létra
60
2008. május 14.
4.3 A szkeleton kezel˝oi felületének terve, dialógusok
4 SZKELETON TERVEZÉSE
4.3. A szkeleton kezel˝oi felületének terve, dialógusok A szkeleton kezel˝oi felületének tervezésénél azt tartottuk szem el˝ott, hogy az analízis modell legyen interaktívan és automatizáltan is tesztelhet˝o. Ezt úgy érjük el, hogy a kérdéseket a szabványos kimeneten tesszük fel, a válaszokat pedig a szabványos bemeneten várjuk. Így a tesztesetek vezérelhet˝oek automatikusan – egy fájlt a bemenetre irányítva – ill. az eredmény is egyszer˝uen elmenthet˝o – a kimenet fájlba irányításával – kés˝obbi elemzés céljából. A szabványos ki- ill. bemenet kizárólagos használatából ered˝oen a szkeleton grafikus felülettel nem rendelkezik, csak szöveges képerny˝ot (konzolt) használ. Mivel a szkeleton nem tárol állapotokat, minden egyes olyan döntés esetén, amely bels˝o állapot(ok) ismeretét igényli (pl. kígyó iránya), a felhasználótól kér be adatot. Az átláthatóság kedvéért minden függvényhívás három normál szélesség˝u karakterrel beljebb kezd˝odik, mint az o˝ t hívó, valamint a függvény nevét˝ol balra két normál karakter szélesség˝u, meghíváskor jobbra, visszatéréskor balra mutató nyíllal jelzi a szkeleton az egymásba ágyazódást. A tesztelés során a függvényhívások paramétereit nem jelenítjük meg, mivel irrelevánsak számunkra a tesztelés során. Az objektumpéldányokat logikusan számozzuk: a pályaelemeket például Descartes koordinátákkal, a kígyókat kiértékelési sorrendben. Helyes lefutás esetén a szekvenciadiagramok szöveges változatát fogjuk kapni a program kimeneteként. A program nem vár argumentumokat, ki- és bemenetét a relációs jel operátorral tudjuk átirányítani, melyet a parancssori héjprogram (pl. bash, cmd.exe) értelmez. ->Hedge[3].meetSnake(SnakeHead ->Snake[1].hedgeInWay(Hedge ->Snake[1].SplitOff() <-Snake[1].SplitOff() <-Snake[1].hedgeInWay(Hedge <-Hedge[3].meetSnake(SnakeHead
Háztartási Létra
61
otherParty) hedge)
hedge) otherParty)
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
4.4. Szekvencia diagramok a bels˝o muködésre ˝ 4.4.1.
Szekvencia diagram a „0. – Initialize the gamefield” use case-hez
Egy pálya létrehozásának szekvenciája, amelyben a tesztpálya 6 mez˝ojének létrehozása, és azok szomszédossági kapcsolataiknak beállítása történik meg. Végrehajtódik az egyes komplexebb tesztesetek elején.
Háztartási Létra
62
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.2.
4 SZKELETON TERVEZÉSE
Szekvencia diagram az „1. – Feed a snake with fieldberry” use case-hez
Egy kígyófej elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez fel lehet használni.
Háztartási Létra
63
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.3.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „2. – Feed a snake with sawberry” use case-hez
Egy bogyó vagy sövény elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez fel lehet használni.
Háztartási Létra
64
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.4.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „3. – Feed a snake with stoneberry” use case-hez
Háztartási Létra
65
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
4.4.5.
Szekvencia diagram a „4. – Crash a snake into a hedge” use case-hez
4.4.6.
Szekvencia diagram az „5. – Crash a snake into a snake’s body” use case-hez
Egy olyan ütközést ábrázoló szekvencia, amikor egy kígyó a másik testébe ütközik. Annak függvényében, hogy a kígyó f˝urésztulajdonsággal rendelkezik-e vagy sem, különböz˝o a lefutása. Ez két helyen okoz különbséget, a diagramon jegyzettel jelölve van, hogy a különböz˝o részek melyik esetekben futnak le. Háztartási Létra
66
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
Háztartási Létra
67
4 SZKELETON TERVEZÉSE
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.7.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „6. – Crash a snake into a normal snakehead (odd distance)” use case-hez
Egy olyan ütközést ábrázoló szekvencia, amikor két kígyó fejjel egymásnak ütközik páratlan távolságról (követ nem tartalmaznak a fejükben). Ekkor a kígyó f˝urészes tulajdonságának függvényében két féle képpen hajtódhat végre. A diagramon jegyzettel ábrázolva van, hogy a különböz˝oképp lefutó részek melyik esethez tartoznak. A szekvenciadiagram terjedelmi okokból a 69. oldalon szerepel. 4.4.8.
Szekvencia diagram a „7. – Crash a snake into a normal snakehead (even distance)” use case-hez
Egy olyan ütközést ábrázoló szekvencia, amikor két kígyó fejjel egymásnak ütközik páros távolságról, azaz a "kígyók farkasszemet néznek" (követ nem tartalmaznak a fejükben). Ekkor a kígyó f˝urésztulajdonságának megfelel˝oen két féle módon hajtódhat végre. A diagramon jegyzettel van jelölve, hogy melyik részek melyik esetekben futnak le. A szekvenciadiagram terjedelmi okokból a 70. oldalon szerepel.
Háztartási Létra
68
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
Háztartási Létra
69
4 SZKELETON TERVEZÉSE
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
Háztartási Létra
70
4 SZKELETON TERVEZÉSE
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.9.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „8. – Crash a powerful snake into a snakesection with stone” use case-hez
Háztartási Létra
71
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.10.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „9. – Put a berry or a hedge to the gamefield” use case-hez
Egy bogyó vagy sövény elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez fel lehet használni.
4.4.11.
Szekvencia diagram a „10. – Put a snake to the gamefield” use case-hez
Egy kígyófej elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez is fel lehet használni.
Háztartási Létra
72
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.12.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „11. – Grow a snake and the snake digests stoneberry” use case-hez
Egy f˝urésztulajdonsággal rendelkez˝o kígyó ütközését ábrázolja egy köves szelvénybe, amely a 2. tesztpályán hajtódik végre.
Háztartási Létra
73
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.13.
4 SZKELETON TERVEZÉSE
Szekvencia diagram a „12. – Delete ghosts” use case-hez
A pályán lév˝o szellemek törlésének szekvenciája, amelyet a többi tesztesetben is fel lehet használni minden kör végén.
Háztartási Létra
74
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4.4.14.
4 SZKELETON TERVEZÉSE
Segédszekvenciák
„Pull To Tile 1” szekvencia diagram
Egy egy hosszú kígyó lépését jeleníti meg, amely nem növekszik. Ha ilyen hajtódik végre valamelyik tesztesetben, akkor lehet felhasználni.
Háztartási Létra
75
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
„Pull To Tile 2” szekvencia diagram
Egy egy egység hosszú kígyó lépését jeleníti meg, amely növekszik közben. Ha ilyen hajtódik végre valamelyik tesztesetben, akkor lehet felhasználni.
Háztartási Létra
76
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
„Move Snake 1” szekvencia diagram
Egy egy egység hosszú kígyó lépését jeleníti meg egy üres mez˝ore, a Pull To Tile 1-es szekvenciát felhasználva. Ha olyan teszteset van, ahol üres mez˝ore lép a kígyó, akkor a "Pull To Tile 1" szekvencia helyett ezt lehet használni.
Háztartási Létra
77
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
„Move Snake 2” szekvencia diagram
Egy egy egység hosszú kígyó lépését jeleníti meg egy üres mez˝ore, a Pull To Tile 2-es szekvenciát felhasználva. Ha olyan teszteset van, ahol üres mez˝ore lép a kígyó, akkor a "Pull To Tile 2" szekvencia helyett ezt lehet használni.
Háztartási Létra
78
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
„Move Snake 3” szekvencia diagram
Egy két egység hosszú kígyó lépését jeleníti meg egy üres mez˝ore, miközben a hosszát 3 egységre növeli a kígyó. Ha valamelyik tesztesetben ilyen hajtódik végre, akkor lehet ezt beágyazva használni.
Háztartási Létra
79
2008. május 14.
4.4 Szekvencia diagramok a bels˝o m˝uködésre
4 SZKELETON TERVEZÉSE
„Is Alive?” szekvencia diagram
Annak az ellen˝orzése, hogy a kígyó életben van-e. Komplexebb tesztesetekben erre a lépésre gyakran szükség van, ott lehet felhasználni.
Háztartási Létra
80
2008. május 14.
5 SZKELETON BEADÁSA
5. Szkeleton beadása 5.1. Feltöltött szkeleton ismertetése 5.1.1.
Telepítés
A tömörített fájl kibontásával telepíthet˝o a szkeleton a felhasználó által választott könyvtárba. Használatához 1.4.2 verziószámú vagy újabb Sun Java futtató környezetre (JRE, Java Runtime Environment) van szükség. Mivel a szkeleton nem tartalmaz binárisokat, csak forráskódot, így az egyszeri fordításhoz Java fejleszt˝okörnyezetre (JDK, Java Development Kit) is szükség van. 5.1.2.
Fordítás
Kitömörítés után a választott könyvtárban található build.bat fájl futtatásával indítható a fordítás. A fordítás végeztével az osztályok bytekódjai és a tömörített JAR (Java Archive) fájl a bin könyvtárban jön létre. 5.1.3.
Futtatás
Fordítás után a választott könyvtárban található run.bat fájl futtatásával indítható a szoftver. 5.1.4.
Javadoc dokumentáció generálása
Kitömörítés után a választott könyvtárban található gendoc.bat fájl futtatásával létrejön a doc könyvtárban a javadoc dokumentáció. 5.1.5.
A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk
Gyökérkönyvtár
Itt taláhatók a fordításhoz, futtatáshoz és dokumentáció generáláshoz szükséges batch fájlok. -rw-r--r-- 1 dnet dnet 122 2008-03-17 23:06 build.bat -rw-r--r-- 1 dnet dnet 63 2008-03-18 23:09 gendoc.bat -rw-r--r-- 1 dnet dnet 38 2008-03-17 23:05 run.bat
Háztartási Létra
81
2008. május 14.
5.1 Feltöltött szkeleton ismertetése
5 SZKELETON BEADÁSA
bin
Ide kerülnek az osztályok bytekódjait tartalmazó .class fájlok, ill. az egész szoftvert tartalmazó JAR archívum. doc
Ide helyezi kimenetét a javadoc dokumentáló, böngészéséhez az index.html fájlt kell megnyitni. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
1543 1323 4551 4438 9860 9949 11172 9880 7623 20926 841 5519 1 733 4096 9938 17227 22737 17514 12333 9959 1202 14249
2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19
09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54 01:00 09:54 09:54 09:54 09:54 09:54 09:54 09:54 09:54
allclasses-frame.html allclasses-noframe.html constant-values.html deprecated-list.html Fieldberry.html Foreground.html GameField.html Hedge.html help-doc.html index-all.html index.html overview-tree.html package-list packages.html resources Sawberry.html SkeletonHelper.html SnakeHead.html SnakeSection.html SnakeWrapper.html Stoneberry.html stylesheet.css Tile.html
src
Itt található az összes osztály forráskódja a nevével megegyez˝o .java fájlban, valamint a JAR archívum készítéséhez szükséges Manifest fájl. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1
Háztartási Létra
dnet dnet dnet dnet
dnet 365 2008-03-17 dnet 486 2008-03-17 dnet 5679 2008-03-19 dnet 351 2008-03-17
82
23:26 23:26 09:24 22:08
Fieldberry.java Foreground.java GameField.java Hedge.java
2008. május 14.
5.1 Feltöltött szkeleton ismertetése
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet
49 363 5437 2158 3639 1510 362 2297
5 SZKELETON BEADÁSA
2008-03-17 2008-03-17 2008-03-19 2008-03-18 2008-03-18 2008-03-18 2008-03-17 2008-03-19
22:55 22:08 09:42 00:07 22:05 22:01 22:08 09:11
manifest.mf Sawberry.java SkeletonHelper.java SnakeHead.java SnakeSection.java SnakeWrapper.java Stoneberry.java Tile.java
tst
Itt találhatóak a tesztelést segít˝o el˝ore elkészített bemeneti fájlok. A tesztesetekhez fájlnév alapján egyértelm˝uen társíthatóak, ha egy tesztesetben a kígyó lehet er˝os is, akkor azt -powerful ill. -normal esetekre bontottuk. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
2 3 27 3 12 12 12 10 42 42 20 20 22 16 42 2
2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19 2008-03-19
09:39 09:52 09:52 09:53 09:29 09:40 09:40 09:42 09:45 09:46 09:48 09:49 09:50 09:51 09:51 09:51
0.txt 10.txt 11.txt 12.txt 1.txt 2.txt 3.txt 4.txt 5-normal.txt 5-powerful.txt 6-normal.txt 6-powerful.txt 7-normal.txt 7-powerful.txt 8.txt 9.txt
5.1.6. A java forráskód fájlok ismertetése
A java forráskód fájlok mindegyike egy-egy osztály tartalmaz, a fájlnévvel megegyez˝o nev˝ut. Az egyes osztályokról rövid leírás olvasható a forráskód els˝o soraiban ill. a javadoc által generált dokumentációban. A szoftver belépési pontját tartalmazó SkeletonHelper osztály importálja a szöveges képerny˝o kezeléséhez szükséges egységeket.
Háztartási Létra
83
2008. május 14.
5.2 Értékelés
5.1.7.
5 SZKELETON BEADÁSA
Szkeleton használata
A szkeleton futása során a kiválasztott teszteseteken végighalad és amennyiben döntésre van szüksége, megkérdezi a felhasználót. Ilyenkor a tesztel˝o el˝ore felkínált számozott lehet˝oségek közül választhat a lehet˝oség sorszámának megadásával. A szoftver kizárólag a szabványos be- és kimenetet használja, így lehet˝oség van automatizált tesztelésre is. Az egyes tesztesetekhez mind készítettünk bemeneti fájlokat, amelyeket szabványos bemenetre irányítva kérdés nélkül végigfut az adott teszteset. A kimenetet fájlba irányítva kés˝obb is elemezhetjük a történteket. 5.2. Értékelés A projekt eddigi részén megpróbáltuk teljesen egyenl˝o mértékben elosztani a kapott feladatokat, ezt nagyjából sikerült is megvalósítanunk. Hétr˝ol-hétre tartottunk megbeszélést, amelyen elosztottuk a munkát három részre, és megadtuk egymásnak a további egyéni munkához kell˝o segítséget. Nehézségnek bizonyult, hogy mindegyikünknek máskor volt ideje foglalkozni a részével, így nem biztos, hogy közben a többiek valamilyen módon (telefon, internet) rendelkezésre tudtak állni. Ezen kívül még az okozott problémát, amikor egy leadandó feladat részei egymásra épültek, így a kés˝obbi részeket elvállalónak meg kellett várnia a többieket, míg elkészülnek a saját részükkel. Ezekt˝ol a problémáktól függetlenül is sikerült mindent id˝ore befejeznünk, és körülbelül egyenl˝o arányban részt venni az eddig leadott munkákban. Mivel teljesen arányosan nem tudjuk szétosztani a százalékokat, ezért a naplóbejegyzéseket is figyelembe véve, illetve azt, hogy Veres-Szentkirályi András felelt a szkeleton kódolásáért, o˝ több százalékot kap. Tehát ennek megfelel˝oen az eddigi munkában való százalékos közrem˝uködés: Bertók Zsófia 33 % Tönköl Viktor 33 % Veres-Szentkirályi András 34 %
Háztartási Létra
84
2008. május 14.
6.1 Prototípus interface definíciója
6 PROTOTÍPUS KONCEPCIÓJA
6. Prototípus koncepciója 6.1. Prototípus interface definíciója 6.1.1.
Pályakészít˝o utasítások
allocateField
Létrehoz egy megadott méret˝u pályát üres mez˝okkel. Lefutása után rendelkezésünkre áll egy teljesen üres, használatra kész játékmez˝o, melynek szomszédos elemei megfelel˝o módon egymáshoz vannak láncolva. A széls˝o mez˝oket nem láncoljuk küls˝o szélük irányában sehova, a pályatervez˝onek kell gondoskodnia – pl. sövények használatával – arról, hogy kígyók ne hagyhassák el a játékteret. Paraméterei: A lefoglalandó pályaméret két pozitív egész számmal kifejezve szélesség, hosszúság sorrendben. Példa: allocateField 40 25 Példa hatása: Létrehoz egy 40 egység széles, 25 egység magas pályát.
Muködése: ˝
putStaticObject
A játéktér koordinátákkal meghatározott mez˝ojére felhelyez egy megadott típusú statikus – mozgást nem végz˝o – objektumot. Nem végez ellen˝orzést arra nézve, hogy az adott mez˝o tartalmaz-e már elemet, a korábban ott elhelyezked˝o objektumot véglegesen törli. Paraméterei: A mez˝o Descartes-koordinátái (bal fels˝o mez˝o koordinátája (0; 0)) természetes számokkal, majd az objektum típusa (Fieldberry, Sawberry, Stoneberry, vagy Hedge). Példa: putStaticObject 1 2 Fieldberry Példa hatása: Mezei bogyót helyez el a harmadik sor második oszlopában.
Muködése: ˝
Háztartási Létra
85
2008. május 14.
6.1 Prototípus interface definíciója
6 PROTOTÍPUS KONCEPCIÓJA
putSnake
A játéktér koordinátákkal meghatározott mez˝ojére felhelyez egy kígyófejet, amely a következ˝o kört˝ol szintén paraméterként megkapott irányban indul el és növekszik a megadott indulási méretig. Paraméterei: A mez˝o koordinátái (lásd putStaticObject), a kígyó kezdeti iránya (0=jobbra, majd óramutató járásával ellentétesen számozva), a kígyó kezdeti hossza egységekben. Példa: putSnake 3 13 3 7 Példa hatása: Egy lefelé mozgó, 7 egység hosszúra megnöv˝o kígyót hoz létre a 14. sor 4. oszlopában. Muködése: ˝
includeFile
A megadott fájlnévben kapott parancsokat betölti és az ebben a fejezetben megadottaknak megfelel˝oen értelmezi. A parancsok viselkedése semmiben nem különbözik attól, hogy szabványos bemeneten, vagy fájlból jöttek. Így egy betöltött fájlból lehet további fájlokat betölteni. Így persze két egymásra hivatkozó fájllal, vagy egyszer˝u rekurzióval végtelen ciklusba kerülhet a proto, de ezt nekünk nem feladatunk ellen˝orizni. Paraméterei: A fájl relatív vagy abszolút elérési útja. Példa: includeFile kispalya.map Példa hatása: Végrehajtja a kispalya.map fájlban szerepl˝o utasításokat.
Muködése: ˝
6.1.2.
Prototípusvezérl˝o utasítások
Minden pályakészít˝o utasítás egyben prototípusvezérl˝o utasítás is, mivel pl. a bogyók egy része normál használat esetén is a pálya létrehozása után, játék közben kerül fel a pályára. gameRound
Muködése: ˝ Háztartási Létra
Lefuttat egy kört a játék szabályainak megfelel˝oen (lásd Objektum katalógus). 86
2008. május 14.
6.1 Prototípus interface definíciója
6 PROTOTÍPUS KONCEPCIÓJA
Paraméterei: nincsenek Példa: gameRound Példa hatása: Lefuttat egy kört. emulateSnakeSteer
Egy kígyó elfordulásához emulál felhasználói bemenetet. A kígyó sorszáma (0 az el˝oször létrehozott kígyó), kígyó el˝ojeles szögelfordulása 90 fokos egységekben (óramutató járásával ellentétes a pozitív irány). Példa: emulateSnakeSteer 1 1 Példa hatása: A második kígyó 90 fokkal balra fordul. Muködése: ˝ Paraméterei:
setPowerful
Egy kígyó er˝os mivoltát állítja be. Mivel a prototípus nem tartalmaz id˝ozítést, ez gondoskodik az er˝osség „elmúlásáról” is. Paraméterei: A kígyó sorszáma (lásd emulateSnakeSteer), er˝osség (on/off). Példa: setPowerful 2 on Példa hatása: A harmadik kígyó er˝ossé válik.
Muködése: ˝
getSnakeStatus
Egy kígyó állapotát (életben van-e, f˝urésztulajdonsággal rendelkezik-e, merre mozog, hol a feje, mely szelvényeiben van k˝obogyó) kérdezi le. Paraméterei: A kígyó sorszáma (lásd emulateSnakeSteer). Példa: getSnakeStatus 0 Példa hatása: Lekérdezi az els˝o kígyó állapotát. Példa kimenet: 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[0][0] ][ Felepites: [ ][ ][ ] Muködése: ˝
Háztartási Létra
87
2008. május 14.
6.1 Prototípus interface definíciója
6 PROTOTÍPUS KONCEPCIÓJA
getTileContent
Muködése: ˝ Paraméterei: Példa: Példa hatása: Példa kimenet:
Egy mez˝o tartalmát kérdezi le. A mez˝o koordinátái (lásd putSnake). getTileContent 1 0 Lekérdezi az els˝o sor második mez˝ojének tartalmát. Tiles[0][0] mezon jelenleg Fieldberries[0] tartozkodik
rollStones
Elindítja a kövek görgetését egy kígyóban. A kígyó sorszáma (lásd emulateSnakeSteer), görgessen-e be követ (1) vagy nem (0). Példa: rollStones 1 0 Példa hatása: A második kígyó köveit egy egységgel a farok felé görgeti. Muködése: ˝ Paraméterei:
6.1.3. Prototípus kimeneti üzeneteinek formátuma
Amikor esemény történik a játékban (bogyó felszedése, ütközés, leharapott farokból kígyó létrejötte), a szabványos kimeneten (stdout) megjelenik az eseményben érdekelt objektum(ok) neve, valamint az esemény helye. Például ha egy kígyó felszed egy mezei bogyót, a következ˝o sort írja ki a proto: Esemeny: Mezei bogyo felszedese ][ Resztvevok: MovingObjects[1] es FieldBerries[2] ][ Helyszin: Tiles[4][3] Amennyiben a tesztel˝o szintaktikai (Fieldberry helyett Feldberry-t ír) vagy szemantikai (nem létez˝o fájlt próbál include-olni) hibát vét, hibaüzenetet kap, de ett˝ol a proto futása nem áll meg. Például ha a tesztel˝o on helyett true értéket próbál meg átadni a setPowerful parancsnak, a következ˝o üzenetet kapja: Hiba: ervenytelen ertek -- ervenyes ertekek: on, off
Háztartási Létra
88
2008. május 14.
6.2 Összes részletes use case
6 PROTOTÍPUS KONCEPCIÓJA
6.2. Összes részletes use case A use case-k részletesebb leírása a Prototípus interface definíciója részben található meg, az egyes utasítások m˝uködésénél.
Use case Allocate the gamefield Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o létrehozza a játékteret. Use case Put a static object to the gamefield Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy statikus objektumot (mezei bogyó, k˝obogyó, f˝urészbogyó vagy sövény) helyez el az egyik mez˝on. Use case Put a snake to the gamefield Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o egy kígyót helyez el a játéktéren. Háztartási Létra
89
2008. május 14.
6.2 Összes részletes use case
6 PROTOTÍPUS KONCEPCIÓJA
Use case Include a file Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o betölt egy kötegelt parancsfájlt a programba, pl. a pályatervet. Use case Play a gameround Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o lefuttat a játék során egy kört. Use case Emulate steering of a snake Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o a kígyó elfordulásához egy bemenetet emulál. Use case Set the powerful property Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o a kígyót f˝urészes tulajdonsággal ruházza fel, vagy elveszti azt. Use case Get a snake’s status Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o lekérdezi egy kígyó állapotát. Use case Get a tile’s content Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o lekérdezi egy mez˝o tartalmát.
Háztartási Létra
90
2008. május 14.
6.3 Tesztelési terv, tesztel˝o nyelv definiálása
6 PROTOTÍPUS KONCEPCIÓJA
Use case Roll the stones Actor Tester Leírás Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztel˝o legörgeti egy egységgel a kígyók hasában a köveket.
6.3.
Tesztelési terv, tesztel˝o nyelv definiálása
6.3.1.
Prototípus használata a tesztelésre
A program m˝uködésének tesztelésére különböz˝o teszteseteket kell vizsgálni, amelyek lehet˝oleg a program minden pontját megmozgatják, és ezáltal belátható a helyes m˝uködés. A tesztek végrehajtásához a prototípus parancsokat kap a felhasználótól az interface definíció részben definiált módon, szöveges formában. A proto ezekre a parancsokra reagál. Bemeneti fájlokból is beolvashatjuk a parancsokat, majd az eredményt szöveges fájlokba menthetjük. Az elvárt kimenetet szintén fájlba mentve össze tudjuk hasonlítani a program által adott kimenettel. Erre a feladatra külön programot alkalmazunk, melyr˝ol a következ˝o fejezetben van részletesebben szó. Így meg tudjuk vizsgálni, hogy adott bemenetre megfelel˝oen reagált-e a programunk. A tesztelést többször végrehajtva ellen˝orizhetjük azt is, hogy azonos bemenetre mindig azonos eseményeket hajt-e végre a program. 6.3.2.
Tesztforgatókönyvek
Inicializálás
• Szint kiválasztása • Sebesség kiválasztása • Pálya felépülése • Sövények helyes felhelyezése • Kígyók helyes felhelyezése • Felhasználói beavatkozásra történ˝o kilépés tesztelése Háztartási Létra
91
2008. május 14.
6.3 Tesztelési terv, tesztel˝o nyelv definiálása
6 PROTOTÍPUS KONCEPCIÓJA
Bogyók termése
• Mezei bogyó megjelenése a játéktéren • K˝obogyó megjelenése a játéktéren • F˝urészbogyó megjelenése a játéktéren Mezei bogyó evése
• Mezei bogyó felvétele • Kígyó hosszának növekedése K˝obogyó evése
• K˝obogyó felvétele, ha a kígyó fejében van k˝o • K˝obogyó felvétele, ha a kígyó fejében nincs k˝o • K˝odarab legurulása a kígyóban adott sebességgel Furészbogyó ˝ evése
• F˝urészbogyó felvétele • F˝urészes tulajdonság beállítása • F˝urészes tulajdonság után normál visszaállítása Sövénnyel ütközés
• Kígyó sövénnyel találkozása • Kígyó halála
Háztartási Létra
92
2008. május 14.
6.3 Tesztelési terv, tesztel˝o nyelv definiálása
6 PROTOTÍPUS KONCEPCIÓJA
Kígyóval ütközés
• Másik kígyóval való összeütközés érzékelése • Normál kígyóvalkígyó fejébe ütközés páros távolságról • Normál kígyóval másik kígyó fejébe ütközés páratlan távolságról • Normál kígyóval másik kígyó testébe ütközés • F˝urészes kígyóval másik kígyó k˝onélküli fejébe ütközés páros távolságról • F˝urészes kígyóval másik kígyó k˝onélküli fejébe ütközés páratlan távolságról • F˝urészes kígyóval másik kígyó köves szelvényébe ütközés • F˝urészes kígyóval másik kígyó nemköves szelvényébe (nem a fejébe) ütközés • Kígyó halála • Kígyó fakának levágása • Új kígyó létrejött Kígyó megsemmisülése
• Kígyó szellemmé válása • Szellemkígyó törlése
Háztartási Létra
93
2008. május 14.
6.4 Tesztelést támogató segéd- és fordító programok specifikálása 6 PROTOTÍPUS KONCEPCIÓJA
6.4. Tesztelést támogató segéd- és fordító programok specifikálása A tesztelés során az elvárt eredményeket tartalmazó fájlt kell összehasonlítanunk a proto által generált kimenettel. Ezt egy javaban írt kis programmal fogjuk elvégezni. A program neve compare lesz. A paraméterként kapott két fájlt soronként összehasonlítja, eltérés esetén a sorok sorszámával együtt kiírja a sorokat. A kimenet hasonlóan fog kinézni hiba esetén: 1: > pelda < pelda2 ... Minden tesztesethez egy bemeneti (*.in), egy elvárt kimeneti (*.out) és egy, a tesztelés alatt generált (*.gen) fájl tartozik. A kiterjesztés el˝otti része azonos a fájloknak, ez azonosít egy tesztet. A tesztek lefuttatásának könnyítésére két batch fájlt fogunk létrehozni. Az egyik testall.bat, amely az összes tesztesetet lefuttatja egymás után. El˝oször létrehozza az aktuális kimenetet tartalmazó .gen fájlt. Majd az összehasonlításhoz a már említett compare programot fogja használni. Ha a teszt sikeres, akkor a kimeneten csak a VEGE szó jelenik meg. Ha valamelyik teszt sikertelen lenne, akkor az eltérések kiírása után jelenik csak meg a VEGE. ****************** 0. Teszt ****************** ****************** VEGE ****************** ***************** 1. Teszt ***************** 1: > pelda < pelda2 Háztartási Létra
94
2008. május 14.
6.4 Tesztelést támogató segéd- és fordító programok specifikálása 6 PROTOTÍPUS KONCEPCIÓJA
... **************** VEGE **************** A program váza: echo ******* echo "testnum" . Teszt echo ******* run.bat testnum.gen compare testnum.out testnum.gen echo ******* echo VEGE echo ******* A másik batch fájl neve test.bat, ez csak a paraméterben meghatározott tesztet futtatja le. A kimenete olyan mint a testall.bat egy tesztesetének kimenete.
Háztartási Létra
95
2008. május 14.
6.5 Modell illesztése a megváltozott specifikációhoz
6 PROTOTÍPUS KONCEPCIÓJA
6.5. Modell illesztése a megváltozott specifikációhoz 6.5.1.
Leharapott kígyófarok további élete
A leharapott kígyófarok nem pusztul el, hanem egy új kígyóvá alakul, melyet a továbbiakban a számítógép irányít. Modellünkön ennek megvalósításához minimális változtatást kell eszközölni – a SnakeHead osztályba kerül egy új metódus assignTail néven, mely next változó értékét beállítja a paraméterként kapott SnakeSection objektumra. Így a levágáskor elég annyit tenni, hogy megsemmisítjük a levágott egységet, létrehozunk egy új kígyó(feje)t, majd ahhoz az assignTail metódus meghívásával hozzácsatoljuk a kígyó farkát. 6.5.2.
K˝obogyók vándorlási sebessége
A k˝obogyók vándorlási sebességének módosításához mindössze annyit kell tennünk, hogy a passStoneDown rekurzív függvényt ritkábban ill. gyakrabban hívjuk meg a kígyók mozgásakor. Ha ritkábban, akkor azonban kezelnünk kell azt az esetet, ha a kígyó gyorsabban szed fel egymás mellett fekv˝o köveket, mint ahogy azok lejjebb vándorolnának. A modellünk ebben az esetben hasonlóan viselkedik, mint amikor megtelik a kígyó k˝ovel – az újabban érkezett k˝o elt˝unik.
Háztartási Létra
96
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
7. Részletes tervek 7.1. Objektumok és metódusok tervei 7.1.1.
Fieldberry
Rövid leírás
Mezei bogyót reprezentál, mely a pálya bármely mez˝ojén elhelyezkedhet. Metódusok
Metódus: void meetSnake(SnakeHead otherParty) Célja: kígyó értesítése arról, hogy mezei bogyót evett Algoritmus: A paraméterként kapott otherParty objektumnak meghívja a fieldberryInWay() metódusát, paraméterként átadva egy hivatkozást saját magára. 7.1.2.
Foreground
Rövid leírás
A játéktéren megjelen˝o objektumok absztrakt alaposztálya. Metódusok
Metódus: bool isGhost() Célja: annak megállapítása, hogy szellem-e az objektum Algoritmus: Mindig false értéket ad vissza. void meetSnake(SnakeHead otherParty) bels˝o állapot ill. otherParty állapotának megváltoztatása ütközésre való reakció során Algoritmus: Ebben az osztályban nincs megvalósítva (absztrakt metódus).
Metódus: Célja:
Háztartási Létra
97
2008. május 14.
7.1 Objektumok és metódusok tervei
7.1.3.
7 RÉSZLETES TERVEK
GameField
Rövid leírás
A játékteret reprezentáló objektum, inicializálásakor létrehozza a pályát, f˝o feladata program futása közben a kígyók mozgásának és a bogyók megjelenésének az összehangolása. Metódusok
Metódus: void gameRound() Célja: a játék egy körének lefuttatása Algoritmus: Végigfut a kígyók listáján és ha egy kígyó isAlive() értéke true, meghívja steerSnake() metódusát. Ezután végigmegy a mez˝ok listáján és meghívja mindegyik deleteGhosts() metódusát.
7.1.4.
Hedge
Rövid leírás
Sövényt reprezentál, mely a pálya bármely mez˝ojén elhelyezkedhet. Háztartási Létra
98
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódusok
Metódus: void meetSnake(SnakeHead otherParty) Célja: kígyó értesítése arról, hogy sövénynek ütközött Algoritmus: A paraméterként kapott otherParty objektumnak meghívja a hedgeInWay() metódusát, paraméterként átadva egy hivatkozást saját magára. 7.1.5.
Sawberry
Rövid leírás
F˝urészbogyót reprezentál, mely a pálya bármely mez˝ojén elhelyezkedhet. Metódusok
Metódus: void meetSnake(SnakeHead otherParty) Célja: kígyó értesítése arról, hogy f˝urészbogyót evett Algoritmus: A paraméterként kapott otherParty objektumnak meghívja a sawberryInWay() metódusát, paraméterként átadva egy hivatkozást saját magára. 7.1.6. SnakeHead Rövid leírás
A kígyó egy megkülönbözetett szelvénye, a feje. Objektum állapotdiagramja
Háztartási Létra
99
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódusok
void assignTail(SnakeSection newTail) farok hozzárendelése egy ütközés után automatikusan létrejött új kígyófejhez Algoritmus: Beállítja next értékét newTail paraméter értékére. Metódus: Célja:
Metódus: void fieldberryInWay(Fieldberry fieldberry) Célja: kígyó hosszának növelése mezei bogyóval találkozás hatására Algoritmus: Meghívja önmaga proposeEnlargement() metódusát, paraméterként 1-et átadva. Metódus: bool getPowerful() Célja: kígyó er˝os voltának meghatározása Algoritmus: Visszaadja isPowerful értékét. Metódus: void hedgeInWay(Hedge hedge) Célja: kígyó megölése sövénnyel találkozás hatására Algoritmus: Meghívja önmaga splitOff() metódusát, paraméterként true értéket átadva. Metódus: void rollStones() Célja: kövek görgetése a kígyóban Algoritmus: Meghívja önmaga passStoneDown() metódusát, true visszatérési érték esetén meghívja a giveStone() metódust is, stonePickup értékét átadva. Végül törli stonePickup értékét. Metódus: void sawberryInWay(Sawberry sawberry) Célja: kígyó er˝ossé tétele f˝urészbogyóval találkozás hatására Algoritmus: Beállítja isPowerful értékét true értékre.
Háztartási Létra
100
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void snakeInWay(SnakeHead snake) Célja: kígyó megölése kígyóval ütközés hatására Algoritmus: Meghívja önmaga splitOff() metódusát, paraméterként true értéket átadva. Metódus: void stoneberryInWay(Stoneberry stomeberry) Célja: k˝obogyó lenyelése k˝obogyóval való találkozás hatására Algoritmus: Beállítja stonePickup értékét a kapott stoneberry referenciára. 7.1.7.
SnakeSection
Rövid leírás
A kígyó egy szelvényét reprezentálja, mely bármely mez˝on megjelenhet. Objektum állapotdiagramja
Metódusok
Metódus: void giveStone(Stoneberry newStone) Célja: k˝obogyó fogadása az el˝oz˝o szelvényb˝ol Algoritmus: Beállítja stone értékét a kapott newStone referenciára. Háztartási Létra
101
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void initAtTile(Tile initPos, int initLen) Célja: kígyó inicializálása Algoritmus: Beállítja position értékét initPos paraméter értékére, majd meghívja addForeground() metódusát, paraméterként egy önmagára mutató hivatkozást átadva. Ezután beállítja proposedEnlargement értékét initLen paraméter eggyel csökkentett értékére. Metódus: bool isGhost() Célja: annak megállapítása, hogy szellem-e az objektum Algoritmus: Visszaadja isDead értékét.
Háztartási Létra
102
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void meetSnake(SnakeHead otherParty) Céja: egyik vagy másik kígyó megölése ütközés hatására Algoritmus: Ha stone értéke nem NULL vagy otherParty.getPoweful() visszatérési értéke false, meghívja otherParty snakeInWay() metódusát, saját magát átadva paraméterként. Ellenkez˝o esetben isDead értékét true értékre állítja, majd ha next értéke nem NULL, meghívja splitOff() metódusát, false értéket átadva.
Háztartási Létra
103
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: bool passStoneDown() Célja: annak ellen˝orzése, hogy van-e hely kövek mozgatására Algoritmus: Amennyiben next értéke NULL, visszaadja, hogy stone változó NULL érték˝u-e. Ha next értéke nem NULL meghívja next passStoneDown() metódusát. Ha true értékkel tér vissza és stone értéke nem NULL, meghívja next giveStone() metódusát, paraméterként átadva stone referenciáját, majd stone értékét NULL értékre állítja. Ha false értékkel tér vissza, visszaadja, hogy stone változó NULL érték˝u-e.
Háztartási Létra
104
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void proposeEnlargement(int length) Célja: kígyó hosszának növelése Algoritmus: Ha next értéke NULL (tehát a farokban vagyunk), beállítja proposedEnlargement értékét length paraméter értékére, egyébként meghívja next proposeEnlargement() metódusát, length paramétert továbbadva.
Háztartási Létra
105
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void pullToTile(Tile newPos) Célja: szelvény új mez˝ore rántása Algoritmus: Amennyiben next értéke nem NULL és next isGhost() metódusa true értékkel tér vissza, next értékét NULL-ra állítja. Ezután newPos paraméter addForeground() metódusát meghívja, magát referenciaként átadva, majd ellen˝orzil, hogy next NULL érték˝u-e. Ha igen, pozitív proposedEnlargement érték esetén létrehoz egy új SnakeSection objektumot, referenciájára állítja next értékét, majd initAtTile() metódussal inicializálja position mez˝on, proposedEnlargement hosszal. Ezután proposedEnlargement értékét nullázza. Ha proposedEnlargement értéke 0, position addForeground() metódusát meghívja NULL paraméterrel. Ha next nem NULL érték˝u, meghívja pullToTile() metódusát, paraméterként position értékét átadva. Végül minden esetben position értékét newPos paraméter értékére állítja.
Háztartási Létra
106
2008. május 14.
7.1 Objektumok és metódusok tervei
Háztartási Létra
7 RÉSZLETES TERVEK
107
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void splitOff(bool recursive) Célja: szelvény – adott esetben rekurzív – levágása Algoritmus: isDead értékét true értékre állítja, majd ellen˝orzi recursive értékét. Ha true, és next értéke nem NULL, meghívja next splitOff() metódusát, paraméterként true értéket átadva. Ha false, létrehoz egy új SnakeHead objektumot, majd meghívja initAtTile() metódusát position paraméterrel, végül meghívja az assignTail() metódusát, paraméterként next értékét átadva.
Háztartási Létra
108
2008. május 14.
7.1 Objektumok és metódusok tervei
7.1.8.
7 RÉSZLETES TERVEK
SnakeWrapper
Rövid leírás
SnakeHead burkolója, mely a térben tájékozódást kezeli. Objektum állapotdiagramja
Metódusok
Metódus: void createSnake(Tile where, int initLen, int initDir) Célja: kígyófej létrehozása és inicializálása Algoritmus: SnakeHead objektum létrehozása és eltárolása RealSnake változóban, majd initAtTile() metódus meghívása a kapott paraméterekkel Metódus: bool isAlive() Célja: annak ellen˝orzése, hogy a kígyó életben van-e még Algoritmus: RealSnake isGhost() metódus visszatérési értéke negáltját adja vissza.
Háztartási Létra
109
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void steerSnake(int angle) Célja: kígyó elfordítása megadott szögben és léptetése egy egységgel Algoritmus: angle paraméter értékét hozzáadja snakeDir változó értékéhez, majd az új értéket paraméterként átadja curHeadPos nextInDir metódusának. A visszatérési értéket eltárolja curHeadPos változóban, majd meghívja annak moveSnakeHere() metódusát, paraméterként átadva RealSnake referenciáját. 7.1.9.
Stoneberry
Rövid leírás
Mezei bogyót reprezentál, mely a pálya bármely mez˝ojén ill. bármely kígyószelvényben elhelyezkedhet. Metódusok
Metódus: void meetSnake(SnakeHead otherParty) Célja: kígyó értesítése arról, hogy k˝obogyót evett Algoritmus: A paraméterként kapott otherParty objektumnak meghívja a stoneberryInWay() metódusát, paraméterként átadva egy hivatkozást saját magára. 7.1.10.
Tile
Rövid leírás
A játéktér egy mez˝oje, amely kizárólag Tile szomszédait és a rajta elhelyezked˝o Foreground objektumot ismeri. Metódusok
void addForeground(Foreground toAdd) Foreground osztályból származó objektum felhelyezése – ellen˝orzés nélkül – a mez˝ore Algoritmus: Beállítja FObject értékét a toAdd paraméterben kapottra. Metódus: Célja:
Háztartási Létra
110
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
void moveSnakeHere(SnakeHead snake) a paraméterként kapott SnakeHead fej˝u kígyó erre a mez˝ore léptetése Algoritmus: Ha FObject értéke nem NULL, meghívja FObject meetSnake() metódusát, paraméterként átadva snake referenciáját. Végül meghívja snake isGhost() metódusát, majd false visszatérés esetén pullToTile() metódusát is, önmagát átadva paraméterként.
Metódus: Célja:
Háztartási Létra
111
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void deleteGhost() Célja: szellem objektumok törlése a mez˝or˝ol Algoritmus: Ha FObject értéke nem NULL, meghívja FObject isGhost() metódusát, melynek true érték˝u visszatérése esetén FObject változóját NULL értékre állítja.
Metódus: Tile nextInDir(int dir) Célja: adott irányban lév˝o szomszéd meghatározása Algoritmus: neighbours[dir%4] visszaadása (négy irány esetén)
Háztartási Létra
112
2008. május 14.
7.1 Objektumok és metódusok tervei
7 RÉSZLETES TERVEK
Metódus: void setNeighbour(Tile otherElement, int dir, bool notify) Célja: szomszédossági viszony kölcsönös beállítása Algoritmus: neighbours[dir] változó otherElement paraméter értékére állítása, notify paraméter false értéke esetén otherElement setNeighbour() metódusának meghívása, paraméterként egy önmagára mutató referencia, dir+2%4 (négy irány esetén) és true érték átadása.
Háztartási Létra
113
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
7.2. A tesztek részletes tervei, leírásuk a teszt nyelvén 7.2.1.
Inicializálás
1. Pálya felépítése
Teszt célja: Az egyes pályaelemek létrejöttének tesztelése. Megvalósítása: Pályalétrehozó létrehozó utasítással egy 2×2-es tesztpálya létrehozása. Várt eredmény: Létrejön a 4 pályaelem, melyet úgy ellen˝orzünk, hogy megvizsgáljuk a jobb alsó mez˝o tartalmát. Mely részek kerülnek tesztelésre: • Tile.setNeighbour() Lehetséges hibaforrások: • Tile.setNeighbour() nem képes beállítani a szomszédossági viszonyokat Bemenet: allocateField 2 2 getTileContent 1 1
A várt kimenet: Tiles[1][1] mezon jelenleg semmi sem tartozkodik
2. Statikus objektum felhelyezése
Teszt célja: Bogyó vagy sövény tényleges felhelyezésének tesztelése. Megvalósítása: Egy 2×1-es pályára egy bogyó és egy sövény felhelyezése. Várt eredmény: Az adott objektumok felkerülnek a megfelel˝o pályaelemekre, amelyet a pályaelem tartalmát lekérdezve ellen˝orizni tudunk.
Háztartási Létra
114
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
Mely részek kerülnek tesztelésre: • Tile.addForeground() Lehetséges hibaforrások: • Tile.addForeground() nem képes felhelyezni az objektumot Bemenet: allocateField 2 1 putStaticObject 0 0 Fieldberry putStaticObject 1 0 Hedge getTileContent 0 0 getTileContent 1 0
A várt kimenet: Tiles[0][0] mezon jelenleg Fieldberries[0] tartozkodik Tiles[1][0] mezon jelenleg Hedges[0] tartozkodik
3. Kígyó felhelyezése
Teszt célja: Egy kígyó felhelyezésének tesztelése. Megvalósítása: Egy 3×1-es pályára felhelyezünk egy három hosszú kígyót. Várt eredmény: Valóban egy három hosszú kígyó jön létre, amely a három mez˝on helyezkedik el. Mely részek kerülnek tesztelésre: • SnakeWrapper.createSnake() • SnakeSection.initAtTile() • SnakeSection.proposeEnlargement() • SnakeSection.pullToTile() • Tile.nextInDir() Háztartási Létra
115
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
• Tile.moveSnakeHere() • GameField.gameRound() • SnakeWrapper.steerSnake() Lehetséges hibaforrások: • SnakeWrapper.createSnake() nem hozza létre a kígyót • SnakeSection.initAtTile() nem inicializálja a szelvényt • SnakeSection.proposeEnlargement() nem növeli meg a kígyót • SnakeSection.pullToTile() nem mozgatja a szelvényt • Tile.nextInDir nem a megfelel˝o mez˝ot adja vissza • Tile.moveSnakeHere() nem megfelel˝oen hívja a pullToTile() metódust • GameField.gameRound() nem megfelel˝oen játssza le a kört • SnakeWrapper.steerSnake() nem megfelel˝o mez˝ore mozgatja a kígyót Bemenet: allocateField 3 1 putSnake 2 0 2 3 gameRound gameRound getSnakeStatus 0 getTileContent 0 0 getTileContent 1 0 getTileContent 2 0
A várt kimenet: 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[0][0] ][ Felepites: [ ][ ][ ] Tiles[0][0] mezon jelenleg MovingObjects[0] tartozkodik Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik Tiled[2][0] mezon jelenleg MovingObjects[0].next.next tartozkodik
Háztartási Létra
116
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7.2.2.
7 RÉSZLETES TERVEK
Kígyó bogyót eszik
4. Kígyó mezei bogyót eszik
Teszt célja: Egy kígyó mezei bogyóval való etetésének és az utána bekövetkez˝o növekedésének tesztelése. Megvalósítása: Egy 3×1-es pályára felhelyezünk egy eredetileg egy hosszú kígyót és egy mezei bogyót. Várt eredmény: A mezei bogyót a kígyó megeszi, és a hossza kett˝ore növekszik. Mely részek kerülnek tesztelésre: • SnakeHead.fieldberryInWay() • Tile.moveSnakeHere() Lehetséges hibaforrások: • SnakeHead.fieldberryInWay() nem indítja el a növekedést • Tile.moveSnakeHere() nem megfelel˝oen ellen˝orzi az objektumok ütközését Bemenet: allocateField 3 1 putSnake 0 0 0 1 putStaticObject 2 0 Fieldberry gameRound gameRound getSnakeStatus 0 getTileContent 1 0 getTileContent 2 0
A várt kimenet: Esemeny: Mezei bogyo felszedese ][ Resztvevok: MovingObjects[0] es Fieldberries[0] ][ Helyszin: Tiles[2][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][ ] Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik Tiles[2][0] mezon jelenleg MovingObjects[0] tartozkodik
Háztartási Létra
117
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
5. Kígyó k˝obogyót eszik úgy, hogy van a fejében k˝o
Teszt célja: Egy kígyó k˝obogyóval való etetésének tesztelése, mégpedig abban az esetben, amikor a fejében k˝o van, és már nem tud újabbat lenyelni. Megvalósítása: Egy 3×1-es pályára felhelyezünk egy kett˝o egység hosszú kígyót, ami követ tartalmaz a fejében, valamint egy k˝obogyót. Várt eredmény: A kígyó nem veszi fel a k˝obogyót, a bogyó megsemmisül, elt˝unik a pályáról. Mely részek kerülnek tesztelésre: • SnakeHead.stoneberryInWay() • SnakeSection.passStoneDown() Lehetséges hibaforrások: • SnakeHead.stoneberryInWay() nem indítja el a nyelési folyamatot • SnakeSection.passStoneDown() nem megfelel˝o választ ad vissza Bemenet: allocateField 3 1 putSnake 0 0 0 2 putStaticObject 2 0 Stoneberry rollStones 0 1 gameRound gameRound getSnakeStatus 0 getTileContent 1 0 getTileContent 2 0
A várt kimenet: Esemeny: Kobogyo felszedese ][ Resztvevok: MovingObjects[0] es Stoneberries[0] ][ Helyszin: Tiles[2][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][*] Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik Tiles[2][0] mezon jelenleg MovingObjects[0] tartozkodik
Háztartási Létra
118
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
6. Kígyó k˝obogyót eszik úgy, hogy nincs a fejében k˝o
Teszt célja: Egy kígyó k˝obogyóval való etetésének tesztelése, amikor nincs a fejében k˝o, tehát szabadon lenyelheti. Megvalósítása: Egy 3×1-es pályára felhelyezünk egy követ nem tartalmazó kett˝o egység hosszú kígyót, valamint egy k˝obogyót. Várt eredmény: A kígyó a k˝obogyóra lépve megeszi azt, és a fejébe kerül. Mely részek kerülnek tesztelésre: • SnakeSection.giveStone() Lehetséges hibaforrások: • SnakeSection.giveStone() nem fogadja el a követ Bemenet: allocateField 3 1 putSnake 0 0 0 2 putStaticObject 2 0 Stoneberry gameRound gameRound getSnakeStatus 0 getTileContent 1 0 getTileContent 2 0
A várt kimenet: Esemeny: Kobogyo felszedese ][ Resztvevok: MovingObjects[0] es Stoneberries[0] ][ Helyszin: Tiles[2][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][*] Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik Tiles[2][0] mezon jelenleg MovingObjects[0] tartozkodik
7. Kígyó furészbogyót ˝ eszik, majd a furésztulajdonság ˝ hatása elmúlik
Teszt célja: Egy normál kígyó f˝urészbogyóval való etetésének, majd utána a f˝urésztulajdonság beállításának, majd visszaállításának tesztelése. Háztartási Létra
119
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
Megvalósítása: Egy 2×1-es pályára felhelyezünk egy normál kígyót és egy f˝urészbogyót. Várt eredmény: A kígyó megeszi a f˝urészbogyót, f˝urésztulajdonsággal ruházódik fel, majd ez elmúlik. Mely részek kerülnek tesztelésre: • SnakeHead.sawberryInWay() • SnakeHead.getPowerful() Lehetséges hibaforrások: • SnakeHead.sawberryInWay() nem ruházza fel a kígyót f˝urésztulajdonsággal • SnakeHead.getPowerful() nem megfelel˝o választ ad Bemenet: allocateField 2 1 putSnake 0 0 0 1 putStaticObject 1 0 Sawberry gameRound getSnakeStatus 0 getTileContent 1 0 setPowerful 0 off getSnakeStatus 0
A várt kimenet: Esemeny: Fureszbogyo felszedese ][ Resztvevok: MovingObjects[0] es Sawberries[0] ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: van ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[1][0] ][ Felepites: [ ] Tiles[1][0] mezon jelenleg MovingObjects[0] tartozkodik 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[1][0] ][ Felepites: [ ]
Háztartási Létra
120
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7.2.3.
7 RÉSZLETES TERVEK
Kígyók összeütköznek
8. Normál kígyó másik kígyó fejébe ütközik páratlan távolságról
Teszt célja: Két normál kígyó páratlan távolságról való ütközésének tesztelése. Megvalósítása: Egy 3×1-es pályára felhelyezünk két egy egység hosszú kígyót egy mez˝o távolságra úgy, hogy egymás felé haladjanak. Várt eredmény: A kés˝obb felhelyezett kígyó beleütközik a másikba, és meghal. Mely részek kerülnek tesztelésre: • SnakeSection.meetSnake() • SnakeHead.snakeInWay() • SnakeSection.splitOff() • SnakeSection.isGhost() • SnakeWrapper.isAlive() Lehetséges hibaforrások: • SnakeSection.meetSnake() nem értesíti a másik kígyót az ütközésr˝ol • SnakeHead.snakeInWay() nem (megfelel˝oen) hívja meg a splitOff() metódust • SnakeSection.splitOff() nem változtatja a kígyót szellemmé • SnakeSection.isGhost() nem megfelel˝o választ ad • SnakeWrapper.isAlive() nem megfelel˝o választ ad Bemenet: allocateField 3 1 putSnake 0 0 0 1 putSnake 2 0 2 1 gameRound getSnakeStatus 0 getSnakeStatus 1
Háztartási Létra
121
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[0] es MovingObjects[1] ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[1][0] ][ Felepites: [ ] 1. kigyo statusza: Halott
9. Normál kígyó másik kígyó fejébe ütközik páratlan távolságtól
Teszt célja: Két normál kígyó páros távolságról való ütközésének tesztelése. Megvalósítása: Egy 2×1-es pályára felhelyezünk két egy egység hosszú kígyót úgy, hogy köztük nincs mez˝o és egymás felé haladjanak. Várt eredmény: A két kígyó összeütközik, mindkét kígyó meghal. Mely részek kerülnek tesztelésre: • SnakeSection.meetSnake() • SnakeHead.snakeInWay() Lehetséges hibaforrások: • SnakeSection.meetSnake() nem értesíti a másik kígyót az ütközésr˝ol • SnakeHead.snakeInWay() nem (megfelel˝oen) hívja meg a splitOff() metódust Bemenet: allocateField 2 1 putSnake 0 0 0 1 putSnake 1 0 2 1 gameRound getSnakeStatus 0 getSnakeStatus 1
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[0] es MovingObjects[1] ][ Helyszin: Tiles[1][0] Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[0] es MovingObjects[1] ][ Helyszin: Tiles[0][0] 0. kigyo statusza: Halott 1. kigyo statusza: Halott
Háztartási Létra
122
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
10. Normál kígyó másik kígyó testébe ütközik ütközik
Teszt célja: Egy normál kígyó ütközésének tesztelése egy másik kígyó testébe. Megvalósítása: Egy 2×2-es pályára felhelyezünk két kígyót, és az egyiket beleütköztetjük a másik testébe. Várt eredmény: A másik testébe ütköz˝o kígyó meghal. Mely részek kerülnek tesztelésre: • SnakeSection.meetSnake() • SnakeHead.snakeInWay() Lehetséges hibaforrások: • SnakeSection.meetSnake() nem értesíti a másik kígyót az ütközésr˝ol • SnakeHead.snakeInWay() nem (megfelel˝oen) hívja meg a splitOff() metódust Bemenet: allocateField 2 2 putSnake 1 0 2 2 putSnake 1 1 1 1 gameRound getSnakeStatus 0 getSnakeStatus 1 getTileContent 0 0 getTileContent 1 0
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0].next ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[0][0] ][ Felepites: [ ][ ] 1. kigyo statusza: Halott Tiles[0][0] mezon jelenleg MovingObjects[0] tartozkodik Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik
Háztartási Létra
123
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
11. Furészes ˝ kígyó másik kígyó követ nem tartalmazó fejébe ütközik páratlan távolságról
Teszt célja: Egy f˝urészes kígyó egy követ nem tartalmazó kígyó fejébe páratlan távolságról való ütközésének tesztelése. Megvalósítása: Egy 3×1-es pályára felhelyezünk két egy egység hosszú kígyót úgy, hogy köztük egy mez˝o távolság legyen és egymás felé haladjanak. Az egyik kígyót felruházzuk f˝urészes tulajdonsággal. Várt eredmény: A két kígyó összeütközik, a normál kígyó meghal. Mely részek kerülnek tesztelésre: • SnakeSection.meetSnake() Lehetséges hibaforrások: • SnakeSection.meetSnake() nem megfelel˝oen választja ki, melyik kígyóval mi történik Bemenet: allocateField 3 1 putSnake 0 0 0 1 putSnake 2 0 2 1 setPowerful 1 on gameRound getSnakeStatus 0 getSnakeStatus 1
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[0] es MovingObjects[1] ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Halott 1. kigyo statusza: Elo ][ Furesztulajdonsag: van ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[1][0] ][ Felepites: [ ]
Háztartási Létra
124
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
12. Furészes ˝ kígyó másik kígyó követ nem tartalmazó fejébe ütközik páros távolságról
Teszt célja: Egy f˝urészes kígyó egy követ nem tartalmazó kígyó fejébe páros távolságról való ütközésének tesztelése. Megvalósítása: Egy 2×1-es pályára felhelyezünk két egy egység hosszú kígyót úgy, hogy köztük nincs mez˝o és egymás felé haladjanak. Az egyik kígyót felruházzuk f˝urészes tulajdonsággal. Várt eredmény: A két kígyó összeütközik, a normál kígyó meghal. Mely részek kerülnek tesztelésre: • SnakeSection.meetSnake() Lehetséges hibaforrások: • SnakeSection.meetSnake() nem megfelel˝oen választja ki, melyik kígyóval mi történik Bemenet: allocateField 2 1 putSnake 0 0 0 1 putSnake 1 0 2 1 setPowerful 0 on gameRound getSnakeStatus 0 getSnakeStatus 1
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[0] es MovingObjects[1] ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: van ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[1][0] ][ Felepites: [ ] 1. kigyo statusza: Halott
Háztartási Létra
125
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
13. Furészes ˝ kígyó követ tartalmazó szelvénybe ütközik
Teszt célja: Egy f˝urészes kígyó követ nem tartalmazó szelvénybe való ütközésének tesztelése. Megvalósítása: Egy 3×3-as pályára felhelyezünk két kígyót, egy egység és egy két egység hosszú kígyót. A két egység hosszú kígyó testébe követ helyezünk el. Az egy egység hosszú kígyót f˝urésztulajdonsággal ruházzuk fel, és a másik teste felé irányítjuk. Várt eredmény: A f˝urészes kígyó beleütközik a köves szelvénybe és meghal. Mely részek kerülnek tesztelésre: • SnakeSection.meetSnake() Lehetséges hibaforrások: • SnakeSection.meetSnake() nem megfelel˝oen választja ki, melyik kígyóval mi történik Bemenet: allocateField 3 3 putSnake 2 0 2 2 putSnake 1 2 1 1 gameRound rollStones 0 1 rollStones 0 0 setPowerful 1 on gameRound getSnakeStatus 0 getSnakeStatus 1 getTileContent 0 0 getTileContent 1 0
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0].next ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[0][0] ][ Felepites: [*][ ] 1. kigyo statusza: Halott Tiles[0][0] mezon jelenleg MovingObjects[0] tartozkodik Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik
Háztartási Létra
126
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
14. Furészes ˝ kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében
Teszt célja: Annak tesztelése, hogy amikor egy f˝urészes kígyó egy követ nem tartalmazó testrészbe ütközik, akkor valóban leharapja a másik farkát és létrejön egy új kígyó. Megvalósítása: Egy 3×4-es pályára két kígyót helyezünk fel és az egyiket felruházzuk f˝urésztulajdonsággal, és a másik teste felé irányítjuk. Várt eredmény: A f˝urészes kígyó beleütközik a másik kígyóba, levágja annak a farkát, és létrejön még egy kígyó. Mely részek kerülnek tesztelésre: • SnakeSection.splitOff() • SnakeHead.assignTail() Lehetséges hibaforrások: • SnakeSection.splitOff() nem hoz létre új kígyófejet • SnakeHead.assignTail() nem rendeli hozzá az új fejhez a farokrészt Bemenet: allocateField 3 4 putSnake 0 1 0 3 putSnake 1 3 1 1 setPowerful 1 on gameRound gameRound getSnakeStatus 0 getSnakeStatus 1 getSnakeStatus 2
A várt kimenet: Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0].next ][ Helyszin: Tiles[1][1] Esemeny: Uj kigyo letrejotte ][ Helyszin: Tiles[0][1] ][ Mozgas iranya: 1 ][ Felepites: [ ] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0
Háztartási Létra
127
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
][ 1. ][ 2. ][
7 RÉSZLETES TERVEK
Fej pozicioja: Tiles[2][1] ][ Felepites: [ ] kigyo statusza: Elo ][ Furesztulajdonsag: van ][ Mozgas iranya: 1 Fej pozicioja: Tiles[1][1] ][ Felepites: [ ] kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 1 Fej pozicioja: Tiles[0][0] ][ Felepites: [ ]
7.2.4.
Egyéb tesztesetek
15. Kígyó elfordul
Teszt célja: Egy kígyó mozgásának, elfordulásának tesztelése. Megvalósítása: Egy 2×2-es pályára felhelyezünk egy kígyót egy adott irány felé haladóan, melyet közben megváltoztatunk. Várt eredmény: A kígyó irányt változtat és arra halad tovább. Mely részek kerülnek tesztelésre: • SnakeWrapper.steerSnake() Lehetséges hibaforrások: • SnakeWrapper.steerSnake() nem megfelel˝o mez˝ore mozgatja a kígyót (nemnulla irány kezelése) Bemenet: allocateField 2 2 putSnake 0 0 0 3 gameRound emulateSnakeSteer 0 3 gameRound getTileContent 0 0 getTileContent 1 0 getTileContent 1 1
A várt kimenet: Tiles[0][0] mezon jelenleg MovingObjects[0].next.next tartozkodik Tiles[1][0] mezon jelenleg MovingObjects[0].next tartozkodik Tiles[1][1] mezon jelenleg MovingObjects[0] tartozkodik
Háztartási Létra
128
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
16. Kígyó sövénnyel ütközik
Teszt célja: Egy kígyó sövénnyel való ütközésének tesztelése. Megvalósítása: Egy 2×1-es pályára felhelyezünk egy egység hosszú kígyót és egy sövényt. Várt eredmény: A kígyó nekiütközik a sövénynek és meghal. Mely részek kerülnek tesztelésre: • SnakeHead.hedgeInWay() Lehetséges hibaforrások: • SnakeHead.hedgeInWay() nem hívja meg a splitOff() metódust Bemenet: allocateField 2 1 putSnake 0 0 0 1 putStaticObject 1 0 Hedge gameRound getSnakeStatus 0
A várt kimenet: Esemeny: Sovenybe utkozes ][ Resztvevok: MovingObjects[0] es Hedges[0] ][ Helyszin: Tiles[1][0] 0. kigyo statusza: Halott
17. Kígyó hasában k˝o legurulása
Teszt célja: Egy k˝o legurulásának a menetének a tesztelése egy kígyó hasában. Megvalósítása: Egy 3×1-es pályán elhelyezünk egy három egység hosszú kígyót, melybe egy követ helyezünk el. Várt eredmény: A k˝o legurul a kígyó hasában egészen a farkáig, ahol megáll.
Háztartási Létra
129
2008. május 14.
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén
7 RÉSZLETES TERVEK
Mely részek kerülnek tesztelésre: • SnakeSection.passStoneDown() Lehetséges hibaforrások: • SnakeSection.passStoneDown() nem megfelel˝oen gurítja le a köveket Bemenet: allocateField 3 1 putSnake 0 0 0 3 gameRound gameRound rollStones 0 1 getSnakeStatus 0 rollStones 0 0 getSnakeStatus 0 rollStones 0 0 getSnakeStatus 0 rollStones 0 0 getSnakeStatus 0
A várt kimenet: 0. ][ 0. ][ 0. ][ 0. ][
kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][ ][*] kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][*][ ] kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [*][ ][ ] kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [*][ ][ ]
Háztartási Létra
130
Mozgas iranya: 0 Mozgas iranya: 0 Mozgas iranya: 0 Mozgas iranya: 0
2008. május 14.
7.3 A tesztelést támogató programok tervei
7 RÉSZLETES TERVEK
7.3. A tesztelést támogató programok tervei 7.3.1.
testall.bat
@echo off for \%\%a in (\textbf{.in) do call:LOOP \%\%a goto:eof :LOOP set str=\%~1 set testNum=\%str:~0,-3\% call testone.bat \%testNum\%
7.3.2.
test.bat
@echo off if "\%1" == "" goto:error echo.************** echo \%1 Teszt echo.**************
:: call run.bat < \%1.in > \%1.gen :: compare \%1.out \%1.gen echo.************** echo.VEGE echo.************** goto:eof
Háztartási Létra
131
2008. május 14.
7.3 A tesztelést támogató programok tervei
7 RÉSZLETES TERVEK
:error echo.Adj meg egy tesztesetet 7.3.3.
Compare.java
import java.io.∗; import java.lang.∗; class Compare { public static void main (String[] args) { Compare compare = new Compare(); try { compare.printDiff(args[0], args[1]); } catch (ArrayIndexOutOfBoundsException e){ System.out.println("Két fájlt kell megadnod!"); } } public void printDiff(String file1, String file2) { DataInputStream dis1 = null; DataInputStream dis2 = null; String line1 = null; String line2= null; int lineNum = 0; try { dis1 = new DataInputStream( new BufferedInputStream( new FileInputStream(new File(file1)))); dis2 = new DataInputStream( new BufferedInputStream( Háztartási Létra
132
2008. május 14.
7.3 A tesztelést támogató programok tervei
7 RÉSZLETES TERVEK
new FileInputStream(new File(file2)))); line1 = dis1.readLine(); line2 = dis2.readLine(); while ((line1 != null) || (line2 != null)) { if(line1 == null && line2 != null) { System.out.println(lineNum); System.out.println("> " + line2); } else if (line2 == null && line2 != null) { System.out.println(lineNum); System.out.println("< " + line1); } else { if( line1.compareTo(line2) != 0 ) { System.out.println(lineNum); System.out.println("< " + line1); System.out.println("> " + line2); } } lineNum++; line1 = dis1.readLine(); line2 = dis2.readLine(); } } catch (IOException e) { System.out.println("Nem sikerült megnyitni a fájlt: " + e.getMessage()); } finally { try { if (dis1 != null) { dis1.close(); } if (dis2 != null) { dis2.close(); Háztartási Létra
133
2008. május 14.
7.3 A tesztelést támogató programok tervei
7 RÉSZLETES TERVEK
} } catch (IOException e) { } } } //printDiff } //Compare
Háztartási Létra
134
2008. május 14.
8 PROTOTÍPUS BEADÁSA
8. Prototípus beadása 8.1. Feltöltött prototípus ismertetése 8.1.1.
Telepítés
A tömörített fájl kibontásával telepíthet˝o a prototípus a felhasználó által választott könyvtárba. Használatához 1.4.2 verziószámú vagy újabb Sun Java futtató környezetre (JRE, Java Runtime Environment) van szükség. Mivel a prototípus nem tartalmaz binárisokat, csak forráskódot, így az egyszeri fordításhoz Java fejleszt˝okörnyezetre (JDK, Java Development Kit) is szükség van. 8.1.2.
Fordítás
Kitömörítés után a választott könyvtárban található build.bat fájl futtatásával indítható a fordítás. A fordítás végeztével az osztályok bytekódjai és a tömörített JAR (Java Archive) fájl a bin könyvtárban jön létre. 8.1.3.
Futtatás
Fordítás után a választott könyvtárban található run.bat, test.bat és testall.bat fájlok valamelyikének futtatásával indítható a szoftver. Ezekr˝ol b˝ovebben a Prototípus használata részben. 8.1.4.
Javadoc dokumentáció generálása
Kitömörítés után a választott könyvtárban található gendoc.bat fájl futtatásával létrejön a doc könyvtárban a javadoc dokumentáció. 8.1.5.
A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk
Gyökérkönyvtár
Itt taláhatók a fordításhoz, futtatáshoz és dokumentáció generáláshoz szükséges batch fájlok.
Háztartási Létra
135
2008. május 14.
8.1 Feltöltött prototípus ismertetése
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1
dnet dnet dnet dnet dnet
8 PROTOTÍPUS BEADÁSA
dnet 118 2008-04-13 23:50 build.bat dnet 63 2008-04-13 23:50 gendoc.bat dnet 34 2008-04-13 23:50 run.bat dnet 167 2008-04-14 22:04 testall.bat dnet 293 2008-04-15 17:18 test.bat
bin
Ide kerülnek az osztályok bytekódjait tartalmazó .class fájlok, ill. az egész szoftvert tartalmazó JAR archívum. doc
Ide helyezi kimenetét a javadoc dokumentáló, böngészéséhez az index.html fájlt kell megnyitni. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1
Háztartási Létra
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
1615 1375 9553 4551 4438 9964 9949 21861 9886 7623 26601 835 5596 1 730 15817 4096 9940 27624 19408 16059 9959 1202 15766
2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-14 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15
136
23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 23:57 22:37 23:57 23:57 23:57 23:57 23:57 23:57 23:57
allclasses-frame.html allclasses-noframe.html Compare.html constant-values.html deprecated-list.html Fieldberry.html Foreground.html GameField.html Hedge.html help-doc.html index-all.html index.html overview-tree.html package-list packages.html ProtoHelper.html resources Sawberry.html SnakeHead.html SnakeSection.html SnakeWrapper.html Stoneberry.html stylesheet.css Tile.html
2008. május 14.
8.1 Feltöltött prototípus ismertetése
8 PROTOTÍPUS BEADÁSA
src
Itt található az összes osztály forráskódja a nevével megegyez˝o .java fájlban, valamint a JAR archívum készítéséhez szükséges Manifest fájl. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet 2012 2008-04-15 17:16 Compare.java dnet 292 2008-04-13 23:10 Fieldberry.java dnet 415 2008-04-13 23:10 Foreground.java dnet 5312 2008-04-14 22:37 GameField.java dnet 278 2008-04-13 23:10 Hedge.java dnet 46 2008-04-13 23:48 manifest.mf dnet 11951 2008-04-14 22:23 ProtoHelper.java dnet 290 2008-04-13 23:10 Sawberry.java dnet 2473 2008-04-14 22:25 SnakeHead.java dnet 4039 2008-04-14 22:37 SnakeSection.java dnet 2524 2008-04-14 22:37 SnakeWrapper.java dnet 289 2008-04-13 23:10 Stoneberry.java dnet 2380 2008-04-14 22:33 Tile.java
tst
Itt helyezkednek el a teszteléshez szükséges szöveges fájlok. Tehát itt találhatóak meg a bemeneti fájlok, amelyek tartalmazzák az egyes teszteseteket vezérl˝o megfelel˝o utasításokat (.in kiterjesztés˝u fájlok), valamint az egyes bemenetekhez tartozó elvárt kimeneteket tartalmazó fájlok .out kiterjesztéssel. Ezen kívül a test.bat futtatása után ebbe a könyvtárba kerülnek a program által a bemenetekre generált kimenetek, ezek pedig .gen kiterjesztéssel fognak rendelkezni. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Háztartási Létra
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
39 50 118 106 137 312 149 351 165 347 149 347 153 402 102
2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15 2008-04-15
137
13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10 13:10
01.in 01.out 02.in 02.out 03.in 03.out 04.in 04.out 05.in 05.out 06.in 06.out 07.in 07.out 08.in
2008. május 14.
8.1 Feltöltött prototípus ismertetése
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
8.1.6.
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
250 102 260 142 377 120 248 120 248 203 377 149 559 143 186 93 124 195 504
8 PROTOTÍPUS BEADÁSA
2008-04-15 2008-04-15 2008-04-15 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14 2008-04-14
13:10 13:10 13:10 01:45 19:18 01:46 01:46 01:46 19:25 20:05 20:05 21:20 21:25 20:29 01:46 01:46 19:32 01:46 19:29
08.out 09.in 09.out 10.in 10.out 11.in 11.out 12.in 12.out 13.in 13.out 14.in 14.out 15.in 15.out 16.in 16.out 17.in 17.out
A java forráskód fájlok ismertetése
A java forráskód fájlok mindegyike egy-egy osztály tartalmaz, a fájlnévvel megegyez˝o nev˝ut. Az egyes osztályokról rövid leírás olvasható a forráskód els˝o soraiban ill. a javadoc által generált dokumentációban. A szoftver belépési pontját tartalmazó ProtoHelper osztály végzi a szöveges képerny˝o vezérlését; értelmezi a bemenetet és végrehajtja az érvényes utasításokat ill. hiba esetén hibaüzenetet ad a szabványos hibacsatornára. 8.1.7.
Prototípus használata
A prototípust háromféleképpen is futtathatjuk, a run.bat, a test.bat és a testall.bat segítségével. run.bat
A run.bat futtatása során a Prototípus interface definíciója részben definiált utasítások segítségével a szabványos bemenet használatával vezérelhet˝o a program. Ekkor az utasítássorozat megadásával saját teszteket is végre lehet hajtani, az eredmény a szabányos kimeneten jelenik meg. A könnyebb tesztelés érdekében a Háztartási Létra
138
2008. május 14.
8.1 Feltöltött prototípus ismertetése
8 PROTOTÍPUS BEADÁSA
tesztelni kívánt utasításokat elhelyezhetjük fájlban is, és a kimenetet is átirányíthatjuk akár fájlba kés˝obbi elemzés céljából. Ekkor az eredményt saját magunk tudjuk ellen˝orizni, nincs szükség viszonyítási alapra, azaz elvárt kimenetre. test.bat
A prototípus futtatható a test.bat fájl segítségével is. Ekkor paraméterként megadhatunk egy relatív elérési utat, kiterjesztés nélkül. Ekkor az adott könyvtárban az adott fájlnéven kell szerepelnie egy .in és egy .out kiterjesztés˝u fájlnak, a bemeneti fájlban elhelyezve az utasítássorozatot, a kimenetiben pedig az elvárt kimenetet. Futattás után az adott könyvtárba legenerálódik az adott néven .gen kiterjesztéssel a kimenet, melyet összehasonlít a program a .out fájllal. Ha egyezik az elvárt kimenettel, akkor a szabványos kimenetre kiíródik, hogy a fájlok tartalma megegyezett. Ha valamely ponton nem egyeznek, akkor a szabványos kimeneten azok a sorpárok jelennek meg, amelyek eltértek egymástól az elvárt és a generált kimenetben. Természetesen a .out és .gen fájlokat szemmel is össze lehet hasonlítani. testall.bat
A program tesztelhet˝o a testall.bat futtatásával is. Ekkor az el˝oz˝o test.bat- ot használjuk fel, csak immár automatizált m˝uködéssel. A program a tst könyvtárban lév˝o összes .in kiterjesztés˝u bemeneti fájlra elvégzi a tesztet, az eredmény ugyanúgy jelenik meg, mint a test.bat esetében, csak ekkor a kimeneten egymás után jelennek meg az egyes tesztek eredményei.
Háztartási Létra
139
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
8.2. Tesztek jegyz˝okönyvei
Kimenet Javítás
1. – Pálya felépítése Veres 2008. 04. 14. 00.50 sikertelen A Tile-ok inicializálásakor csak a tömb lett létrehozva, a tömb elemei nem, így a szomszédossági viszonyok beállításakor nem létez˝o elemekre történt hivatkozás. Exception in thread "main" java.lang.NullPointerException Az allocateField() metódus javításra került.
Teszteset Tesztel˝o Id˝opont Eredmény
1. – Pálya felépítése Veres 2008. 04. 14. 01.12 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény Hiba Kimenet Javítás
2. – Statikus objektum felhelyezése Veres 2008. 04. 14. 01.50 sikertelen A kimenet eltér a várttól (typo). Tiles[0][0] mezon jelenleg Fieldberry[0] tartozkodik Fieldberry átnevezése Fieldberries-re
Teszteset Tesztel˝o Id˝opont Eredmény
2 – Statikus objektum felhelyezése Veres 2008. 04. 14. 01.57 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény Hiba
Háztartási Létra
140
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
Teszteset Tesztel˝o Id˝opont Eredmény Hiba Kimenet Javítás
3. – Kígyó felhelyezése Veres 2008. 04. 14. 16.49 sikertelen A kígyó egy egységgel kevesebb ideig növekszik. Tiles[2][0] mezon jelenleg semmi sem tartozkodik A pullToTile() és initAtTile() metódusokban egyaránt csökkentettük eggyel proposedEnlargement értékét, így a kígyó növekedésének hossza eggyel csökkent.
Teszteset Tesztel˝o Id˝opont Eredmény
3. – Kígyó felhelyezése Veres 2008. 04. 14. 17.26 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény
4. – Kígyó mezei bogyót eszik Veres 2008. 04. 14. 17.38 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény Hiba
5. – Kígyó k˝obogyót eszik úgy, hogy van a fejében k˝o Veres 2008. 04. 14. 17.53 sikertelen A kígyó a specifikáció módosítás el˝otti módon nyelte le a köveket. 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [*][ ] Az algoritmus javításra kerül.
Kimenet Javítás
Háztartási Létra
141
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
Teszteset Tesztel˝o Id˝opont Eredmény
5. – Kígyó k˝obogyót eszik úgy, hogy van a fejében k˝o Veres 2008. 04. 14. 18.11 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény
6. – Kígyó k˝obogyót eszik úgy, hogy nincs a fejében k˝o Veres 2008. 04. 14. 18.16 sikeres
7. – Kígyó f˝urészbogyót eszik, majd a f˝urésztulajdonság hatása elmúlik Tesztel˝o Veres Id˝opont 2008. 04. 14. 18.27 Eredmény sikeres Teszteset
8. – Normál kígyó másik kígyó fejébe ütközik páratlan távolságról Tesztel˝o Veres Id˝opont 2008. 04. 14. 18.29 Eredmény sikertelen Hiba A bemenetben a második kígyó X és Y koordinátája fel volt cserélve. Kimenet Hiba: nem letezo mezo – kimentel a palyarol Javítás A bemenetben helyes sorrendre cseréltük a koordinátákat. Teszteset
8. – Normál kígyó másik kígyó fejébe ütközik páratlan távolságról Tesztel˝o Veres Id˝opont 2008. 04. 14. 18.45 Eredmény sikeres Teszteset
Háztartási Létra
142
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
Teszteset Tesztel˝o Id˝opont Eredmény Hiba Kimenet Javítás
8 PROTOTÍPUS BEADÁSA
9. – Normál kígyó másik kígyó fejébe ütközik páros távolságról Veres 2008. 04. 14. 18.51 sikertelen Esemény bekövetkeztekor a résztvev˝o felek rossz sorrendben íródnak ki. Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0] ][ Helyszin: Tiles[1][0] Kiíró algoritmus átalakítása úgy, hogy az el˝obb létrejött objektumot írja el˝ore.
Teszteset Tesztel˝o Id˝opont Eredmény
9. – Normál kígyó másik kígyó fejébe ütközik páros távolságról Veres 2008. 04. 14. 19.01 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény Hiba
Javítás
10. – Normál kígyó másik kígyó testébe ütközik Veres 2008. 04. 14. 19.11 sikertelen Bertók az elvárt kimenetek megírásakor nem vette figyelembe, hogy az ütközéseket a résztvev˝o szelvények autonóm módon kezelik. Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0].next ][ Helyszin: Tiles[1][0] Az elvárt kimeneteket átszerkesztettük.
Teszteset Tesztel˝o Id˝opont Eredmény
10. – Normál kígyó másik kígyó testébe ütközik Veres 2008. 04. 14. 19.18 sikeres
Kimenet
Háztartási Létra
143
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
11. – F˝urészes kígyó másik kígyó követ nem tartalmazó fejébe ütközik páratlan távolságról Tesztel˝o Bertók Id˝opont 2008. 04. 14. 19.20 Eredmény sikeres Teszteset
12. – F˝urészes kígyó másik kígyó követ nem tartalmazó fejébe ütközik páros távolságról Tesztel˝o Bertók Id˝opont 2008. 04. 14. 19.23 Eredmény sikertelen Hiba A kimenetben el lett gépelve a kígyó iránya. Kimenet 0. kigyo statusza: Elo ][ Furesztulajdonsag: van ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[1][0] ][ Felepites: [ ] Javítás A várt kimenetet átírtuk. Teszteset
12. – F˝urészes kígyó másik kígyó követ nem tartalmazó fejébe ütközik páros távolságról Tesztel˝o Veres Id˝opont 2008. 04. 14. 19.25 Eredmény sikeres Teszteset
Teszteset Tesztel˝o Id˝opont Eredmény Hiba Kimenet Javítás
Háztartási Létra
17. – Kígyó hasában k˝o legurulása Bertók 2008. 04. 14. 19.28 sikertelen Kimenet el lett gépelve – "Felépítés" helyett "Felépítése" szerepel. 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][ ][*] A várt kimenetet átírtuk.
144
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
Teszteset Tesztel˝o Id˝opont Eredmény
16. – Kígyó sövénnyel ütközik Bertók 2008. 04. 14. 19.34 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény
17.- Kígyó hasában k˝o legurulása Veres 2008. 04. 14. 19.36 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény Hiba Kimenet Javítás
13. – F˝urészes kígyó követ tartalmazó szelvénybe ütközik Bertók 2008. 04. 14. 19.39 sikertelen A kígyó lemegy a pályáról. Exception in thread "main" java.lang.NullPointerException A tesztben szerepl˝o 2×3-as pálya javítása 3×3-asra, ennek megfelel˝oen a bemenet és az elvárt kimenet átírása.
Teszteset Tesztel˝o Id˝opont Eredmény
13. – F˝urészes kígyó követ tartalmazó szelvénybe ütközik Bertók 2008. 04. 14. 20.04 sikeres
Háztartási Létra
145
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
Javítás
15. – Kígyó elfordul Veres 2008. 04. 14. 20.19 sikertelen A kígyó felhelyezése kimaradt a bemenetb˝ol. Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 A bemeneti fájl kiegészítése a kígyót felhelyez˝o utasítással.
Teszteset Tesztel˝o Id˝opont Eredmény
15. – Kígyó elfordul Bertók 2008. 04. 14. 20.28 sikeres
Teszteset Tesztel˝o Id˝opont Eredmény Hiba Kimenet
14. – F˝urészes kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében Tesztel˝o Veres Id˝opont 2008. 04. 14. 21.02 Eredmény sikertelen Hiba Az újonnan létrejött kígyó – az elvárt kimenett˝ol eltér˝oen – már mozog abban körben is, amelyben létrejött, így lemegy a pályáról. Kimenet Exception in thread "main" java.lang.NullPointerException Javítás Úgy döntöttünk, hogy a be- és kimenetet javítjuk ennek megfelel˝oen. Teszteset
Háztartási Létra
146
2008. május 14.
8.2 Tesztek jegyz˝okönyvei
8 PROTOTÍPUS BEADÁSA
14. – F˝urészes kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében Tesztel˝o Bertók Id˝opont 2008. 04. 14. 21.17 Eredmény sikertelen Hiba A levágott farkú kígyó 3 egység hosszú marad az 1 helyett, mert az algoritmusból hiányzott egy ellen˝orzés. Kimenet 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][1] ][ Felepites: [ ][ ][ ] Javítás Az algoritmust javítottuk. Teszteset
14. – F˝urészes kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében Tesztel˝o Veres Id˝opont 2008. 04. 14. 20.25 Eredmény sikeres Teszteset
Háztartási Létra
147
2008. május 14.
8.3 Értékelés
8 PROTOTÍPUS BEADÁSA
8.3. Értékelés A két hónapja tartó projekt során sikerült már bizonyos szint˝u rutint szereznünk, így az utóbbi leadandó részek elkészítése már gördülékenyebben ment, mint a korábbiak. A feladatokat végig megpróbáltuk egyenletesen szétosztani magunk között, figyelembe véve azért azt is, hogy melyikünk milyen jelleg˝u feladatot készít el szívesebben, milyen feladat megy neki jobban. Az id˝oközben történt specifikáció változáshoz szerencsére könnyen tudtuk alakítani a modellünket, úgyhogy ez nem okozott problémát. A prototípus koncepciójánál el˝oször kicsit félreértettük a dolgokat, ám a részletes tervek kapcsán ezeket is sikerült kijavítanunk. A részletes tervekben specifikált dolgokat és a szkeletont felhasználva a program kódolása már könnyebb feladatnak bizonyult, így a kódolásban is minden csapattag részt vett. Összességében mindannyian egyformán vettünk részt a projekttel kapcsolatos munkálatokban. Tehát a csapattagok részvételi aránya a feladatok megoldásában: Bertók Zsófia 33,3 % Tönköl Viktor 33,3 % Veres-Szentkirályi András 33,4 %
Háztartási Létra
148
2008. május 14.
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
9. Grafikus felület specifikációja 9.1. A menürendszer, a kezel˝oi felület grafikus képe
A szoftver indítása után a felhasználók számára megjelenik a f˝omenü, melynek segítségével beállíthatóak többek között a játék paraméterei, illetve elindítható a játék. A menüben kíválaszthatják a játékosok, hogy hányan (2-en, 3-an vagy 4-en) illetve milyen nehézségi szinten (könny˝u, közepes, nehéz) szeretnének játszani, valamint hogy milyen sebességgel szeretnének haladni a kígyójukkal (lassú, közepes, gyors). Az egyes menüpontok között fel-le haladva lehet lépkedni a billenty˝uzet segítségével, az éppen aktív menü más színnel (narancssárga) jelenik meg, mint a többi. Ha egy menüpontban több lehet˝oség közül választhatunk, akkor pedig a billenty˝uzet bal-jobb gombjai segítségével tudunk közöttük váltani. A választási lehet˝oségeket nem felkínáló menükbe Enter segítségével tudunk belépni.
Háztartási Létra
149
2008. május 14.
9.1 A kezel˝oi felület grafikus képe
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
A játékosok a játék indítására lépve elindíthatják az adott beállításokkal a játékot. Ekkor elindul a játék, melynek a tervezett grafikus felülete a következ˝oképpen néz ki:
Az ablak közepén elhelyezked˝o füves tér a játéktér, amelyen a kígyók haladhatnak. A pályán lehetnek sövények, bogyók, kígyók, illetve kövek a kígyókban. Háztartási Létra
150
2008. május 14.
9.1 A kezel˝oi felület grafikus képe
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
A felhasználók a kígyókat a csíkjaik színe alapján tudják megkülönböztetni. Az egyes kígyókat minden játékos a hozzárendelt adott négy billenty˝uvel tudja navigálni. A kijelölt billenty˝ucsoportok: W-A-S-D, fel-balra-le-jobbra, U-H-J-K és a numerikus fel-balra-le-jobbra. A pálya feletti sávban helyezkednek el egymás mellett az egyes játékosok pontszámai, mindenki pontszáma olyan színnel van, mint amilyen színe a kígyójának van. A pálya alatti sávban pedig a hátralév˝o id˝o látszik, mégpedig perc:másodperc formátumban.
A játék menet közben megállítható az Escape billenty˝u segítségével, melynek lenyomása után megjelenik egy menü. A menüben választhatnak a felhasználók a f˝omenünél specifikált módon, hogy folytatják-e a játékot, vagy kilépnek bel˝ole. A játék végén természetesen megjelenik a végeredmény. Ha egyértelm˝uen eldönthet˝o, hogy ki volt a gy˝oztes, akkor a képerny˝ore kerül, hogy melyik játékos nyerte a játékot, ha pedig ez nem tehet˝o meg, akkor döntetlen jelenik meg. A képerny˝on ekkor látható egyetlen menüpont segítségével vissza tudunk térni a már megszokott módon a f˝omenühöz, ahonnan a játék újraindítható, de akár ki is lehet lépni a játékból.
Háztartási Létra
151
2008. május 14.
9.1 A kezel˝oi felület grafikus képe
Háztartási Létra
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
152
2008. május 14.
9.2 A grafikus rendszer architektúrája
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
9.2. A felület muködésének ˝ elve, a grafikus rendszer architektúrája (struktúra diagramok) A grafikus felületet – mint az a feladat elején specifikáltuk – MVC elvek mentén valósítjuk meg. A képerny˝on jelentéssel bíró objektumokhoz rajzolókat rendelünk, melyek felel˝osek az objektum állapotának lekérdezéséért, majd az állapotnak megfelel˝o megjelenítésért. Mivel a játék körökre van osztva, így nem eseményeket használunk, hanem minden körben lekérdezzük az objektumok állapotát és ennek megfelel˝oen frissítjük a grafikus felületet. 9.2.1.
SnakeExplorer
GameScreen alkalmazza kígyó szelvényeinek kiszámításakor. Egy új kígyó felderítése úgy történik, hogy el˝oször meghívódik az exploreSnake() metódusa, mely paraméterként megkapja a kérdéses kígyó SnakeWrapper objektumát. SnakeExplorer lekérdezi t˝ole az irányát, ez alapján el tudja helyezni a fejet és el tudja indítani az exploreSection() hívások sorozatát. Az exploreSection() metódus paraméterként kap egy érkez˝o irányt és egy szelvényt, melynek alapján – SnakeSection getNext(), getNextDir() és getStone() metódusait meghívva – képes kiszámolni a szelvény helyzetét (egyenes/kanyar/farok, forgatás/tükrözés). Amennyiben nem farokról van szó, (van következ˝o szelvény) rekurzívan meghívja saját magát a kígyó további részére. 9.2.2.
TileDrawer
GameScreen alkalmazza a pálya egy-egy mez˝ojének kirajzolásához. Minden példánya kölcsönösen egyértelm˝uen hozzárendel˝odik ahhoz a Tile objektumhoz, amelyet kirajzol. Képes t˝ole lekérdezni – a hasChanged() metóduson keresztül – hogy változott-e, valamint – a getObjClass() metóduson keresztül – a rajta tartózkodó objektum osztályát. Amennyiben nem SnakeSection vagy SnakeHead objektumról van szó, HashMap segítségével betölti a megfelel˝o képet. A kígyók részeit SnakeExplorer – közvetve, GameScreen osztályon keresztül – helyezi rá. Kés˝obb GameScreen kérésére kirajzolja a betöltött képet, GlyphCache gyorsítótárából olvasva az ismétl˝od˝o képeket.
Háztartási Létra
153
2008. május 14.
9.2 A grafikus rendszer architektúrája
9.2.3.
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
GlyphCache
A képek betöltésével, cachelésével és manipulációjával foglalkozó osztály. Egyetlen kívülr˝ol elérhet˝o metódusa a getIcon(), melynek meghívásakor amennyiben a gyorstárában van a kért kép, azonnal visszaadja azt, egyébként betölti a kért képet, elhelyezi a gyorstárban, majd visszaadja. Így a gyorstárban mindig csak a játékhoz szükséges képek szerepelnek (például két játékos esetén csak az els˝o két kígyó szelvényei), azok viszont gyorsan elérhet˝oek (csak az els˝o híváskor kell a fájlrendszerhez fordulni). 9.2.4.
GameScreen
A játékterületet jeleníti meg, GameField megjelenít˝o osztálya. Létrehozásakor minden Tile objektumhoz létrehoz és hozzárendel egy TileDrawer objektumot. Megvalósítja a GFNotify interfészt, így GameField minden kör lefutása után értesíteni tudja arról, hogy frissítse a pályát. A pálya frissítése során értesíti az összes TileDrawer objektumát, majd bejárja a kígyókat a SnakeExplorer osztállyal, végül érvényteleníti magát. Amikor kés˝obb az AWT kirajzolást kér t˝ole, a TileDrawer objektumok már az aktuális állapotot fogják tükrözni. Szintén az o˝ feladata a pálya hátterének (f˝u, pontszámok, hátralév˝o id˝o) frissítése. 9.2.5.
StaticScreen
Egy statikus képet jelenít meg, melyr˝ol gombnyomás hatására léphet tovább a felhasználó. Ebben az implementációban ezzel az osztállyal lesz megvalósítva az induláskor rövid id˝ore megjelen˝o (splash-) képerny˝o, a játékszabály és a játék végét jelz˝o felirat. A megjelenítend˝o kép a konstruktorban kerül átadásra. 9.2.6.
MenuScreen és gyermekei: MainMenuScreen, InGameMenuScreen
Absztrakt osztály, a menük kezeléséhez nyújt függvényeket. Két gyermekosztálya van, a f˝omenüt megvalósító MainMenuScreen ill. a játék közben felugró menüt megvalósító InGameMenuScreen. Mivel ezek megvalósításában sok közös – ezáltal redundáns – kód lenne, ezért döntöttünk egy közös absztrakt o˝ sosztály létrehozása mellett. A menü két részb˝ol áll; a háttérb˝ol és az egyes menüelemekb˝ol. Frissítéskor (menüben léptetéskor ill. ablak mozgatáskor) el˝oször Háztartási Létra
154
2008. május 14.
9.2 A grafikus rendszer architektúrája
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
kirajzoljuk a menü hátterét, majd az egyes pontokhoz tartozó kiemelt/normál állapotoknak megfelel˝o téglalapot helyezzük menüpontonként a megfelel˝o helyre. A MenuScreen osztály tartalmaz egy absztrakt fillElements() metódust, amely a konstruktorban hívódik meg, a gyermekosztálynak ebben kell betölteni a megfelel˝o képeket a setBackground(), setNumSelection() és setSelection() o˝ sosztálybeli metódusok meghívásával. 9.2.7. Struktúra diagram
A struktúra diagramon – az áttekinthet˝oség javítása érdekében és terjedelmi okok miatt – a modellnek csak a grafikus felülettel való kapcsolatának bemutatásához szükséges osztályait és metódusait ábrázoltuk.
Háztartási Létra
155
2008. május 14.
9.3 A grafikus objektumok felsorolása
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
9.3. A grafikus objektumok felsorolása, kapcsolatuk az alkalmazói rendszerrel (szekvencia diagramok) 9.3.1.
SnakeExplorer
Leírás
Kígyó helyzetének felderítését végz˝o statikus objektum. Alaposztály
Nincsen. Példányok száma
1 Változók
Nincsenek. Komponensek
Nincsenek. Metódusok
void exploreSnake(SnakeWrapper A kígyófejet elhelyezi a megfelel˝o sw) irányba, majd elindítja az exploreSnake() hívások sorozatát. void exploreSection(SnakeSection A section metódusit felhasználva kisection, int dir) számolja a szelvény helyzetét és irányát. Ha section nem a farok, akkor rekurzívan meghívja magát a következ˝o szelvényre. Felel˝osségei
A kígyó helyes felderítése. Háztartási Létra
156
2008. május 14.
9.3 A grafikus objektumok felsorolása
9.3.2.
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
TileDrawer
Leírás
A pálya egy mez˝ojét kirajzoló objektum. Alaposztály
Nincsen. Példányok száma
Amennyi Tile van. Komponensek
Tile realTile A hozzárendelt és figyelt mez˝o. Metódusok
Frissíti a hozzárendelt Tile képét, el˝oször lekérdezi, hogy volt-e változás. Amennyiben változott a Tile lekérdezi, a rajta lév˝o objektumot és ha az nem SnakeSection vagy SnakeHead, akkor a HashMapon keresztül betölti a megfelel˝o képet. A kígyó részeket tartalmazó Tileok a SnakeExplorer frissíti az updateImage() metódussal. void paint(Graphics gc, int x, int y) Kirajzolja a realTile képét a megadott vászonra a megadott koordinátákra, a GlyphCache osztály felhasználásával. void updateImage() A SnakeExplorer a GameScreenen keresztül hívja meg, amikor a kígyókat helyezi fel rá.
void refreshTile()
Háztartási Létra
157
2008. május 14.
9.3 A grafikus objektumok felsorolása
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
Felel˝osségei
Egy Tile kirajzolása. 9.3.3.
GlyphCache
Leírás
A képek betöltésével, cachelésével foglalkozó statikus osztály. Alaposztály
Nincsen. Példányok száma
1 Változók
Nincsenek. Komponensek
A betöltött képeket tartalmazó komponens. Metódusok
ImageIcon getIcon(String icon, int Visszaadja a kért képet, ha a gyorsító angle, bool mirror) tárában van, akkor azonnal. Más esetben betölti a képet, letárolja és visszaadja. Felel˝osségei
A használt képek betöltése, forgatása, tükrözése, gyorsítótárazása.
Háztartási Létra
158
2008. május 14.
9.3 A grafikus objektumok felsorolása
9.3.4.
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
GameScreen
Leírás
A GameField, azaz a játékterület megjelenít˝o objektuma. Alaposztály
Nincsen. Megvalósított interfészek
GFNotify Példányok száma
1 Változók
Nincsen. Komponensek
Nincsen. Metódusok
void notifyScreen()
A GameField hívja meg minden kör végén, hogy frissítse a pályát. El˝oször a statikus hátteret jeleníti meg. Az összes TileDrawer refreshTile() metódusának meghívásával frissíti azokat. Ezután a SnakeExplorer segítségével kirajzoltatja az összes kígyót, majd végül érvényteleníti magát.
Felel˝osségei
Az egész pályakép kirajzolása.
Háztartási Létra
159
2008. május 14.
9.3 A grafikus objektumok felsorolása
9.3.5.
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
StaticScreen
Leírás
Egy statikus képet jelenít meg, a konstruktorban meghatározható, hogy err˝ol mennyi id˝o, vagy milyen gomb lenyomásának hatására lépjen tovább. Alaposztály
Nincsen. Példányok száma
1 Változók
Nincsen. Komponensek
Nincsen. Metódusok
void paint(Graphics gc) A megadott vászonra kirajzolja a megjelenítend˝o képet. Felel˝osségei
A játék során el˝oforduló statikus képek kirajzolása, például játékszabály. 9.3.6. MenuScreen Leírás
Absztrakt o˝ sosztálya a további menü objektumoknak. Ez tartalmazza a közös függvényeket.
Háztartási Létra
160
2008. május 14.
9.3 A grafikus objektumok felsorolása
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
Alaposztály
Nincsen. Példányok száma
Nem példányosítható. Változók
Nincsen. Komponensek
Nincsen. Metódusok
void paint(Graphics gc) A menü képének kirajzolása. Felel˝osségei
Közös függvények nyújtása a MainMenuScreen és az InGameMenuScreen objektumoknak. 9.3.7.
MainMenuScreen
Leírás
A f˝omenüt valósítja meg. Alaposztály
MenuScreen Példányok száma
1
Háztartási Létra
161
2008. május 14.
9.3 A grafikus objektumok felsorolása
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
Változók
Nincsen. Komponensek
Nincsen. Metódusok
void paint(Graphics gc) Konkrét menü kirajzolása. Felel˝osségei
A f˝omenü kirajzolása és kezelése. 9.3.8.
InGameMenuScreen
Leírás
A játék közben felugró menüt valósítja meg. Alaposztály
MenuScreen Példányok száma
1 Változók
Nincsen. Komponensek
Nincsen.
Háztartási Létra
162
2008. május 14.
9.3 A grafikus objektumok felsorolása
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
Metódusok
void paint(Graphics gc) Konkrét menü kirajzolása. Felel˝osségei
A játék közben felugró menü kirajzolása és kezelése. 9.3.9. Szekvencia diagramok
Háztartási Létra
163
2008. május 14.
9.3 A grafikus objektumok felsorolása
Háztartási Létra
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
164
2008. május 14.
9.3 A grafikus objektumok felsorolása
Háztartási Létra
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
165
2008. május 14.
9.3 A grafikus objektumok felsorolása
Háztartási Létra
9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA
166
2008. május 14.
10 GRAFIKUS VÁLTOZAT BEADÁSA
10. Grafikus változat beadása 10.1. Feltöltött grafikus változat ismertetése 10.1.1.
Telepítés
A tömörített fájl kibontásával telepíthet˝o a grafikus változat a felhasználó által választott könyvtárba. Használatához 1.4.2 verziószámú vagy újabb Sun Java futtató környezetre (JRE, Java Runtime Environment) van szükség. Mivel a grafikus változat nem tartalmaz binárisokat, csak forráskódot, így az egyszeri fordításhoz Java fejleszt˝okörnyezetre (JDK, Java Development Kit) is szükség van. 10.1.2.
Fordítás
Kitömörítés után a választott könyvtárban található build.bat fájl futtatásával indítható a fordítás. A fordítás végeztével az osztályok bytekódjai és a tömörített JAR (Java Archive) fájl a bin könyvtárban jön létre. 10.1.3.
Futtatás
Fordítás után a választott könyvtárban található run.bat futtatásával indítható a szoftver. 10.1.4.
Javadoc dokumentáció generálása
Kitömörítés után a választott könyvtárban található gendoc.bat fájl futtatásával létrejön a doc könyvtárban a javadoc dokumentáció. 10.1.5.
A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk
Gyökérkönyvtár
Itt taláhatók a fordításhoz, futtatáshoz és dokumentáció generáláshoz szükséges batch fájlok. -rw-r--r-- 1 dnet dnet 122 máj -rw-r--r-- 1 dnet dnet 67 máj -rw-r--r-- 1 dnet dnet 38 máj
Háztartási Létra
3 20.21 build.bat 4 22.45 gendoc.bat 3 20.21 run.bat
167
2008. május 14.
10.1 Feltöltött grafikus változat ismertetése
10 GRAFIKUS VÁLTOZAT BEADÁSA
bin
Ide kerülnek az osztályok bytekódjait tartalmazó .class fájlok, illetve az egész szoftvert tartalmazó JAR archívum. doc
Ide helyezi kimenetét a javadoc dokumentáló, kezd˝olapja az index.html fájl. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
Háztartási Létra
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
2316 1916 4551 4438 9860 9939 11259 33935 11272 11258 29656 12751 12298 44016 7718 10457 9898 7623 66577 841 28697 32879 32148 12590 8007 1 733 4096 9986 13362 12331 34139 14220 22571 17818 20778 9959 1202 15291 17301
máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj máj
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 4 6 6 6 6 6 6 6 6 6 6 6 6
23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 18.37 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41 23.41
168
allclasses-frame.html allclasses-noframe.html constant-values.html deprecated-list.html Fieldberry.html Foreground.html GameField.GameTimer.html GameField.html GameField.RollTimer.html GameField.RoundTimer.html Game.html GameScreen.FlashThread.html Game.ScreenFocusThread.html GameScreen.html GFNotify.html GlyphCache.html Hedge.html help-doc.html index-all.html index.html InGameMenuScreen.html MainMenuScreen.html MenuScreen.html MenuScreen.MenuScreenSelection.html overview-tree.html package-list packages.html resources Sawberry.html serialized-form.html SnakeExplorer.html SnakeHead.html SnakeHead.PowerfulThread.html SnakeSection.html SnakeWrapper.html StaticScreen.html Stoneberry.html stylesheet.css TileDrawer.html Tile.html
2008. május 14.
10.1 Feltöltött grafikus változat ismertetése
10 GRAFIKUS VÁLTOZAT BEADÁSA
gfx
Itt helyezkednek el a program által felhasznált képek PNG formátumban. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Háztartási Létra
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
362147 362198 404420 362023 362455 362287 362198 362287 362082 497243 391 393 390 394 409 333 359 355 355 359 360 376 441 171326 1647 934 3072 437086 360 361 353 360 361 364 363431 363481 403589 363382 363855 363593 363481 363593
ápr ápr ápr ápr ápr ápr ápr ápr ápr ápr máj máj máj máj máj máj máj máj máj máj máj máj máj ápr ápr máj máj ápr máj máj máj máj máj máj ápr ápr ápr ápr ápr ápr ápr ápr
27 27 27 27 27 27 27 27 27 27 3 3 3 3 3 3 3 3 3 3 3 3 3 27 27 3 3 18 3 3 3 3 3 3 27 27 27 27 27 27 27 27
169
21.02 21.02 21.02 21.02 21.02 21.02 21.02 21.02 21.02 21.02 16.33 16.33 16.33 16.33 16.33 16.33 16.33 16.33 16.33 16.33 16.33 16.33 16.33 21.02 21.02 16.45 16.33 23.12 16.33 16.33 16.33 16.33 16.33 16.33 21.02 21.02 21.02 21.02 21.02 21.02 21.02 21.02
aktiv_jatekos_2.png aktiv_jatekos_3.png aktiv_jatekos_4.png aktiv_sebesseg_1.png aktiv_sebesseg_2.png aktiv_sebesseg_3.png aktiv_szint_1.png aktiv_szint_2.png aktiv_szint_3.png elolap.png farok_1.png farok_2.png farok_3.png farok_4.png farok_pc.png farok_power.png fej_1.png fej_2.png fej_3.png fej_4.png fej_pc.png fej_power.png fieldberry.png hatter.png hedge.png icon.png ido.png jatekszabaly.png kanyar_1.png kanyar_2.png kanyar_3.png kanyar_4.png kanyar_pc.png kanyar_power.png passziv_jatekos_2.png passziv_jatekos_3.png passziv_jatekos_4.png passziv_sebesseg_1.png passziv_sebesseg_2.png passziv_sebesseg_3.png passziv_szint_1.png passziv_szint_2.png
2008. május 14.
10.1 Feltöltött grafikus változat ismertetése
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
363404 326924 327316 11481 456 114 114 114 116 117 116 461 353 364265 363565 364599 364387 358099
ápr ápr ápr máj máj ápr ápr ápr ápr ápr ápr máj máj ápr ápr ápr ápr ápr
10 GRAFIKUS VÁLTOZAT BEADÁSA
27 27 27 3 3 27 27 27 27 27 27 3 3 27 27 27 27 27
21.02 21.02 21.02 16.33 16.33 21.02 21.02 21.02 21.02 21.02 21.02 16.33 16.33 21.02 21.02 21.02 21.02 21.02
passziv_szint_3.png pause_aktiv.png pause_passziv.png pontszam.png sawberry.png sima_1.png sima_2.png sima_3.png sima_4.png sima_pc.png sima_power.png stoneberry.png stone.png vege_1.png vege_2.png vege_3.png vege_4.png vege_dontetlen.png
lvl
Ebben a könyvtárban helyezkednek el .txt fájl formájában az egyes nehézségi szintekhez tartozó pályatérképek. A program ezekb˝ol a fájlokból olvassa be a 32×24 karakterrel ábrázolt pálya tervét (szóköz – üres mez˝o; X – sövény; 1, 2, 3, 4 – induló kígyó sorszáma). A felhaszáló akár módosíthatja is a fájlokat, természetesen a megadott kritériumoknak megfelel˝oen. -rw-r--r-- 1 dnet dnet 814 máj -rw-r--r-- 1 dnet dnet 814 máj -rw-r--r-- 1 dnet dnet 814 máj
4 16.43 lvl1.txt 4 16.43 lvl2.txt 4 20.20 lvl3.txt
src
Itt található az összes osztály forráskódja a nevével megegyez˝o .java fájlban, valamint a JAR archívum készítéséhez szükséges Manifest fájl. -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1
Háztartási Létra
dnet dnet dnet dnet dnet dnet dnet
dnet 292 ápr 26 23.03 Fieldberry.java dnet 415 ápr 26 23.03 Foreground.java dnet 13606 máj 5 19.37 GameField.java dnet 4263 máj 4 20.04 Game.java dnet 11718 máj 4 19.01 GameScreen.java dnet 423 máj 4 19.26 GFNotify.java dnet 1734 máj 4 19.29 GlyphCache.java
170
2008. május 14.
10.1 Feltöltött grafikus változat ismertetése
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
10.1.6.
1 1 1 1 1 1 1 1 1 1 1 1 1 1
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet dnet
278 806 2980 39 5862 290 3035 4165 4895 2730 1305 289 2819 2940
ápr máj máj ápr máj ápr máj máj máj máj máj ápr máj máj
10 GRAFIKUS VÁLTOZAT BEADÁSA
26 4 4 26 4 26 5 4 4 4 4 26 4 4
23.03 19.31 19.35 23.16 19.47 23.03 19.44 19.57 20.00 20.03 20.06 23.03 20.12 20.08
Hedge.java InGameMenuScreen.java MainMenuScreen.java manifest.mf MenuScreen.java Sawberry.java SnakeExplorer.java SnakeHead.java SnakeSection.java SnakeWrapper.java StaticScreen.java Stoneberry.java TileDrawer.java Tile.java
A java forráskód fájlok ismertetése
A java forráskód fájlok mindegyike egy-egy osztály tartalmaz, a fájlnévvel megegyez˝o nev˝ut. Az egyes osztályokról rövid leírás olvasható a forráskód els˝o soraiban ill. a javadoc által generált dokumentációban. A szoftver belépési pontját tartalmazó Game osztály kezeli a f˝oablak létrehozását és tartalmának változtatását. 10.1.7.
Grafikus változat használata
A grafikus változatot a run.bat segítségével futtathatjuk. run.bat
A run.bat futtatása során a Grafikus kezel˝oi felület részben specifikált menü használatával a beállítások végrehajtása után elindítható a játék. A billenty˝uzet segítségével vezérelhetik a játékosok a programot. Ha már nem szeretnének tovább játszani, mind az ablak fejlécén található bezáró gombbal, mind a menü kilépés funkciója segítségével ki lehet lépni a programból.
Háztartási Létra
171
2008. május 14.
10.2 Értékelés
10 GRAFIKUS VÁLTOZAT BEADÁSA
10.2. Értékelés A grafikus felület készítése során megpróbáltuk úgy elosztani a feladatokat, hogy mindenki azt a részt csinálja, amit szeretne, és annyit foglalkozzon a projekttel, amennyire ideje engedi. Ennek megfelel˝oen Bertók a grafikus felület kinézetét tervezte meg, Veres a lekódolásával foglalkozott els˝osorban, melyben Tönköl is részt vett, illetve az eddig leadott munkák javításának is nekiállt már. Összességében mindannyian körülbelül egyformán foglalkoztunk a projekttel. Tehát a csapattagok részvételi aránya a feladatok megoldásában: Bertók Zsófia 33,5 % Tönköl Viktor 33,0 % Veres-Szentkirályi András 33,5 %
Háztartási Létra
172
2008. május 14.
11 ÖSSZEFOGLALÁS
11. Összefoglalás 11.1. Projekt összegzés A tantárgy teljesítése során betekintést nyerhettünk egy nagyobb vállalati projekt fejlesztési lépéseibe. Ennek folyamán megtapasztaltuk, hogy sokkal nagyobb odafigyelést igényel a csapatmunka, mint az egyéni szoftverfejlesztés. A projekthez kapcsolódó dokumentáció elkészítése során a végére már megfelel˝o mérték˝u rutinra tettünk szert, amit remélünk, hogy majd kamatoztatni fogunk tudni a kés˝obbiekben. A feladat megoldása során a vártnál jóval nagyobb szerepe volt a kommunikációnak. A projekt folyamán ezen kívül meg kellett tanulnunk alkalmazkodni a csapattársak munkastílusához is. A legnehezebb dolog a félév során az volt, hogy nem voltak kell˝oen specifikálva az elvárások. Ebb˝ol adódóan több olyan rész is volt a projekt folyamán, amikor nem tudtuk pontosan, hogy mit kell elkészítenünk. Ezen kívül nehézséget okozott az id˝o beosztása, mivel több olyan leadás is volt, amelyben az egyes alfejezetek egymásra épültek, így az egyes csapattagoknak be kellett várnia a többiek elkészülését. A projekt végére már sokkal inkább tisztában lettünk az elvárásokkal, így talán mondhatjuk, hogy egyre könnyebb volt elkészíteni a feladatokat. A prototípus teszteseteinek kidolgozása és a tesztelés volt talán a legkönnyebb dolog a félév során, mivel ez az el˝otte elkészített dolgok alapján szinte már magától adódott. A projekt folyamán legtöbb id˝ot szerintem a szkeletonnal töltöttük. Ennek több oka is van, egyrészt az, hogy az elején még fel kellett vennünk a ritmust, másrészt hogy a nulláról indulva az elején kellett a legtöbb új ötlet. A grafikus felülettel is jóval több id˝ot foglalkoztunk, mint 20 %, elvégre nagyon sok dolog csak ebben a részben valósul meg. Ezekhez képest a prototípus elkészítésére járó pontszám nagyon sok. Tehát a három f˝o egységre szánt id˝o és a pontszám nem igazán állt összhangban. Ezen kívül az egyes részekre járó pontszám se tükrözte mindig megfelel˝oen a vele járó munkát. Nem biztos, hogy arra a részre kell a legtöbb id˝ot fordítani, amely terjedelmében a legnagyobb, mivel van amikor egy kisebb rész kitalálása okoz problémát. Javasolnánk, hogy az egyes részek máshogy legyenek súlyozva, egyenl˝o arányban mindegyik, vagy legalábbis a prototípus ne érjen ennyivel többet, mint a szkeleton vagy a grafikus. Ezen kívül pontosabb követelmények és más id˝obeHáztartási Létra
173
2008. május 14.
11.1 Projekt összegzés
11 ÖSSZEFOGLALÁS
osztás kellene. Ezalatt azt értjük, hogy a hétf˝oi konzultáció nagyon kés˝on volt a szerdai leadás el˝ott, és kés˝on hangzottak el az irányelvek, amelyek alapján dolgoznunk kellett. A projektre egy olyan játék lenne a javaslatunk, amelyben több színes gömb helyezkedik el a játéktéren, melyek irányába a játékosok további színes gömböket l˝ohetnek. Amennyiben meghatározott számú azonos szín˝u gömb szomszédos egymással, felrobbannak és elt˝unnek a játéktérr˝ol a többi, csak hozzájuk kapcsolódó gömbökkel együtt. Egy a www.frozen-bubble.org weboldalon található játékhoz hasonló játékra gondoltunk. A játékban lehetnek speciális hatással bíró gömbök, melyek fel- vagy lelövéskor fejthetik ki pozitív vagy negatív hatásukat a játékosra vagy annak ellenfelére. Ilyen pozitív hatás lehet, hogy nem véletlenszer˝uen választódnak ki a kilövend˝o gömbök színei, hanem a játékos befolyásolhatja. Negatív hatás pedig lehet, hogy az irányítás részben vagy teljesen kikerül a játékos kezéb˝ol adott id˝ore.
Háztartási Létra
174
2008. május 14.
12 NAPLÓ
12. Napló 2008. 02. 12. 23.00–00.00
Résztvev˝o(k) Veres Tevékenység TWiki rendszer telepítése és beállítása, óránkénti távoli backupot készít˝o script fejlesztése. 2008. 02. 13. 16.00–18.00
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Regisztráltunk a csapat TWiki rendszerébe, áttekintettük a rendszer alapfunkcióit és létrehoztunk néhány topic-ot az els˝oként leadandó dokumentumok számára. Megállapodtunk abban, hogy további kommunikációra az IRCnet ill. Skype hálózatot használjuk. Elosztottuk az els˝o hét leadandó feladatait három részre, megbeszéltük a feladatokkal kapcsolatos irányelveket. Döntések Bertók készíti a szótárt, a feladatleírást és a napló közös részeit. Tönköl készíti a projekttervet és a use case diagramokat. Veres feladata a követelmény definíció megírása és TWiki– LATEX konvertáló script fejlesztése. 2008. 02. 15. 15.00–16.00
Résztvev˝o(k) Tönköl Tevékenység Projektterv: Életciklus rész írása. 2008. 02.15. 20.00–23.00
Résztvev˝o(k) Veres Tevékenység Követelmény definíció megírása.
Háztartási Létra
175
2008. május 14.
12 NAPLÓ 2008. 02. 16. 09.00–09.30
Résztvev˝o(k) Bertók Tevékenység Els˝o találkozó naplózása. 2008. 02. 16. 13.00–16.30
Résztvev˝o(k) Tönköl Tevékenység Projektterv: Szükséges dokumentációk, Szervezési struktúra, Határid˝ok megírása. 2008. 02. 16. 14.00–16.00
Résztvev˝o(k) Bertók Tevékenység Feladat részletes leírásának elkészítése. 2008. 02. 16. 23.30–01.30
Résztvev˝o(k) Veres Tevékenység TWiki–LATEX konvertáló script fejlesztése. 2008. 02. 17. 11.00–11.30
Résztvev˝o(k) Tönköl Tevékenység Essential Use Case elkészítése. 2008. 02. 17. 14.00–17.00
Résztvev˝o(k) Bertók Tevékenység Feladat részletes leírásának befejezése, szótár megírása.
Háztartási Létra
176
2008. május 14.
12 NAPLÓ 2008. 02. 17. 21.00–22.30
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Eddig egyénileg megcsinált dokumentumok áttekintése, megvitatása, esetleges javítása. Döntések A felfedezett hibákat ill. hiányosságokat mindenki kijavítja az általa elvállalt alfejezetben. 2008. 02. 17. 23.30–00.30
Résztvev˝o(k) Veres Tevékenység Subversion szerver telepítése és beállítása. 2008. 02. 18. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción részvétel. Döntések Értekezlet megbeszélése 14.00 órára. 2008. 02. 18. 14.00–15.00
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción elhangzottak alapján dokumentáció kiegészítése, javítása. Analízis modell kidolgozása 1 leadandóhoz statikus struktúradiagram kezdeti verziójának kidolgozása. Döntések Mindenki véglegesíti az általa elvállalt alfejezetet, Veres LATEX dokumentumot generál bel˝ole és kinyomtatja. Bertók beszkenneli a struktúradiagramot és feltölti a TWiki rendszerbe. 2008. 02. 18. 18.00–19.30
Résztvev˝o(k) Bertók Tevékenység Naplóbejegyzések id˝orendbe szedése, szótár kiegészítése.
Háztartási Létra
177
2008. május 14.
12 NAPLÓ 2008. 02. 19. 23.50–00.30
Résztvev˝o(k) Veres Tevékenység Második hétre beadandó topic-ok utolsó simításainak elvégzése, LATEX konverziója, összef˝uzése, nyomtatása. 2008. 02. 21. 22.00–23.00
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Megbeszélés IRC-n a következ˝o leadandóról. Az analízis modell kidolgozásának részeit felosztottuk egymás között. Döntések Bertók készíti a state chartokat, Tönköl a szekvencia diagramokat, Veres pedig a statikus struktúradiagramot fejezi be és viszi fel számítógépre. Az objektum katalógust és az osztályleírást közösen fejlesztjük majd a TWiki rendszerben a kiosztott feladatok elkészülte után. 2008. 02. 22. 12.00–13.00
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet A statikus struktúradiagramot együtt fejlesztettük tovább, valamint együtt áttekintettük az egyes objektumok funkcióit. Döntések Veres feltölti a TWiki rendszerbe a diagram aktuális változatát, hogy annak segítségével tudjunk haladni egyéni feladatainkkal. 2008. 02. 23. 15.00–16.30
Résztvev˝o(k) Tönköl Tevékenység Szekvencia diagram elkészítése. 2008. 02. 23. 16.00–19.30
Résztvev˝o(k) Bertók Tevékenység Snake objektum állapotdiagramjának elkészítése.
Háztartási Létra
178
2008. május 14.
12 NAPLÓ 2008. 02. 23. 20.00–22.00
Résztvev˝o(k) Veres Tevékenység Statikus struktúradiagram elkészítése. 2008. 02. 25. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzuláción való részvétel. Döntések Értekezlet megbeszélése 14.00 órára. 2008. 02. 25. 14.00–15.30
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción elhangzottak alapján az osztálydiagram átalakításának megbeszélése, és az alapvet˝o szekvenciák átbeszélése. Különböz˝o esetekre a modellünk helyességének tesztelése. Döntések Bertók készít a SnakeSection objektumról state chartot, Tönköl megcsinálja a megbeszélteknek megfelel˝oen a szekvencia diagramokat, Veres befejezi az osztálydiagramot és elkészíti az objektum katalógust, valamint az osztályok leírását. 2008. 02. 25. 16.00–19.00
Résztvev˝o(k) Tönköl Tevékenység Szekvencia diagram folytatása. 2008. 02. 25. 18.30–19.00
Résztvev˝o(k) Bertók Tevékenység Snake objektum állapotdiagramjának kijavítása és véglegesítése.
Háztartási Létra
179
2008. május 14.
12 NAPLÓ 2008. 02. 25. 21.00-22.15
Résztvev˝o(k) Veres Tevékenység Osztálydiagram befejezése, TWiki-LATEX átalakító script továbbfejlesztése a második leadandó dokumentumban megjelen˝o új elemeknek megfelel˝oen. 2008. 02. 26. 09.30–11.45
Résztvev˝o(k) Bertók Tevékenység SnakeSection objektum állapotdiagramjának elkészítése. 2008. 02. 26. 16.00-18.30
Résztvev˝o(k) Tönköl Tevékenység Szekvenciák véglegesítése, rajzoló programmal kiegészítése. 2008. 02. 26. 18.15-20.45
Résztvev˝o(k) Veres Tevékenység Objektum katalógus és osztály lista elkészítése. 2008. 02. 26. 20.30–21.00
Résztvev˝o(k) Bertók Tevékenység Többiek munkájának áttekintése, esetleges javítása. 2008. 02. 26. 22.00-23.00
Résztvev˝o(k) Veres Tevékenység Harmadik hétre beadandó topic-ok átnézése, diagramok PostScript fájlba konvertálása és LATEX forrásba linkelése, szöveges részek LATEX konverziója, összef˝uzése, PDF fájl létrehozása.
Háztartási Létra
180
2008. május 14.
12 NAPLÓ 2008. 03. 03. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción való részvétel. Átnéztük a konzulens által az els˝o analízis modellhez f˝uzött megjegyzéseket. Döntések Mindenki az el˝oz˝o héten saját maga által elkészített részt tökéletesíti a megjegyzéseknek megfelel˝oen; Bertók a state chartokat és a use-case-eket, Tönköl a szekvenciadiagramokat, Veres pedig az osztálydiagrammot, az osztályok leírását és az objektumkatalógust. 2008. 03. 03. 15.00-18.00
Résztvev˝o(k) Veres Tevékenység Osztálydiagram átdolgozása a konzultáción hallott két ötlet (szelvények rekurzív tárolása, k˝obogyók szelvény által kezelése) és a konzulens megjegyzései alapján (felel˝osségek, láthatóságok). Osztálydiagram alapján objektumkatalógus és osztályok leírása frissítése. 2008. 03. 03. 17.30-19.00
Résztvev˝o(k) Bertók Tevékenység Az osztálydiagram aktuális verziója alapján a SnakeSection state chartjának kidolgozása. 2008. 03. 04. 14.00–15.00
Résztvev˝o(k) Tönköl, Veres Értekezlet Veres által hétf˝on elkészített ill. módosított osztályok részleteinek pontos meghatározása a szekvenciadiagramok szempontjából. Döntések A megbeszéltek alapján Tönköl elkészíti a hiányzó ill. frissítend˝o szekvenciadiagramokat, Veres pedig frissíti az osztálydiagramot, az osztályok leírását és az objektumkatalógust.
Háztartási Létra
181
2008. május 14.
12 NAPLÓ 2008. 03. 04. 18.00–22.00
Résztvev˝o(k) Tönköl Tevékenység A délutáni értekezleten megbeszéltek alapján a szekvenciadiagram elkészítése. 2008. 03. 04. 19.00–20.00
Résztvev˝o(k) Veres Tevékenység A délutáni értekezleten megbeszéltek alapján az osztálydiagram, az osztályok leírása és az objektumkatalógus frissítése. 2008. 03. 04. 22.30–02.15
Résztvev˝o(k) Bertók Tevékenység Az átalakult osztálydiagram alapján a SnakeSection state chart átalakítása a SnakeHead state chartjává. A SnakeSection új állapotdiagramjának elkészítése. A state chartok szöveges leírása. A szekvenciadiagramokhoz a use case diagramok elkészítése. 2008. 03. 06. 13.00–13.15
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Szkeleton rész elkészítend˝o munkájának szétosztása, el˝ozetes megbeszélések. Döntések Bertók készíti a use case-eket és az illusztráló ábrákat, Tönköl a szekvenciadiagramokat, Veres pedig az architektúra és a szkeleton kezel˝oi felületének leírását. 2008. 03. 10. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción való részvétel, ötletek kigondolása a tesztesetekre. Döntések Délután értekezlet 14.00-tól.
Háztartási Létra
182
2008. május 14.
12 NAPLÓ 2008. 03. 10. 13.50–15.30
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet A tesztesetek kidolgozása. Döntések Bertók a megbeszélteknek megfelel˝oen elkészíti a use caseeket, Tönköl pedig a szekvenciadiagramokat. 2008. 03. 10. 18.00–24.00
Résztvev˝o(k) Tönköl Tevékenység Szekvenciadiagramok elkészítése. 2008. 03. 11. 00.00-01.00
Résztvev˝o(k) Veres Tevékenység Szekelton kezel˝oi felület leírásának elkészítése. 2008. 03. 11. 20.00–22.30
Résztvev˝o(k) Tönköl Tevékenység Szekvenciadiagramok kiegészítése. 2008. 03. 12. 00.30–01.45
Résztvev˝o(k) Veres Tevékenység Architektúra elkészítése. 2008. 03. 12. 08.30–09.45
Résztvev˝o(k) Veres Tevékenység Diagramokból készült PostScript fájlok összeszedése, elrendezése LATEX dokumentumban, szöveges topic-ok forrásba linkelése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás.
Háztartási Létra
183
2008. május 14.
12 NAPLÓ 2008. 03. 17. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción való részvétel, szkeleton terveire kapott visszajelzések értelmezése, munka szétosztása. Döntések Bertók megírja az értékelést, Tönköl átdolgozza a szkeleton szekvenciadiagramjait, Veres megírja a szkeletont. 2008. 03. 17. 19.45–23.45
Résztvev˝o(k) Veres Tevékenység UML osztálydiagramból forráskódváz generálása szerkeszt˝o segítségével, metódusok egy részének kitöltése, SkeletonHelper statikus osztály létrehozása és metódusainak meghatározása, kezdetleges kidolgozása. 2008. 03. 17. 20.15–22.15
Résztvev˝o(k) Tönköl Tevékenység Megbeszélteknek megfelel˝oen a szekvenciadiagramok javítása a tesztelésre. 2008. 03. 18. 18.30–20.30
Résztvev˝o(k) Tönköl Tevékenység Megbeszélteknek megfelel˝oen a szekvenciadiagramok javítása a tesztelésre. 2008. 03. 18. 19.50–23.50
Résztvev˝o(k) Veres Tevékenység Szkeleton metódustörzseinek véglegesítése, SkeletonHelper véglegesítése, tesztesetek implementálása, eközben felmerül˝o hibák kijavítása.
Háztartási Létra
184
2008. május 14.
12 NAPLÓ 2008. 03. 18. 20.15–23.30
Résztvev˝o(k) Bertók Tevékenység Use case diagram javítása, use case és szekvencia diagram leírásának javítása. Végleges tesztesetek leírása Veresnek. 2008. 03. 19. 08.00–08.30
Résztvev˝o(k) Bertók Tevékenység Értékelés megírása. 2008. 03. 19. 08.30–09.50
Résztvev˝o(k) Veres Tevékenység Szkeleton véglegesítése, stdinr˝ol olvasás kijavítása, tesztesetekhez bemeneti fájlok létrehozása, fájllisták elkészítése, LATEX dokumentum elrendezése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás. 2008. 03. 21. 11.00–11.15
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Prototípus elkészítend˝o feladatainak szétosztása. Döntések Bertók készíti a tesztelési tervet és a use case-eket, Tönköl a teszteléshez szükséges programot, Veres pedig az interface definícióját. 2008. 03. 23. 12.00–14.00
Résztvev˝o(k) Veres Tevékenység Prototípus interface definíciójának ill. specifikáció változás miatt szükséges modellváltoztatások megírása. 2008. 03. 25. 11.00–11.45
Résztvev˝o(k) Bertók Tevékenység Tesztforgatókönyvek írása.
Háztartási Létra
185
2008. május 14.
12 NAPLÓ 2008. 03. 25. 17.30–20.00
Résztvev˝o(k) Tönköl Tevékenység Segédprogramok specifikálása, szkeleton szekvenciák módosítása 2008. 03. 25. 18.30–23.00
Résztvev˝o(k) Bertók Tevékenység Tesztforgatókönyv befejezése, use case diagram elkészítése, use case leírások elkészítése, prototípus használatának leírása a tesztelésre. 2008. 03. 26. 9.00–9.45
Résztvev˝o(k) Veres Tevékenység Diagramból PostScript készítése, elhelyezése LATEX dokumentumban, szöveges topic-ok forrásba linkelése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás. 2008. 03. 28. 12.00–12.30
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Részletes tervek elkészítésének szétosztása. Döntések Bertók készíti a részletes tesztelési tervet, Tönköl a teszteléshez szükséges programot írja meg és teszteli, Veres pedig az objektumok és metódusok terveit. 2008. 03. 30. 19.00–22.30
Résztvev˝o(k) Tönköl Tevékenység Szkeletonbeli szekvencia diagramok pontosítása, javítása.
Háztartási Létra
186
2008. május 14.
12 NAPLÓ 2008. 03. 30. 20.00–00.00
Résztvev˝o(k) Bertók Tevékenység Szkeletonbeli szekvencia diagramok átnézése, javítása, átmerétezése és PostScript formátumba konvertálása, valamint a szöveges leírás megírása hozzá. 2008. 03. 31. 14.00–15.15
Résztvev˝o(k) Bertók, Veres Értekezlet Prototípus interface definíciójának kiegeszítése új utasításokkal, tesztesetek összeírása. Döntések Bertók megírja a részletes tesztelési tervet, kivéve a lehetséges hibaforrásokat és a tesztelésre kerül˝o részeket, amelyeket Veres készít el majd. 2008. 03. 31. 17.00–23.30
Résztvev˝o(k) Bertók Tevékenység Részletes tesztesetek kidolgozása. 2008. 03. 31. 19.00–21.00
Résztvev˝o(k) Tönköl Tevékenység Teszt Programok megírása. 2008. 04. 01. 10.00–11.50
Résztvev˝o(k) Veres Tevékenység Objektumok és metódusok fejezet szövege els˝o felének megírása. 2008. 04. 01. 14.20–16.00
Résztvev˝o(k) Veres Tevékenység Objektumok és metódusok fejezet szövege második felének megírása.
Háztartási Létra
187
2008. május 14.
12 NAPLÓ 2008. 04. 01. 18.00–20.30
Résztvev˝o(k) Tönköl Tevékenység Activity diagramok elkészítése. 2008. 04. 01. 18.30–19.45
Résztvev˝o(k) Bertók Tevékenység Részletes tesztesetek kidolgozásának befejezése. 2008. 04. 01. 23.00–01.50
Résztvev˝o(k) Veres Tevékenység Részletes tesztesetek szövegének kiegészítése, formázása; objektumok állapotdiagramjainak elkészítése, diagramok átalakítása PostScript formátumba, elhelyezésük LATEX dokumentumban, szöveges topic-ok forrásba linkelése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás. 2008. 04. 07. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción való részvétel. Döntések Az egyes objektumok implementálását és a tesztelést szétosztjuk egymás között, az értékelést Bertók írja, a prototípus ismertetését pedig Veres. 2008. 04. 11. 21.15–21.45
Résztvev˝o(k) Bertók Tevékenység Wiki oldalak létrehozása, elkészítend˝o feladatok áttekintése. 2008. 04. 12. 09.00–10.30
Résztvev˝o(k) Bertók Tevékenység Fieldberry, Foreground, Hedge, Sawberry, SnakeHead, SnakeWrapper, Stoneberry objektumok és metódusaik elkészítése.
Háztartási Létra
188
2008. május 14.
12 NAPLÓ 2008. 04. 12. 14.30–16.00
Résztvev˝o(k) Tönköl Tevékenység GameField objektum és metódusainak elkészítése. 2008. 04. 12. 15.30–17.15
Résztvev˝o(k) Bertók Tevékenység SnakeSection objektum és metódusainak elkészítése, értékelés megírása. 2008. 04. 13. 08.45–10.30
Résztvev˝o(k) Bertók Tevékenység Tile objektum és metódusainak elkészítése, bemenetek és az elvárt kimenetek tesztfájlba mentése. 2008. 04. 14. 00.15–01.57
Résztvev˝o(k) Veres Tevékenység Eddig elkészült prototípus forráskódok SVN fába importálása, els˝o két tesztesethez szükséges utasítások implementálása, tesztelése. 2008. 04. 14. 16.45–17.45
Résztvev˝o(k) Bertók Tevékenység Feltöltött prototípus ismertetésének megírása. 2008. 04. 14. 16.49–22.41
Résztvev˝o(k) Veres Tevékenység Prototípus többi utasításának megírása, tesztesetek lefuttatása, majd eredmény alapján hibák javítása, forráskód felkommentezése.
Háztartási Létra
189
2008. május 14.
12 NAPLÓ 2008. 04. 14. 18.00–18.30
Résztvev˝o(k) Tönköl Tevékenység Tesztelést támogató programok befejezése. 2008. 04. 14. 19.15–22.00
Résztvev˝o(k) Bertók Tevékenység Prototípus tesztelése, jegyz˝okönyv írása 2008. 04. 15. 08.20–08.50
Résztvev˝o(k) Bertók Tevékenység Prototípus ismertetésének módosítása. 2008. 04. 15. 21.15–23.15
Résztvev˝o(k) Bertók Tevékenység F˝omenü tervének elkészítése. 2008. 04. 15. 23.30-23.55
Résztvev˝o(k) Veres Tevékenység Fájllisták elkészítése, LATEX dokumentum elrendezése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás. 2008. 04. 18. 17.00–19.30
Résztvev˝o(k) Bertók Tevékenység Játéktér tervének elkészítése. 2008. 04. 20. 21.15–22.15
Résztvev˝o(k) Bertók Tevékenység Játékszabály, illetve Pause menü elkészítése.
Háztartási Létra
190
2008. május 14.
12 NAPLÓ 2008. 04. 20. 22.15–23.45
Résztvev˝o(k) Veres Tevékenység Grafikus felület osztályainak megtervezése. 2008. 04. 21. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción való részvétel. Döntések Tönköl és Veres a délután folyamán átbeszélik a szekvencia diagramokat. 2008. 04. 21. 14.00–14.30
Résztvev˝o(k) Tönköl, Veres Tevékenység Szekvencia diagramok megbeszélése. 2008. 04. 21. 14.45–15.45
Résztvev˝o(k) Bertók Tevékenység Játék vége menü elkészítése. 2008. 04. 21. 15.30–17.30
Résztvev˝o(k) Tönköl Tevékenység Szekvencia diagramok elkészítése 2008. 04. 21. 21.20–22.20
Résztvev˝o(k) Bertók Tevékenység Kezel˝oi felület grafikus képének szöveges leírása. 2008. 04. 21. 21.30–22.55
Résztvev˝o(k) Veres Tevékenység Grafikus architektúra szöveges leírása a szekvenciadiagramokkal összhangban.
Háztartási Létra
191
2008. május 14.
12 NAPLÓ 2008. 04. 22. 14.30–15.05
Résztvev˝o(k) Veres Tevékenység Osztálydiagram véglegesítése, bevitele UML rajzoló segítségével, elrendezése. A változtatások alapján az architektúra rész frissítése. 2008. 04. 22. 19.00–21.00
Résztvev˝o(k) Tönköl Tevékenység Objektum katalógus elkezdése. 2008. 04. 22. 23.25–23.55
Résztvev˝o(k) Veres Tevékenység Diagramból PostScript készítése, szekvenciadiagramokkal és screenshotokkal együtt elhelyezése LATEX dokumentumban, szöveges topic-ok forrásba linkelése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás. 2008. 04. 26. 17.00–21.00
Résztvev˝o(k) Bertók Tevékenység A programban felhasználható menüverziók képeinek, valamint a "pontszámpaletta" és "id˝opaletta" elkészítése. 2008. 04. 27. 00.30–01.00
Résztvev˝o(k) Veres Tevékenység Els˝o grafikus osztályok felvétele: Game, GameScreen, GFNotify, GlyphCache, MenuScreen, StaticScreen. Build és manifest fájlok aktualizálása a grafikus változathoz.
Háztartási Létra
192
2008. május 14.
12 NAPLÓ 2008. 04. 27. 09.00–14.00
Résztvev˝o(k) Bertók Tevékenység A programban felhasználható kígyószelvények, bogyók, sövény képének, valamint a háttérképnek elkészítése. 2008. 04. 27. 22.50–23.20
Résztvev˝o(k) Veres Tevékenység Menü elkészítése 2008. 04. 28. 10.15–11.45
Résztvev˝o(k) Bertók, Tönköl, Veres Értekezlet Konzultáción való részvétel. Döntések Bertók elkészíti a sövények kezdeti helyzetének tervét, Veres folytatja a játék kódolását. 2008. 04. 28. 14.15–15.27
Résztvev˝o(k) Veres Tevékenység Kódtisztítás, MainMenuScreen perzisztenciájának megvalósítása, GameScreen egy részének létrehozása. 2008. 05. 01. 11.00–14.30
Résztvev˝o(k) Tönköl Tevékenység A grafikus felület implementálása.
Háztartási Létra
193
2008. május 14.
12 NAPLÓ 2008. 05. 02. 23.20–23.38
Résztvev˝o(k) Veres Tevékenység Pályabetöltés megvalósítása, sövény kirajzolása, Tile– TileDrawer hozzárendelés megvalósítása, fókuszváltás megoldása, kódszépítés, kódtisztítás (els˝osorban protospecifikus kód törlése). Field-, saw- és stoneberry PNG kép transzparenssé tétele; TileDrawer osztályba ezek támogatásának hozzáadása. 2008. 05. 03. 15.20–03.49 (másnap)
Résztvev˝o(k) Veres Tevékenység Játék közbeni menü megvalósítása, TileDrawer osztályba kényszerített frissítés hozzáadása. Ikon hozzáadása az ablak fejlécéhez. Kígyók pályára helyezésének hozzáadása, SnakeExplorer implementálása. Ikonok forgatásának hozzáadása GlyphCache osztályhoz. GameScreen értesítési láncának megvalósítása. Irányváltási módszer cseréje relatívról abszolútra, kanyarodás teljes implementációja (billenty˝uzetkezelés, kanyarelemek számolása és rajzolása). Pontszámok kijelzésének implementációja. K˝obogyó megjelenítés és k˝ogörgetés implementálása. Bogyófelhelyezés és f˝urészbogyó hatásának részleges implementációja. Számítógép által mozgatott kígyókhoz irányító algoritmus implementációja. Játék végének részleges implementációja, f˝urészes kígyónál villogás megvalósítása. Visszaszámláló óra megvalósítása, emiatt GLNotify interfész megváltoztatása, id˝o lejártakori nyertes megállapításának implementálása. Id˝ozítés hozzáadása, kirajzolás optimalizálása, debug billenty˝uk eltávolítása. F˝urészbogyó véges ideig tartó hatásának implementálása. Protospecifikus fájlok törlése. Játék vége után 2 másodperc várakozás beiktatása, többszálú rajzolásba villogás elkerülése végett mutex implementálása (levelReady).
Háztartási Létra
194
2008. május 14.
12 NAPLÓ 2008. 05. 03. 16.03–20.22
Résztvev˝o(k) Veres Tevékenység F˝urésztulajdonság meghosszabbodásának és pause esetén szünetelésének implementálása, GlyphCache osztály kezeléséb˝ol nagy méret˝u képek eltávolítása memóriatakarékosság végett (Windows GDI specifikus hiba). StaticScreen osztály Windows alatt jelentkez˝o újrafestési hibájának javítása. TileDrawer osztályban nemprimitív SnakeSection esetén törlés kényszerítése. Javadoc megjegyzések megírása, további protospecifikus részek eltávolítása. 2008. 05. 05. 18.00–20.00
Résztvev˝o(k) Tönköl Tevékenység Régebbi dokumentációkban szerepl˝o hibák javítása. 2008. 05. 03. 20.10–20.19
Résztvev˝o(k) Veres Tevékenység SnakeExplorer többszálú m˝uködésre alkalmassá tétele. 2008. 05. 06. 18.45–19.15
Résztvev˝o(k) Bertók Tevékenység A grafikus felület ismertetésének megírásának befejezése, valamint az értékelés megírása. 2008. 05. 06. 23.25–23.40
Résztvev˝o(k) Veres Tevékenység Saját naplóbejegyzések kitöltése SVN napló alapján, fájllisták elkészítése, LATEX dokumentum elrendezése, utolsó simítások elvégzése, PDF fájl létrehozása, nyomtatás.
Háztartási Létra
195
2008. május 14.
12 NAPLÓ 2008. 05. 11. 21.00–22.00
Résztvev˝o(k) Bertók Tevékenység Feladatleírás javítása. 2008. 05. 12. 10.30–12.00
Résztvev˝o(k) Bertók Tevékenység Szótár, state chartok és a grafikus kezel˝oi felület javítása. 2008. 05. 12. 17.00–18.00
Résztvev˝o(k) Tönköl Tevékenység Analízis modell szekvencia diagramjainak javítása. 2008. 05. 12. 20.30–22.00
Résztvev˝o(k) Bertók Tevékenység Összefoglalás megírása. 2008. 05. 13. 19.00–20.30
Résztvev˝o(k) Bertók Tevékenység Prototípus use case-einek javítása. 2008. 05. 13. 20.45–21.30
Résztvev˝o(k) Veres Tevékenység Grafikus architektúra kiegészítése, javított diagramokból PostScript készítése és elhelyezése LATEX dokumentumban, szöveges topic-ok forrásba linkelése, utolsó simítások elvégzése, PDF fájl létrehozása, összefoglaló nyomtatása.
Háztartási Létra
196
2008. május 14.