Kígyófarm játék. 16 Háztartási Létra. Konzulens: Bóka Gábor



Hasonló dokumentumok
A követelmények leírása

Követelmény, projekt, funkcionalitás 41 CSK 1

2. Követelmény, projekt, funkcionalitás

Space Invaders Dokumenta cio

Szkeleton beadása. 100 Generalis faliora. Csapattagok: Konzulens: Szabó András március 29.

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

KINDERGARTEN. 46 InFoka. Dady Róbert. Csapattagok: Konzulens:

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E

Név: Neptun kód: Pontszám:

A dokumentáció felépítése

Kincskereső játék. 78 TeraCorp DT. Bíró Barna. Konzulens:

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

ELTE, Informatikai Kar december 12.

Java I. A Java programozási nyelv

Hardver és szoftver követelmények

ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES

A telepítési útmutató tartalma

Szoftver újrafelhasználás

Iman 3.0 szoftverdokumentáció

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Object Orgy PROJEKTTERV 1 (9) Adattípusok menedzselése Palatinus Endre

01. gyakorlat - Projektalapítás

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Már megismert fogalmak áttekintése

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Interfészek. PPT 2007/2008 tavasz.

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

Modell alapú tesztelés mobil környezetben

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Verkehrsmeldungen am UML

2. Beadandó feladat dokumentáció

Kalandjáték dokumentáció

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

KIRA. KIRA rendszer. Telepítési útmutató v1

Tamagocsi Projektterv

Verifikáció és validáció Általános bevezető

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

VII. Appletek, grafika

Objektum elvu alkalmaza sok fejleszte se

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

OpenOffice.org irodai programcsomag

Technikai információk fejlesztőknek

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Viczián István IP Systems JUM XIX szeptember 18.

Adatbázis és szoftverfejlesztés elmélet

és az instanceof operátor

1. beadandó feladat: egyszerű grafikus felületű alkalmazás. Közös követelmények:

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

C++ programozási nyelv Konstruktorok-destruktorok

3. Osztályok II. Programozás II

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat

Szkeleton. 8 datcode. Konzulens: Budai Péter

I. Objektumorientált programozás

Programozási nyelvek Java

Szerepjáték Project Story of my life

Programozási technológia I. 1. beadandó feladatsor

Operációs rendszerek Folyamatok 1.1

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

Gyakorlati vizsgatevékenység B

Osztályok. 4. gyakorlat

Programozási technológia

Programfejlesztési Modellek

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Hatékony iteratív fejlesztési módszertan a gyakorlatban a RUP fejlesztési módszertanra építve

Információtartalom vázlata

OOP. Alapelvek Elek Tibor

Szkeleton tervezése. 100 Generalis faliora. Csapattagok: Konzulens: Szabó András március 21.

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program

Operációs rendszerek. Az NT folyamatok kezelése

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Dokumentáció. 1. Beadandó feladat

Gyakorlati vizsgatevékenység A

Java programozási nyelv 5. rész Osztályok III.

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

WebService tesztelés. SOAPui Pro, GreenPepper és Confluence használatával. Verhás & Verhás Szoftver Manufaktúra KNOW-HOW

Projektterv. Projekt Neve: Ingatlan Bérbeadási Nyilvántartás Csoport: nmi

ÁNYK53. Az Általános nyomtatványkitöltő (ÁNYK), a személyi jövedelemadó (SZJA) bevallás és kitöltési útmutató együttes telepítése

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

2. Beadandó feladat dokumentáció

Telepítési útmutató. 1.1 lépés : Telepítés típusa - ablak :

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

GeriSoft Stúdió Kft J Á T S Z Ó H Á Z M A X I JÁTSZÓHÁZI BELÉPTETŐ RENDSZER

Alapok (a K2D rendszer alapjai)

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Rendszerterv. Makoviczki András. Neptun: JJ26AR

DAT adatcserefájl AutoCAD MAP DWG mapobject konvertáló program dokumentáció

Java-s Nyomtatványkitöltő Program Súgó

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Software Engineering Babeş-Bolyai Tudományegyetem Kolozsvár

INFORMATIKAI ALAPISMERETEK

Kirakós játék. Döntő február 22. Alakzatok (katalógus) DUSZA ÁRPÁD ORSZÁGOS PROGRAMOZÓI EMLÉKVERSENY 2013/2014

Átírás:

Kígyófarm játék 16 Háztartási Létra Konzulens: Bóka Gábor Csapattagok Bertók Zsófia A6MHQV zso.bme@gmail.com Tönköl Viktor VU6IT6 tonkol@chello.hu Veres-Szentkirályi András YZIOAW veresbandi@spirituart.hu 2008. május 14.

TARTALOMJEGYZÉK TARTALOMJEGYZÉK Tartalomjegyzék 1. Feladat leírása 8 1.1. A feladat leírása.......................... 8 1.2. Szótár............................... 10 2. Követelmény, projekt, funkcionalitás 14 2.1. Követelmény definíció...................... 14 2.1.1. A program célja, alapvető feladata............ 14 2.1.2. A fejlesztőkörnyezet................... 14 2.1.3. A futtatáshoz szükséges környezet............ 15 2.1.4. A felhasználói felület................... 15 2.1.5. Minőségi tényezők.................... 15 2.1.6. A szoftver minősítése................... 16 2.1.7. A kibocsátás....................... 16 2.2. Projekt terv............................ 16 2.2.1. A fejlesztői csapat.................... 16 2.2.2. Életciklus modell..................... 17 2.2.3. Szervezési struktúra................... 18 2.2.4. Fejlesztési ütemterv................... 19 2.2.5. Határidők......................... 19 2.2.6. Szükséges dokumentációk................ 20 2.3. Essential Use Case-ek....................... 21 2.3.1. Diagramok........................ 21 2.3.2. Use Case leírások..................... 21 3. Analízis modell kidolgozása 22 3.1. Objektum katalógus........................ 22 3.1.1. Fieldberry......................... 22 3.1.2. Foreground........................ 23 3.1.3. Game........................... 24 3.1.4. GameField........................ 25 3.1.5. Hedge........................... 26 3.1.6. Sawberry......................... 27 3.1.7. SnakeHead........................ 28 Háztartási Létra 2 2008. május 14.

TARTALOMJEGYZÉK TARTALOMJEGYZÉK 3.1.8. SnakeSection....................... 29 3.1.9. SnakeWrapper...................... 32 3.1.10. Stoneberry........................ 34 3.1.11. Tile............................ 35 3.2. Osztályok leírása......................... 36 3.2.1. Fieldberry......................... 36 3.2.2. Foreground........................ 36 3.2.3. Game........................... 37 3.2.4. GameField........................ 37 3.2.5. Hedge........................... 37 3.2.6. Sawberry......................... 37 3.2.7. SnakeHead........................ 37 3.2.8. SnakeSection....................... 38 3.2.9. SnakeWrapper...................... 38 3.2.10. Stoneberry........................ 38 3.2.11. Tile............................ 38 3.3. Statikus struktúra diagramok................... 39 3.4. Use case-ek és szekvencia diagramok.............. 40 3.4.1. Use case-ek........................ 40 3.4.2. Szekvencia diagramok.................. 43 3.5. State-chartok........................... 51 3.5.1. A SnakeSection objektum state-chartja......... 51 3.5.2. A SnakeHead objektum state-chartja........... 52 4. Szkeleton tervezése 53 4.1. A szkeleton modell valóságos use case-ei............ 53 4.2. Architektúra............................ 58 4.2.1. Tesztpálya........................ 59 4.2.2. Tesztesetek konkrét pályái................ 59 4.2.3. Ütemezés......................... 60 4.3. A szkeleton kezelői felületének terve, dialógusok........ 61 4.4. Szekvencia diagramok a belső működésre............ 62 4.4.1. Szekvencia diagram a 0. Initialize the gamefield use case-hez.......................... 62 Háztartási Létra 3 2008. május 14.

TARTALOMJEGYZÉK TARTALOMJEGYZÉK 4.4.2. Szekvencia diagram az 1. Feed a snake with fieldberry use case-hez.................. 63 4.4.3. Szekvencia diagram a 2. Feed a snake with sawberry use case-hez....................... 64 4.4.4. Szekvencia diagram a 3. Feed a snake with stoneberry use case-hez.................... 65 4.4.5. Szekvencia diagram a 4. Crash a snake into a hedge use case-hez....................... 66 4.4.6. Szekvencia diagram az 5. Crash a snake into a snake s body use case-hez.................... 66 4.4.7. Szekvencia diagram a 6. Crash a snake into a normal snakehead (odd distance) use case-hez......... 68 4.4.8. Szekvencia diagram a 7. Crash a snake into a normal snakehead (even distance) use case-hez......... 68 4.4.9. Szekvencia diagram a 8. Crash a powerful snake into a snakesection with stone use case-hez......... 71 4.4.10. Szekvencia diagram a 9. Put a berry or a hedge to the gamefield use case-hez................. 72 4.4.11. Szekvencia diagram a 10. Put a snake to the gamefield use case-hez..................... 72 4.4.12. Szekvencia diagram a 11. Grow a snake and the snake digests stoneberry use case-hez............. 73 4.4.13. Szekvencia diagram a 12. Delete ghosts use case-hez 74 4.4.14. Segédszekvenciák.................... 75 5. Szkeleton beadása 81 5.1. Feltöltött szkeleton ismertetése.................. 81 5.1.1. Telepítés......................... 81 5.1.2. Fordítás.......................... 81 5.1.3. Futtatás.......................... 81 5.1.4. Javadoc dokumentáció generálása............ 81 5.1.5. A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk............................ 81 5.1.6. A java forráskód fájlok ismertetése........... 83 5.1.7. Szkeleton használata................... 84 Háztartási Létra 4 2008. május 14.

