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

Méret: px
Mutatás kezdődik a ... oldaltól:

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

Átírás

1 Kígyófarm játék 16 Háztartási Létra Konzulens: Bóka Gábor Csapattagok Bertók Zsófia A6MHQV Tönköl Viktor VU6IT6 Veres-Szentkirályi András YZIOAW május 14.

2 TARTALOMJEGYZÉK TARTALOMJEGYZÉK Tartalomjegyzék 1. Feladat leírása A feladat leírása Szótár Követelmény, projekt, funkcionalitás Követelmény definíció A program célja, alapvető feladata A fejlesztőkörnyezet A futtatáshoz szükséges környezet A felhasználói felület Minőségi tényezők A szoftver minősítése A kibocsátás Projekt terv A fejlesztői csapat Életciklus modell Szervezési struktúra Fejlesztési ütemterv Határidők Szükséges dokumentációk Essential Use Case-ek Diagramok Use Case leírások Analízis modell kidolgozása Objektum katalógus Fieldberry Foreground Game GameField Hedge Sawberry SnakeHead Háztartási Létra május 14.

3 TARTALOMJEGYZÉK TARTALOMJEGYZÉK SnakeSection SnakeWrapper Stoneberry Tile Osztályok leírása Fieldberry Foreground Game GameField Hedge Sawberry SnakeHead SnakeSection SnakeWrapper Stoneberry Tile Statikus struktúra diagramok Use case-ek és szekvencia diagramok Use case-ek Szekvencia diagramok State-chartok A SnakeSection objektum state-chartja A SnakeHead objektum state-chartja Szkeleton tervezése A szkeleton modell valóságos use case-ei Architektúra Tesztpálya Tesztesetek konkrét pályái Ütemezés A szkeleton kezelői felületének terve, dialógusok Szekvencia diagramok a belső működésre Szekvencia diagram a 0. Initialize the gamefield use case-hez Háztartási Létra május 14.

4 TARTALOMJEGYZÉK TARTALOMJEGYZÉK Szekvencia diagram az 1. Feed a snake with fieldberry use case-hez Szekvencia diagram a 2. Feed a snake with sawberry use case-hez Szekvencia diagram a 3. Feed a snake with stoneberry use case-hez Szekvencia diagram a 4. Crash a snake into a hedge use case-hez Szekvencia diagram az 5. Crash a snake into a snake s body use case-hez Szekvencia diagram a 6. Crash a snake into a normal snakehead (odd distance) use case-hez Szekvencia diagram a 7. Crash a snake into a normal snakehead (even distance) use case-hez Szekvencia diagram a 8. Crash a powerful snake into a snakesection with stone use case-hez Szekvencia diagram a 9. Put a berry or a hedge to the gamefield use case-hez Szekvencia diagram a 10. Put a snake to the gamefield use case-hez Szekvencia diagram a 11. Grow a snake and the snake digests stoneberry use case-hez Szekvencia diagram a 12. Delete ghosts use case-hez Segédszekvenciák Szkeleton beadása Feltöltött szkeleton ismertetése Telepítés Fordítás Futtatás Javadoc dokumentáció generálása A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk A java forráskód fájlok ismertetése Szkeleton használata Háztartási Létra május 14.

5 TARTALOMJEGYZÉK TARTALOMJEGYZÉK 5.2. Értékelés Prototípus koncepciója Prototípus interface definíciója Pályakészítő utasítások Prototípusvezérlő utasítások Prototípus kimeneti üzeneteinek formátuma Összes részletes use case Tesztelési terv, tesztelő nyelv definiálása Prototípus használata a tesztelésre Tesztforgatókönyvek Tesztelést támogató segéd- és fordító programok specifikálása Modell illesztése a megváltozott specifikációhoz Leharapott kígyófarok további élete Kőbogyók vándorlási sebessége Részletes tervek Objektumok és metódusok tervei Fieldberry Foreground GameField Hedge Sawberry SnakeHead SnakeSection SnakeWrapper Stoneberry Tile A tesztek részletes tervei, leírásuk a teszt nyelvén Inicializálás Kígyó bogyót eszik Kígyók összeütköznek Egyéb tesztesetek A tesztelést támogató programok tervei testall.bat Háztartási Létra május 14.

6 TARTALOMJEGYZÉK TARTALOMJEGYZÉK test.bat Compare.java Prototípus beadása Feltöltött prototípus ismertetése Telepítés Fordítás Futtatás Javadoc dokumentáció generálása A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk A java forráskód fájlok ismertetése Prototípus használata Tesztek jegyzőkönyvei Értékelés Grafikus felület specifikációja A kezelői felület grafikus képe A grafikus rendszer architektúrája SnakeExplorer TileDrawer GlyphCache GameScreen StaticScreen MenuScreen és gyermekei: MainMenuScreen, InGame- MenuScreen Struktúra diagram A grafikus objektumok felsorolása SnakeExplorer TileDrawer GlyphCache GameScreen StaticScreen MenuScreen MainMenuScreen Háztartási Létra május 14.

7 TARTALOMJEGYZÉK TARTALOMJEGYZÉK InGameMenuScreen Szekvencia diagramok Grafikus változat beadása Feltöltött grafikus változat ismertetése Telepítés Fordítás Futtatás Javadoc dokumentáció generálása A feltöltött tömörített fájl könyvtárainak leírása és tartalmuk A java forráskód fájlok ismertetése Grafikus változat használata Értékelés Összefoglalás Projekt összegzés Napló 175 Háztartási Létra május 14.

8 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 május 14.

9 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 május 14.

10 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 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 május 14.

11 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 május 14.

12 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 május 14.

13 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 május 14.

14 2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS 2. Követelmény, projekt, funkcionalitás 2.1. Követelmény definíció 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 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) verzióját használjuk. A modellezés és tervezés a nyílt forrású, platformfüggetlen BOUML 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 programmal szerkesztjük össze, majd végül pdftexk cal DVI fájllá alakítjuk, melyből a dvipdfm c programmal nyomtatható PDF állományt tudunk előállítani. Háztartási Létra május 14.

15 2.1 Követelmény definíció 2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS A futtatáshoz szükséges környezet Sun Java Runtime Environment (továbbiakban JRE) 1.4.2, illetve az a számítógép, mely ezt futtatni képes. (A Sun ajánlásai PC-re: Pentium 166 MHz vagy gyorsabb processzor és 32 MB memória.) A játék használatához grafikus képernyő é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.) 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ó 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 május 14.

16 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 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 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 Projekt terv 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 május 14.

17 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 É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 május 14.

18 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ó 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 május 14.

19 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 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 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 május 14.

20 2.2 Projekt terv 2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS Szükséges dokumentációk A projekt folyamán a megbízó által megadott formában elkészülő 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 május 14.

21 2.3 Essential Use Case-ek 2 KÖVETELMÉNY, PROJEKT, FUNKCIONALITÁS 2.3. Essential Use Case-ek Diagramok 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 május 14.

22 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 3. Analízis modell kidolgozása 3.1. Objektum katalógus 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 május 14.

23 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 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 május 14.

24 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 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 május 14.

25 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA GameField Leírás A játékteret reprezentáló objektum, inicializálásakor létrehozza a pályát, fő 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 május 14.

26 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 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 május 14.

27 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 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 május 14.

28 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA Felelősségei Kígyó értesítése az ütközésről 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 május 14.

29 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 SnakeSection Leírás A kígyó egy szelvénye. Alaposztály Foreground Példányok száma N Háztartási Létra május 14.

30 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 május 14.

31 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 május 14.

32 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 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 május 14.

33 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 május 14.

34 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA Felelősségei Egy kígyó térbeli mozgásának kezelése 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 május 14.

35 3.1 Objektum katalógus 3 ANALÍZIS MODELL KIDOLGOZÁSA 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 május 14.

36 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 Osztályok leírása 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 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 május 14.

37 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 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 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 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 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 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 május 14.

38 3.2 Osztályok leírása 3 ANALÍZIS MODELL KIDOLGOZÁSA SnakeSection A kígyó egy szelvénye, akár másik kígyó, akár saját fejével ütközik, a feladat leírásában megadottaknak megfelelő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 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 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 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 május 14.

39 3.3 Statikus struktúra diagramok 3 ANALÍZIS MODELL KIDOLGOZÁSA 3.3. Statikus struktúra diagramok Háztartási Létra május 14.

40 3.4 Use case-ek és szekvencia diagramok 3 ANALÍZIS MODELL KIDOLGOZÁSA 3.4. Use case-ek és szekvencia diagramok Use case-ek Háztartási Létra május 14.

41 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 május 14.

42 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 május 14.

43 3.4 Use case-ek és szekvencia diagramok 3 ANALÍZIS MODELL KIDOLGOZÁSA Szekvencia diagramok Init A Game objektum start() függvényével indítható a játék, ami létrehozza a játékmező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 május 14.

44 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 május 14.

45 3.4 Use case-ek és szekvencia diagramok 3 ANALÍZIS MODELL KIDOLGOZÁSA Round Háztartási Létra május 14.

46 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 május 14.

47 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 május 14.

48 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 május 14.

49 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 május 14.

50 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 május 14.

51 3.5 State-chartok 3 ANALÍZIS MODELL KIDOLGOZÁSA 3.5. State-chartok 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 május 14.

52 3.5 State-chartok 3 ANALÍZIS MODELL KIDOLGOZÁSA A SnakeHead objektum state-chartja A SnakeHead objektum a SnakeSection leszármazottja, így az összes SnakeSection-ben létező á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 május 14.

53 4 SZKELETON TERVEZÉSE 4. Szkeleton tervezése 4.1. A szkeleton modell valóságos use case-ei Háztartási Létra május 14.

54 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 május 14.

55 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 május 14.

56 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 május 14.

57 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 május 14.

58 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 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 május 14.

59 4.2 Architektúra 4 SZKELETON TERVEZÉSE 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 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 május 14.

60 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ő Ü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 május 14.

61 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 május 14.

62 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE 4.4. Szekvencia diagramok a belső működésre 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 május 14.

63 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram az 1. Feed a snake with fieldberry use case-hez Egy kígyófej elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez fel lehet használni. Háztartási Létra május 14.

64 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram a 2. Feed a snake with sawberry use case-hez Egy bogyó vagy sövény elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez fel lehet használni. Háztartási Létra május 14.

65 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram a 3. Feed a snake with stoneberry use case-hez Háztartási Létra május 14.

66 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram a 4. Crash a snake into a hedge use case-hez 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 május 14.

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

68 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram a 6. Crash a snake into a normal snakehead (odd distance) use case-hez Egy olyan ütközést ábrázoló szekvencia, amikor két kígyó fejjel egymásnak ütközik páratlan távolságról (követ nem tartalmaznak a fejükben). Ekkor a kígyó fű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 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 május 14.

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

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

71 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram a 8. Crash a powerful snake into a snakesection with stone use case-hez Háztartási Létra május 14.

72 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Szekvencia diagram a 9. Put a berry or a hedge to the gamefield use case-hez Egy bogyó vagy sövény elhelyezésének általános szekvenciája, amelyet a komplexebb tesztesetekhez fel lehet használni 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 május 14.

73 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE 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 május 14.

74 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE 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 május 14.

75 4.4 Szekvencia diagramok a belső működésre 4 SZKELETON TERVEZÉSE Segédszekvenciák Pull To Tile 1 szekvencia diagram Egy egy hosszú kígyó lépését jeleníti meg, amely nem növekszik. Ha ilyen hajtódik végre valamelyik tesztesetben, akkor lehet felhasználni. Háztartási Létra május 14.

76 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 május 14.

77 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 május 14.

78 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 május 14.

79 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 május 14.

80 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 május 14.

81 5 SZKELETON BEADÁSA 5. Szkeleton beadása 5.1. Feltöltött szkeleton ismertetése 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 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 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 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 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ó 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 :06 build.bat -rw-r--r-- 1 dnet dnet :09 gendoc.bat -rw-r--r-- 1 dnet dnet :05 run.bat Háztartási Létra május 14.

82 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 :54 allclasses-frame.html -rw-r--r-- 1 dnet dnet :54 allclasses-noframe.html -rw-r--r-- 1 dnet dnet :54 constant-values.html -rw-r--r-- 1 dnet dnet :54 deprecated-list.html -rw-r--r-- 1 dnet dnet :54 Fieldberry.html -rw-r--r-- 1 dnet dnet :54 Foreground.html -rw-r--r-- 1 dnet dnet :54 GameField.html -rw-r--r-- 1 dnet dnet :54 Hedge.html -rw-r--r-- 1 dnet dnet :54 help-doc.html -rw-r--r-- 1 dnet dnet :54 index-all.html -rw-r--r-- 1 dnet dnet :54 index.html -rw-r--r-- 1 dnet dnet :54 overview-tree.html -rw-r--r-- 1 dnet dnet :54 package-list -rw-r--r-- 1 dnet dnet :54 packages.html drwxr-xr-x 2 dnet dnet :00 resources -rw-r--r-- 1 dnet dnet :54 Sawberry.html -rw-r--r-- 1 dnet dnet :54 SkeletonHelper.html -rw-r--r-- 1 dnet dnet :54 SnakeHead.html -rw-r--r-- 1 dnet dnet :54 SnakeSection.html -rw-r--r-- 1 dnet dnet :54 SnakeWrapper.html -rw-r--r-- 1 dnet dnet :54 Stoneberry.html -rw-r--r-- 1 dnet dnet :54 stylesheet.css -rw-r--r-- 1 dnet dnet :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 :26 Fieldberry.java -rw-r--r-- 1 dnet dnet :26 Foreground.java -rw-r--r-- 1 dnet dnet :24 GameField.java -rw-r--r-- 1 dnet dnet :08 Hedge.java Háztartási Létra május 14.