TARTALOMJEGYZÉK TARTALOMJEGYZÉK 5.2. Értékelés............................. 84 6. Prototípus koncepciója 85 6.1. Prototípus interface definíciója.................. 85 6.1.1. Pályakészítő utasítások.................. 85 6.1.2. Prototípusvezérlő utasítások............... 86 6.1.3. Prototípus kimeneti üzeneteinek formátuma...... 88 6.2. Összes részletes use case..................... 89 6.3. Tesztelési terv, tesztelő nyelv definiálása............. 91 6.3.1. Prototípus használata a tesztelésre............ 91 6.3.2. Tesztforgatókönyvek................... 91 6.4. Tesztelést támogató segéd- és fordító programok specifikálása. 94 6.5. Modell illesztése a megváltozott specifikációhoz......... 96 6.5.1. Leharapott kígyófarok további élete........... 96 6.5.2. Kőbogyók vándorlási sebessége............. 96 7. Részletes tervek 97 7.1. Objektumok és metódusok tervei................. 97 7.1.1. Fieldberry......................... 97 7.1.2. Foreground........................ 97 7.1.3. GameField........................ 98 7.1.4. Hedge........................... 98 7.1.5. Sawberry......................... 99 7.1.6. SnakeHead........................ 99 7.1.7. SnakeSection....................... 101 7.1.8. SnakeWrapper...................... 109 7.1.9. Stoneberry........................ 110 7.1.10. Tile............................ 110 7.2. A tesztek részletes tervei, leírásuk a teszt nyelvén........ 114 7.2.1. Inicializálás........................ 114 7.2.2. Kígyó bogyót eszik.................... 117 7.2.3. Kígyók összeütköznek.................. 121 7.2.4. Egyéb tesztesetek..................... 128 7.3. A tesztelést támogató programok tervei............. 131 7.3.1. testall.bat......................... 131 Háztartási Létra 5 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 135 8.1. Feltöltött prototípus ismertetése................. 135 8.1.1. Telepítés......................... 135 8.1.2. Fordítás.......................... 135 8.1.3. Futtatás.......................... 135 8.1.4. Javadoc dokumentáció generálása............ 135 8.1.5. A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk............................ 135 8.1.6. A java forráskód fájlok ismertetése........... 138 8.1.7. Prototípus használata................... 138 8.2. Tesztek jegyzőkönyvei...................... 140 8.3. Értékelés............................. 148 9. Grafikus felület specifikációja 149 9.1. A kezelői felület grafikus képe.................. 149 9.2. A grafikus rendszer architektúrája................ 153 9.2.1. SnakeExplorer...................... 153 9.2.2. TileDrawer........................ 153 9.2.3. GlyphCache........................ 154 9.2.4. GameScreen....................... 154 9.2.5. StaticScreen........................ 154 9.2.6. MenuScreen és gyermekei: MainMenuScreen, InGame- MenuScreen....................... 154 9.2.7. Struktúra diagram..................... 155 9.3. A grafikus objektumok felsorolása................ 156 9.3.1. SnakeExplorer...................... 156 9.3.2. TileDrawer........................ 157 9.3.3. GlyphCache........................ 158 9.3.4. GameScreen....................... 159 9.3.5. StaticScreen........................ 160 9.3.6. MenuScreen....................... 160 9.3.7. MainMenuScreen..................... 161 Háztartási Létra 6 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 167 10.1. Feltöltött grafikus változat ismertetése.............. 167 10.1.1. Telepítés......................... 167 10.1.2. Fordítás.......................... 167 10.1.3. Futtatás.......................... 167 10.1.4. Javadoc dokumentáció generálása............ 167 10.1.5. A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk............................ 167 10.1.6. A java forráskód fájlok ismertetése........... 171 10.1.7. Grafikus változat használata............... 171 10.2. Értékelés............................. 172 11. Összefoglalás 173 11.1. Projekt összegzés......................... 173 12. Napló 175 Háztartási Létra 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ő á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őre 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ő akadályok hátráltathatják. A játéktér egy nagy rét, melyen vannak mérgező 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űnik a játéktérről, a játékos pedig kiesik a játékból. A kígyók bőre 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ől. 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ő 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ől. Összeütközés esetén ez is döntő szerepű lehet, mindig az előbbre lévő sorszámú játékos van előnyben. A játékban minden kígyó csíkos, a játékosok kiválaszthatják milyen színű csíkokkal rendelkezővel szeretnének játszani, és később a játéktéren ez különbözteti meg őket. Ezen kívül a játék elején választani lehet különböző 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ő. A játéktéren különböző bogyók helyezkednek el, melyeket a kígyó megeszik, ha fejével áthalad rajtuk. A bogyók fajtájuktól függően különböző hatással lehetnek az állatra. Alapvetően három féle bogyót különböztetünk meg: mezei bogyó, fűrészbogyó, kőbogyó. A kígyó a színe alapján tudja megítélni, hogy melyik bogyó milyen fajta. Mindegyik bogyó egy egység méretű. A pályán véletlenszerű helyeken bármikor növekedhet újabb bogyó szabad területen. A mezei bogyó a legegyszerűbb bogyó ez segíti a kígyót a növekedésben. Ha ezt megeszi az állat, akkor egységnyivel nő a testhossza, tehát 1 ponttal növeli a pontszámát a kígyót irányító játékos. A fűré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ős 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űen a levágott rész hosszával csökken. Így a játékos pontszáma is csökken annyival, ahány egységből á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 ő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űrészbogyó hatása alatt álló kígyó a másik nem fűrészes kígyó fejének megy neki, a másik kígyó meghal, eltűnik a játéktérről, az őt irányító játékos pedig kiesik a játékból. Két fűrészbogyót evett kígyó egymás fejébe ütközés esetén ugyanazon elvek alapján, mint két fűrésztulajdonsággal nem rendelkező kígyó esetén, vagy egyikük vagy mindkettejük meghal. A kőbogyó elfogyasztása után a kígyó testén végigvándorol egységről egységre. A vándorlási sebesség változik az egyes sebességszinteken. A kőbogyók annyira kemények, hogy a kígyó nem tudja megemészteni őket. Így a bogyók a kígyó testéből 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őbogyókat is tartalmazó részt harap le a kígyóból a másik kígyó, akkor értelem szerűen a kőbogyó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őbogyót evett kígyó farkát. Ezt olyan módon teszi, hogy ha egy másik, fűré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őbogyó olyan kemény, hogy még a fűré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ő kígyó és megsemmisül, az őt irányító játékos kiesik a játékból. Ha egy kígyó fejében van már kő, akkor egy újabb kőbogyó felvétele esetén a kövek összeütköznek, és a kőbogyó elporlad, nem tudja már megenni. A játék háromféleképpen érhet véget. Első esetben úgy, hogy már csak egy kígyó maradt életben, ekkor értelemszerűen az egyetlen élő kígyót irányító játékos nyer. Ezen kívül a játék kettő 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ő lejár. Ebben az esetben pedig a leghosszabb kígyó nyer, azaz ekkor a legtöbb ponttal rendelkező 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őztes, akinek a kígyója a legkevesebb kőbogyót fogyasztotta el. Ha még ekkor sem lehet eldönteni a győztest, akkor döntetlent kell megállapítani. 1.2. Szótár Szó akadály becsavarodik bogyó megeszik csík egység erős harapás 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ő növény, melynek három fajtája van: mezei bogyó, fűrészbogyó, kőbogyó. A kígyó elesége, színük alapján lehet megkülönböztetni ő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ő hatásokat fejthet ki. Minden kígyó testén van, mégpedig minden játékos kígyóján más színű. Egy adott hossz, amellyel a kígyó egy mezei bogyó fogyasztása során növekszik. Ha egy kígyó fűrészbogyót evett, akkor immúnis lesz a méregre, ekkor erős lesz a harapása. A kígyó le tudja harapni a másik farkát így. Háztartási Létra 10 2008. május 14.

1.2 Szótár 1 FELADAT LEÍRÁSA élő kígyó Olyan kígyó, amely még versenyben van a győzelemért, látszik a játéktéren a figurája. fal Lásd sövény. farok A kígyónak a fejétől legtávolabbi vége. fej Az a része a kígyónak, melyet a játékos irányítani képes. fűrészbogyó A réten termő 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űrésztulajdonság Fűrészbogyót evett kígyó jellemzője. halad A kígyó bizonyos időközönként egy egység hosszal előbbre kerül. holtverseny Akkor beszélünk holtversenyről, 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őbogyók száma is egyenlő, vagy két vagy több játékos kígyója egyszerre halt meg. játékos 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. játéktér Az a terület, amelyen a kígyók szabadon haladhatnak. A játéktér egy rét. játék vége A játéknak akkor van vége, ha lejár a rendelkezésre álló idő vagy már csak egy kígyó van életben, illetve ha az utolsó élő kígyók egymás fejének ütközve egyszerre semmisülnek meg. kiesik Egy játékos kiesik, ha a kígyója meghal. kígyó A játék fő figurája, a játékosok irányítják, a csíkjaik színe különbözteti meg őket, bogyókat esznek. kígyójáték Olyan játék, amelyben kígyók versenyeznek egymással. kő Kőbogyó ezzé válik a kígyó hasában megevése után. kőbogyó A réten termő 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. Háztartási Létra 11 2008. május 14.