83 5.1 Feltöltött szkeleton ismertetése 5 SZKELETON BEADÁSA -rw-r--r-- 1 dnet dnet :55 manifest.mf -rw-r--r-- 1 dnet dnet :08 Sawberry.java -rw-r--r-- 1 dnet dnet :42 SkeletonHelper.java -rw-r--r-- 1 dnet dnet :07 SnakeHead.java -rw-r--r-- 1 dnet dnet :05 SnakeSection.java -rw-r--r-- 1 dnet dnet :01 SnakeWrapper.java -rw-r--r-- 1 dnet dnet :08 Stoneberry.java -rw-r--r-- 1 dnet dnet :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 :39 0.txt -rw-r--r-- 1 dnet dnet :52 10.txt -rw-r--r-- 1 dnet dnet :52 11.txt -rw-r--r-- 1 dnet dnet :53 12.txt -rw-r--r-- 1 dnet dnet :29 1.txt -rw-r--r-- 1 dnet dnet :40 2.txt -rw-r--r-- 1 dnet dnet :40 3.txt -rw-r--r-- 1 dnet dnet :42 4.txt -rw-r--r-- 1 dnet dnet :45 5-normal.txt -rw-r--r-- 1 dnet dnet :46 5-powerful.txt -rw-r--r-- 1 dnet dnet :48 6-normal.txt -rw-r--r-- 1 dnet dnet :49 6-powerful.txt -rw-r--r-- 1 dnet dnet :50 7-normal.txt -rw-r--r-- 1 dnet dnet :51 7-powerful.txt -rw-r--r-- 1 dnet dnet :51 8.txt -rw-r--r-- 1 dnet dnet :51 9.txt 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 május 14.

84 5.2 Értékelés 5 SZKELETON BEADÁSA Szkeleton használata A szkeleton futása során a kiválasztott teszteseteken végighalad és amennyiben döntésre van szüksége, megkérdezi a felhasználót. Ilyenkor a tesztelő 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 É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 május 14.

85 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 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 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 május 14.

86 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 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 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 május 14.

87 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 május 14.

88 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 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 május 14.

89 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 május 14.

90 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 május 14.

91 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 Tesztelési terv, tesztelő nyelv definiálása 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 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 május 14.

92 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 május 14.

93 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 május 14.

94 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 május 14.

95 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 május 14.

96 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 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 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 május 14.

97 7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK 7. Részletes tervek 7.1. Objektumok és metódusok tervei 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 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 május 14.

98 7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK GameField Rövid leírás A játékteret reprezentáló objektum, inicializálásakor létrehozza a pályát, fő 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 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 május 14.

99 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 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 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 május 14.

100 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 május 14.

101 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 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 május 14.

102 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 május 14.

103 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 május 14.

104 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 május 14.

105 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 május 14.

106 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 május 14.

107 7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK Háztartási Létra május 14.

108 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 május 14.

109 7.1 Objektumok és metódusok tervei 7 RÉSZLETES TERVEK SnakeWrapper Rövid leírás SnakeHead burkolója, mely a térben tájékozódást kezeli. Objektum állapotdiagramja Metódusok Metódus: 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 május 14.

110 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 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 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 május 14.

111 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 május 14.

112 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 május 14.

113 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 május 14.

114 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 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 május 14.

115 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 május 14.

116 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 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 május 14.

117 7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén 7 RÉSZLETES TERVEK Kígyó bogyót eszik 4. Kígyó mezei bogyót eszik Teszt célja: Egy kígyó mezei bogyóval való etetésének és az utána bekövetkező 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 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 május 14.

118 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 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 május 14.

119 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 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 május 14.

120 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 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 május 14.

121 7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén 7 RÉSZLETES TERVEK Kígyók összeütköznek 8. Normál kígyó másik kígyó fejébe ütközik páratlan távolságról Teszt célja: Két normál kígyó páratlan távolságról való ütközésének tesztelése. Megvalósítása: Egy 3 1-es pályára felhelyezünk két egy egység hosszú kígyót egy mező 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 putsnake gameround getsnakestatus 0 getsnakestatus 1 Háztartási Létra május 14.

122 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 putsnake 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 május 14.

123 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 putsnake 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 május 14.

124 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 putsnake 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 május 14.

125 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 putsnake 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 május 14.

126 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 putsnake 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 május 14.

127 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 putsnake 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 május 14.

128 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: [ ] 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 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 május 14.

129 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 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 május 14.

130 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 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 május 14.

131 7.3 A tesztelést támogató programok tervei 7 RÉSZLETES TERVEK 7.3. A tesztelést támogató programok tervei 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\% 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 május 14.

132 7.3 A tesztelést támogató programok tervei 7 RÉSZLETES TERVEK :error echo.adj meg egy tesztesetet 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 május 14.

133 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 május 14.

134 7.3 A tesztelést támogató programok tervei 7 RÉSZLETES TERVEK } } catch (IOException e) { } } } //printdiff } //Compare Háztartási Létra május 14.

135 8 PROTOTÍPUS BEADÁSA 8. Prototípus beadása 8.1. Feltöltött prototípus ismertetése 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 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 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 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 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ó 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 május 14.

136 8.1 Feltöltött prototípus ismertetése 8 PROTOTÍPUS BEADÁSA -rw-r--r-- 1 dnet dnet :50 build.bat -rw-r--r-- 1 dnet dnet :50 gendoc.bat -rw-r--r-- 1 dnet dnet :50 run.bat -rw-r--r-- 1 dnet dnet :04 testall.bat -rw-r--r-- 1 dnet dnet :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 :57 allclasses-frame.html -rw-r--r-- 1 dnet dnet :57 allclasses-noframe.html -rw-r--r-- 1 dnet dnet :57 Compare.html -rw-r--r-- 1 dnet dnet :57 constant-values.html -rw-r--r-- 1 dnet dnet :57 deprecated-list.html -rw-r--r-- 1 dnet dnet :57 Fieldberry.html -rw-r--r-- 1 dnet dnet :57 Foreground.html -rw-r--r-- 1 dnet dnet :57 GameField.html -rw-r--r-- 1 dnet dnet :57 Hedge.html -rw-r--r-- 1 dnet dnet :57 help-doc.html -rw-r--r-- 1 dnet dnet :57 index-all.html -rw-r--r-- 1 dnet dnet :57 index.html -rw-r--r-- 1 dnet dnet :57 overview-tree.html -rw-r--r-- 1 dnet dnet :57 package-list -rw-r--r-- 1 dnet dnet :57 packages.html -rw-r--r-- 1 dnet dnet :57 ProtoHelper.html drwxr-xr-x 2 dnet dnet :37 resources -rw-r--r-- 1 dnet dnet :57 Sawberry.html -rw-r--r-- 1 dnet dnet :57 SnakeHead.html -rw-r--r-- 1 dnet dnet :57 SnakeSection.html -rw-r--r-- 1 dnet dnet :57 SnakeWrapper.html -rw-r--r-- 1 dnet dnet :57 Stoneberry.html -rw-r--r-- 1 dnet dnet :57 stylesheet.css -rw-r--r-- 1 dnet dnet :57 Tile.html Háztartási Létra május 14.

137 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 :16 Compare.java -rw-r--r-- 1 dnet dnet :10 Fieldberry.java -rw-r--r-- 1 dnet dnet :10 Foreground.java -rw-r--r-- 1 dnet dnet :37 GameField.java -rw-r--r-- 1 dnet dnet :10 Hedge.java -rw-r--r-- 1 dnet dnet :48 manifest.mf -rw-r--r-- 1 dnet dnet :23 ProtoHelper.java -rw-r--r-- 1 dnet dnet :10 Sawberry.java -rw-r--r-- 1 dnet dnet :25 SnakeHead.java -rw-r--r-- 1 dnet dnet :37 SnakeSection.java -rw-r--r-- 1 dnet dnet :37 SnakeWrapper.java -rw-r--r-- 1 dnet dnet :10 Stoneberry.java -rw-r--r-- 1 dnet dnet :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 :10 01.in -rw-r--r-- 1 dnet dnet :10 01.out -rw-r--r-- 1 dnet dnet :10 02.in -rw-r--r-- 1 dnet dnet :10 02.out -rw-r--r-- 1 dnet dnet :10 03.in -rw-r--r-- 1 dnet dnet :10 03.out -rw-r--r-- 1 dnet dnet :10 04.in -rw-r--r-- 1 dnet dnet :10 04.out -rw-r--r-- 1 dnet dnet :10 05.in -rw-r--r-- 1 dnet dnet :10 05.out -rw-r--r-- 1 dnet dnet :10 06.in -rw-r--r-- 1 dnet dnet :10 06.out -rw-r--r-- 1 dnet dnet :10 07.in -rw-r--r-- 1 dnet dnet :10 07.out -rw-r--r-- 1 dnet dnet :10 08.in Háztartási Létra május 14.

138 8.1 Feltöltött prototípus ismertetése 8 PROTOTÍPUS BEADÁSA -rw-r--r-- 1 dnet dnet :10 08.out -rw-r--r-- 1 dnet dnet :10 09.in -rw-r--r-- 1 dnet dnet :10 09.out -rw-r--r-- 1 dnet dnet :45 10.in -rw-r--r-- 1 dnet dnet :18 10.out -rw-r--r-- 1 dnet dnet :46 11.in -rw-r--r-- 1 dnet dnet :46 11.out -rw-r--r-- 1 dnet dnet :46 12.in -rw-r--r-- 1 dnet dnet :25 12.out -rw-r--r-- 1 dnet dnet :05 13.in -rw-r--r-- 1 dnet dnet :05 13.out -rw-r--r-- 1 dnet dnet :20 14.in -rw-r--r-- 1 dnet dnet :25 14.out -rw-r--r-- 1 dnet dnet :29 15.in -rw-r--r-- 1 dnet dnet :46 15.out -rw-r--r-- 1 dnet dnet :46 16.in -rw-r--r-- 1 dnet dnet :32 16.out -rw-r--r-- 1 dnet dnet :46 17.in -rw-r--r-- 1 dnet dnet :29 17.out A java forráskód fájlok ismertetése A java forráskód fájlok mindegyike egy-egy osztály tartalmaz, a fájlnévvel megegyező 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 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 május 14.

139 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 május 14.

140 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 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 Eredmény sikeres Teszteset 2. Statikus objektum felhelyezése Tesztelő Veres Időpont 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 Eredmény sikeres Háztartási Létra május 14.

141 8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 3. Kígyó felhelyezése Tesztelő Veres Időpont 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 Eredmény sikeres Teszteset 4. Kígyó mezei bogyót eszik Tesztelő Veres Időpont Eredmény sikeres Teszteset 5. Kígyó kőbogyót eszik úgy, hogy van a fejében kő Tesztelő Veres Időpont 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 május 14.

142 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 Eredmény sikeres Teszteset 6. Kígyó kőbogyót eszik úgy, hogy nincs a fejében kő Tesztelő Veres Időpont 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 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 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 Eredmény sikeres Háztartási Létra május 14.

143 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 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 Eredmény sikeres Teszteset 10. Normál kígyó másik kígyó testébe ütközik Tesztelő Veres Időpont 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 Eredmény sikeres Háztartási Létra május 14.

144 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 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 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 Eredmény sikeres Teszteset 17. Kígyó hasában kő legurulása Tesztelő Bertók Időpont 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 május 14.

145 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 Eredmény sikeres Teszteset 17.- Kígyó hasában kő legurulása Tesztelő Veres Időpont Eredmény sikeres Teszteset 13. Fűrészes kígyó követ tartalmazó szelvénybe ütközik Tesztelő Bertók Időpont 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 Eredmény sikeres Háztartási Létra május 14.

146 8.2 Tesztek jegyzőkönyvei 8 PROTOTÍPUS BEADÁSA Teszteset 15. Kígyó elfordul Tesztelő Veres Időpont 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 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 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 május 14.

147 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 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 Eredmény sikeres Háztartási Létra május 14.

148 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 május 14.

149 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 május 14.

150 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 május 14.

151 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 május 14.

152 9.1 A kezelői felület grafikus képe 9 GRAFIKUS FELÜLET SPECIFIKÁCIÓJA Háztartási Létra május 14.

A követelmények leírása