1.2 Szótár 1 FELADAT LEÍRÁSA leharap meghal megsemmisül méregmirigy méreg mérgező tüske mezei bogyó nehézségi szint nyertes nyomvonal összeütközési pont összeütközik Ha egy fűré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. Egy kígyó meghal, ha nem rendelkezik fűrésztulajdonsággal és összeütközik egy másik kígyóval vagy saját testével, vagy ha leharapta egy fűrészbogyót evett kígyó a fejét, vagy ha sövénynek ütközik, illetve ha fűrészbogyó fogyasztása után kőnek ü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. Eltűnik a játéktérről a figura. Minden kígyó rendelkezik vele, mérget termel. Olyan anyag, melyet minden kígyó termel a méregmirigyeiben. Ha egy másik kígyó érintkezik vele, akkor meghal tőle. A sövényeken elhelyezkedő tüskék, amelyek a kígyókkal érintkezve megölik őket. A réten termő bogyó, melyet ha egy kígyó megeszik, egy egységgel nő a testhossza. A játékos tudásának megfelelően választhat a különböző nehézségi szintek közül, melyekben a sövények száma határozza meg a nehézséget. 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őbogyót evő. Ha még ebből is több van, akkor holtversenyben több nyertes is van. A kígyó teste által az adott időben elfoglalt terület. A kígyó testének azon része, ahol a másik kígyó beleütközött, összeütköztek. 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 1 FELADAT LEÍRÁSA pontszám rét sebesség sövény testhossz ütközik 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őnek rajta. A kígyók élőhelye. Azt határozza meg, hogy egy kígyó hány egységnyi távolságot halad a játéktéren egységnyi idő alatt. Minden kígyónál megegyezik. A játék elején választható. A játéktéren helyezkedik el, mérgező tüskéi vannak, ezért a kígyók nem tudnak áthatolni rajta, meghalnak tőle. A kígyó testének hossza egységekben. Lásd összeütközik. Háztartási Létra 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ő 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őállítása, amely működőképes, élvezhetően játszható, megfelelő kikapcsolódást nyújt és minden olyan gépen futtatható, melyen a megfelelő Java futtatókörnyezet található. A fejlesztés során különleges hangsúlyt kap az UML modellezőrendszer minél tökéletesebb használata. Emellett fontos szempont még számunkra a csapatban történő fejlesztés sajátosságainak megismerése. 2.1.2. A fejlesztőkö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ővel (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őle 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ű script kinyomtatás előtt L A TEX 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ől a dvipdfm 0.13.2c programmal nyomtatható PDF állományt tudunk előállítani. Háztartási Létra 14 2008. május 14.

2.1 Követelmény definíció 2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS 2.1.3. 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ő és billentyűzet szükséges. Ez egy minimum követelmény, zökkenőmentes játékmenethez kicsit erősebb 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ő, 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ő változata grafikus felhasználói felülettel rendelkezik. A programot a felhasználó a billentyűzet segítségével vezérelheti, több felhasználó esetén eltérő billentyűkombinációk használatával. Utóbbiakat igyekezünk úgy kialakítani, hogy magyar billentyűzetkiosztás feltételezve több játékos esetén sem okozzon gondot a közös billentyűzet használata. A játékmenetről további információ a felhasználói kézikönyvben található. 2.1.5. Minőségi tényezők Újrafelhasználhatóság A cél az, hogy a grafikus felhasználói felületet a program többi részétől teljesen különválasszuk a Model-View-Controller elv szerint, így lehetővé téve azt, hogy később a grafikus felület egyszerűen és gyorsan változtatható legyen. A szoftver megtervezésekor a korszerű szoftvertechnológia és tervezési minták alkalmazásával törekszünk a kód minél magasabb szintű újrafelhasználhatóságát biztosítani, így a grafikus felület például átültethető egy másik alkalmazásba, vagy újabb tulajdonságokkal ruházható fel. Rugalmasság és teljesítmény A rugalmasságot a fejlesztőkörnyezet biztosítja, a játéknak ugyanis minden olyan környezetben futtathatónak kell lennie, melyben létezik megfelelő 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ű személyi számítógépeken is élvezhetően futtatható, a Java technológia lehetősé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ől feltételezzük, hogy képes elindítani a számítógépet és a játékot. A cél olyan minőségi grafikus felület és intuitív irányítási rendszer létrehozása, amely a szoftver használatának könnyű elsajátíthatóságát, és élvezhető játékmenetet biztosít. 2.1.6. A szoftver minősítése A kifejlesztett szoftver akkor megfelelő, ha minél pontosabban megegyezik a fentebb leírtakkal. Ezt ellenőrizni 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őség biztosítása korszerű 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őször a megbízó által meghatározott módon és időben kerül sor. Ellenőrzés és értékelés után a program hozzáférhető lesz a világhálón is. 2.2. Projekt terv 2.2.1. A fejlesztői csapat Csapat tagjai Bertók Zsófia Tönköl Viktor Veres-Szentkirályi András (csapatvezető) 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őből áll. A tudásunk és érdeklődésünk különböző, í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ő, Veres- Szentkirályi András. Ő a vezető programozó is. A dokumentációért első sorban Bertók Zsófia felel, az UML felelőse 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ő műkö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őző szakaszban elkövetett hibák és hiányosságok. Tartalmazza valamennyi a végső rendszerben szereplő 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őrizhetőnek 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űködőképesnek kell lennie, a program tesztelése ennek a szakasznak kiemelkedően fontos része. A teszt kiterjed a megvalósított objektumokra azok függvényeire és a köztük lévő kapcsolatok helyességére. Grafikus változat Az előző szakasz lezárása után indul meg a már hibátlanul működő 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ő a protora, a MVC modellnek megfelelően. 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ővü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ők 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őbb is felidézhető legyen. Ezekre a megbeszélésekre a hét elején szakítunk időt a konzultációs időpontunk után. Elektronikus kommunikáció Skype IRC A kisebb egyéni feladatot érintő 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ő nagyobb mindenkit érintő, de személyes megbeszélést nem igénylő problémákat. Háztartási Létra 18 2008. május 14.

2.2 Projekt terv 2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS TWiki Subversion A napló vezetésén és a dokumentumok tároló, szerkesztő helyén kívül, a projektet érintő fontosabb dokumentumok feltöltésére is használjuk. 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. 2.2.4. Fejlesztési ütemterv A program fejlesztésének három fő á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űködőképes, ám még grafikus felület nélküli változata. Ezen hajtjuk végre a program első átfogó tesztelését. Grafikus változat: a prototípust kiegészítjük a grafikus felülettel, ez adja a program végső változatát. 2.2.5. Határidők 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 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS 2.2.6. Szükséges dokumentációk A projekt folyamán a megbízó által megadott formában elkészülő 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űen, 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ői dokumentáció A program belső szerkezetét, működését leíró dokumentumok és a projekt napló alkotják. Célja, hogy egy másik programozó megértse a program működését, illetve a későbbi 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őpontokban leadjuk ő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 Actor Leírás Új játékot indít Játékosok 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 Actor Leírás Kígyót mozgat Játékosok 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 fieldberryin- Way() metódusát. Felelősségei Kígyó értesítése az ütközésről. Háztartási Létra 22 2008. május 14.

3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 3.1.2. Foreground Leírás A játéktéren elhelyezkedő 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 bool isghost() Visszatérési értéke true, ha a kör végén törlődik 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ően megvalósítandó. Felelősségei nincsenek Háztartási Létra 23 2008. május 14.

3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 3.1.3. Game Leírás Az osztály-hierarchia fő objektuma, a játék main függvénye ennek statikus része, olyan alapvető 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) void pause() void start() void quit() Winner játékos(ok) nyert(ek), a játéknak vége. Megállítja a játékot GameField pausetimer() metódusának meghívásával. 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. Befejezi a program futtatását. Felelősségei A játék alapvető 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 ANALÍZIS MODELL KIDOLGOZÁSA 3.1.4. GameField Leírás A játékteret reprezentáló objektum, inicializálásakor létrehozza a pályát, fő 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 List Tiles A játékosok SnakeWrapper objektumai. A játékteret alkotó mezők. Metódusok void gameround() A játék egy körét futtatja le, időzítő 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őrzi, hogy futhat-e még tovább a játék, avagy győztest kell hirdetni. A kör végén meghatározott valószínűséggel bogyó(ka)t helyez el véletlenszerű helyeken. Háztartási Létra 25 2008. május 14.

3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA void initfield() void pausetimer() void starttimer() void stoptimer() Létrehozza a játékteret alkotó Tile objektumokat és a rajtuk elhelyezkedő statikus objektumokat (pl. sövény). A játékosok SnakeWrapper objektumait létrehozza, majd elhelyezni őket a kiindulási helyükön a createsnake() metódussal. Végül elindítja az időzítőt. Leállítja az időzítőt, ezzel szünetelteti a játékot. A szünet után starttimer() tudja újraindítani. Elindítja az időzítőt, amely rendszeres időközönként meghívja a gamerount() metódust. Leállítja és megsemmisíti az időzítőt. Felelőssé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 hedge- InWay() metódusát. Felelősségei Kígyó értesítése az ütközésről. 3.1.6. Sawberry Leírás Fűré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ősségei Kígyó értesítése az ütközésről. 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 bool ispowerful Stoneberry stonepickup Amennyiben a fej képes más szelvényeket átharapni, true, egyébként false. A fejbe kerülő esetleges kőbogyó. Komponensek nincsenek Metódusok void fieldberryinway (Fieldberry fieldberry) void hedgeinway (Hedge hedge) A fej mezei bogyóval ütközött, melynek hatására megnöveli a kígyót a proposeenlargement() metódus rekurzív meghívásával. 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- Len) void pulltotile(tile newpos) void sawberryinway (Sawberry sawberry) void snakeinway (SnakeHead snake) void stoneberryinway (Stoneberry stoneberry) Beállítja position és proposedenlargement értékét. Az örökölt pulltotile() metódus lefutása után elindítja a rekurzív passstonedown() metódust, visszatérési értéktől függően meghívja a givestone() metódust stonepickup értékét átadva, majd törli azt. A fej fűrészbogyóval ütközött, melynek hatására ispowerful változót true értékre állítja és elindít egy időzítőt, melynek lejártakor ispowerful változó visszaáll false értékre. A fej másik kígyónak ütközött, melynek hatására megöli kígyót a splitoff() metódus rekurzív meghívásával. A fej kőbogyóval ütközött, melynek hatására a kőbogyót lenyeli a stone- Pickup változó beállításával. Felelőssé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 bool isdead Stoneberry stone Tile position int proposedenlargement Amennyiben a szelvény halottnak számít, true, egyébként false. A szelvényben lévő esetleges kőbogyó. Az a mező, amelyen a szelvény éppen tartózkodik. Ha a szelvény növekedésben van, akkor a hátralévő növekedés mértéke szelvény darabszámban, egyébként 0. Komponensek SnakeSection next A sorban következő szelvény. Metódusok void givestone (Stoneberry newstone) bool isghost() void meetsnake (SnakeHead other- Party) A szelvénybe átad egy StoneBerry kőbogyót, melynek hatására saját stone értékét lecseréli a kapottra. IsDead értékét adja vissza. Ha követ tartalmaz, vagy a másik kígyó nem evett fűré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. Háztartási Létra 30 2008. május 14.

3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA bool passstonedown() void proposeenlargement (int length) 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őbó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ő átadja azt a givestone() metódussal, majd visszatér true értékkel. Amennyiben a szelvényben van is kő, és a következő szelvény is jelzi false értékkel, hogy nincs neki hely, ő is false értékkel tér vissza. 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. Háztartási Létra 31 2008. május 14.

3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA void pulltotile (Tile newpos) void splitoff() A szelvényt newpos mezőre 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ővel 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őn 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őt (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ővel ha létezik ilyen is ugyanezt teszi. Felelőssé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 int snakedir int snakespeed A kígyó fejének aktuális helye. A kígyó sebességének iránya. 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, int initdir, int initspeed) bool isalive() void steersnake(int angle) InitLen hosszal, initdir irányú és init- Speed nagyságú sebességgel induló kígyó létrehozása a where mezőn. Ha RealSnake értéke nem NULL, RealSnake isghost változójának értékét, egyébként false értéket ad vissza. 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ő mezőt, ahova a kígyó feje kerül, majd meghívja a kapott Tile mező 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ősségei Egy kígyó térbeli mozgásának kezelése. 3.1.10. Stoneberry Leírás Kő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 szelvénynek meghívja a stoneberryinway() metódusát. Felelősségei Kígyó értesítése az ütközésről. Háztartási Létra 34 2008. május 14.