A követelmények leírása A követelmények leírása Júz Kéz az indián kincskereső barlangokban gyémántra vadászik. Ehhez korlátozott mennyiségű robbanószer és élet áll rendelkezésére. A játékos feladata az indián irányítása, és a

Részletesebben

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

Követelmény, projekt, funkcionalitás 41 CSK 1 Követelmény, projekt, funkcionalitás 41 CSK 1 konzulens Eredics Péter csapattagok Olasz Ákos G34NIY olaszakos@gmail.com Panyiczky Péter Zoltán T533FJ panyika@gmail.com Lágler Krisztián FYMGQ8 lagler.krisztian@gmail.com

Részletesebben

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

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 nem más, mint egy ügyességi játék, ahol a feladat a pályán lévı gyémántok megszerzése.

Részletesebben

Space Invaders Dokumenta cio

Space Invaders Dokumenta cio Space Invaders Dokumenta cio 0. Tartalomjegyzék 0. Tartalomjegyzék... 1 1. Követelmény feltárás... 2 1.1. Célkitűzés, projektindító dokumentum... 2 1.2. Szakterületi tartalomjegyzék... 2 1.3. Használatieset-modell,

Részletesebben

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

Szkeleton beadása. 100 Generalis faliora. Csapattagok: Konzulens: Szabó András. 2005. március 29. Szkeleton beadása 100 Generalis faliora Konzulens: Szabó András Csapattagok: Kenéz Tamás TLSXNP arachnus@tvn.hu Kiss Gergely KNJU43 6er6e1y@gmail.com Papp Gergely L584UF pg554@hszk.bme.hu Rostás Gábor

Részletesebben

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

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet    Copyright 2008 Johanyák Zsolt Csaba Ugráló gomb Készítsünk egy egyszerű játékprogramot, ami egy mozgó nyomógombot tartalmaz. A nyomógomb beállított ideig marad egy helyben, majd az ablakon számára elhatárolt terület (panel) egy véletlenszerűen

Részletesebben

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

KINDERGARTEN. 46 InFoka. Dady Róbert. Csapattagok: Konzulens: KINDERGARTEN 46 InFoka Konzulens: Dady Róbert Csapattagok: Bors Alpár Szabolcs Z0AVHU alpijoe@sch.bme.hu Szegedi Tamás AASWGX szedzsi@sch.bme.hu Tóth Tamás EWYXK4 tommey@freemail.hu 2006. május 15. 2006.

Részletesebben

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

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E Követelmény A beadandó dokumentációját a Keszthelyi Zsolt honlapján található pdf alapján kell elkészíteni http://people.inf.elte.hu/keszthelyi/alkalmazasok_fejlesztese

Részletesebben

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

Név: Neptun kód: Pontszám: Név: Neptun kód: Pontszám: 1. Melyek a szoftver minőségi mutatói? Fejlesztési idő, architektúra, programozási paradigma. Fejlesztőcsapat összetétele, projekt mérföldkövek, fejlesztési modell. Karbantarthatóság,

Részletesebben

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

A dokumentáció felépítése A dokumentáció felépítése Készítette: Keszthelyi Zsolt, 2010. szeptember A szoftver dokumentációját az itt megadott szakaszok szerint kell elkészíteni. A szoftvert az Egységesített Eljárás (Unified Process)

Részletesebben

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

Kincskereső játék. 78 TeraCorp DT. Bíró Barna. Konzulens: Kincskereső játék 78 TeraCorp DT Konzulens: Bíró Barna Csapattagok: Schmidt Antonio IW3JDL santoni87@hotmail.com Tahi Bálint X0818E tahi.balint@hotmail.com Zsoldos Tamás EBNZZS thomastheronin@msn.com 1.

Részletesebben

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

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1 OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Különféle élőlények egy túlélési versenyen vesznek részt. A lények egy pályán haladnak végig, ahol váltakozó terep viszonyok vannak.

Részletesebben

ELTE, Informatikai Kar december 12.

ELTE, Informatikai Kar december 12. 1. Mi az objektum? Egy olyan változó, vagy konstans, amely a program tetszőleges pontján felhasználható. Egy olyan típus, amelyet a programozó valósít meg korábbi objektumokra alapozva. Egy olyan változó,

Részletesebben

Java I. A Java programozási nyelv

Java I. A Java programozási nyelv Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem

Részletesebben

Hardver és szoftver követelmények

Hardver és szoftver követelmények Java-s Nyomtatványkitöltő Program Súgó Telepítési útmutató Hardver és szoftver követelmények A java-s nyomtatványkitöltő program az alábbi hardverigényt támasztja a számítógéppel szemben: 400 MHz órajelű

Részletesebben

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

ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES Számítógép = Univerzális gép! Csupán egy gép a sok közül, amelyik pontosan azt csinálja, amit mondunk neki. Hardver A számítógép

Részletesebben

A telepítési útmutató tartalma

A telepítési útmutató tartalma 1 A telepítési útmutató tartalma 3 Kompatibilitás és rendszerkövetelmények A telepítési folyamat röviden 4 A telepítés indítása 5 Adatbáziskezelő beállítása / telepítése 8 Telepítési módozatok 11 Az ENSO

Részletesebben

Szoftver újrafelhasználás

Szoftver újrafelhasználás Szoftver újrafelhasználás Szoftver újrafelhasználás Szoftver fejlesztésekor korábbi fejlesztésekkor létrehozott kód felhasználása architektúra felhasználása tudás felhasználása Nem azonos a portolással

Részletesebben

Iman 3.0 szoftverdokumentáció

Iman 3.0 szoftverdokumentáció Melléklet: Az iman3 program előzetes leírása. Iman 3.0 szoftverdokumentáció Tartalomjegyzék 1. Az Iman rendszer...2 1.1. Modulok...2 1.2. Modulok részletes leírása...2 1.2.1. Iman.exe...2 1.2.2. Interpreter.dll...3

Részletesebben

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

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,

Részletesebben

Object Orgy PROJEKTTERV 1 (9) Adattípusok menedzselése Palatinus Endre 2010-09-27 1.0

Object Orgy PROJEKTTERV 1 (9) Adattípusok menedzselése Palatinus Endre 2010-09-27 1.0 Object Orgy PROJEKTTERV 1 (9) Projektterv 1 Összefoglaló 2 Verziók Ez az projekt projektterve, ahol kitérünk a megrendelt szoftver elvárt szolgáltatásaira, és a tárgy keretein belül a projekt során felhasználandó

Részletesebben

01. gyakorlat - Projektalapítás

01. gyakorlat - Projektalapítás 2 Követelmények 01. gyakorlat - Projektalapítás Szoftvertechnológia gyakorlat OE-NIK A félév során egy nagyobb szoftverrendszer prototípusának elkészítése lesz a feladat Fejlesztési módszertan: RUP CASE-eszköz:

Részletesebben

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

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás Objektum orientáltság alapjai Objektum: A való világ egy elemének ábrázolása, amely minden esetben rendelkezik: Állapottal,Viselkedéssel,Identitással

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

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 Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1 Készítette: Gipsz Jakab Neptun-azonosító: ABC123 E-mail: gipszjakab@seholse.hu Kurzuskód: IT-13AAT1EG Gyakorlatvezető

Részletesebben

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 Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1 Készítette: Gipsz Jakab Neptun-azonosító: ABC123 E-mail: gipszjakab@seholse.hu Kurzuskód: IT-13AAT1EG 1 A fenti

Részletesebben

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

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

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22 Unit Teszt Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Unit Teszt 2013 1 / 22 Tartalomjegyzék 1 Bevezetés 2 Unit Teszt 3 Példa Tóth Zsolt (Miskolci Egyetem) Unit Teszt 2013 2 / 22 Szoftvertesztelés

Részletesebben

Modell alapú tesztelés mobil környezetben

Modell alapú tesztelés mobil környezetben Modell alapú tesztelés mobil környezetben Micskei Zoltán Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék A terület behatárolása Testing is an activity performed

Részletesebben

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

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1 Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1 Készítette: Gipsz Jakab Neptun-azonosító: A1B2C3 E-mail: gipszjakab@vilaghalo.hu Kurzuskód: IP-08PAED Gyakorlatvezető

Részletesebben

Verkehrsmeldungen am UML

Verkehrsmeldungen am UML Verkehrsmeldungen am UML 27 Led Zeppelin Konzulens: Budai Péter Csapattagok Bodó Péter MKA2DY carter89@freemail.com Pál Tamás UVKSGJ paltamas89@gmail.com Szárnyas Gábor U944EQ szarnyasg@gmail.com 2010-05-13

Részletesebben

2. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció 2. Beadandó feladat dokumentáció Készítette: Giachetta Roberto E-mail: groberto@inf.elte.hu Feladat: Készítsünk programot a következő memóriajátékhoz. A játéktáblán mező foglal helyet, amelyek különböző

Részletesebben

Kalandjáték dokumentáció

Kalandjáték dokumentáció Követelmény feltárás Kalandjáték dokumentáció A program grafikus interfészen keresztül kommunikáljon a felhasználóval. Egyszerű, érthető irányítási funkciók segítsék a játékost. Meg kell teremteni az egyensúlyt

Részletesebben

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

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban OpenCL alapú eszközök verifikációja és validációja a gyakorlatban Fekete Tamás 2015. December 3. Szoftver verifikáció és validáció tantárgy Áttekintés Miért és mennyire fontos a megfelelő validáció és

Részletesebben

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

KIRA. KIRA rendszer. Telepítési útmutató v1 KIRA rendszer Telepítési útmutató v1 1. Bevezetés A dokumentáció, illetve a dokumentáció mellékleteként megtalálható állományok segítségével készíthető fel a kliens oldali számítógép a KIRA rendszer működtetésére.

Részletesebben

Tamagocsi Projektterv

Tamagocsi Projektterv Tamagocsi Projektterv Csapat: CamelCase { Laczik Sándor János; Szőke Gábor; Vasas Szabolcs; } Évfolyam: PTI MSc II. 2011/2012 1. Összefoglaló A feladat egy PC-n futtatható tamagocsi játék fejlesztése.

Részletesebben

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

Verifikáció és validáció Általános bevezető Verifikáció és validáció Általános bevezető Általános Verifikáció és validáció verification and validation - V&V: ellenőrző és elemző folyamatok amelyek biztosítják, hogy a szoftver megfelel a specifikációjának