3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 3.1.11. Tile Leírás A játéktér egy mezője, amely kizárólag Tile szomszédait és a rajta elhelyezkedő Foreground objektumot ismeri. Alaposztály nincs Példányok száma N Változók List neightbours Szomszéd mezők listája. Komponensek Foreground Object A mezőn elhelyezkedő objektum. Amennyiben a mező üres, értéke NULL. Metódusok void addforeground(foreground toadd) bool isoccupied() Elhelyez egy Foreground objektumot a mezőn. Amennyiben a mezőn volt előtte objektum, az megsemmisítésre kerül, ezért csak a pálya inicializálásakor használjuk. Amennyiben a mező ü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 snake) void deleteghost() Tile nextindir(int dir) void setneighbour(tile otherelement, int dir, bool notify) A snake fejjel rendelkező kígyót a mezőre mozgatja. Ha a mező foglalt, a már ott lévő 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őre helyezi a pull- ToTile() metódus meghívásával. Amennyiben Object szellemmé vált, letörli a mezőről. Erre a körök végén van szükség. Visszaadja a mező dir irányban lévő szomszédját. Beállítja a dir irányban lévő szomszédosságot otherelement mezővel, majd amennyiben notify értéke false, értesíti a szomszédot önmaga meghívásával az ellenkező irányban a szomszédra, notify=true paraméterrel. Felelősségei Mezők 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 őt megevő kígyó hossza egy szelvénnyel nő. 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ő 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őtt 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ő 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őket és a kígyók SnakeWrapper objektumait, majd elindítja saját időzítőjét. Játék közben körönként lehetőséget ad a kígyóknak mozgásra, továbbá véletlenszerűen megjelenít bogyó(ka)t. Körök végén ellenőrzi, hogy véget ért-e a játék, és ha igen, a győztes(ek) átadása után Game objektum megsemmisíti. 3.2.5. Hedge Sövény, a nekiütköző kígyók meghalnak tőle. 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űrészbogyó, amitől őt megevő kígyó feje erőssé 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 ANALÍZIS MODELL KIDOLGOZÁSA 3.2.8. 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ően 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őbogyó, az őt megevő 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ője, melyen egy vagy nulla objektum tartózkodhat. Figyel arra, hogy ha kígyó kerül rá, az esetlegesen már ott lévő másik objektumot tájékoztassa az ütközésről. 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 Actor Leírás Start new game Players 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ő objektumok is, pl. kígyó, bogyók, sövény. Use Case Actor Leírás Play a round Players 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őzelemért. Use Case Actor Leírás Meet with an object Players 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ően máshogy reagálnak rá. Use Case Actor Leírás Meet with snake Players 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 Actor Leírás Meet with fieldberry Players 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ő. 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 Actor Leírás Meet with stoneberry Players Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok kőbogyóval találkoznak. A kígyójuk testébe ilyenkor egy kő kerül. Use Case Actor Leírás Meet with sawberry Players Ez a use case azt írja le, hogy mi történik akkor, amikor a játékosok fűrészbogyóval találkoznak. A kígyójuk harapása ilyenkor erős lesz. Use Case Actor Leírás Meet with hedge Players 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 ANALÍZIS MODELL KIDOLGOZÁSA 3.4.2. Szekvencia diagramok Init A Game objektum start() függvényével indítható a játék, ami létrehozza a játékmezőt (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őből á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ő. 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őre lesznek elhelyezve az addforeground(foreground) metódus meghívásával. Kígyók létrehozásához előszö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őek, 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őszö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űnni 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őség érdekében. Amennyiben a kígyó nem vált szellemé (ghost állapot) megtörténik a kígyó előremozdí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ő 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őbb lévő kígyók előnyben lesznek. Ez versenyhelyzetekben (pl.: két kígyó között egy üres mező 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ő 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ő 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ő, akkor with stone állapotban van, ha nincs benne kő, 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ő 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 ANALÍZIS MODELL KIDOLGOZÁSA 3.5.2. A SnakeHead objektum state-chartja A SnakeHead objektum a SnakeSection leszármazottja, így az összes SnakeSection-ben létező á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űré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űrészbogyó hatása, azaz eltelt egy bizonyos mennyiségű idő. 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 Actor Leírás 0. Initialize the gamefield Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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 Actor Leírás 1. Feed a snake with fieldberry Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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 Actor Leírás 2. Feed a snake with sawberry Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő fűré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űrésztulajdonsággal ruházza fel. Use case Actor Leírás 3. Feed a snake with stoneberry Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő kő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 kő kerül a testébe. Use case Actor Leírás 4. Crash a snake into a hedge Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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ődik 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 Actor Leírás 5. Crash a snake into a snake s a body Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy kígyóval egy másik kígyó testébe ütközik. Különböző események hajtódnak végre annak függvényében, hogy a kígyó fűrésztulajdonsággal rendelkezik-e vagy sem. Use case Actor Leírás 5/a. Crash a normal snake into a snake s body Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy normál azaz fűrésztulajdonsággal nem rendelkező kígyóval egy másik kígyó testébe ütközik. Ekkor a másikba ütköző kígyó mindenképpen meghal, vagyis szellem lesz. A kör végén törlődik a szelleme. Use case Actor Leírás 5/b. Crash a powerful snake into a section without stone in a snake s body Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy fűrésztulajdonsággal rendelkező kígyóval egy másik kígyó testébe ütközik, mégpedig olyan részre, ahol nincs kő. Ekkor leharapja a másik kígyó farkát, ő pedig haladhat tovább változatlanul. Use case Actor Leírás 6. Crash a snake into a normal snakehead (odd distance) Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy kígyóval egy normál követ nem tartalmazó, nem fűrészes kígyófejbe ütközik úgy, hogy páratlan (egyetlen mező) távolság van közöttük. Ekkor különböző események hajtódnak végre annak függvényében, hogy a kígyó fűré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 Actor Leírás 6/a. Crash a normal snake into a normal snakehead (odd distance) Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy normál kígyóval egy normál kígyófejbe ütközik úgy, hogy páratlan (egyetlen mező) távolság van közöttük. Ekkor először lép az egyik kígyó a másik felé, majd a másik kígyó is lép egyet az első felé. Ekkor ő már érzékeli, hogy egy kígyónak ütközött, így meghal (szellem lesz). A kör végén törlődik a szelleme. Az első kígyó pedig változatlanul haladhat tovább. Use case Actor Leírás 6/b. Crash a powerful snake into a snakehead without stone (odd distance) Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy fűrésztulajdonsággal rendelkező kígyóval nekiütközik egy követ nem tartalmazó kígyófejnek, úgy hogy páratlan (egyetlen mező) távolság van közöttük. Ekkor először lép a normál kígyó a fűrészes felé, majd a fűrészes lépne a normál felé. Ám ekkor ő már érzékeli, hogy egy kígyónak ütközött, de mivel fűré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ődik a szelleme. Az fűrészkígyó pedig változatlanul haladhat tovább. Use case Actor Leírás 7. Crash a snake into a normal snakehead (even distance) Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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ő), tehát a kígyók "farkasszemet néznek egymással". Ekkor különböző események hajtódnak végre annak függvényében, hogy a kígyó fűré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 Actor Leírás 7/a. Crash a normal snake into a normal snakehead (even distance) Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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őszö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 ő is beleütközik a kígyóba (aki még szellemként szerepel a pályán), ő is meghal, vagyis szellem lesz. A kör végén törlődik a szellemük. Use case Actor Leírás 7/b. Crash a powerful snake into a snakehead without stone (even distance) Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy fűrésztulajdonsággal rendelkező 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őször lépne a fűré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ődik a szelleme. A fűrészes kígyó a következő körtől változatlanul haladhat tovább. Use case Actor Leírás 8. Crash a powerful snake into a snakesection with stone Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy fűrésztulajdonsággal rendelkező kígyóval nekiütközik egy követ tartalmazó szelvénynek. Ekkor a fűrészkígyó meghal, vagyis szellem állapotba kerül. A kör végén törlődik a szelleme. Use case Actor Leírás 9. Put a berry or a hedge to the gamefield Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy bogyót vagy sövényt helyez el a játéktéren. Létrehozza a megadott objektumot, majd elhelyezi a megfelelő pályaelemre Háztartási Létra 57 2008. május 14.

4.2 Architektúra 4 SZKELETON TERVEZÉSE Use case Actor Leírás 10. Put a snake to the gamefield Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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ől áll, majd elhelyezi a megfelelő pályaelemre. Use case Actor Leírás 11. Grow a snake and the snake digests stoneberry Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy kígyóval követ eszik, amelyet meg kell emésztenie. A következő kör során a kígyó növeli hosszát, és eközben a kő is legurul a hasában Use case Actor Leírás 12. Delete ghosts Tester Ez a use case azt írja le, hogy mi történik akkor, amikor egy kör végén a szellemek törlődnek. Minden pályaelemen végighaladva törli a szellemelemeket azon a mezőn, ahol elhelyezkedik. 4.2. Architektúra Ahhoz, hogy a modell helyes működését megfelelően tudjuk tesztelni, megvalósítottunk különböző pályákat, amelyeken az egyes use-case-k működését lehet ellenőrizni. A pályák mérete és a mezők 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őbogyó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őrzé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ő a program futása és később összevethető a szekvenciadiagramokkal. Háztartási Létra 58 2008. május 14.

4.2 Architektúra 4 SZKELETON TERVEZÉSE 4.2.1. Tesztpálya A pálya hat egymással szomszédossági viszonyban lévő, a jobboldali ábrán látható módon elrendezett mezőből áll. Az összes tesztesetet ezen a pályán valósítjuk meg, a mezők számozása 0- tól kezdődik és jobbra ill. lefelé egyértelmű. A tesztesetekben ezekre a mezőkre 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ő 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ő 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őbogyós ütköztető pálya Az előbbi pályához hasonló módon helyezi el az objektumokat, a kereszteződésbe azonban egy Stoneberry kőbogyót tesz. A pályán fűrészbogyót evett kígyó köves SnakeSection szelvénnyel találkozása tesztelhető. 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őle egy mezővel jobbra pedig egy Fieldberry mezei bogyót. A pályán a mezei bogyó kígyóra kifejtett hatása (növekedés) tesztelhető. Kőbogyós pálya Az előbbi pályához hasonló módon helyezi el az objektumokat, ám mezei bogyó helyett Stoneberry kőbogyót tesz fel. A pályán a kőbogyó kígyóra kifejtett hatása tesztelhető. 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őbbi 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ő. Fűré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űrészbogyót tesz fel. A pályán a fűrészbogyó kígyóra kifejtett hatása tesztelhető, 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ő sor középső két mezőjére egyegy kígyót. A pályán páros számú mezőnyi távolságra elhelyezkedő, egymás felé mozgó kígyók ütközése tesztelhető. Kígyók szétválasztva pálya Az előbbi pályához hasonló módon helyezi el az objektumokat, ám a baloldali kígyót a 0. mezőre helyezi, így a két kígyó között egy mező távolság lesz. A pályán páratlan számú mezőnyi távolságra elhelyezkedő, egymás felé mozgó kígyók ütközése tesztelhető. 4.2.3. Ütemezés A játék lelke a GameField osztály gameround metódusa, melyet a végleges változatban időzítő fog meghívni periodikusan. A modell ellenőrzése során azonban az ütemezés kézzel fog történni, így amint egy kör véget ért (game- Round visszatért), máris kezdődik 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ői felületének terve, dialógusok 4 SZKELETON TERVEZÉSE 4.3. A szkeleton kezelői felületének terve, dialógusok A szkeleton kezelői felületének tervezésénél azt tartottuk szem előtt, hogy az analízis modell legyen interaktívan és automatizáltan is tesztelhető. 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őek automatikusan egy fájlt a bemenetre irányítva ill. az eredmény is egyszerűen elmenthető a kimenet fájlba irányításával későbbi elemzés céljából. A szabványos ki- ill. bemenet kizárólagos használatából eredően a szkeleton grafikus felülettel nem rendelkezik, csak szöveges képernyőt (konzolt) használ. Mivel a szkeleton nem tárol állapotokat, minden egyes olyan döntés esetén, amely belső á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ű karakterrel beljebb kezdődik, mint az őt hívó, valamint a függvény nevétől balra két normál karakter szélességű, 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 otherparty) ->Snake[1].hedgeInWay(Hedge hedge) ->Snake[1].SplitOff() <-Snake[1].SplitOff() <-Snake[1].hedgeInWay(Hedge hedge) <-Hedge[3].meetSnake(SnakeHead otherparty) Háztartási Létra 61 2008. május 14.

4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE 4.4. Szekvencia diagramok a belső műkö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őjé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ő működésre 4 SZKELETON TERVEZÉSE 4.4.2. 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ő működésre 4 SZKELETON TERVEZÉSE 4.4.3. 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ő működésre 4 SZKELETON TERVEZÉSE 4.4.4. 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ő műkö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űrésztulajdonsággal rendelkezik-e vagy sem, különböző a lefutása. Ez két helyen okoz különbséget, a diagramon jegyzettel jelölve van, hogy a különböző részek melyik esetekben futnak le. Háztartási Létra 66 2008. május 14.

4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Háztartási Létra 67 2008. május 14.

4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE 4.4.7. 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űré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őké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űrésztulajdonságának megfelelően 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ő működésre 4 SZKELETON TERVEZÉSE Háztartási Létra 69 2008. május 14.

4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Háztartási Létra 70 2008. május 14.

4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE 4.4.9. 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ő működésre 4 SZKELETON TERVEZÉSE 4.4.10. 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ő működésre 4 SZKELETON TERVEZÉSE 4.4.12. Szekvencia diagram a 11. Grow a snake and the snake digests stoneberry use case-hez Egy fűrésztulajdonsággal rendelkező 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ő működésre 4 SZKELETON TERVEZÉSE 4.4.13. Szekvencia diagram a 12. Delete ghosts use case-hez A pályán lévő 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ő működésre 4 SZKELETON TERVEZÉSE 4.4.14. 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ő műkö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ő műkö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őre, a Pull To Tile 1-es szekvenciát felhasználva. Ha olyan teszteset van, ahol üres mezőre 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ő műkö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őre, a Pull To Tile 2-es szekvenciát felhasználva. Ha olyan teszteset van, ahol üres mezőre 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ő műkö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őre, 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ő működésre 4 SZKELETON TERVEZÉSE Is Alive? szekvencia diagram Annak az ellenőrzé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ő 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őkö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-- 1 dnet dnet 1543 2008-03-19 09:54 allclasses-frame.html -rw-r--r-- 1 dnet dnet 1323 2008-03-19 09:54 allclasses-noframe.html -rw-r--r-- 1 dnet dnet 4551 2008-03-19 09:54 constant-values.html -rw-r--r-- 1 dnet dnet 4438 2008-03-19 09:54 deprecated-list.html -rw-r--r-- 1 dnet dnet 9860 2008-03-19 09:54 Fieldberry.html -rw-r--r-- 1 dnet dnet 9949 2008-03-19 09:54 Foreground.html -rw-r--r-- 1 dnet dnet 11172 2008-03-19 09:54 GameField.html -rw-r--r-- 1 dnet dnet 9880 2008-03-19 09:54 Hedge.html -rw-r--r-- 1 dnet dnet 7623 2008-03-19 09:54 help-doc.html -rw-r--r-- 1 dnet dnet 20926 2008-03-19 09:54 index-all.html -rw-r--r-- 1 dnet dnet 841 2008-03-19 09:54 index.html -rw-r--r-- 1 dnet dnet 5519 2008-03-19 09:54 overview-tree.html -rw-r--r-- 1 dnet dnet 1 2008-03-19 09:54 package-list -rw-r--r-- 1 dnet dnet 733 2008-03-19 09:54 packages.html drwxr-xr-x 2 dnet dnet 4096 2008-03-19 01:00 resources -rw-r--r-- 1 dnet dnet 9938 2008-03-19 09:54 Sawberry.html -rw-r--r-- 1 dnet dnet 17227 2008-03-19 09:54 SkeletonHelper.html -rw-r--r-- 1 dnet dnet 22737 2008-03-19 09:54 SnakeHead.html -rw-r--r-- 1 dnet dnet 17514 2008-03-19 09:54 SnakeSection.html -rw-r--r-- 1 dnet dnet 12333 2008-03-19 09:54 SnakeWrapper.html -rw-r--r-- 1 dnet dnet 9959 2008-03-19 09:54 Stoneberry.html -rw-r--r-- 1 dnet dnet 1202 2008-03-19 09:54 stylesheet.css -rw-r--r-- 1 dnet dnet 14249 2008-03-19 09:54 Tile.html src Itt található az összes osztály forráskódja a nevével megegyező.java fájlban, valamint a JAR archívum készítéséhez szükséges Manifest fájl. -rw-r--r-- 1 dnet dnet 365 2008-03-17 23:26 Fieldberry.java -rw-r--r-- 1 dnet dnet 486 2008-03-17 23:26 Foreground.java -rw-r--r-- 1 dnet dnet 5679 2008-03-19 09:24 GameField.java -rw-r--r-- 1 dnet dnet 351 2008-03-17 22:08 Hedge.java Háztartási Létra 82 2008. május 14.

5.1 Feltöltött szkeleton ismertetése 5 SZKELETON BEADÁSA -rw-r--r-- 1 dnet dnet 49 2008-03-17 22:55 manifest.mf -rw-r--r-- 1 dnet dnet 363 2008-03-17 22:08 Sawberry.java -rw-r--r-- 1 dnet dnet 5437 2008-03-19 09:42 SkeletonHelper.java -rw-r--r-- 1 dnet dnet 2158 2008-03-18 00:07 SnakeHead.java -rw-r--r-- 1 dnet dnet 3639 2008-03-18 22:05 SnakeSection.java -rw-r--r-- 1 dnet dnet 1510 2008-03-18 22:01 SnakeWrapper.java -rw-r--r-- 1 dnet dnet 362 2008-03-17 22:08 Stoneberry.java -rw-r--r-- 1 dnet dnet 2297 2008-03-19 09:11 Tile.java tst Itt találhatóak a tesztelést segítő előre elkészített bemeneti fájlok. A tesztesetekhez fájlnév alapján egyértelműen társíthatóak, ha egy tesztesetben a kígyó lehet erős is, akkor azt -powerful ill. -normal esetekre bontottuk. -rw-r--r-- 1 dnet dnet 2 2008-03-19 09:39 0.txt -rw-r--r-- 1 dnet dnet 3 2008-03-19 09:52 10.txt -rw-r--r-- 1 dnet dnet 27 2008-03-19 09:52 11.txt -rw-r--r-- 1 dnet dnet 3 2008-03-19 09:53 12.txt -rw-r--r-- 1 dnet dnet 12 2008-03-19 09:29 1.txt -rw-r--r-- 1 dnet dnet 12 2008-03-19 09:40 2.txt -rw-r--r-- 1 dnet dnet 12 2008-03-19 09:40 3.txt -rw-r--r-- 1 dnet dnet 10 2008-03-19 09:42 4.txt -rw-r--r-- 1 dnet dnet 42 2008-03-19 09:45 5-normal.txt -rw-r--r-- 1 dnet dnet 42 2008-03-19 09:46 5-powerful.txt -rw-r--r-- 1 dnet dnet 20 2008-03-19 09:48 6-normal.txt -rw-r--r-- 1 dnet dnet 20 2008-03-19 09:49 6-powerful.txt -rw-r--r-- 1 dnet dnet 22 2008-03-19 09:50 7-normal.txt -rw-r--r-- 1 dnet dnet 16 2008-03-19 09:51 7-powerful.txt -rw-r--r-- 1 dnet dnet 42 2008-03-19 09:51 8.txt -rw-r--r-- 1 dnet dnet 2 2008-03-19 09:51 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ő nevűt. Az egyes osztályokról rövid leírás olvasható a forráskód első 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ő kezeléséhez szükséges egységeket. Háztartási Létra 83 2008. május 14.

5.2 Értékelés 5 SZKELETON BEADÁSA 5.1.7. 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ő előre felkínált számozott lehetőségek közül választhat a lehetőség sorszámának megadásával. A szoftver kizárólag a szabványos be- és kimenetet használja, így lehetősé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őbb is elemezhetjük a történteket. 5.2. Értékelés A projekt eddigi részén megpróbáltuk teljesen egyenlő mértékben elosztani a kapott feladatokat, ezt nagyjából sikerült is megvalósítanunk. Hétről-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ő 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őbbi részeket elvállalónak meg kellett várnia a többieket, míg elkészülnek a saját részükkel. Ezektől a problémáktól függetlenül is sikerült mindent időre befejeznünk, és körülbelül egyenlő 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, ő több százalékot kap. Tehát ennek megfelelően az eddigi munkában való százalékos közreműkö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ő utasítások allocatefield Működése: Paraméterei: Létrehoz egy megadott méretű pályát üres mezőkkel. Lefutása után rendelkezésünkre áll egy teljesen üres, használatra kész játékmező, melynek szomszédos elemei megfelelő módon egymáshoz vannak láncolva. A szélső mezőket nem láncoljuk külső szélük irányában sehova, a pályatervezőnek kell gondoskodnia pl. sövények használatával arról, hogy kígyók ne hagyhassák el a játékteret. 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. putstaticobject Működése: Paraméterei: Példa: Példa hatása: A játéktér koordinátákkal meghatározott mezőjére felhelyez egy megadott típusú statikus mozgást nem végző objektumot. Nem végez ellenőrzést arra nézve, hogy az adott mező tartalmaz-e már elemet, a korábban ott elhelyezkedő objektumot véglegesen törli. A mező Descartes-koordinátái (bal felső mező koordinátája (0; 0)) természetes számokkal, majd az objektum típusa (Fieldberry, Sawberry, Stoneberry, vagy Hedge). putstaticobject 1 2 Fieldberry Mezei bogyót helyez el a harmadik sor második oszlopában. Háztartási Létra 85 2008. május 14.