Részletesebben

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

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat 2012. április 13. Például (bemenet/pelda. Berezvai Dániel 1. beadandó/4. feladat 2012. április 13. BEDTACI.ELTE Programozás 3ice@3ice.hu 11. csoport Feladat Madarak életének kutatásával foglalkozó szakemberek különböző településen különböző madárfaj

Részletesebben

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: Név: vp.05@hotmail.com Kurzuskód:

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: Név: vp.05@hotmail.com Kurzuskód: Szerző Név: Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: vp.05@hotmail.com Kurzuskód: IP-08PAEG/27 Gyakorlatvezető neve: Kőhegyi János Feladatsorszám: 20 1 Tartalom Szerző... 1 Felhasználói dokumentáció...

Részletesebben

VII. Appletek, grafika

VII. Appletek, grafika VII. Appletek, grafika 1. Bevezetés A tantárgy elején említettük, hogy a Java alkalmazásokat két nagy csoportba sorolhatjuk. Ezek: alkalmazások (applications) alkalmazáskák (applets) Az eddig megírt programjaink

Részletesebben

Objektum elvu alkalmaza sok fejleszte se

Objektum elvu alkalmaza sok fejleszte se Objektum elvu alkalmaza sok fejleszte se 3. beadandó feladat Szerző Név: Budai Martin Neptun-kód: PLAB9E E-mail: budai.martin@outlook.com Kurzuskód: 4 Feladat sorszáma: 2 Feladat Egy bolygón különböző

Részletesebben

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 9. ELŐADÁS - OOP TERVEZÉS 2014 Bánsághi Anna 1 of 31 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma

Részletesebben

OpenOffice.org irodai programcsomag

OpenOffice.org irodai programcsomag OpenOffice.org irodai programcsomag Daczi László Miről lesz szó? Bevezetés Történeti háttér Átfogó bemutatás Rendszerkövetelmények Writer - szövegszerkesztő Calc - táblázatkezelő Impress

Részletesebben

Technikai információk fejlesztőknek

Technikai információk fejlesztőknek Technikai információk fejlesztőknek Különbségek a Java-s nyomtatványkitöltő program és az Abev2006 között 1. A mezőkód kijelzés bekapcsolása a Szerviz/Beállítások ablakban érhető el. 2. Az xml állományok

Részletesebben

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

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv Image Processor BarCode Service Áttekintés CIP-BarCode alkalmazás a Canon Image Processor programcsomag egyik tagja. A program feladata, hogy sokoldalú eszközt biztosítson képállományok dokumentumkezelési

Részletesebben

Viczián István IP Systems http://jtechlog.blogspot.hu/ JUM XIX. - 2012. szeptember 18.

Viczián István IP Systems http://jtechlog.blogspot.hu/ JUM XIX. - 2012. szeptember 18. Viczián István IP Systems http://jtechlog.blogspot.hu/ JUM XIX. - 2012. szeptember 18. Két projekt Mindkettőben folyamatirányítás Eltérő követelmények Eltérő megoldások Dokumentum gyártási folyamat Üzemeltetés

Részletesebben

Adatbázis és szoftverfejlesztés elmélet

Adatbázis és szoftverfejlesztés elmélet Adatbázis és szoftverfejlesztés elmélet Témakör 4. Összefoglalás 1. A kódolás eszközei Általános szövegszerkesztő Programozói szövegszerkesztő Fejlesztői környezet Vizuális fejlesztői környezet Általános

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

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

1. beadandó feladat: egyszerű grafikus felületű alkalmazás. Közös követelmények: 1. beadandó feladat: egyszerű grafikus felületű alkalmazás Közös követelmények: A megvalósításnak felhasználóbarátnak, és könnyen kezelhetőnek kell lennie. A szerkezetében törekedni kell az objektumorientált

Részletesebben

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

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

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

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor. Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb

Részletesebben

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

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN B IT v: 2016.03.03 MAN Csomagok A DBMS csomagok a PL/SQL alkalmazások fejlesztését segítik, bennük tároljuk a létrehozott programok kódjait. A specifikációs

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

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

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat Megoldás Feladat 1. Statikus teszt Specifikáció felülvizsgálat A feladatban szereplő specifikáció eredeti, angol nyelvű változata egy létező eszköz leírása. Nem állítjuk, hogy az eredeti dokumentum jól

Részletesebben

Szkeleton. 8 datcode. Konzulens: Budai Péter

Szkeleton. 8 datcode. Konzulens: Budai Péter Szkeleton 8 datcode Konzulens: Budai Péter Csapattagok Botos Péter WR3TXC rapgolya@gmail.com Csonka Lóránt QXNTN8 csonkalorant@gmail.com QPGL2R garancsya@gmail.com EJ9PEC b.komaromi22@gmail.com 6. Szkeleton

Részletesebben

I. Objektumorientált programozás

I. Objektumorientált programozás I. Objektumorientált programozás 1. Az objektumorientált programozás alapjai Objektumok és objektumosztályok A számítógépes programok közvetve vagy közvetlenül a körülöttünk lévô világ elemeihez illeszkednek,

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

Szerepjáték Project Story of my life

Szerepjáték Project Story of my life Szerepjáték Project Story of my life Leírás A feladat egy konzol felületű játék elkészítése, amely betekintést kíván adni egy egyetemista életébe. A játék felépítését tekintve szerepjáték, de nem a szokásos

Részletesebben

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

Programozási technológia I. 1. beadandó feladatsor Programozási technológia I. 1. beadandó feladatsor Közös elvárás a megoldásoknál, hogy gyűjteményben tároljuk az azonos ősosztályból származtatott osztályok objektumait. Az objektumok feldolgozása során

Részletesebben

Operációs rendszerek Folyamatok 1.1

Operációs rendszerek Folyamatok 1.1 Operációs rendszerek p. Operációs rendszerek Folyamatok 1.1 Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK A rendszermag Rendszermag

Részletesebben

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

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 a TávTagTár programhoz Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43 Tartalomjegyzék Futási feltételek... 3 Telepítés... 3 Indítás... 3 Főablak... 4 Új személy felvétele...

Részletesebben

Gyakorlati vizsgatevékenység B

Gyakorlati vizsgatevékenység B Gyakorlati vizsgatevékenység B Szakképesítés azonosító száma, megnevezése: 481 04 0000 00 00 Web-programozó Vizsgarészhez rendelt követelménymodul azonosítója, megnevezése: 1189-06 Web-alkalmazás fejlesztés

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Dinamikus modell Tevékenységdiagram, Együttműködési diagram, Felhasználói esetek diagramja Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Tevékenység diagram A tevékenység (vagy

Részletesebben

Programfejlesztési Modellek

Programfejlesztési Modellek Programfejlesztési Modellek Programfejlesztési fázisok: Követelmények leírása (megvalósíthatósági tanulmány, funkcionális specifikáció) Specifikáció elkészítése Tervezés (vázlatos és finom) Implementáció

Részletesebben

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

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba Témavezető: Horváth Zoltán és Simon Thompson OTDK 2007, Miskolc Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba OTDK

Részletesebben

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

Hatékony iteratív fejlesztési módszertan a gyakorlatban a RUP fejlesztési módszertanra építve Hatékony iteratív fejlesztési módszertan a gyakorlatban a RUP fejlesztési módszertanra építve Kérdő Attila, ügyvezető, INSERO Kft. EOQ MNB, Informatikai Szakosztály, HTE, ISACA 2012. május 17. Módszertanok

Részletesebben

Információtartalom vázlata

Információtartalom vázlata 1. Az Ön cégétől árajánlatot kértek egy üzleti portál fejlesztésére, amelynek célja egy online áruház kialakítása. Az árajánlatkérés megválaszolásához munkaértekezletet tartanak, ahol Önnek egy vázlatos

Részletesebben

OOP. Alapelvek Elek Tibor

OOP. Alapelvek Elek Tibor OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós

Részletesebben

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

Szkeleton tervezése. 100 Generalis faliora. Csapattagok: Konzulens: Szabó András. 2005. március 21. Szkeleton tervezése 100 Generalis faliora Konzulens: Szabó András Csapattagok: Kenéz Tamás TLSXNP arachnus@tvn.hu Kiss Gergely KNJU43 6er6e1y@gmail.com Papp Gergely L584UF pg554@hszk.bme.hu Rostás Gábor

Részletesebben

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

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program A GeoEasy telepítése GeoEasy V2.05+ Geodéziai Feldolgozó Program (c)digikom Kft. 1997-2010 Tartalomjegyzék Hardver, szoftver igények GeoEasy telepítése A hardverkulcs Hálózatos hardverkulcs A GeoEasy indítása

Részletesebben

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

Operációs rendszerek. Az NT folyamatok kezelése Operációs rendszerek Az NT folyamatok kezelése Folyamatok logikai felépítése A folyamat modell: egy adott program kódját végrehajtó szál(ak)ból és, a szál(ak) által lefoglalt erőforrásokból állnak. Folyamatok

Részletesebben

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

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó Szerző Név: Lővei Péter ETR-azonosító: LOPSAAI.ELTE Drótposta-cím: petyalovei@gmail.com Kurzuskód: IP-08PAEG/25 Gyakorlatvezető neve: Daiki Tennó Feladatsorszám: 11 1 Tartalom Szerző... 1 Tartalom... 2

Részletesebben

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

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok Bevezetés a programozásba II 8. Előadás: Osztályok, objektumok, osztályszintű metódusok vektor.h #ifndef VEKTOR_H #define VEKTOR_H class Vektor { int meret, *mut; public: Vektor(int meret); int szamlal(int

Részletesebben

Dokumentáció. 1. Beadandó feladat

Dokumentáció. 1. Beadandó feladat Ballai Brigitta XG3077 gittacska91@gmail.com 2013.11.25. Dokumentáció 1. Beadandó feladat Feladat : A feladat egy kellően bonyolult osztálystruktúra megtervezése és implementálása Java nyelven. Minimális

Részletesebben

Gyakorlati vizsgatevékenység A

Gyakorlati vizsgatevékenység A Gyakorlati vizsgatevékenység A Szakképesítés azonosító száma, megnevezése: 481 04 0000 00 00 Web-programozó Vizsgarészhez rendelt követelménymodul azonosítója, megnevezése: 1189-06 Web-alkalmazás fejlesztés

Részletesebben

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

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok Programozás alapjai gyakorlat 2. gyakorlat C alapok 2016-2017 Bordé Sándor 2 Forráskód, fordító, futtatható állomány Először megírjuk a programunk kódját (forráskód) Egyszerű szövegszerkesztőben vagy fejlesztőkörnyezettel

Részletesebben

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

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

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

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

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

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

Részletesebben

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

Projektterv. Projekt Neve: Ingatlan Bérbeadási Nyilvántartás Csoport: nmi Projektterv Projekt Neve: Ingatlan Bérbeadási Nyilvántartás Csoport: nmi Verziók: Verzió Dátum Szerző Státusz Megjegyzés 0.1 2008.10.14 Balikó Ivett Tervezet Kiindulási változat, véleményezésre 0.2 2008-10-20

Részletesebben

Á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

Á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 Á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 Az ÁNYK53 egy keretprogram, ami a személyi jövedelemadó bevallás (SZJA,

Részletesebben

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport 10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)

Részletesebben

2. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció 2. Beadandó feladat dokumentáció Készítette: Giachetta Roberto E-mail: groberto@inf.elte.hu Feladat: Készítsünk programot a következő memóriajátékhoz. A játéktáblán mező foglal helyet, amelyek különböző

Részletesebben

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

Telepítési útmutató. 1.1 lépés : Telepítés típusa - ablak : Telepítési útmutató 1.1 lépés : Telepítés típusa - ablak : Typical (Általános): A telepítéskor a program fájljai, az adatbázis kezel, valamint a súgó fájlok kerülnek telepítésre. (Abban az esetben ajánlott,

Részletesebben

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

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program A GeoEasy telepítése GeoEasy V2.05 Geodéziai Feldolgozó Program (c)digikom Kft. 1997-2008 Tartalomjegyzék Hardver, szoftver igények GeoEasy telepítése A hardverkulcs Hálózatos hardverkulcs A GeoEasy indítása

Részletesebben

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

GeriSoft Stúdió Kft J Á T S Z Ó H Á Z M A X I JÁTSZÓHÁZI BELÉPTETŐ RENDSZER GeriSoft Stúdió Kft J Á T S Z Ó H Á Z M A X I JÁTSZÓHÁZI BELÉPTETŐ RENDSZER Köszönjük, hogy érdeklődik szoftverünk iránt! Engedje meg, hogy bemutassuk a rendszer működését. A rendszer kifejlesztésében

Részletesebben

Alapok (a K2D rendszer alapjai)

Alapok (a K2D rendszer alapjai) Alapok (a K2D rendszer alapjai) 1 1. Bevezetés... 3 2. Fastruktúra... 3 2.1. Nyitása, zárása... 3 2.2. Fülek... 5 2.3. Licence kulcs érvényesítése... 9 2.4. Új elem felvitele... 10 2.5. Elem törlése...

Részletesebben

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

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom Szoftver újrafelhasználás (Software reuse) Irodalom Ian Sommerville: Software Engineering, 7th e. chapter 18. Roger S. Pressman: Software Engineering, 5th e. chapter 27. 2 Szoftver újrafelhasználás Szoftver

Részletesebben

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?

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? Bevezetés 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 Forráskód Hibajegyzék p2p.wrox.com xiii xiii xiv xiv xvi xvii xviii

Részletesebben

Rendszerterv. Makoviczki András. Neptun: JJ26AR 2012.11.29.

Rendszerterv. Makoviczki András. Neptun: JJ26AR 2012.11.29. Rendszerterv Makoviczki András Neptun: JJ26AR 2012.11.29. Rendszerterv 2. Tartalomjegyzék 1. A program célja... 3 2. A rendszerterv célja... 3 3. A program adatkezelése... 3 3.1. Adatfájlok... 4 4. A program

Részletesebben

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

DAT adatcserefájl AutoCAD MAP DWG mapobject konvertáló program dokumentáció H - 1161 Budapest Rákóczi út 76. Tel./Fax.: +36-1-4010159 http://www.pageos.hu toni@pageos.hu DAT adatcserefájl AutoCAD MAP DWG mapobject konvertáló program dokumentáció A program használható a TOPOBASE

Részletesebben

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

Java-s Nyomtatványkitöltő Program Súgó Java-s Nyomtatványkitöltő Program Súgó Hálózatos telepítés Windows és Linux operációs rendszereken A program nem használja a Registry-t. A program három könyvtárstruktúrát használ, melyek a következők:

Részletesebben

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

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 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 Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:

Részletesebben

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

Software Engineering Babeş-Bolyai Tudományegyetem Kolozsvár Software Engineering Dr. Barabás László Ismétlés/Kitekintő Ismétlés Software Engineering = softwaretechnológia Projekt, fogalma és jellemzői, személyek és szerepkörök Modell, módszertan Kitekintés Elemzés/

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK Informatikai alapismeretek középszint 0721 ÉRETTSÉGI VIZSGA 2007. október 24. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ OKTATÁSI ÉS KULTURÁLIS MINISZTÉRIUM

Részletesebben

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

Kirakós játék. Döntő február 22. Alakzatok (katalógus) DUSZA ÁRPÁD ORSZÁGOS PROGRAMOZÓI EMLÉKVERSENY 2013/2014 Döntő 2014. február 22. Kirakós játék Az Q-Puzzler kirakós játékot egyedül játsszák. A játéktér egy 5 sorból és 11 oszlopból álló lyukacsos tábla, amelybe különböző színű síkbeli alakzatok illeszthetőek.

Részletesebben