6.1 Prototípus interface definíciója 6 PROTOTÍPUS KONCEPCIÓJA putsnake Működése: Paraméterei: A játéktér koordinátákkal meghatározott mezőjére felhelyez egy kígyófejet, amely a következő körtől szintén paraméterként megkapott irányban indul el és növekszik a megadott indulási méretig. A mező 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: includefile Egy lefelé mozgó, 7 egység hosszúra megnövő kígyót hoz létre a 14. sor 4. oszlopában. Működése: Paraméterei: Példa: Példa hatása: A megadott fájlnévben kapott parancsokat betölti és az ebben a fejezetben megadottaknak megfelelően é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ű rekurzióval végtelen ciklusba kerülhet a proto, de ezt nekünk nem feladatunk ellenőrizni. A fájl relatív vagy abszolút elérési útja. includefile kispalya.map Végrehajtja a kispalya.map fájlban szereplő utasításokat. 6.1.2. Prototípusvezérlő utasítások Minden pályakészítő utasítás egyben prototípusvezérlő 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 Működése: Lefuttat egy kört a játék szabályainak megfelelően (lásd Objektum katalógus). Háztartási Létra 86 2008. május 14.

6.1 Prototípus interface definíciója 6 PROTOTÍPUS KONCEPCIÓJA Paraméterei: Példa: Példa hatása: nincsenek gameround Lefuttat egy kört. emulatesnakesteer Működése: Paraméterei: Egy kígyó elfordulásához emulál felhasználói bemenetet. A kígyó sorszáma (0 az először létrehozott kígyó), kígyó előjeles 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. setpowerful Működése: Paraméterei: Példa: Példa hatása: Egy kígyó erős mivoltát állítja be. Mivel a prototípus nem tartalmaz időzítést, ez gondoskodik az erősség elmúlásáról is. A kígyó sorszáma (lásd emulatesnakesteer), erősség (on/off). setpowerful 2 on A harmadik kígyó erőssé válik. getsnakestatus Működése: Egy kígyó állapotát (életben van-e, fűrésztulajdonsággal rendelkezik-e, merre mozog, hol a feje, mely szelvényeiben van kőbogyó) 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ő kígyó állapotát. Példa kimenet: 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 2 ][ Fej pozicioja: Tiles[0][0] ][ Felepites: [ ][ ][ ] Háztartási Létra 87 2008. május 14.

6.1 Prototípus interface definíciója 6 PROTOTÍPUS KONCEPCIÓJA gettilecontent Működése: Egy mező tartalmát kérdezi le. Paraméterei: A mező koordinátái (lásd putsnake). Példa: gettilecontent 1 0 Példa hatása: Lekérdezi az első sor második mezőjének tartalmát. Példa kimenet: Tiles[0][0] mezon jelenleg Fieldberries[0] tartozkodik rollstones Működése: Paraméterei: 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. 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ő sort írja ki a proto: Esemeny: Mezei bogyo felszedese ][ Resztvevok: MovingObjects[1] es FieldBerries[2] ][ Helyszin: Tiles[4][3] Amennyiben a tesztelő szintaktikai (Fieldberry helyett Feldberry-t ír) vagy szemantikai (nem létező fájlt próbál include-olni) hibát vét, hibaüzenetet kap, de ettől a proto futása nem áll meg. Például ha a tesztelő on helyett true értéket próbál meg átadni a setpowerful parancsnak, a következő ü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űködésénél. Use case Actor Leírás Allocate the gamefield Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő létrehozza a játékteret. Use case Actor Leírás Put a static object to the gamefield Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő egy statikus objektumot (mezei bogyó, kőbogyó, fűrészbogyó vagy sövény) helyez el az egyik mezőn. Use case Actor Leírás Put a snake to the gamefield Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő 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 Actor Leírás Include a file Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő betölt egy kötegelt parancsfájlt a programba, pl. a pályatervet. Use case Actor Leírás Play a gameround Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő lefuttat a játék során egy kört. Use case Actor Leírás Emulate steering of a snake Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő a kígyó elfordulásához egy bemenetet emulál. Use case Actor Leírás Set the powerful property Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő a kígyót fűrészes tulajdonsággal ruházza fel, vagy elveszti azt. Use case Actor Leírás Get a snake s status Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő lekérdezi egy kígyó állapotát. Use case Actor Leírás Get a tile s content Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő lekérdezi egy mező tartalmát. Háztartási Létra 90 2008. május 14.

6.3 Tesztelési terv, tesztelő nyelv definiálása 6 PROTOTÍPUS KONCEPCIÓJA Use case Actor Leírás Roll the stones Tester Ez a use case azt írja le, hogy mi történik akkor, amikor a tesztelő legörgeti egy egységgel a kígyók hasában a köveket. 6.3. Tesztelési terv, tesztelő nyelv definiálása 6.3.1. Prototípus használata a tesztelésre A program működésének tesztelésére különböző teszteseteket kell vizsgálni, amelyek lehetőleg a program minden pontját megmozgatják, és ezáltal belátható a helyes műkö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ől a következő fejezetben van részletesebben szó. Így meg tudjuk vizsgálni, hogy adott bemenetre megfelelően reagált-e a programunk. A tesztelést többször végrehajtva ellenőrizhetjü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ő kilépés tesztelése Háztartási Létra 91 2008. május 14.

6.3 Tesztelési terv, tesztelő nyelv definiálása 6 PROTOTÍPUS KONCEPCIÓJA Bogyók termése Mezei bogyó megjelenése a játéktéren Kőbogyó megjelenése a játéktéren Fűrészbogyó megjelenése a játéktéren Mezei bogyó evése Mezei bogyó felvétele Kígyó hosszának növekedése Kőbogyó evése Kőbogyó felvétele, ha a kígyó fejében van kő Kőbogyó felvétele, ha a kígyó fejében nincs kő Kődarab legurulása a kígyóban adott sebességgel Fűrészbogyó evése Fűrészbogyó felvétele Fűrészes tulajdonság beállítása Fűré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ő 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űrészes kígyóval másik kígyó kőnélküli fejébe ütközés páros távolságról Fűrészes kígyóval másik kígyó kőnélküli fejébe ütközés páratlan távolságról Fűrészes kígyóval másik kígyó köves szelvényébe ütközés Fűré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őtti 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őszö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őbogyók vándorlási sebessége A kőbogyó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ő 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ővel az újabban érkezett kő eltűnik. 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őjén elhelyezkedhet. Metódusok Metódus: Célja: Algoritmus: void meetsnake(snakehead otherparty) kígyó értesítése arról, hogy mezei bogyót evett 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ő objektumok absztrakt alaposztálya. Metódusok Metódus: Célja: Algoritmus: bool isghost() annak megállapítása, hogy szellem-e az objektum Mindig false értéket ad vissza. Metódus: Célja: Algoritmus: void meetsnake(snakehead otherparty) belső állapot ill. otherparty állapotának megváltoztatása ütközésre való reakció során Ebben az osztályban nincs megvalósítva (absztrakt metódus). Háztartási Létra 97 2008. május 14.

7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK 7.1.3. GameField Rövid leírás A játékteret reprezentáló objektum, inicializálásakor létrehozza a pályát, fő 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: Célja: Algoritmus: void gameround() a játék egy körének lefuttatása 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ők 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őjé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: Célja: Algoritmus: void meetsnake(snakehead otherparty) kígyó értesítése arról, hogy sövénynek ütközött 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űrészbogyót reprezentál, mely a pálya bármely mezőjén elhelyezkedhet. Metódusok Metódus: Célja: Algoritmus: void meetsnake(snakehead otherparty) kígyó értesítése arról, hogy fűrészbogyót evett 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 Metódus: Célja: Algoritmus: void assigntail(snakesection newtail) farok hozzárendelése egy ütközés után automatikusan létrejött új kígyófejhez Beállítja next értékét newtail paraméter értékére. Metódus: Célja: Algoritmus: void fieldberryinway(fieldberry fieldberry) kígyó hosszának növelése mezei bogyóval találkozás hatására Meghívja önmaga proposeenlargement() metódusát, paraméterként 1-et átadva. Metódus: Célja: Algoritmus: bool getpowerful() kígyó erős voltának meghatározása Visszaadja ispowerful értékét. Metódus: Célja: Algoritmus: void hedgeinway(hedge hedge) kígyó megölése sövénnyel találkozás hatására Meghívja önmaga splitoff() metódusát, paraméterként true értéket átadva. Metódus: Célja: Algoritmus: void rollstones() kövek görgetése a kígyóban 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: Célja: Algoritmus: void sawberryinway(sawberry sawberry) kígyó erőssé tétele fűrészbogyóval találkozás hatására 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: Célja: Algoritmus: void snakeinway(snakehead snake) kígyó megölése kígyóval ütközés hatására Meghívja önmaga splitoff() metódusát, paraméterként true értéket átadva. Metódus: Célja: Algoritmus: void stoneberryinway(stoneberry stomeberry) kőbogyó lenyelése kőbogyóval való találkozás hatására 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őn megjelenhet. Objektum állapotdiagramja Metódusok Metódus: Célja: Algoritmus: void givestone(stoneberry newstone) kőbogyó fogadása az előző szelvényből 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: Célja: Algoritmus: void initattile(tile initpos, int initlen) kígyó inicializálása 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: Célja: Algoritmus: bool isghost() annak megállapítása, hogy szellem-e az objektum 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: Céja: Algoritmus: void meetsnake(snakehead otherparty) egyik vagy másik kígyó megölése ütközés hatására 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ő 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: Célja: Algoritmus: bool passstonedown() annak ellenőrzése, hogy van-e hely kövek mozgatására Amennyiben next értéke NULL, visszaadja, hogy stone változó NULL értékű-e. Ha next értéke nem NULL meghívja next pass- StoneDown() 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ű-e. Háztartási Létra 104 2008. május 14.

7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK Metódus: Célja: Algoritmus: void proposeenlargement(int length) kígyó hosszának növelése 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: Célja: Algoritmus: void pulltotile(tile newpos) szelvény új mezőre rántása 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őrzil, hogy next NULL értékű-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őn, 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ű, 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 7 RÉSZLETES TERVEK Háztartási Létra 107 2008. május 14.

7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK Metódus: Célja: Algoritmus: void splitoff(bool recursive) szelvény adott esetben rekurzív levágása isdead értékét true értékre állítja, majd ellenőrzi 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 RÉSZLETES TERVEK 7.1.8. 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: Célja: Algoritmus: void createsnake(tile where, int initlen, int initdir) kígyófej létrehozása és inicializálása 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: Célja: Algoritmus: bool isalive() annak ellenőrzése, hogy a kígyó életben van-e még 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: Célja: Algoritmus: void steersnake(int angle) kígyó elfordítása megadott szögben és léptetése egy egységgel angle paraméter értékét hozzáadja snakedir változó értékéhez, majd az új értéket paraméterként átadja curheadpos nextin- Dir 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őjén ill. bármely kígyószelvényben elhelyezkedhet. Metódusok Metódus: Célja: Algoritmus: void meetsnake(snakehead otherparty) kígyó értesítése arról, hogy kőbogyót evett 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ője, amely kizárólag Tile szomszédait és a rajta elhelyezkedő Foreground objektumot ismeri. Metódusok Metódus: Célja: Algoritmus: void addforeground(foreground toadd) Foreground osztályból származó objektum felhelyezése ellenőrzés nélkül a mezőre Beállítja FObject értékét a toadd paraméterben kapottra. Háztartási Létra 110 2008. május 14.

7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK Metódus: Célja: Algoritmus: void movesnakehere(snakehead snake) a paraméterként kapott SnakeHead fejű kígyó erre a mezőre léptetése 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. Háztartási Létra 111 2008. május 14.

7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK Metódus: Célja: Algoritmus: void deleteghost() szellem objektumok törlése a mezőről Ha FObject értéke nem NULL, meghívja FObject isghost() metódusát, melynek true értékű visszatérése esetén FObject változóját NULL értékre állítja. Metódus: Célja: Algoritmus: Tile nextindir(int dir) adott irányban lévő szomszéd meghatározása 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: Célja: Algoritmus: void setneighbour(tile otherelement, int dir, bool notify) szomszédossági viszony kölcsönös beállítása 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őrzünk, hogy megvizsgáljuk a jobb alsó mező 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ő pályaelemekre, amelyet a pályaelem tartalmát lekérdezve ellenőrizni 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őn 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ő mezőt adja vissza Tile.moveSnakeHere() nem megfelelően hívja a pulltotile() metódust GameField.gameRound() nem megfelelően játssza le a kört SnakeWrapper.steerSnake() nem megfelelő mezőre 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 RÉSZLETES TERVEK 7.2.2. 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ő 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őre 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ően ellenőrzi 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őbogyót eszik úgy, hogy van a fejében kő Teszt célja: Egy kígyó kőbogyóval való etetésének tesztelése, mégpedig abban az esetben, amikor a fejében kő van, és már nem tud újabbat lenyelni. Megvalósítása: Egy 3 1-es pályára felhelyezünk egy kettő egység hosszú kígyót, ami követ tartalmaz a fejében, valamint egy kőbogyót. Várt eredmény: A kígyó nem veszi fel a kőbogyót, a bogyó megsemmisül, eltűnik 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ő 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őbogyót eszik úgy, hogy nincs a fejében kő Teszt célja: Egy kígyó kőbogyóval való etetésének tesztelése, amikor nincs a fejében kő, tehát szabadon lenyelheti. Megvalósítása: Egy 3 1-es pályára felhelyezünk egy követ nem tartalmazó kettő egység hosszú kígyót, valamint egy kőbogyót. Várt eredmény: A kígyó a kőbogyó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ó fűrészbogyót eszik, majd a fűrésztulajdonság hatása elmúlik Teszt célja: Egy normál kígyó fűrészbogyóval való etetésének, majd utána a fűré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űrészbogyót. Várt eredmény: A kígyó megeszi a fűrészbogyót, fűré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űrésztulajdonsággal SnakeHead.getPowerful() nem megfelelő 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 RÉSZLETES TERVEK 7.2.3. 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ő távolságra úgy, hogy egymás felé haladjanak. Várt eredmény: A később 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ől SnakeHead.snakeInWay() nem (megfelelően) hívja meg a splitoff() metódust SnakeSection.splitOff() nem változtatja a kígyót szellemmé SnakeSection.isGhost() nem megfelelő választ ad SnakeWrapper.isAlive() nem megfelelő 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ő é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ől SnakeHead.snakeInWay() nem (megfelelően) 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ő 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ől SnakeHead.snakeInWay() nem (megfelelően) 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. Fűré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űré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ő távolság legyen és egymás felé haladjanak. Az egyik kígyót felruházzuk fűré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ően 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. Fűré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űré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ő és egymás felé haladjanak. Az egyik kígyót felruházzuk fűré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ően 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. Fűrészes kígyó követ tartalmazó szelvénybe ütközik Teszt célja: Egy fűré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űrésztulajdonsággal ruházzuk fel, és a másik teste felé irányítjuk. Várt eredmény: A fűré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ően 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. Fűré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űré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űrésztulajdonsággal, és a másik teste felé irányítjuk. Várt eredmény: A fűré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 7 RÉSZLETES TERVEK ][ Fej pozicioja: Tiles[2][1] ][ Felepites: [ ] 1. kigyo statusza: Elo ][ Furesztulajdonsag: van ][ Mozgas iranya: 1 ][ Fej pozicioja: Tiles[1][1] ][ Felepites: [ ] 2. 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ő mezőre 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ő legurulása Teszt célja: Egy kő 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ő 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ően 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. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][ ][*] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][*][ ] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [*][ ][ ] 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [*][ ][ ] Háztartási Létra 130 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ő 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őkö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ől bővebben 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 8 PROTOTÍPUS BEADÁSA -rw-r--r-- 1 dnet dnet 118 2008-04-13 23:50 build.bat -rw-r--r-- 1 dnet dnet 63 2008-04-13 23:50 gendoc.bat -rw-r--r-- 1 dnet dnet 34 2008-04-13 23:50 run.bat -rw-r--r-- 1 dnet dnet 167 2008-04-14 22:04 testall.bat -rw-r--r-- 1 dnet 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-- 1 dnet dnet 1615 2008-04-15 23:57 allclasses-frame.html -rw-r--r-- 1 dnet dnet 1375 2008-04-15 23:57 allclasses-noframe.html -rw-r--r-- 1 dnet dnet 9553 2008-04-15 23:57 Compare.html -rw-r--r-- 1 dnet dnet 4551 2008-04-15 23:57 constant-values.html -rw-r--r-- 1 dnet dnet 4438 2008-04-15 23:57 deprecated-list.html -rw-r--r-- 1 dnet dnet 9964 2008-04-15 23:57 Fieldberry.html -rw-r--r-- 1 dnet dnet 9949 2008-04-15 23:57 Foreground.html -rw-r--r-- 1 dnet dnet 21861 2008-04-15 23:57 GameField.html -rw-r--r-- 1 dnet dnet 9886 2008-04-15 23:57 Hedge.html -rw-r--r-- 1 dnet dnet 7623 2008-04-15 23:57 help-doc.html -rw-r--r-- 1 dnet dnet 26601 2008-04-15 23:57 index-all.html -rw-r--r-- 1 dnet dnet 835 2008-04-15 23:57 index.html -rw-r--r-- 1 dnet dnet 5596 2008-04-15 23:57 overview-tree.html -rw-r--r-- 1 dnet dnet 1 2008-04-15 23:57 package-list -rw-r--r-- 1 dnet dnet 730 2008-04-15 23:57 packages.html -rw-r--r-- 1 dnet dnet 15817 2008-04-15 23:57 ProtoHelper.html drwxr-xr-x 2 dnet dnet 4096 2008-04-14 22:37 resources -rw-r--r-- 1 dnet dnet 9940 2008-04-15 23:57 Sawberry.html -rw-r--r-- 1 dnet dnet 27624 2008-04-15 23:57 SnakeHead.html -rw-r--r-- 1 dnet dnet 19408 2008-04-15 23:57 SnakeSection.html -rw-r--r-- 1 dnet dnet 16059 2008-04-15 23:57 SnakeWrapper.html -rw-r--r-- 1 dnet dnet 9959 2008-04-15 23:57 Stoneberry.html -rw-r--r-- 1 dnet dnet 1202 2008-04-15 23:57 stylesheet.css -rw-r--r-- 1 dnet dnet 15766 2008-04-15 23:57 Tile.html Háztartási Létra 136 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ő.java fájlban, valamint a JAR archívum készítéséhez szükséges Manifest fájl. -rw-r--r-- 1 dnet dnet 2012 2008-04-15 17:16 Compare.java -rw-r--r-- 1 dnet dnet 292 2008-04-13 23:10 Fieldberry.java -rw-r--r-- 1 dnet dnet 415 2008-04-13 23:10 Foreground.java -rw-r--r-- 1 dnet dnet 5312 2008-04-14 22:37 GameField.java -rw-r--r-- 1 dnet dnet 278 2008-04-13 23:10 Hedge.java -rw-r--r-- 1 dnet dnet 46 2008-04-13 23:48 manifest.mf -rw-r--r-- 1 dnet dnet 11951 2008-04-14 22:23 ProtoHelper.java -rw-r--r-- 1 dnet dnet 290 2008-04-13 23:10 Sawberry.java -rw-r--r-- 1 dnet dnet 2473 2008-04-14 22:25 SnakeHead.java -rw-r--r-- 1 dnet dnet 4039 2008-04-14 22:37 SnakeSection.java -rw-r--r-- 1 dnet dnet 2524 2008-04-14 22:37 SnakeWrapper.java -rw-r--r-- 1 dnet dnet 289 2008-04-13 23:10 Stoneberry.java -rw-r--r-- 1 dnet 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ő megfelelő utasításokat (.in kiterjesztésű 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-- 1 dnet dnet 39 2008-04-15 13:10 01.in -rw-r--r-- 1 dnet dnet 50 2008-04-15 13:10 01.out -rw-r--r-- 1 dnet dnet 118 2008-04-15 13:10 02.in -rw-r--r-- 1 dnet dnet 106 2008-04-15 13:10 02.out -rw-r--r-- 1 dnet dnet 137 2008-04-15 13:10 03.in -rw-r--r-- 1 dnet dnet 312 2008-04-15 13:10 03.out -rw-r--r-- 1 dnet dnet 149 2008-04-15 13:10 04.in -rw-r--r-- 1 dnet dnet 351 2008-04-15 13:10 04.out -rw-r--r-- 1 dnet dnet 165 2008-04-15 13:10 05.in -rw-r--r-- 1 dnet dnet 347 2008-04-15 13:10 05.out -rw-r--r-- 1 dnet dnet 149 2008-04-15 13:10 06.in -rw-r--r-- 1 dnet dnet 347 2008-04-15 13:10 06.out -rw-r--r-- 1 dnet dnet 153 2008-04-15 13:10 07.in -rw-r--r-- 1 dnet dnet 402 2008-04-15 13:10 07.out -rw-r--r-- 1 dnet dnet 102 2008-04-15 13:10 08.in Háztartási Létra 137 2008. május 14.

8.1 Feltöltött prototípus ismertetése 8 PROTOTÍPUS BEADÁSA -rw-r--r-- 1 dnet dnet 250 2008-04-15 13:10 08.out -rw-r--r-- 1 dnet dnet 102 2008-04-15 13:10 09.in -rw-r--r-- 1 dnet dnet 260 2008-04-15 13:10 09.out -rw-r--r-- 1 dnet dnet 142 2008-04-14 01:45 10.in -rw-r--r-- 1 dnet dnet 377 2008-04-14 19:18 10.out -rw-r--r-- 1 dnet dnet 120 2008-04-14 01:46 11.in -rw-r--r-- 1 dnet dnet 248 2008-04-14 01:46 11.out -rw-r--r-- 1 dnet dnet 120 2008-04-14 01:46 12.in -rw-r--r-- 1 dnet dnet 248 2008-04-14 19:25 12.out -rw-r--r-- 1 dnet dnet 203 2008-04-14 20:05 13.in -rw-r--r-- 1 dnet dnet 377 2008-04-14 20:05 13.out -rw-r--r-- 1 dnet dnet 149 2008-04-14 21:20 14.in -rw-r--r-- 1 dnet dnet 559 2008-04-14 21:25 14.out -rw-r--r-- 1 dnet dnet 143 2008-04-14 20:29 15.in -rw-r--r-- 1 dnet dnet 186 2008-04-14 01:46 15.out -rw-r--r-- 1 dnet dnet 93 2008-04-14 01:46 16.in -rw-r--r-- 1 dnet dnet 124 2008-04-14 19:32 16.out -rw-r--r-- 1 dnet dnet 195 2008-04-14 01:46 17.in -rw-r--r-- 1 dnet dnet 504 2008-04-14 19:29 17.out 8.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ő nevűt. Az egyes osztályokról rövid leírás olvasható a forráskód első 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ő 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ő 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őbbi elemzés céljából. Ekkor az eredményt saját magunk tudjuk ellenőrizni, 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ű 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ő a testall.bat futtatásával is. Ekkor az előző test.bat- ot használjuk fel, csak immár automatizált működéssel. A program a tst könyvtárban lévő összes.in kiterjesztésű 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őkönyvei 8 PROTOTÍPUS BEADÁSA 8.2. Tesztek jegyzőkönyvei Teszteset 1. Pálya felépítése Tesztelő Veres Időpont 2008. 04. 14. 00.50 Eredmény sikertelen Hiba 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ő elemekre történt hivatkozás. Kimenet Exception in thread "main" java.lang.nullpointerexception Javítás Az allocatefield() metódus javításra került. Teszteset 1. Pálya felépítése Tesztelő Veres Időpont 2008. 04. 14. 01.12 Eredmény sikeres Teszteset 2. Statikus objektum felhelyezése Tesztelő Veres Időpont 2008. 04. 14. 01.50 Eredmény sikertelen Hiba A kimenet eltér a várttól (typo). Kimenet Tiles[0][0] mezon jelenleg Fieldberry[0] tartozkodik Javítás Fieldberry átnevezése Fieldberries-re Teszteset 2 Statikus objektum felhelyezése Tesztelő Veres Időpont 2008. 04. 14. 01.57 Eredmény sikeres Háztartási Létra 140 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 3. Kígyó felhelyezése Tesztelő Veres Időpont 2008. 04. 14. 16.49 Eredmény sikertelen Hiba A kígyó egy egységgel kevesebb ideig növekszik. Kimenet Tiles[2][0] mezon jelenleg semmi sem tartozkodik Javítás 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 3. Kígyó felhelyezése Tesztelő Veres Időpont 2008. 04. 14. 17.26 Eredmény sikeres Teszteset 4. Kígyó mezei bogyót eszik Tesztelő Veres Időpont 2008. 04. 14. 17.38 Eredmény sikeres Teszteset 5. Kígyó kőbogyót eszik úgy, hogy van a fejében kő Tesztelő Veres Időpont 2008. 04. 14. 17.53 Eredmény sikertelen Hiba A kígyó a specifikáció módosítás előtti módon nyelte le a köveket. Kimenet 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [*][ ] Javítás Az algoritmus javításra kerül. Háztartási Létra 141 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 5. Kígyó kőbogyót eszik úgy, hogy van a fejében kő Tesztelő Veres Időpont 2008. 04. 14. 18.11 Eredmény sikeres Teszteset 6. Kígyó kőbogyót eszik úgy, hogy nincs a fejében kő Tesztelő Veres Időpont 2008. 04. 14. 18.16 Eredmény sikeres Teszteset 7. Kígyó fűrészbogyót eszik, majd a fűrésztulajdonság hatása elmúlik Tesztelő Veres Időpont 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ő Veres Időpont 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ő Veres Időpont 2008. 04. 14. 18.45 Eredmény sikeres Háztartási Létra 142 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 9. Normál kígyó másik kígyó fejébe ütközik páros távolságról Tesztelő Veres Időpont 2008. 04. 14. 18.51 Eredmény sikertelen Hiba Esemény bekövetkeztekor a résztvevő felek rossz sorrendben íródnak ki. Kimenet Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0] ][ Helyszin: Tiles[1][0] Javítás Kiíró algoritmus átalakítása úgy, hogy az előbb létrejött objektumot írja előre. Teszteset 9. Normál kígyó másik kígyó fejébe ütközik páros távolságról Tesztelő Veres Időpont 2008. 04. 14. 19.01 Eredmény sikeres Teszteset 10. Normál kígyó másik kígyó testébe ütközik Tesztelő Veres Időpont 2008. 04. 14. 19.11 Eredmény sikertelen Hiba Bertók az elvárt kimenetek megírásakor nem vette figyelembe, hogy az ütközéseket a résztvevő szelvények autonóm módon kezelik. Kimenet Esemeny: Kigyok utkozese ][ Resztvevok: MovingObjects[1] es MovingObjects[0].next ][ Helyszin: Tiles[1][0] Javítás Az elvárt kimeneteket átszerkesztettük. Teszteset 10. Normál kígyó másik kígyó testébe ütközik Tesztelő Veres Időpont 2008. 04. 14. 19.18 Eredmény sikeres Háztartási Létra 143 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 11. Fűrészes kígyó másik kígyó követ nem tartalmazó fejébe ütközik páratlan távolságról Tesztelő Bertók Időpont 2008. 04. 14. 19.20 Eredmény sikeres Teszteset 12. Fűrészes kígyó másik kígyó követ nem tartalmazó fejébe ütközik páros távolságról Tesztelő Bertók Időpont 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űrészes kígyó másik kígyó követ nem tartalmazó fejébe ütközik páros távolságról Tesztelő Veres Időpont 2008. 04. 14. 19.25 Eredmény sikeres Teszteset 17. Kígyó hasában kő legurulása Tesztelő Bertók Időpont 2008. 04. 14. 19.28 Eredmény sikertelen Hiba Kimenet el lett gépelve "Felépítés" helyett "Felépítése" szerepel. Kimenet 0. kigyo statusza: Elo ][ Furesztulajdonsag: nincs ][ Mozgas iranya: 0 ][ Fej pozicioja: Tiles[2][0] ][ Felepites: [ ][ ][*] Javítás A várt kimenetet átírtuk. Háztartási Létra 144 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 16. Kígyó sövénnyel ütközik Tesztelő Bertók Időpont 2008. 04. 14. 19.34 Eredmény sikeres Teszteset 17.- Kígyó hasában kő legurulása Tesztelő Veres Időpont 2008. 04. 14. 19.36 Eredmény sikeres Teszteset 13. Fűrészes kígyó követ tartalmazó szelvénybe ütközik Tesztelő Bertók Időpont 2008. 04. 14. 19.39 Eredmény sikertelen Hiba A kígyó lemegy a pályáról. Kimenet Exception in thread "main" java.lang.nullpointerexception Javítás A tesztben szereplő 2 3-as pálya javítása 3 3-asra, ennek megfelelően a bemenet és az elvárt kimenet átírása. Teszteset 13. Fűrészes kígyó követ tartalmazó szelvénybe ütközik Tesztelő Bertók Időpont 2008. 04. 14. 20.04 Eredmény sikeres Háztartási Létra 145 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 15. Kígyó elfordul Tesztelő Veres Időpont 2008. 04. 14. 20.19 Eredmény sikertelen Hiba A kígyó felhelyezése kimaradt a bemenetből. Kimenet Exception in thread "main" java.lang.indexoutofboundsexception: Index: 0, Size: 0 Javítás A bemeneti fájl kiegészítése a kígyót felhelyező utasítással. Teszteset 15. Kígyó elfordul Tesztelő Bertók Időpont 2008. 04. 14. 20.28 Eredmény sikeres Teszteset 14. Fűrészes kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében Tesztelő Veres Időpont 2008. 04. 14. 21.02 Eredmény sikertelen Hiba Az újonnan létrejött kígyó az elvárt kimenettől eltérően 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ően. Háztartási Létra 146 2008. május 14.

8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 14. Fűrészes kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében Tesztelő Bertók Időpont 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őrzé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űrészes kígyó követ nem tartalmazó szelvénybe ütközik egy másik kígyó testében Tesztelő Veres Időpont 2008. 04. 14. 20.25 Eredmény sikeres 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ű 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ű feladatot készít el szívesebben, milyen feladat megy neki jobban. Az időkö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őszö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ői felület grafikus képe A szoftver indítása után a felhasználók számára megjelenik a főmenü, 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ű, 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űzet 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őség közül választhatunk, akkor pedig a billentyűzet bal-jobb gombjai segítségével tudunk közöttük váltani. A választási lehetősé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ői 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őképpen néz ki: Az ablak közepén elhelyezkedő 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ői 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űvel tudja navigálni. A kijelölt billentyűcsoportok: 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ő idő látszik, mégpedig perc:másodperc formátumban. A játék menet közben megállítható az Escape billentyű segítségével, melynek lenyomása után megjelenik egy menü. A menüben választhatnak a felhasználók a főmenünél specifikált módon, hogy folytatják-e a játékot, vagy kilépnek belőle. A játék végén természetesen megjelenik a végeredmény. Ha egyértelműen eldönthető, hogy ki volt a győztes, akkor a képernyőre kerül, hogy melyik játékos nyerte a játékot, ha pedig ez nem tehető meg, akkor döntetlen jelenik meg. A képernyőn ekkor látható egyetlen menüpont segítségével vissza tudunk térni a már megszokott módon a főmenü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ői felület grafikus képe 9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA Háztartási Létra 152 2008. május 14.