Viharvadász csapat. Bankrablós játék augusztus 20.

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

Download "Viharvadász csapat. Bankrablós játék. 2006. augusztus 20."

Átírás

1 Viharvadász csapat Bankrablós játék augusztus 20.

2 Tartalomjegyzék Vihar Tartalomjegyzék Követelmény, projekt, funkcionalitás...3 Analízis modell kidolgozása...16 Szkeleton tervezése...43 Szkeleton beadása...52 Prototípus koncepciója...57 Részletes tervek...68 Prototípus beadása...94 Grafikus felület specifikálása Grafikus változat beadása Értékelés május 10. Viharvadász csapat

3 1. Követelmény, projekt, funkcionalitás 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

4 1. Követelmény, projekt, funkcionalitás Vihar 1. Követelmény, projekt, funkcionalitás 1.1 Követelmény definíció A program célja és alapvető ellátandó feladatai A feladat egy kis német város, Verkehrsmeldungen am Uml útjain autók vezérlése. Az autók engedelmeskednek a szabályoknak kereszteződéseknél (megáll piros lámpánál, stop táblánál). Elágazásoknál véletlenszerűen választ egy autó azon utak közül, ahová behajthat. Az autók a város határánál jelennek meg, és tűnnek el (hajtanak ki a városból). Sebességeik különbözőek, de nem előznek, türelmesen haladnak a lassabb (előttük haladó) jármű mögött. Elkerülik az esetleges ütközéseket. Minden út egyirányú, nincsen jobbkezes kereszteződés. Van egy különleges autó, a bankrablók autója. Ők nem tartanak be semmi szabályt, bármerre közlekedhetnek. A banktól próbálnak meg eljutni a rejtekhelyig, s ügyelni kell arra, hogy ne ütközzenek össze más autóval, valamint az üldöző rendőr se érje utol őket. A fejlesztőcsapatunk célja egy olyan kész program előállítása, mely teljes mértékben kielégíti a specifikációban megkövetelteket, és ami minden olyan rendszeren lefordítható, futtatható, mely megfelel a későbbiekben pontosan megfogalmazott követelményeknek A felhasználói felület (UI 1 ) A végleges, elkészült szoftver irányítása az egér, billentyűzet segítségével lesz elérhető, valamint grafikus felhasználói felülettel (GUI 2 ) fog rendelkezni A program futtatásához szükséges rendszerkövetelmények A futtatás szükségességét a következő szoftverek teszik ki: JRE (Java Runtime Environment) Az ehhez szükséges konfiguráció a Hallgatói Számítógépközpont számítógépeinek konfigurációja, mivel ezen kerül bemutatásra, ezen a rendszeren kell problémamentesen futnia a szoftvernek A szoftver fejlesztésével kapcsolatos alapkövetelmények, elvek, célok 1 User Interface 2 Graphic User Interface Viharvadászok,

5 1. Követelmény, projekt, funkcionalitás Vihar Modellhűség A kész szoftvernél kiemelkedően fontos, hogy szigorúan elégítse ki a részletes specifikációban meghatározott követelményeket. Mindannyian teljes mértékben ennek alárendelve alakítjuk ki gondolkodásmódunkat a tervezéssel, és a megvalósítással kapcsolatban is. Továbbfejleszthetőség Az elkészült szoftver minden szempontból tökéletesen, maradéktalanul és hiánytalanul megérthető a mellékelt részletes dokumentáció segítségével. Mindannyian figyelembe vettük azt az elengedhetetlen tényezőt, hogy a szoftver továbbfejlesztése minden problémától mentes, gördülékeny, akadálymentes, és egyszerű legyen. Moduláris megoldások A tervezés során különösen hatékony tervezési minták felhasználásával értük el, hogy a projekten belül a szoftver jól elkülöníthető részegységekre tagolható legyen. Ennek segítségével egyszerűbbé válik a tesztelés, a fejlesztés, a megértése a kódnak, valamint különkülön felhasználhatóak az egyes modulok. A közöttük fellépő kapcsolatokat minimalizálni kell. Teljesítmény, optimalizáció, algoritmusok Mint a csapatból ketten is algoritmus programozói versenyek aktív résztvevői, az optimális, gyors, hatékony kódolást a fejlesztőgárda különösen kiemelt figyelemmel kezeli. A felhasznált algoritmusoknál a matematikai és tapasztalati tudást építi bele a csapat a hatékony, de érthető, nem bonyolult vagy feleslegesen összetett algoritmusok megalkotásával. Így mind a teljesítmény, az optimális, kiegyensúlyozott működés is maximális szintet ér el. Ezzel a megadott konfiguráción is problémamentesen, gördülékenyen futtatható a szoftver. Felhasználhatóság A fejlesztőcsapat fontos céljának tartja, hogy a szoftver első használata is a lehető legnagyobb mértékben érthető, egyértelmű legyen, s ne igényeljen olyan tudást, melyhez a dokumentáció, vagy felhasználói kézikönyv különösebb ismerete legyen szükséges. Ennek érdekében, mind a felhasználói felület, mind a kezelés kialakításánál ez a szempont is kiemelt szerephez jut. Perzisztencia Fejlesztőcsapatunk a hibák, problémák könnyebb feltárása, megoldása és orvoslása érdekében elengedhetetlen eszköznek tartja a minden futás alkalmával elkészülő fájlt, mely tartalmazza az adott futáshoz köthető legtöbb fontos információt, ezáltal téve lehetővé a könnyebb hibafeltárást, valamint a követhetőséget is nagymértékben javítja. Viharvadászok,

6 1. Követelmény, projekt, funkcionalitás Vihar Modern technológiák beépítése A csapat figyelemmel kíséri a legújabb technológiák által nyújtott tapasztalati tényezőket. Így az UML 3, valamint a RUP 4 alapos ismeretének segítségével hatékonyan szétválasztható a tervezés és az implementáció, csökkenthető a kettő konfliktusából adódó probléma, s egyszerűsíthető az utókövetés, a mérföldkövek kijelölése. A projekt így áttekinthetővé, követhetővé válik mind a csapattagok, mind egy külső szemlélő számára is. 1.2 Projekt terv A felhasznált fejlesztőeszközök A fejlesztőgárda az Eclipse 5 fejlesztőkörnyezetet választotta, közös megegyezés alapján. Mivel eltérő operációs rendszereket használ a csapat, fontos volt az univerzalitás. A könnyű hozzákapcsolhatóság is fontos szempont volt az SVN szervert, illetve az UML diagramok elkészítését és azokból a Java kód generálását segítő Visual Paradigm 6 modul (Community Edition) szépen integrálni tudta a fejlesztőgárda. A tervezés és a kód szoros kapcsolata lehetővé tette a kiemelt szempontok betartását, az SVN szerver pedig a kommunikáció megkönnyítésén kívül a változtatások követésében különösen hatékony eszköz a csapat kezében. A dokumentációnál a hagyományosnak tekinthető Microsoft Office 7.doc kiterjesztéssel bíró fájljait használtuk, igénybe véve az SVN szerver és a Google Code 8 által nyújtott utókövetési és módosítási lehetőségeket, így az Eclipseen belül is folyamatosan nyomon követhető, valamint szerkeszthető dokumentációrendszert kaptunk A fejlesztőcsapat, azok feladatkörei Név Szebeni Szilveszter Pál Balázs Herber Máté Nagy Krisztián Feladatkörök Csapatvezetés, modellezés, kódolás Dokumentáció, kódolás, tesztelés Kódolás, tesztelés, modellezés, dokumentáció Modellezés, kódolás, tesztelés A csapat tagjai kiválasztották azt a feladatkört, amiben erősebbek, vagy hatékonyabban tudnak haladni, mint a többiek, így kialakult az elején egy felállás, amely azonban a projekt előrehaladása során minden bizonnyal sokat fog változni, a kihívások és a felmerülő akadályok függvényében. A felosztásban egyedül a 25%os részesedést tekintettük alappillérnek a teljes időre vonatkozóan, ebben mindenki egyetértett Kommunikáció, platform A csapattagok részben ismerik egymást, ketten jól ismerik egymás szokásait, hárman tagjai egy fiatalok által vezetett szervezetnek (ebből kifolyólag tisztában vannak egy projekt 3 Unified Modeling Language 4 Rational Unified Process Viharvadászok,

7 1. Követelmény, projekt, funkcionalitás Vihar megfelelő működésével, a kommunikáció formáival, valamint a határidők teljesítésének fontosságával, stb.). A közvetlen kommunikációban a találkozók nyújtanak nagy segítséget, az azonnali információcsere és a részletekbe menő megállapodások alapja. Ilyenkor háttérbe szorul a dokumentálás, vagy a kód írása, előtérbe kerül a tervezés, a következő lépések felvázolása, az utókövetés, következmények levonása. Ezek alapján tehát egyértelmű, hogy ilyen találkozókra napi szinten nincsen lehetőség, de különösebb igény sem, közvetett kommunikációval áthidalható az a néhány nap, amely két projekttalálkozó között eltelik. A közvetett kommunikációra már komolyabb szabályok és összetettebb megoldások vonatkoznak, hiszen a kódolás, a dokumentálás összehangolása mellett a felmerülő problémák jelzése, azok megoldása sem elhanyagolható, de ilyen fontos a feladatok kiosztása, a határidők meghatározása. Ez segíthet egy folyamatban a kritikus részfolyamatok, a teljes hossz, vagy a szűk keresztmetszet feltárásában, tehát egy egyszerű azonnali üzenetváltó program (MSN, Skype) nem képes ezt a problémát kezelni, ekkora terhelést elbírni, nem beszélve az ellenőrzésről. Választásunk egy kiforrott rendszerre, a Google Code felületre esett. Ezen belül integrálható az SVN szerver (látható a kód, a változtatások, a folyamatos frissítések, a dokumentáció, és megjegyzései, hozzászólásokkal). Itt elérhető még a hibajelző, melyekhez tulajdonságokat (labeleket) adhatunk, így jelezve a probléma típusát, sürgősségét, állapotát, továbbá megjegyzéseket fűzhetünk hozzá. Ezen kívül egy Wiki felület is rendelkezésre áll. Itt fontos írott anyagokat tehetnek a csapattagok közzé egymás számára, ilyen a feladat kiírása, a projekt ütemterve is. A letöltések, vagy összehasonlítások már csupán extrák, de a könnyebb használatot segítik. Hamarabb érhető el egy pdf fájl, vagy könnyebben észrevehető a változtatás a kódsorban. Ezen felül szükségünk volt levelezőlistára is, ahol a felmerülő problémákat fórumjelleggel tudjuk megtárgyalni, s mivel csupán négyen vagyunk, erre ez a legalkalmasabb platform. Ennek használata a koordinációban is fontos, az információk így jutnak el garantáltan mindenkihez. Az azonnali üzenetváltás természetesen nem veszhet el a többi megoldás mellett, mert a felmerülő hardver vagy szoftverbeli problémákban ez nyújt megoldást, de a csupán egy személyhez szóló információk, kritikák, javaslatok is ezen a kommunikációs csatornán zajlanak. Erre az MSN, de a Skype is alkalmas, utóbbival a konferenciabeszélgetés is alapja egy gyors, hatékony információcserének, akár a teljes csapat számára. Megállapodás továbbá a csapattagok számára, hogy minden változtatáshoz kötelezően ajánlott megjegyzést írni, így a változtatás jelentősége is pillanatok alatt felmérhető. Ez igaz a dokumentációra is, ahogyan a kódolás sem kivétel ez alól. A projekt tisztában van azzal is, hogy nem mindenki elérhető minden pillanatban, ezért a határidők kijelölése nem szorulhat háttérbe egyetlen feladat kijelölésénél sem (a későbbi folyamatok késését elkerülendő). 1. ábra: Levelezőlista Viharvadászok,

8 1. Követelmény, projekt, funkcionalitás Vihar 2. ábra: Frissítések 3. ábra: Wiki felület Fejlesztési mérföldkövek, ütemterv Három fontosabb mérföldkő van, mely mind a beadásnál, mind a projekt életciklusában fontos: Skeleton: Ez a szoftver váza. Már kódként jelenik meg a szoftver modellje, ennek helyességét és működőképességét ellenőrizheti a csapat a Skeleton segítségével. A felépítés jelenik meg elsősorban, az objektumok és kapcsolataik. Jelentős idő ezt felállítani, de a későbbi folyamatokat nagymértékben teszi hatékonyabbá, ahogyan a konfliktusok, ütközések száma is minimalizálható egy jó modell segítségével. Prototípus Ekkor már a kód is elkészül, főként a szoftver alapját jelentő modell készül el, s gyakorlatilag csak a grafika hiányzik a teljes szoftverből. Így könnyen és hatékonyan tesztelhető a szoftver működőképessége, a modell helyessége és hatékonysága. Grafikus változat Ekkor készül el a szoftver. Megkapja a független grafikus felületet a modell, mely a felhasználó számára érthető, a csapat számára pedig jól elkülöníthető az algoritmusoktól, a modelltől Határidők Február 10 Február 16 Február 23 Csapatok regisztrációja 14h Követelmény, projekt, funkcionalitás (beadás) Analízis modell kidolgozása 1. (beadás) Viharvadászok,

9 1. Követelmény, projekt, funkcionalitás Vihar Március 2 Március 9 Március 16 Március 23 Március 30 Április 13 Április 20 Május 4 Május 11 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) Átadás A dokumentációt nyomtatott formában, minden héten adja le a fejlesztőcsapat a konzulensnek. Ezen felül a készülő szoftver forráskódját is folyamatosan ellenőrizheti a konzulens, ezeknek működő változatait időnként a HSZK géptermeiben mutatja be a csapat. A konzulens számára a dokumentációnak egy elektronikus változatát is eljuttatja a fejlesztőcsapat, útján, Portable Document (PDF) formában Kockázatelemzés Valószínűségek osztályozása: Alacsony 020% valószínűséggel bekövetkező esemény Közepes 2060% valószínűséggel bekövetkező esemény Magas 60+% valószínűséggel bekövetkező esemény (biztosnak tekinti a csapat) Hatások osztályozása Elhanyagolható Az esemény elhárítása nem vesz igénybe jelentős erőforrásokat Alacsony A bekövetkezett kár könnyen javítható, de néhány munkaórát, esetleg egy napot igénybe vehet javítása. Közepes A probléma jellegéből adódóan már komolyabb erőforrások együttes befektetését igényli, mely hatással lehet a fejlesztésre, az ütemtervre, s kooperációt igényel a probléma feloldása. Komoly Nem csupán a projekt menetét, hanem a teljes projektet fenyegető, a csapatot veszélybe sodró probléma, mely azonnali, halasztást nem tűrő megoldást igényel, mindenképpen személyes találkozó keretein belül is. Esemény Valószínűség Hatás Specifikációváltozás Magas Alacsony Javítandó heti beadandó feladat Alacsony Alacsony Sikertelen heti beadandó Alacsony Közepes Csapattag kiválása vagy kirakása Alacsony Komoly Csapattag távolléte (pl. betegség) Alacsony Komoly Hardver meghibásodása Magas 9 Közepes Szoftver meghibásodása Közepes Elhanyagolható Határidő lekésése Alacsony Közepes Hiányzás a tanácskozásról, közös Magas Alacsony fejlesztésekről 9 Egyik csapattárs számítógép konfigurációja közel 9 éves, s jelen pillanatban életciklusának utolsó évét tölti. Ezzel együtt gyakoriak a rendszerösszeomlások, s ennek megoldása egyre komolyabb erőforrásokat igényel. Viharvadászok,

10 1. Követelmény, projekt, funkcionalitás Vihar Egyéb fontos megjegyzések A csapat által fejlesztett szoftver lefordítása és bemutatása nem azon a platformon történik, ahol a fejlesztés, hanem a Hallgatói Számítógépközpont (HSZK) géptermeinek egyikében. Ennek megfelelően a programkódnak kompatibilisnek kell lennie a JDK (Java Development Kit) korábbi verziójával. Ennek biztosítása érdekében minden bemutatásra kerülő fejlesztés tesztelésre kerül a HSZK géptermeiben megtalálható Java SDK és JRE azonos verzióival (egy arra alkalmas számítógépen, azonos operációs rendszer alatt). 1.3 Feladatleírás A játékos játszhat új játékot. Feladata a bankrabló irányítása a bank előtt található forgalmi csomóponttól addig a csomópontig, ahol a titkos rejtekhelyük van. A bankrablónak figyelnie kell, hogy ne kerüljön egy utcába a rendőrrel, ekkor ugyanis a rendőr letartóztatja. A szabályokat nem tartja be, áthajthat a piros lámpánál, és a STOP táblánál sem kell megállnia. A játékos a bankrabló autójának sebességét változtathatja (meg is állhat), valamint a forgalmi csomópontoknál választhat bármely útvonal közül. Az útról nem térhet le, ahogyan egyetlen jármű sem. Figyelnie kell, hogy egy közlekedő járművel se ütközzön, mert ez esetben összetöri autóját és nem tudja teljesíteni a küldetést. Az úton egyéb járművek (autók és a rendőr) közlekednek. Az autók szabályosan haladnak, a következő néhány közlekedési szabályt betartva: Az utakon nem előznek, ha az előttük haladó autó lassabb sebességet választott, türelmesen lelassítanak ők is. A csomópontok előtt esetlegesen elhelyezett STOP táblánál megállnak, s csak utána hajtanak be a csomópontba. Ha piros lámpa van elhelyezve a csomópont előtt, megvárják, amíg zöldre vált, és utána behajtanak a csomópontba. Csak akkor hajtanak be a választott elágazásba, ha ott más autó nem halad, kanyarodik. Ez igaz azonban a bankrabló (és a rendőr) autójára is, ha oda behajtanak, s más autó is kanyarodik, vagy egyenesen halad a csomópontban, elkerülhetetlen az ütközés. A város felépítését illetően előre megtervezett úthálózattal rendelkezik, valamint véletlenszerű pályakészítési lehetőség is van. Mindkét esetben az utak csomópontokba futnak, valamint minden út egyirányú. Vannak olyan speciális helyek (nevük a városhatár), ahonnan új autók jelennek meg, valamint olyanok, ahol eltűnnek, elhagyják a várost. Ezek azonban nem lehetnek a bank, vagy a titkos rejtekhely. A teljes város bejárható (minden csomópont, amely nem városhatár), azaz minden csomópontból lehetőség van (más csomópontokon áthaladással) minden csomópont elérésére. A városhatárok sem elszigetelt csomópontok (csatlakoznak a városhoz). Az utak mezőkből állnak, egy mezőn egyszerre egy autó lehet (különben összeütköznek). Minden út végén jelen van egy STOP tábla, vagy lámpás jelzőőr. A lámpás jelzőőr a következőképpen működik: Minden csomópontnál, ahol van lámpa, ott mindegyik beérkező út lámpával van szabályozva. Egyszerre csak az egyik zöld, a többi piros, mindaddig, amíg pirosra nem vált, ilyenkor egy másik lesz zöld. A STOP tábla működése a következő: Ha egy autó a táblához ér, rövid időre megáll. Majd, ha szabad a csomópont, behajt, s továbbhalad valamelyik lehetséges utcán. Itt jegyeznénk meg, hogy a választott utca csak egy másik utca lehet, mint ahonnan érkezik, valamint megfelelő irányúnak kell lennie. A győzelem egyetlen módon lehetséges: A bankrabló autója beér abba a csomópontba, ahol a rejtekhelye is húzódik. Ha ezt eléri, a játékos győzött. Ellenben, ha ütközik más autókkal, vagy esetleg a rendőrrel kerül egy utcába, akkor elveszíti a játékot. A sebesség szabályozásán, Viharvadászok,

11 1. Követelmény, projekt, funkcionalitás Vihar valamint a kanyarodáson, illetve megforduláson kívül más irányítási lehetőség a játékos rendelkezésére nem áll. A játékos egy befejeződött játékmenet után kiléphet az alkalmazásból, valamint játszhat egy új játékot. A játék időegységek alatt történik, azaz minden autó sebessége megadható időegység / mező egységekben, azaz, hogy hány időegység alatt tesz meg egy mezőnyi távolságot. 1.4 Szótár Kifejezés Magyarázat Bankrablók autója Az autó, mellyel a bankrablók menekülnek, a játékos ezt irányítja. Bank Olyan csomópont, ahol a bank épülete áll (vizuálisan megkülönböztetett). Bejárható Minden csomópontból minden csomópont elérhető nulla, vagy több csomóponton keresztül (kivétel a városhatár). Csomópont Útkereszteződés, ahova be illetve kilépnek utak. Győz A bankrabló eléri a rejtekhelyet, a játékos nyer. Időegység Az a legkisebb időintervallum, amíg elemi esemény (egy autó léptetése; döntése, hogy behajte egy csomópontba) történik. Jármű, autó Általános esetben adott sebességgel közlekedik, véletlenszerű útvonalat választ. Játékos Az, aki játszik a játékkal és irányítja a bankrabló autóját. Kanyarodik A jármű új utat választ egy csomópontban. Lámpás jelzőőr (piros lámpa) Utak utolsó mezője lehet kereszteződés előtt, vizuálisan látható a lámpák állapota. Letartóztat Ha a bankrablót letartóztatja a rendőr, a játékos veszít. Megáll A jármű egy időre nem halad előre, például az autók a STOP táblák előtt. Megfordul A játékos autóját megfordíthatja, így megváltozik a haladási iránya. Mező Egy egységnyi út, ahol maximum egy autó tartózkodhat. Összetör A bankrabló ütközés esetén összetöri autóját, a küldetést nem teljesítheti, veszít. Rejtekhely Olyan csomópont, ahol a bankrablók rejtekhelye van (vizuálisan megkülönböztetett csomópont). Rendőr(autó) Vizuálisan megkülönböztetett, ha a bankrablóval egy utcában van, elkapja. Sebesség Az autó haladását jellemző mérték, hány mezőt lép időegység alatt. Sebesség A játékos az általa irányított bankrablóautó sebességét egy szabályozása maximális szintig, valamint a nulla sebességig szabályozhatja, időegységnyi lépésekben. STOP tábla Szabályosan közlekedő autókat megállásra kényszerítő tábla csomópontoknál (utak utolsó mezője, megkülönböztetett vizuálisan). Út Két csomópontot összekötő, mezőkből álló, egyirányú vonal. Úthálózat A város útjai. Ütközik Más járművel egy mezőre érkezik, a játékos ez esetben Viharvadászok,

12 1. Követelmény, projekt, funkcionalitás Vihar Város Városhatár veszít. Az utakból és csomópontokból álló, bejárható terület. Olyan csomópont, ahova csak belépnek, vagy ahonnan csak kilépnek utak. 1.5 Essential usecase ek Usecase diagram 4. ábra. Essential usecase ek Usecase leírások Usecase neve Rövid leírás Aktorok Forgatókönyv A játék indítása A játék elindítása. Játékos A pálya betöltődik. Usecase neve Rövid leírás Aktorok Forgatókönyv Autó irányítása A játékos vezérli az autó mozgását. Játékos Az autó a leütött billentyűk hatására, azoknak megfelelően fog közlekedni. Viharvadászok,

13 1. Követelmény, projekt, funkcionalitás Vihar Usecase neve Rövid leírás Aktorok Forgatókönyv Idő léptetése Óra feladata, hogy azonos időközönként lépteti az órát. Óra (belső actor) Feladata a magától közlekedő autók vezérlése, léptetése. Viharvadászok,

14 1. Követelmény, projekt, funkcionalitás Vihar Napló Kezdet Időtartam Résztvevők Leírás :30 0,5 óra Herber SVN beállítása, tesztelés :00 1 óra Herber Sablon fedőlapok elkészítése + SVNre :00 2,5 óra Herber, Szebeni Értekezlet Technológiák: Eclipse Subclipce Uml2 for Eclipse :00 2 óra Pál Szebeni Értekezlet, brainstorming :00 2 óra Pál, Szebeni, Nagy, Herber Értekezlet, brainstorming, specifikálunk, docot használunk Balázs megírja az első házit :00 0,5 óra Pál Google Code felületének finomítása :00 5 óra Pál Követelménydefiníció és projekt terv leírása, még befejezetlen :00 1 óra Szebeni Dokumentáció átolvasása, kiegészítése, észrevételek leírása :45 0,5 óra Pál Dokumentáció frissítése megjegyzések alapján :00 0,5 óra Szebeni Képek, Use Case ,5 óra Pál Dokumentálás (feladatleírása) ,5 óra Nagy Use Case elkészítése :40 0,5 óra Szebeni, Pál Feladat további konkretizálása, időegységek működésének megbeszélése Viharvadászok,

15 1. Követelmény, projekt, funkcionalitás Vihar :00 4 óra Pál Dokumentáció befejezése (részletes feladatkiírás, napló, use case magyarázása, lábjegyzetek, képek beillesztése, alapos átolvasás és korrekciók) :20 0,5 óra Pál Logó és egyéb adminisztráció :00 2 óra Szebeni Feladatkiírás átnézése, kommentelése a spreadsheetben, kijavítása :30 0,5 óra Herber Dokumentációhoz észrevételek kapcsolása :00 1 óra Pál, Szebeni Dokumentáció véglegesítése :00 0,5 óra Szebeni Nyomtatás Viharvadászok,

16 2. Analízis modell kidolgozása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

17 2. Analízis modell kidolgozása Vihar 2. Analízis modell kidolgozása 2.1 Objektum katalógus Game Tartalmazza a játékban szereplő objektumokat, és biztosítja számukra a megfelelő működés lehetőségeit. Vezérli őket, s az általuk jelzett eseményeket (ide tartozik pl, a győzelem és a vereség is) korrekt módon lekezeli Road A celláit tartalmazó osztály, mely egy utat valósít meg. Tárolja a belépő és kilépő elágazását (hiszen az út egyirányú) Cell Absztrakt ősosztály, egy útcellához szorosan tartozó információkat tartalmaz (például a rajta álló jármű referenciáját). Leszármazottai a speciális cellák: Úthoz tartozó cellák, elágazás RoadCell Leszármazottja a Cell absztrakt osztálynak, specialitása az, hogy kapcsolódik 11 szomszédos útcellához, tartalmaz ISign interfészt megvalósító objektumot, valamint egy konkrét úthoz tartozik egy ilyen cella ISign Ez az interfész írja le, hogy mit tud egy közlekedési lámpa, vagy egy stop tábla. Szól a járműveknek, ha nem haladhatnak át a cellán, egyszóval blokkolja őket megadott, jól definiált időre TrafficLight Ez az objektum megvalósítja az ISign interfészt, közlekedési lámpaként. Piros és zöld között váltakozik, ez alapján jelzi a tiltást a beérkező járművek számára, akik arra a cellára érkeznek, ahol ez az ISign interfészt megvalósító objektum van StopSign Ez az objektum hasonló a lámpás jelzőőrhöz, csak itt egyszerű stop tábláról van szó: Szól egy beérkező járműnek, hogy álljon meg, s számolja a jármű számára a fennmaradó várakozási időt. Ha ez lejárt, a tábla továbbengedi. Viharvadász csapat,

18 2. Analízis modell kidolgozása Vihar Vehicle Ez egy általános járművet definiál, absztrakt. Mozog a pályán valamekkora sebességgel, kereszteződésekben véletlenszerűen választ a lehetséges utak közül. A városhatárnál kiilletve belép (a megfelelő helyeken, CityEntry, CityExit) CivilCar Ez az objektum leszármazottja a Vehicle absztrakt ősosztálynak Policeman A rendőr a bankrablóra vadászik, azaz ő is jármű, de ha egy útra kerül a bankrablóval, akkor letartóztatja, vagyis a játékos veszít Robber A bankrabló a játékos által irányított Vehicle, képes megfordulni, sebességet változtatni, de összeütközhet az autókkal, és a rendőrrel is egy utcára kerülhet, ez utóbbi kettő vesztéssel egyenértékű. A rejtekhelyre lépéskor a játékos nyer. Ezt a Game felé közvetíti Intersection Speciális (Cell osztályból származó) cella, ami elágazás, tehát innen több következő cella van, több előző cella van. Itt az autók véletlenszerűen választanak haladási irányt, amit a Rabló autója (a játékos által) felüldefiniálhat, de neki is van alapértelmezett cella, arra az esetre, ha a játékos nem választ másik cellát CityEntry Speciális Intersection, ahol beléphetnek az autók és a rendőr is (ha kilépett). Továbbá az Intersectionnek köszönhetően a Cell absztrakt osztály leszármazottja CityExit Speciális Intersection, ahol kiléphetnek az autók és a rendőr is. Továbbá az Intersectionnek köszönhetően a Cell absztrakt osztály leszármazottja Bank Speciális Intersection, itt kezdődik a játék, vizuálisan megkülönböztetett HidingPlace Speciális Intersection, ha ideér a bankrabló, elrejtőzik, ezzel a játékos megnyeri a játékot. Vizuálisan eltér a többi elágazástól. Viharvadász csapat,

19 2. Analízis modell kidolgozása Vihar Clock Feladata az időközönkénti vezérlésindítás engedélyezése, ilyenkor true értékkel tér vissza a tick() függvénye. 1 Osztályok leírása 2.2 Game A játékban szereplő objektumokat tartalmazza, összefogja azokat, lehetővé teszi, hogy együttesen is működőképesek legyenek. Ősosztályok: Nincs. Interfészek: Nincs. Példányok száma: 1 Komponensek: CivilCar [1..*] cars Az autók. Policeman [1..*] policemen A rendőr. Robber player A bankrabló. Road [1..*] roads Az utak. Intersection intersections Az elágazások. [1..*] Clock clock Az időzítő. Int minpolice A minimum rendőrszám. int mincivilcar A minimum autószám. Bank Bank A bank. Szolgáltatások void tick() Meghívja mindenkinek a tick() függvényét megfelelő sorrendben. void gameover() Vereség esetén hívódik meg. void generatelevel() A pályát megfelelő módon legenerálja. void generatemap() A térképet a megadott módon legenerálja. void generatevehicles() Elhelyezi az autókat. void wingame Győzelem esetén fut le, gondoskodik a nyerés esetén szükséges úlépésekről. void kill(c: CivilCar) Törli a c civil járművet. void kill(p: PoliceMan) Törli a p rendőrt. 1 Ez később külön szálon is megvalósítható. Viharvadász csapat,

20 2. Analízis modell kidolgozása Vihar void kill(r: Robber) Törli a r bankrablót. void regeneratekilled Ha kevesebb Civil Car, Vehicles() vagy Policeman van, Cell Road getemptycityentry () generál. Visszaadja az üres városbejárat celláját. Az utakat reprezentáló osztály, cellákból áll és ezeket kezeli. A pálya felépítésekor ő generálja celláit Cell Ősosztályok: Nincs Interfészek: Nincs. Példányok száma: n Komponensek: Cell [1..*] cells Az utat felépítő cellák. Cell entry Belépő cella, az út eleje. Cell exit Kilépő cella, az út vége. Szolgáltatások: Cell getexitintersection() Visszaadja a kilépő cellára mutató referenciát. Cell getentryintersection() Visszaadja a belépő cellára mutató referenciát. void generatecells() Legenerálja a saját celláit. void placecar(v: Vehicle) Elhelyez egy v autót egy szabad celláján. A cellákat megvalósító absztrakt ősosztály, mely minden cellára érvényes információt tartalmaz. Csatlakozik más cellához, vagy cellákhoz. Ráléphet minden Vehicle típusú jármű (Robber, CivilCar, Policeman), és lehet rajta ISign tábla/lámpa is. Ősosztályok: Nincs. Interfészek: Nincs. Példányok száma: n Komponensek: Vehicle vehicle A cellán jelen lévő Vehicle típusú objektum. Szolgáltatások: Viharvadász csapat,

21 2. Analízis modell kidolgozása Vihar Cell [1..*] getnextcells() A következő cellákat tartalmazó listát adja vissza. Cell [1..*] getpreviouscells() Az előző cellákat tartalmazó listát adja vissza. void enter(r: Robber) Egy r Robber objektum lép be. void enter(p: Robber) Egy p Policeman objektum lép be. void enter(c: Robber) Egy c CivilCar objektum lép be. Vehicle getvehicle() Visszaadja a cellán álló Vehicle objektumot. void setvehicle(v: Vehicle) Beállít a cellára egy v objektumot. Road getroad() Visszaadja, hogy a cella melyik úton van. void leave() Elhagyja a cellán álló Vehicle a cellát (törlődik a nyilvántartásból) ISign getsign() Visszaadja a cellán lévő ISign objektumot (piros lámpa ) RoadCell Egy Cellből származó osztály, mely egy konkrét úthoz tartozó cellát jellemez. Tudja azt, hogy melyik a következő cella, s melyik az előző cella, valamint milyen ISign interfészű KRESZ jelzés van rajta (TrafficLight ). Ősosztályok: Cell. Interfészek: Nincs. Példányok száma: n Komponensek: Cell nextcell Az előző cellára mutató referencia. Cell previouscell A következő cellára mutat. Road road Melyik úton is van ez az útcella. sign ISign Vane, illetve milyen a Sign a cellán. Szolgáltatások: Viharvadász csapat,

22 2. Analízis modell kidolgozása Vihar void ISign setneighbourcells (prev: Cell, next: Cell) Beállítja az előző és következő celláját a RoadCell egy példánya. Ez az interfész írja le, hogy mit tud egy közlekedési lámpa, vagy egy stop tábla. Szól a járműveknek, ha nem haladhatnak át a cellán. Ősosztályok: Nincs. Interfészek: Nincs. Példányok száma: n Komponensek: Szolgáltatások: boolean isblocking() Éppen aktuálisan blokkoljae a cellán való továbbhaladást. void vehicleentered() A cellába az ISign objektumhoz jármű érkezett. void tick() Időegység eltelik, ez vizsgálja a kihatást a járműre a cellán TrafficLight Ez az objektum megvalósítja az ISign interfészt, közlekedési lámpaként. Piros és zöld között váltakozik, ez alapján jelzi a tiltást a beérkező járművek számára, akik a cellára érkeznek, ahol ez az ISign típusú objektum van. Ősosztályok: Nincs. Interfészek: ISign Példányok száma: n Komponensek: int redtime Piros világítás ideje. int greentime Zölden világítás ideje. int offset Állapot: hol tart. Szolgáltatások: Viharvadász csapat,

23 2. Analízis modell kidolgozása Vihar StopSign Ez az objektum hasonló a lámpás jelzőőrhöz, csak itt egyszerű stop tábláról van szó: Szól egy beérkező járműnek, hogy álljon meg, s számolja a jármű számára a fennmaradó várakozási időt. Ha ez lejárt, továbbmehet. Ősosztályok: Nincs. Interfészek: ISign Példányok száma: n Komponensek: int waittime Várakozási idő. int tickamount Hol tart a visszaszámlálásban a tábla. Szolgáltatások: Vehicle Ez egy általános jármű, ami mozog a pályán valamekkora sebességgel, valamint a véletlenül kiválasztott következő cellára halad. Absztrakt ősosztály. Ősosztályok: Nincs. Interfészek: Nincs. Példányok száma: n Komponensek: int ticksleft Ennyi időegység múlva lehet lépni. Cell cell Ezen a mezőn tartózkodik a jármű. inversespeed player A jármű sebessége (tick/mező). Game game A játék. Ismeri, hogy jelezze a bekövetkező eseményeket. Szolgáltatások: void tick() Léptetés. void die() Meghal, azaz lekerül a pályáról. Viharvadász csapat,

24 2. Analízis modell kidolgozása Vihar void Cell Policeman accept (v: Vehicle) ChooseFrom( c: Cell[1..*]) Fogadja a v Vehicle típusú objektumot arról a celláról, ahova haladna. Választ egyet definiált módon a lehetséges következő cellák közül. A rendőr objektum. Bír a Vehicle, azaz sima jármű minden tulajdonságával, abból származik, de ha egy utcába van a bankrablóval, akkor el tudja kapni. Ezzel a játékos veszít. Ősosztályok: Vehicle. Interfészek: Nincs. Példányok száma: 1 Komponensek: Robber wanted A bankrabló referenciája, akit a rendőr üldöz. Szolgáltatások: CivilCar boolean onthesameroad() Feladata eldönteni, hogy a bankrabló és a rendőr egy úton vane, visszatérő értéke ennek igazsága. Egy civil autót valósít meg, a Vehicle minden tulajdonságát felhasználva. A celláit (Vehicleben definiált módon) véletlenszerűen választja, így úton egyenesen halad, Intersection esetén véletlenszerűen választ. Sebessége adott, de nem lép át olyan cellába, ahol más jármű halad (kerüli az ütközést). Ősosztályok: Vehicle. Interfészek: Nincs. Példányok száma: 1 Komponensek: Szolgáltatások Viharvadász csapat,

25 2. Analízis modell kidolgozása Vihar Robber A játékos által irányított jármű, mely megfordulhat, a játékos állíthatja a sebességét, valamint Intersectionökben választhat, merre megy. Ezt PreferredCell Cell típusként el is tárolja, hogy ha irányt változtat, már előre tudja azt. Ősosztályok: Vehicle. Interfészek: Nincs. Példányok száma: 1 Komponensek: boolean isgoingforward Visszaadja, hogy menetiránynak megfelelően halade a bankrabló az utcán. int mininversespeed Minimális sebesség. int maxinversespeed Maximális sebesség. Cell preferredcell Előnyben részesített (beállítható) cella elágazáshoz. Szolgáltatások: void increasespeed() Sebesség növelése. void decreasespeed() Sebesség csökkentése. void turnaround() Megfordul a bankrabló. void setpreferredcell( Beállítja a ct, mint c: Cell) előnyben részesített cella void hide() Megtalálja a rejtekhelyet s elrejtőzik. void busted() A rendőr elkapja, ütközés által, vagy egy utcába kerülve vele. Cell choosefrom(cin, cout: Cell[1..*]) Választ a lehetséges cellák közül, belépő, valamint kilépő cellákból is Intersection Egy speciális cella (leszármazottja a Cellnek), melynek több kilépő és több belépő cellája is lehet (általában van is). Vehicle tartózkodhat rajta, vissza tudja adni a következő, előző celláinak listáját, valamint nem tartozik egyetlen úthoz sem. Ősosztályok: Cell. Interfészek: Nincs. Viharvadász csapat,

26 2. Analízis modell kidolgozása Vihar Példányok száma: n Komponensek: Cell [1..*] nextcells Következő cellákat tartalmazó tömb. Cell [1..*] previouscells Előző cellákat tartalmazó tömb. Szolgáltatások: void void CityEntry addnextcell(c: Cell) addpreviouscell(c: Cell) Listához ad egy cellát, mint kilépő cella az Intersectionből. Előző cellalistájához csatol egy cellát. Olyan Intersection, mely forrás, tehát itt lépnek be a városba (jelennek meg) az autók. A rendőr is itt jelenik meg, ha kilépett a városból. Ősosztályok: Intersection. Interfészek: Nincs. Példányok száma: n Komponensek: Szolgáltatások: CityExit Olyan Intersection, mely nyelő, tehát itt lépnek ki a városból (tűnnek el) az autók, illetve a rendőr. Itt a bankrabló megtorpan. Ősosztályok: Intersection. Interfészek: Nincs. Példányok száma: n Komponensek: Szolgáltatások Viharvadász csapat,

27 2. Analízis modell kidolgozása Vihar void void enter(p: Policeman) enter(c: CivilCar) A rendőr eléri a városhatárt, és kilép. A civil autó elhagyja a várost, kilép Bank Ebben a közlekedési csomópontban van a Bank. Ősosztályok: Intersection. Interfészek: Nincs. Példányok száma: 1 Komponensek: Szolgáltatások HidingPlace Ez az a kereszteződés a bankrabló rejtekhelye, vizuálisan megkülönböztetett. Ide kell eljutnia a bankrablónak. Ősosztályok: Intersection. Interfészek: Nincs. Példányok száma: 1 Komponensek: Szolgáltatások void enter(r: Robber) A bankrabló belép a rejtekhelyre, vagyis az azt tartalmazó elágazás cellába. Győz Clock Ennek az objektumnak feladata az időközönkénti vezérlésindítás engedélyezése. Ősosztályok: Nincs. Viharvadász csapat,

28 2. Analízis modell kidolgozása Vihar Interfészek: Nincs. Példányok száma: 1 Komponensek: Szolgáltatások boolean tick() Engedélyezi a ticket. Statikus struktúra diagramok 1. ábra: osztálydiagram Viharvadász csapat,

29 2. Analízis modell kidolgozása Vihar Szekvencia diagramok 2. ábra: Játék inicializálása Viharvadász csapat,

30 2. Analízis modell kidolgozása Vihar 3. ábra: Időegységek lépéseinek szimulálása 4. ábra: Közlekedési lámpa léptetése Viharvadász csapat,

31 2. Analízis modell kidolgozása Vihar 5. ábra: Rendőr és bankrabló egy utcán Viharvadász csapat,

32 2. Analízis modell kidolgozása Vihar 6. ábra: Bankrabló következő cellát választ Viharvadász csapat,

33 2. Analízis modell kidolgozása Vihar 7. ábra: Bankrabló és jármű összetalálkozása 8. ábra: Bankrabló rátalál a rejtekhelyre Viharvadász csapat,

34 2. Analízis modell kidolgozása Vihar 9. ábra: Jármű következő cellát választ 10. ábra: A jármű (kilép a városból) megszűnik Viharvadász csapat,

35 2. Analízis modell kidolgozása Vihar 11. ábra: Jármű összetalálkozik egy másik járművel 12. ábra: A jármű következő (üres) cellára lép Viharvadász csapat,

36 2. Analízis modell kidolgozása Vihar 13. ábra: A jármű eléri a városhatárt (kilép) 14. ábra: Kilépett járművek újra belépése Viharvadász csapat,

37 2. Analízis modell kidolgozása Vihar 15. ábra: Sebességek Viharvadász csapat,

38 2. Analízis modell kidolgozása Vihar Statechartok 16. ábra: Stop tábla state chartja 17. ábra: Traffic Light (lámpás jelzőőr) state chartja Viharvadász csapat,

39 2. Analízis modell kidolgozása Vihar 18. ábra: Jármű state chartja Viharvadász csapat,

40 2. Analízis modell kidolgozása Vihar Napló Kezdet Időtartam Résztvevők Leírás :00 2 óra Herber, Szebeni, Pál Megbeszélés személyesen, konzultáció, class diagram átalakítása :00 1 óra Szebeni class diagram, robber vs city exit :00 3,5 óra Szebeni class diagram, szekvencia diagrammok (robber chooses next cell, robber meets vehicle, robber vs hiding place, vehicle chooses next cell, vehicle meets vehicle, vehicle moves to next empty cell) :00 4,5 óra Herber class diagram kibővítése, szekvencia diagramok (initializing game, light stepping, on the same road, regenerate killed vehicles, simulate time steps, vehicle vs cityexit) :00 1 óra Pál Vehicle sebességek szekvencia diagram elkészítése, valamint a jármű state chartjának összeállítása :00 1 óra Szebeni, Herber, Pál értekezlet :00 0,5 óra Szebeni, Herber, értekezlet Pál, Nagy :30 0,5 óra Nagy class diagram javitása :30 0,5 óra Szebeni szekvenciák javítása :30 0,5 óra Pál szekvenciák javítása :30 0,5 óra Herber szekvenciák javítása :00 2 óra Pál Dokumentáció megírása, átírása :30 2 óra Szebeni osztály diagram javítgatása, átnézése, dokumentáció ellenőrzése, nyomtatás Viharvadász csapat,

41 2. Analízis modell kidolgozása Vihar Összegzés, értékelés Már az első héten meglátszott, hogy a csapatban dolgozás, a párhuzamos feladatmegoldás komoly kihívás. A dokumentáció elkészítését egy ember kezdte el, s a párhuzamos munka ezen kezdetben lehetetlennek bizonyult, így azt egy ember végezte el az első héten, a többiek elolvasták és javításokat ajánlottak több részénél is. A második héten azonban megjelent a tervezés, modellezés, így a többiek is kivették a részüket a munkából. A tervezésnél nagy hiánya volt a rendszeres, személyes értekezleteknek, a modell apró módosításai lassan terjedtek el a csapattagok között, jelentős fennakadásokat és ütközéseket okozva a tervezésben, a diagramok elkészítésénél. Egyes esetekben a határidő be nem tartása okozott komoly fejtörést (Közepes hatású), melyet halaszthatatlanul kellett megoldani, elkerülendő a késést. Ez jelentős erőforrásokat emésztett fel a csapattagoknál. A harmadik dokumentációrész beadásakor pedig egyik csapatunk nyaralás miatt esett ki (Komoly hatásbesorolású). Kiemelt fontosságú lett a feladatok kiosztása a jól párhuzamosítható feladatokban (diagramok készítése), előtte azonban elengedhetetlen volt az értekezlet, ahogyan utána is az ellenőrzésnél. Egyelőre (ez a kördiagramokon is látszik) a feladatok megoszlása korántsem egyenletes, ezen azonban a későbbiekben igyekszünk változtatni, és a kevésbé ráérő csapattagokat bíztatni az aktív részvételben, mert ez később a pontok nem 25%os arányú megosztásához is vezethet ezt pedig a csapatunk egyik fő célja elkerülni. Az adatok: 1. hét 2. hét 3. hét Összesen Herber 5 11,5 8,5 25 Pál 16,5 11, Szebeni 11 16,5 10,5 38 Nagy 2,5 10, Viharvadász csapat,

42 2. Analízis modell kidolgozása Vihar Nagy 7% Első hét Herber 14% Herber Nagy 21% Második hét Herber 23% Herber Nagy 4% Harmadik hét Herber 31% Herber Szebeni 31% Pál Szebeni Pál Szebeni Szebeni 39% Pál Szebeni Pál 48% Nagy Szebeni 33% Pál 23% Nagy Pál 26% Nagy Összesen Nagy 13% Herber 22% Herber Pál Szebeni 34% Szebeni Nagy Pál 31% Viharvadász csapat,

43 3. Szkeleton tervezése 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

44 3. Szkeleton tervezése Vihar 3. Szkeleton tervezése 3.1 A szkeleton modell valóságos usecaseei Usecase diagram Óra usecase diagramja Viharvadász csapat,

45 3. Szkeleton tervezése Vihar Usecase leírások Usecase neve Rövid leírás Aktorok Forgatókönyv Idő léptetése Az időzítő által elindított esemény Óra Az óra meghatározott időintervallumonként léptet egyet a pálya szereplőin. Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Utak léptetése Ez a forgalomirányítás Óra Az út a rajta lévő forgalomirányítási eszközöket lépteti. ISign léptetése Forgalomirányítási eszközök léptetése Óra A stoptábla egy meghatározott ideig blokkol, a jelzőlámpa pedig időnként vált. Civil autó beléptetése a városba Új civil autók létrehozása Óra Ha kevés a civil autó, akkor egy városhatárnál létrejön egy civil autó. Autó tick Egy autó mozgatása Óra Az autó csökkenti a számlálóját, ha 0 lesz, akkor az autó léptetése a következő cellára use caset fogja lekezelni. Civil autó léptetése Civil autó mozgatása Óra Lásd autó léptetése Autó léptetése a következő cellára Autó lép Óra Egy autó megpróbál lépni a következő cellára. Autó kiléptetése a városból Autó kilép a városból Óra Ha egy autó egy városhatárhoz ér, akkor kilép a városból. Viharvadász csapat,

46 3. Szkeleton tervezése Vihar Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Autó léptetése üres cellára Autó lép egyet Óra Egy autó halad előre egy egységet egy véletlenszerű irányba. Autó várakoztatása tábla/lámpa miatt Forgalmi akadály Óra Ha egy autó megpróbál lépni, és van egy forgalomjelző, ami ezt nem engedi, akkor lépés helyett vár. Autó várakoztatása előtte lévő autó miatt Ütközés elkerülése Óra Ha egy autó lépni próbál, és észleli, hogy van előtte egy másik autó akkor ahelyett, hogy tovább lépne, megáll és várakozik, hogy elkerülje az üközést. Rendőr léptetése Mint az autó tick, a rabló keresés sel együtt Óra Ld. Autó tickje. Rabló keresése Rendőr keresi a rablót Óra A rendőr folyamatosan keresi a rablót, ha egy utcában van a rablóval, akkor megtalálta. Rabló megtalálása Rabló letartóztatása Óra Ha a rendőr keresés után megtalálta a rablót, akkor letartóztatja. Rabló léptetése Rabló mozgás Óra A rabló csökkenti a számlálóját, ha 0 lesz, akkor a rabló léptetése a következő cellár a use caset fogja lekezelni. Rabló elbújása A rabló megmenekül Óra Ha a rabló elérte a rejtekhelyet, akkor elbújik. Viharvadász csapat,

47 3. Szkeleton tervezése Vihar Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Rabló ütközése autóval Rabló ütközik Óra Ha egy rabló nekimenne egy autónak, akkor ütközik vele és meghal. Rabló léptetése üres cellára Rabló lép egyet Óra Rabló lép előre egy egységet, amennyiben lehetséges, akkor a preferált irányba lép, egyébként az alapértelmezett irányba. 3.2 Architektúra. A szerepe a szkeleton kódnak a következő: Tesztelni lehet vele a usecase diagramokon ábrázoltakat. A szekvenciadiagramok segítségével ellenőrizhető az egyes lefutási sorrendek minden esetben, mely külön szekvenciadiagramon ábrázolásra került. Az egymás utáni meghívásokra tesztpályákat hívtunk segítségül, melyet előre definiáltunk, valamint azt is, hogy ezen milyen objektumok kerülnek bemutatásra. Az objektumok közötti kapcsolatot nem feltétlenül szükséges bonyolult, áttekinthetetlen környezetben bemutatni, így törekedtünk a minél kisebb, csak a feltétlenül szükséges elemeket tartalmazó pályákat tesztpályaként megteremteni. Ennek megfelelően a végleges játéknak nem megfelelő a pálya (nincsen például minden esetben belépési, ill. kilépési pont) a specifikáció szerint, de nem is a játékot, hanem a tesztpályán elhelyezett objektumok közötti kapcsolatot tettük próbára. Néhány eset összefogható, ilyen például egy két mezős pálya, ahol egy lépést szimulálhatunk: Többféle jármű léphet többféle állapotban lévő mezőre (ahol lehet bármilyen jármű), valamint a közlekedési táblák is egy eset alá vonhatóak. Ennek megfelelően kerültek a tesztpályák és a különböző tesztesetek kialakításra. 1. tesztpálya: Mezők száma: 4 Mezők típusa: CityEntry, RoadCell, Bank, CityExit Mezők tartalma: Car, Empty, Robber, Empty Analóg esetek: Leírás: Pálya generálása. 2. tesztpálya: Mezők száma: 2 Mezők típusa: RoadCell, RoadCell Mezők tartalma:civilcar, TrafficLight Analóg esetek:civilcar vs StopSign, Policeman vs TrafficLight, Policeman vs StopSign. Leírás: Lámpa állapot lekérdezése. 3. tesztpálya: Mezők száma: 3 Mezők típusa: Intersection, RoadCell, RoadCell Mezők tartalma: Policeman, Empty, Robber Analóg esetek: Leírás: Policeman befordul Robber utcájába. 4. tesztpálya: Mezők száma: 1 Mezők típusa: CityEntry Mezők tartalma: Empty Viharvadász csapat,

48 3. Szkeleton tervezése Vihar Analóg esetek: RegeneratePoliceman Leírás: Eltűnt CivilCar visszahelyezése a pályára. 5. tesztpálya: Mezők száma: 4 Mezők típusa: Roadcell, Intersection, RoadCell, RoadCell Mezők tartalma: Robber, Empty, Empty, Empty Analóg esetek: Leírás: Robber következő mezőt választ. 6. tesztpálya: Mezők száma: 2 Mezők típusa: RoadCell, RoadCell Mezők tartalma: Robber, CivilCar Analóg esetek: Robber Rendőrrel ütközik Leírás: Robber CivilCarral ütközik. 7. tesztpálya: Mezők száma: 2 Mezők típusa: RoadCell, HidingPlace Mezők tartalma: Robber, Empty Analóg esetek: Leírás: Robber eljut a HidingPlacere. 8. tesztpálya: Mezők száma: 4 Mezők típusa: Roadcell, Intersection, RoadCell, RoadCell Mezők tartalma:civilcar, Empty, Empty, Empty Analóg esetek: Policeman chooses next cell Leírás: CivilCar következő mezőt választ. 9. tesztpálya: Mezők száma: 1 Mezők típusa: Roadcell Mezők tartalma:civilcar Analóg esetek: Policeman dies, Robber dies Leírás: CivilCar törli magát az őt tartalmazó celláról. 10. tesztpálya: Mezők száma: 2 Mezők típusa: Roadcell, RoadCell Mezők tartalma:civilcar, CivilCar Analóg esetek: Policeman vs Policeman, Policeman vs CivilCar Leírás: CivilCar lelassít egy másik CivilCar mögött. 11. tesztpálya: Mezők száma: 2 Mezők típusa: Roadcell, RoadCell Mezők tartalma:civilcar, CivilCar Analóg esetek: Policeman moves, Robber moves Leírás: CivilCar a következő mezőre lép. 12. tesztpálya: Mezők száma: 2 Mezők típusa: Roadcell, CityExit Mezők tartalma:civilcar, Empty Analóg esetek: Policeman vs CityExit Leírás: CivilCar kilép a városból. 3.3 A szkeleton kezelői felületének terve, dialógusok A szkeletonban minden később alkalmazandó objektum szerepel, ezeknek azonban csak az interfészük definiált. Algoritmus egyetlen metóduson belül sincs implementálva, ez előre definiált módon történik (felhasználótól bekér adatot). Minden metódus hívásakor és visszatérésekor kiírja a standard kimenetre az ő nevét, azonosítóját, típusát, paramétereit. Viharvadász csapat,

49 3. Szkeleton tervezése Vihar Az így megalkotott programnak a feladata, hogy bizonyítsa az eddig csupán modelleken keresztül leírt működést a megadott körülményeknek és specifikációnak megfelelően. A szekvenciadiagramok így könnyen ellenőrizhetőek lesznek, erről a részletezett kiírás is gondoskodik, méghozzá a következőképpen: Minden sorba az alábbi adatok kerülnek: Objektum neve Osztály neve Objektum hash kódja Meghívott vagy visszatérő metódus neve és paramétere(i), visszatérési értéke (ha van), ezek tulajdonságai, meghívott objektum ugyanilyen tulajdonságai (név, kód, osztálynév) Hívás, vagy visszatérése (call és return) Egy példa a fentiekre: Software laboratory 4 Team vihar Skeleton Input file given as command line argument: testcases\level10.txt *** Test case 11: Car moves to next cell *** [game Game ] > [civilcar0 CivilCar ]. tick() CALL [civilcar0 CivilCar ] > [cell1 RoadCell ]. getvehicle() CALL [civilcar0 CivilCar ] < [cell1 RoadCell ]. getvehicle() RETURN [civilcar0 CivilCar ] > [civilcar0 CivilCar ]. accept(vehicle v) CALL [civilcar0 CivilCar ] < [civilcar0 CivilCar ]. accept(vehicle v) RETURN [civilcar0 CivilCar ] > [cell0 RoadCell ]. leave() CALL [civilcar0 CivilCar ] < [cell0 RoadCell ]. leave() RETURN [civilcar0 CivilCar ] > [cell1 RoadCell ]. enter(vehicle v CALL [civilcar0 CivilCar ] < [cell1 RoadCell ]. enter(vehicle v) RETURN [game Game ] < [civilcar0 CivilCar ]. tick() RETURN Skeleton test finished succesfully! 3.4 Szekvencia diagramok a belső működésre Teszpálya sorszáma Tesztpálya leírása Megvalósított szekvencia diagram(ok) 1. Játékmező legenerálása Initializing Game 2. Következő mező tábla/lámpa állapotának lekérdezése Vehicle checks if it can leave its cell, Light Stepping 3. A rendőr elkapja a rablót On The Same Road Viharvadász csapat,

50 3. Szkeleton tervezése Vihar Napló Egy a várost elhagyó autót (civil vagy rendőr) visszateszünk az egyik bejövő városhatárra. A rabló kiválasztja a következő cellát, amerre haladni szeretne. A rabló összeütközik egy autóval (civil vagy rendőr). A rabló eléri a rejtekhelyét, azaz megmenekül. Egy autó (civil vagy rendőr) kiválasztja a következő cellát, amerre haladni szeretne. Egy autó (civil, rendőr vagy rabló) törli a referenciáját az aktuális mezőről, mielőtt meghal. Egy autó (civil vagy rendőr) lelassít egy másik, lassabb autó (civil vagy rendőr) mögött. Egy autó (civil, rendőr vagy rabló) a következő mezőre lép. Egy autó (civil vagy rendőr) elhagyja a várost. Regenerate Killed Vehicles Robber chooses next cell Robber meets Vehicle Robber vs hidingplace Vehicle chooses next cell Vehicle Dies Vehicle meets Vehicle, Sebességek Vehicle moves to next empty cell Vehicle vs CityExit Kezdet Időtartam Résztvevők Leírás ,5 óra Nagy Részletes UseCase diagramok elkészítése :00 2 óra Szebeni, Herber, Pál Értekezlet, Use Case módosítása, skeleton átbeszélése, feladatkiosztás :00 0,5 óra Pál Előző dokumentáció javítása (követelmény) :00 2 óra Herber Tesztesetek összeírása :00 0,5 óra Szebeni Kimaradt szekvencia szerkeztése, usecase Viharvadász csapat,

51 3. Szkeleton tervezése Vihar diagramok szerkesztése :00 1 óra Herber Kimaradt tesztesetek beillesztese, javítás :00 0,5 óra Pál Dokumentációhoz tartozó szöveg elkészítése :00 2 óra Szebeni, Herber, Pál, Nagy Értekezlet Összesítve: Név Ezen a héten Összesen Herber Máté 7 32 Pál Balázs 5 40 Szebeni Szilveszter Nagy Krisztián Viharvadász csapat,

52 4. Szkeleton beadása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

53 4. Szkeleton beadás Vihar Szkeleton beadás 4.1 Fordítási és futtatási útmutató Fájllista Fájl neve Méret (byte) Utolsó módosítás Tartalom Bank.java :40 Bankot reprezentáló osztály Cell.java :48 Cellát reprezentáló osztály CityEntry.java :40 Városhatárbejáratot reprezentáló osztály CityExit.java :39 Városhatárkijáratot reprezentáló osztály CivilCar.java :39 Civil autót megvalósító osztály Clock.java :40 Játékórát megvalósító osztály ConsoleLogger.java :40 Parancssorra naplózó osztály CustomReader.java :57 Bemenetet olvasó osztály Game.java :39 Játékot összefogó osztály HidingPlace.java :39 Rejtekhelyet reprezentáló osztály INamedObject.java :40 Névvel rendelkező osztályok interfésze Intersection.java :39 Útkereszteződést reprezentáló osztály ISign.java :39 Közlekedési jelzések közös interfésze Logger.java :39 Általános naplózó osztály NamedObject.java :39 Névvel rendelkező osztályok közös őse Policeman.java :39 Rendőrt megvalósító osztály Road.java 4707 Utat reprezentáló osztály RoadCell.java :48 Úton egy cellát reprezentáló osztály Robber.java :39 Bankrablót megvalósító osztály Skeleton.java :39 A szkeleton főosztálya StopSign.java :39 Stop táblát megvalósító osztály TrafficLight.java :39 Közlekedési lámpát megvalósító osztály Vehicle.java :39 Általános jármű osztály compile.bat :14 Fordítást segítő batch fájl runme.bat :48 A programot futtató batch fájl testcases.bat :39 A programot a tesztesetfájlokkal futtató batch fájl compile.sh :57 Fordítást segítő bash szkript compileandrun.sh :15 Fordítást és futtatást is végző bash szkript runalltestcases.sh :57 A programot a tesztesetfájlokkal futtató bash szkript 53

54 4. Szkeleton beadás Vihar level1.txt :39 Első teszteset példabemenetei level2.txt :39 2. teszteset példabemenetei level3.txt :39 3. teszteset példabemenetei level4.txt :39 4. teszteset példabemenetei level5.txt :39 5. teszteset példabemenetei level6.txt :39 6. teszteset példabemenetei level7.txt :39 7. teszteset példabemenetei level8.txt :39 8. teszteset példabemenetei level9.txt :39 9. teszteset példabemenetei level10.txt : teszteset példabemenetei level11.txt : teszteset példabemenetei level12.txt : teszteset példabemenetei Fordítás A program kódját mellékeltük egy src nevű mappában, valamint egy bin mappát. Ezen belül a testcases mappában találhatóak az egyes tesztesetek bemeneteit tartalmazó fájlok. Magában a bin mappában pedig batch, illetve shell szkript fájlok találhatóak. A compile.bat (vagy linuxos környezet esetén a compile.sh) a fordítást megkönnyítendő, lefuttatása után (ha javac megtalálható), a bin\skeleton mappába fordítja a programot. Persze a hagyományos javac fordítást is végezhetjük Futtatás Majd a testcases.bat (illetve a runalltestcases.sh) fájl segítségével egy indításra lefuttathatjuk az összes tesztesetet. Ha az automatikus módot választottuk, a szkeleton lefut, majd konzolos megjelenítőn megjelenik az összes eset. Amennyiben a tesztelést magunk akarjuk elvégezni úgy a programot a következő paraméterekkel indíthatjuk: java classpath bin skeleton.skeleton [args] Az argumentum a következő kettő lehet: s : ha csendes módban szeretnénk tesztelni, vagyis ha fájlból olvassuk a parancsokat, a kérdés és a választott érték ne szerepeljen a konzolon. Ezen beállításnak nyilván csak akkor van értelme, ha második paraméterként megadunk egy fájlnevet, melyből a parancsokat beolvassuk. parancs file elérési útja és fájlnév: Ha az opciókat egy tesztfájlból adjuk a programnak, nem mi visszük be kézzel konzolról, itt is szerepelhetnek a fájladatai. Amennyiben megadtunk 1 vagy 2 paramétert, a program automatikusan fog futni a parancsfájlnak megfelelően, azonnal láthatjuk az eredményt. Amennyiben nem adtunk meg paramétert, a szkeleton elindul, majd megkérdezi tőlünk, hogy konzolról, illetve fájlból kívánjuk a parancsokat megadni. Ekkor még van lehetőségünk a parancsfájl opciót választani, azaz automatikusan lefuttatni egy előre megadott tesztesetet. Amennyiben kézzel szeretnénk tesztelni, válasszuk a konzolos bevitelt, ekkor eljutunk a szkeleton menüjébe, ahol választhatunk a főbb tesztesetek közül. Miután elkezdődött az egyik teszteset, finomhangolásként több kérdést tehet fel nekünk a szkeleton, így eldönthetjük, hogy pontosan hogyan menjenek végbe a dolgok, valamint mik legyenek a visszatérési értékek, így teljesen részletesen tesztelhetünk. Megjegyzés: A fordításnak feltétele, hogy a globális PATH változók között szerepeljenek a java futtatókörnyezet és sdk bináris fájljai. 54

55 4. Szkeleton beadás Vihar 4.2 Értékelés Egy nagy projekthez szervezés kell, de annak pontosan az a lényege, hogy ne ütközzenek egymással a feladatok, külön legyen választva a dokumentálás, a tervezés és az implementálás egyes fázisai. Nekünk sok bajunk származik abból, hogy minden feladatban mindenki részt vesz egy kicsit, és mivel sokan sokfélét gondoltak, változatos lett a modell és az alkalmazás is. A legnagyobb probléma az, hogy mindig pénteken tudjuk meg, hogy pontosan mit kell csinálni, és a péntek utáni első alkalom, amikor látjuk egymást, az a hétfő, ami már egy nappal a beadási határidő előtt van, és így mindig az utolsó pillanatra maradnak a dolgok. A hétvége másik tulajdonsága folytán előfordul, hogy egy csapattag elutazik egy egész hétvégére és így nem tud részt venni a csapatmunkában. Ha hétről hétre lebontjuk a munkaidőket, látszik, hogy egyes heteken egyes csapattagok túlterheltek, míg mások másik heteken végzik el a feladatok nagy részét. Sok héten keresztül nagyjából kialakítottuk a modellünket, bár kódolás közben még nagyon sok mindenről nem tudjuk, hogy hogyan fog működni. Így aztán végül csak az történik, ami mindig is szokott, hogy írunk valami kódot, aztán visszafelé kialakítunk belőle dokumentációrészeket, illetőleg ezúttal egy modellt is. Két kreditért ez az óraszám, mely tükröződik az összesített munkában, többszöröse annak, mint ami más tantárgyakról, de több az előírt óraszámnál is. Kódolás közben nehéz megérteni, hogy egy másik kódoló mit csinál, meg többszöri feltöltés után összeakadtak a kódjaink, talán ez egy jó szervezéssel elkerülhető lett volna. Remélem, hasznosak lesznek a jövőben ezek a tapasztalatok, amit mindannyian gyűjtünk, ha más nem, akkor a problémamegoldó képességünk, és az "utolsó pillanatban kapjunk össze valamit" képességünk fejlődik. Mindazonáltal hiába érdekes a feladat, hiába új a csapatban dolgozás élménye, a kettő sovány kredit és a jelentő időbefektetés úgy tűnik, nem hozza meg a gyümölcsét. Csak bízni tudunk benne, hogy a későbbiekben kevesebb erőforrást emészt fel a fejlesztés, és a specifikációváltozás is modellbe vágó lesz. Tag neve Munka százalékban Herber Máté 25 Nagy Krisztián 25 Pál Balázs Sándor 25 Szebeni Szilveszter 25 55

56 4. Szkeleton beadás Vihar 4.3 Napló Kezdet Időtartam Résztvevők Leírás óra Herber, Szebeni Konzultáció, Tesztek folyamatának átbeszélése, feladatok kiosztása óra Szebeni Mult heti usecase leírások óra Nagy Szkeleton fejlesztés óra Szebeni Mult heti usecase leírások, és az óra use case diagram változtatása óra Nagy Szkeleton fejlesztés óra Nagy Szkeleton fejlesztés óra Szebeni Szkeleton tesztelése : óra Herber Szkeleton fejlesztés :00 2 óra Herber Szkeleton fejlesztés, tesztesetek és szekvencia diagramok : óra Herber Szkeleton fejlesztés, fordítási és futtatási doksi :00 3 óra Herber Szkeleton fejlesztés :30 1 óra Szebeni Szkeletont megnéztem, leforditottam, futatttam, sok még a hiány, megbeszéltem Krisztiánnal, hogy befejezi ma délutánra :30 1 óra Herber Szkeleton fejlesztés óra Nagy Szkeleton fejlesztés : óra Herber Szkeleton fejlesztés, batok, doksi bugfix, összefoglaló :30 1 óra Pál Dokumentációk javítása : óra Szebeni Értékelés óra Nagy Szkeleton fejlesztés Név Ezen a héten Összesen Herber Pál 1 41 Szebeni Nagy

57 5. Prototípus koncepciója 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

58 5. Prototípus koncepciója Vihar 5. Prototípus koncepciója 5.1 Prototípus interfacedefiníciója A prototípus a szkeletonhoz hasonlóan konzolos felületen keresztül lesz irányítható, valamint konzolra írja ki az adatokat. Az irányítás az általunk meghatározott különböző parancsokkal lesz lehetséges. A prototípus már nem csak függvényhívássorrendet fog mutatni (szekvenciákat), hanem a játék tényleges működését. A teszteléshez teszteseteket hozunk létre, melyek konkrét parancssorozatból állnak, így automatikusan tudják a játék menetét befolyásolni. Minden teszteset kimenetének egyeznie kell az általunk előre meghatározott referencia kimenettel. Ezen referencia kimenetek majd a prototípus részletes tervében kerülnek bemutatásra. Fontos, hogy a tesztek mindenki számára egyértelmű eseménysorozatot tartalmazzanak, valamint többször, azonos formában megismételhetőek legyenek, az utóbbi érdekében a véletlen paraméterek is beállíthatóak (a véletlenszerűség továbbá kikapcsolható). A teszteseteket fájlból is be lehet olvasni. Minden csapattag ezen elveket szem előtt tartva látott a tervezéshez Az interfész általános leírása A prototípus már a játék tényleges működését tudja mutatni. Itt a parancsok segítségével befolyásolhatjuk a játék menetét, így a tesztesetek lefuttatását is. Ez történhet konzolon keresztül, illetve fájlból is. A létrehozott tesztesetekhez tartozik egy referencia kimenet is, ezzel összevethető a tényleges kimenet. Ehhez is segítségül szolgál az a lehetőség, hogy a konzolos kimenet helyett az eredményt fájlba rögzítjük. A véletlenszerűséget pedix fixen tarthatjuk annak érdekében, hogy ellenőrizni tudjuk a helyes működést fejlesztés közben, müdosítások után, valamint más körülmények között történő lefutás esetén is Bemeneti nyelv loadcommands Leírás: Beolvassa és végrehajtja a commands.txt fájlban található parancsokat Opciók: commands.txt loadmap Leírás: Beolvassa a map.txt fájból az aktuális tesztpályát Opciók: map.txt movecivil Leírás: Az n. CivilCar a következő kereszteződésnél a lehetőségek közül az i. cellát választja Opciók: n, i movepolice Leírás: Az n. Policeman a következő kereszteződésnél a lehetőségek közül az i. cellát választja Opciók: n,i moverobber Leírás: A rabló a következő kereszteződésnél a lehetőségek közül az i. cellát választja Opciók: n,i turnoffspeed Viharvadász csapat,

59 5. Prototípus koncepciója Vihar Leírás: Autók sebességének kikapcsolása/bekapcsolása (sw paraméterrel). (Minden autó minden tickre lép, vagy sebességüknek megfelelően). Opciók: sw setsign Leírás: Beállítja az n. lámpa/ állapotát blocking állapotra, és beállítja a megfelelő számlálókat. Opciók: n, blocking tick exit Leírás: Az egész játékteret nel lépteti (n darab tick) Opciók: n Leírás: Kilép a tesztelésből. Opciók: n writemap Leírás: Kiírja a pálya állását. (Bementként is értelmezhető formátumban) (Lásd pálya szerkezete) setgodmodeduration A nyuszi elütése által okozott halhatatlanság hosszát állítja be ire (tickekben mérve) Opciók: i setinversespeed A kiválasztott jármű inverz sebességét állítja be. Opciók: típus: c CivilCar / p Policeman / r Robber sorszám: jármű sorszáma (Robber esetén kimarad) érték: a kívánt inverz sebességérték Kimeneti nyelv Hibaüzenetek: x Error: FileNotFound: Nem található a megadott bemeneti fájl. x Error: UnknownCommand: Nem értelmezhető parancs. x Error: MismatchingParameters: Hibás paraméterek a parancsnak. x Error: InvalidMapStructure: Hibás pálya leírás. x Error: InvalidEventOccured: Hibás esemény egy játékelem által. Események: A writemap parancsra kiíródik a pálya később ismertetett formátumban. Bármely játékelem, ha cselekvést hajt végre, kiír egy üzenetet a konzolra: o Event: TickNum ElemTípus ElemNév [Elemsorszám/](ha van) Esemény (pl: o Event: Robber r Went to 1. Cell. o Event: PoliceMan p1 0 Stepped.) Viharvadász csapat,

60 5. Prototípus koncepciója Vihar Az o Event... kimeneten kívül még 3 speciális kimenet létezik: o tick n : az n. ticknél tartunk (ezáltal az Eventeknél nem kell feltüntetni a ticket) o Game Over : a rabló elveszítette a játékot o You won the game! : a rabló megnyerte a játékot A pálya formátuma: A pályán az alábbi objektumok lehetnek CityEntry E[#] CityExit X[#] InterSection I[#] Bank B HidingPlace H RoadCell F StopSign S[#] TrafficLight T[#] CivilCar C[#] PoliceMan P[#] Robber R A név után látszik, hogy hogyan is jelöljük a pálya fájljában az egyes elemeket, valamint néhány után van [#], amivel jelezzük, hogy ezeket az elemeket számokkal kell ellátnunk, hogy a későbbiek során vezérelni tudjuk őket, illetve, hogy a pályaépítés során azonosíthatók legyenek. A pálya reprezentációban minden sorban egyegy út szerepel, a két szélén az őt körbevevő Intersection elemekkel. Ha egy útelem (Cell) tartalmaz egy objektumot (Vehicle vagy Sign típusút), akkor kapcsos zárójelek között kell rögzíteni mögé (ha többet is, akkor vesszővel elválasztva kapcsos zárójelek között. Ilyen módon egyértelműen generálható a pálya az általunk megadott leírásból. A tábla és lámpa elemek ugyanazon sorszámozáson osztoznak, hiszen vezérlés szempontjából nem különböznek. A menetirány balról jobbra halad minden út esetében. Példa: E[0]B{R} B{R}FF{S[0]}I[0] E[1]F{C[0]}I[0] I[0]FI[1] I[1]FF{P[0]}H HX[0] I[1]F{C[1],T[1]}X[1] Akkor jó egy pálya, ha: Minden olyan intersection, amiből csak kifelé indul út, az CityEntry. Tinden olyan intersection, amibe csak befelé megy út, az CityExit. Tábla vagy lámpa csak az út utolsó celláján lehet. Viharvadász csapat,

61 5. Prototípus koncepciója Vihar 5.2 Összes részletes usecase Viharvadász csapat,

62 5. Prototípus koncepciója Vihar Játékoshoz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Start Game A felhasználó új játékot indít Játékos A felhasználó az új játékot kiválasztja a menüből, és új játékot indíthat. Move character A felhasználó irányítja a rablót Játékos Billentyűzeten, és egér használatával, a felhasználó különböző utasításokkal irányíthatja a rablót Órához kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Time Stepping Az időzítő által elindított esemény Óra Az óra meghatározott időintervallumonként léptet egyet a pálya megadott szereplőin Utakhoz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Road Steppin A forgalomirányítás Óra Az út a rajta lévő forgalomirányítási eszközöket lépteti Táblálkhoz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv ISign Stepping Forgalomirányítási eszközök léptetése Óra A stoptábla egy meghatározott ideig blokkol, a jelzőlámpa pedig időnként vált Városhatárhoz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv CivilCar Enter The City Új civil autók létrehozása Óra Ha kevés a civil autó, akkor egy városhatárnál létrejön egy civil autó. Viharvadász csapat,

63 5. Prototípus koncepciója Vihar Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Policeman Enter The City Új rendőrautók létrehozása Óra Ha kevés a rendőrautó, akkor egy városhatárnál létrejön egy rendőrautó. Car Leaves The City Autó elhagyja a várost Óra Ha egy autó egy városhatárhoz ér, akkor kilép a városból Minden járműhöz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Car Ticking Egy autó mozgatása Óra Az autó csökkenti a számlálóját, ha 0 lesz, akkor az Car Moving To Next Cell use caset fogja lekezelni. Car Moving To Next Cell Autó lép Óra Egy autó megpróbál lépni a következő cellára Rendőrhöz és Civil autóhoz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Car Moving To Empty Cell Autó lép egyet Óra Egy autó halad előre egy egységet egy véletlenszerű irányba. Car Waiting Because Of Sign/Light Forgalmi akadály Óra Ha egy autó megpróbál lépni és van egy forgalomjelző, ami ezt nem engedi, akkor lépés helyett várakozik. Car Waiting Because Of Car Being Infront Ütközés elkerülése Óra Ha egy autó lépni próbál, és észleli, hogy van előtte egy másik autó akkor ahelyett, hogy tovább lépne, várakozik, hogy elkerülje az üközést. Viharvadász csapat,

64 5. Prototípus koncepciója Vihar Rendőrhöz kapcsolódó use caseek Usecase neve Finding Robber Rövid leírás Rendőr keresi a rablót Aktorok Óra Forgatókönyv A rendőr, ha egy utcában van a rablóval, akkor megtalálta. Usecase neve Rövid leírás Aktorok Forgatókönyv Founding Robber Rabló letartóztatása Óra Ha a rendőr megtalálta a rablót, akkor letartóztatja Rablóhoz kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Robber Stepping Rabló mozgás Óra A rabló csökkenti a számlálóját, ha 0 lesz, akkor a Robber Moving To Next Cell use caset fogja lekezelni. Robber Hiding A rabló megmenekül Óra Ha a rabló elérte a rejtekhelyet, akkor elbújik, így megmenekül. Robber Moving To Next Cell Rabló lép Óra A rabló megpróbál lépni a következő cellára. Usecase neve Rövid leírás Aktorok Forgatókönyv Robber Crashing Into A Car Rabló ütközik Óra Ha egy rabló nekimenne egy autónak, akkor ütközik vele és meghal. Usecase neve Rövid leírás Aktorok Forgatókönyv Robber Moving To Empty Cell Rabló lép egyet Óra Rabló lép előre egy egységet, amennyiben lehetséges, akkor a preferált irányba lép, egyébként az alapértelmezett irányt választja. Viharvadász csapat,

65 5. Prototípus koncepciója Vihar Nyuszi kapcsolódó use caseek Usecase neve Rövid leírás Aktorok Forgatókönyv Robber Hit Bunny Rabló elüti a nyuszit, és átmegy GodModeba Óra Ha a rabló elüti a nyuszit, ilyenkor átmegy GodModeba és a nyuszi meghal és a rendőr lép egyet. Usecase neve Rövid leírás Aktorok Forgatókönyv Usecase neve Rövid leírás Aktorok Forgatókönyv Start GodMode Immunitást megkezdése Óra Ha a rabló elüti a nyuszit, ilyenkor átmegy GodModeba, ami azt jelenti, hogy egy időre, immunitást élvez és ilyenkor nem tudja elkapni a rendőr. Car Hit Bunny Autó elüt egy nyuszit Óra A nyuszi meghal és az autó lép egyet. 5.3 Tesztelési terv A programot az összes tesztesetre lefuttatjuk, és a kimenetet az általunk írt program segítségével összehasonlítjuk a referencia kimenettel. Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Car vs Signs Egy autó odaér egy kereszteződés elé és ott egy stoptábla megállítja. A táblák és lámpák működésének tesztelése Car vs Car Egy autó utolér egy másikat, majd lelassít mögötte. Sebességkülönbségek kezelésének vizsgálata, találkozás. Robber vs Car A rabló belefut egy civilbe. A rabló ütközésének tesztelése, játék vége. Teszteset neve Rövid leírás Teszt célja Car Chooses Direction Egy autó választ a lehetőségek közül, hogy merre haladjon egy elágazás közepén. Kanyarodás tesztelése. Viharvadász csapat,

66 5. Prototípus koncepciója Vihar Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Teszteset neve Rövid leírás Teszt célja Robber Chooses Direction A rabló kiválasztja, hogy merre haladjon egy elágazásnál. A többi autóéhoz képest máshogy működik. Rabló kanyarodásának tesztelése. Policeman vs Robber A rendőr abba az utcába érkezik, ahol a rabló tartózkodik. Rabló letartóztatásának tesztelése. Robber Gets from Bank to HidingPlace A rabló eljut a banktól a rejtekhelyre, közben a többi jármű megadott módon viselkedik. Játék felépítésének tesztelése, rabló és egyéb járművek mozgásának tesztelése, sebességek, lámpák tesztelése, HidingPlace elérésénél játék leállításának tesztelése. Car vs CityExit then Regenerate Egy autó kilép a városból egy CityExiten, majd egy CityEntryn visszatér. CityExit és CityEntry, valamint újragenerálás tesztelése. Lamp moves from nonblocking to blocking Egy lámpa a tickek haladtával állapotot vált. Lámpák állapotainak tesztelése. Robber hits the bunny and gets GodMode A rabló elüti a húsvéti nyuszit, így egy időre halhatatlan lesz. Nyuszi és rabló kapcsolatának tesztelése. Car hits the bunny Az autó elüti a húsvéti nyuszit, nem történik semmi különös. Autó és nyuszi kapcsolatának vizsgálata. 5.4 Tesztelést támogató segéd és fordítóprogramok specifikálása A tesztelés közben a pálya bármikor kiíratható a megadott formátumban, lementhetjük az aktuális játékállást egy későbbi teszthez. Mivel össze kell hasonlítanunk a futások eredményét a referenciakimenettel, ezért írunk egy programot, mely el tudja végezni az összehasonlítást két szöveges fájl között. Paraméterek: in1.txt in2.txt Viharvadász csapat,

67 5. Prototípus koncepciója Vihar Leírás: Az in1.txt bemeneti fájlt karakterről karakterre összehasonlítja az in2.txt bemeneti fájllal. Ha egyeznek kiírja, hogy a tesztelés sikeres, ha nem, kiírja az első eltérés karakterpozícióját. Pl.: in1.txt in2.txt alma barack kutya alma barack kutya CompareFiles in1.txt in2.txt The two input files are identical! Testing case was succesful in1.txt alma barack kutya in2.txt alma baaarack kutya CompareFiles in1.txt in2.txt The two input files differs. First character position of difference: Napló Kezdet Időtartam Résztvevők Leírás óra Herber, Szebeni, Konzultáció, Tesztelés Pál, Nagy óra Szebeni Use casek, kód vizsgálata :00 6 óra Herber dokumentáció írás :00 0,5 óra Pál dokumentáció véglegesítése :30 1,5 óra Pál, Szebeni, Nagy Értekezlet, jövő heti munkák kiosztása héten összesen Herber Pál 4 45 Szebeni Nagy Viharvadász csapat,

68 6. Részletes tervek 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

69 6. Részletes tervek Vihar Részletes tervek 6.1 Osztályok és metódusok tervei. Bank Felelősség A bank reprezentálja azt az osztályt, ahonnan a rabló indul. Ősosztályok Cell Intersection Interfészek Attribútumok Metódusok Bunny Felelősség A nyuszit megvalósító osztály, az utakon van jelen. Ősosztályok Vehicle Interfészek Attribútumok Metódusok Cell Felelősség Egy cellát reprezentál, ami a pályán helyezkedik el. Absztrakt osztály, de minden cellához szükséges tulajdonsággal fel van ruházva. Ősosztályok Viharvadász csapat,

70 6. Részletes tervek Vihar Interfészek Attribútumok vehicle: Vehicle: A cellán álló Vehicle referenciája, privát adattag, csak a belső függvények látják. Metódusok void enter(r: Robber): A cellára érkező bankrablóra vonatkozó publikus láthatóságú függvény. void enter(c: CivilCar): Ld. előző, csak civil autó esete. void enter(p: PoliceMan): Rendőr esete. void enter(b: Bunny): A nyuszi beérkezésének esetében. Cell[] getnextcells(): Az ezen celláról előrefelé haladó irányban elérhető cellákat adja vissza, publikus Cell[] getpreviouscells(): Az ezen celláról visszafelé haladás közben elérhető cellákat adja vissza (tehát amik az ezt megelőző cellák), publikus. Road getroad(): A cellához tartozó utat adja vissza. Publikus tagfüggvény. ISign getsign(): A cellán (esetlegesen) található táblával visszatérő publikus függvény. Vehicle getvehicle(): A cellán található jármű referenciájával visszatérő publikus láthatóságú tagfüggvénye a Cell osztálynak. void leave(): A cellán található jármű elhagyja a cellát. void enter(b: Bunny): A nyuszi beérkezésének esetében. void setvehicle(v: Vehicle): A cellára jármű érkezik, ezt rögzíti és eltárolja ez a publikus láthatóságú tagfüggvény. CivilCar Felelősség A civil autót megvalósító osztály, egy, az utakon közlekedő civil autó reprezentálására. Ősosztályok Vehicle Interfészek Attribútumok Metódusok Viharvadász csapat,

71 6. Részletes tervek Vihar CityExit Felelősség A városból való kilépési pontot valósítja meg, itt távozhatnak a meghatározott autók a városból. Ősosztályok Cell Intersection Interfészek Attribútumok Metódusok void enter(p: Policeman): A rendőr érkezése a kilépési pontra. Publikus láthatóságú. void enter(c: CivilCar): A civil autó érkezése a városhatárra, publikus agfüggvény. CityEntry Felelősség A városba a belépési pontot reprezentáló kereszteződés. Ősosztályok Cell Intersection Interfészek Attribútumok Metódusok Clock Felelősség Az órát reprezentáló osztály, mely időnként kiadja a játék vezérléséért felelő tick jelet. Ezzel egy kör lezárul és újabb kezdődik a Game életében. Ősosztályok Interfészek Viharvadász csapat,

72 6. Részletes tervek Vihar Attribútumok Metódusok boolean tick(): A publikus tagfüggvény, mely a jelet kiadja, ha megkezdődhet a következő kör. Game Felelősség A játék egészéért, annak irányításáért, karban tartásáért felelős osztályt valósítja meg. Ősosztályok Interfészek Attribútumok bank: Bank: A bank referenciáját tárolja, hogy tudja generálni, és a játék győzelmável foglalkozni. Privát láthatóságú. bunnies: Bunny[]: A nyuszikat tároló privát láthatóságú lista. cars: CivilCar[]: A civil autókat eltároló privát lista. cityentries: CityEntry[]: A város belépési pontjait tartalmazó privát tömb. clock: Clock[]: A játék vezérléséért felelős óra egy példányának privát referenciája. intersections: Intersection[]: Az elágazásokat tároló tömb, láthatósága privát. mincivilcar: int: A minimum utakon létező civil autók számát előíró privát integer változó. minpolice: int: A minimum utakon létező rendőrök számát előíró privát integer típusú változó. player: Robber: A (bankrabló) játékos példánya, privát attribútum. policemen: Policeman[]: A rendőröket tartalmazó privát lista. roads: Road[]: Az utakat tartalmazza, azért, hogy a generálásnál megfelelő pályát építhessen a game. Metódusok void gameover(): A játék végekor szükséges intézkedéseket tartalmazó publikus függvény, hogy a bekövetkező halálkor meg lehessen hívni. void generatelevel(): Publikus, a pálya generálásáról gondoskodik. void generatemap(): A térkép felépítéséről gondoskodó publikus tagfüggvény. void generatevehicles(): Járművek generálásáért felelős publikus függvény. CityEntry getemptycityentry(): Visszaadja az egyik üres városhatárbejáratot, ha létezik ilyen. void kill(c: CivilCar): A c civil autót megölő, eltüntető publikus függvény. void kill(p: Policeman): A p rendőrt eltüntető publikus függvény. void kill(r: Robber): Az r bankrablót megsemmisítő publikus tagfüggvény. void kill(b: Bunny): A b nyuszikát eltakarító publikus tagfüggvény. Viharvadász csapat,

73 6. Részletes tervek Vihar void regeneratekilledvehicles(): A játék közben valamilyen útonmódon megsemmisült járművek újra beléptetéséről gondoskodó privát függvény. void tick(): A játék végig tick eléséről gondoskodó függvény, láthatósága publikus. void wingame(): A játék megnyerése esetén fellépő feladatokat ellátó publikus tagfüggvény. HidingPlace Felelősség Ez az osztály reprezentálja azt a kereszteződést, ahova a bankrabló tart. Ősosztályok Intersection Cell Interfészek Attribútumok Metódusok void enter(r: Robber): A bankrabló belépését lekezelő publikus függvény. Intersection Felelősség Egy speciális cella, mely elágazást reprezentál: Több belépő és kilépő cellája lehet/van, valamint többféle speciális elágazás létezik (bank, búvóhely ). Ősosztályok Cell Interfészek Attribútumok nextcells: Cell[]: A következő cellák listáját tartalmazó publikus attribútum. previouscells: Cell[]: Az előző cellákat tartalmazó privát láthatóságú lista. Metódusok void addnextcell(c: Cell): Egy következő cellát csatol a már meglévő cellákhoz. void addprevoiuscell (c: Cell): Egy előző cellát csatol a már meglévő cellákhoz. ISign Felelősség Interfész a közlekedési táblákat/lámpákat megvalósító osztályok számára. Feladata a blokkolás lekérdezésére adott válasz, kezelni a belépő járművet, stb. Viharvadász csapat,

74 6. Részletes tervek Vihar Ősosztályok Interfészek Attribútumok Metódusok boolean isblocking(): Egy publikus láthatóságú boolean függvény, mely annak megfelelően tér vissza, hogy a tábla vagy lámpla éppen blokkoljae az áthaladást. void tick(): Tick parancs (publikus függvény), mely a táblákat szólítja fel az időegység léptetésére. void vehicleentered(): Egy jármű belépését kezeli le (elindítja a várakoztatást, stb.). Láthatósága publikus. Policeman Felelősség A rendőrt megvalósító osztály, mely a jármű minden tulajdonságával rendelkezik, valamint tisztában van magával a bankrablóval is, és ha egy utcába kerülnek, így el is tudja kapni őt. Ősosztályok Vehicle Interfészek Attribútumok wanted: Robber: A bankrablót tároló privát attribútum. A rendőr arra használja fel ezt a tudást, hogy ellenőrizze, egy utcában vannake, így el tudja kapni. Metódusok boolean onthesameroad(r: Robber): Ha egy utcára kerül a rendőr a rablóval, abban a pillanatban letartóztatja. RoadCell Felelősség Az útcella egy olyan speciális cella, mely egy konkrét cellát (egy úthoz tartozó egybelépésű, egykilépésű) reprezentál. Ennek megfelelően van felépítve (attribútumok, stb.). Ősosztályok Cell Interfészek Viharvadász csapat,

75 6. Részletes tervek Vihar Attribútumok nextcell: Cell: A következő cellát tároló privát attribútum, előrefelé haladás esetén érvényes ez. previouscell: Cell: Előző cellát ez a publikus láthatóságú referencia tárolja, a visszafelé haladás (bankrabló pl.) esetén ez a következő cella. Metódusok void setneightbourcells(prev: Cell, next: Cell): A szomszédos cellákat beállító publikus függvény (hogy a generálásnál elérhessük), egy előző, és egy következő cellát fixál. Robber Felelősség A játékos által irányított bankrablót reprezentálja. Célja a banktól a rejtekhelyig úgy eljutnia, hogy elkerüli a rendőrrel egy utcába kerülést és egyetlen civil járművel sem ütközik. Lehetősége van gyorsítani, lassítani, megfordulni, szabályokat áthágni annak érdekében, hogy teljesítse küldetését. Ősosztályok Vehicle Interfészek Attribútumok godtime: int: Az idő, amennyit még sebezhetetlen módban tölthet a bankrabló (a rendőr nem tudja egy utcában elkapni). Privát integer típusú tagváltozó. isgoingforward: boolean: Ez a privát attribútum megadja, hogy a rabló éppen előrefelé, vagy forgalomnak ellenkező irányban halad. maximuminversespeed: int: A maximumsebesség, amit a rabló felvehet. Privát. minimuminversespeed: int: A minimum (inverz) sebesség, amit a rabló felvehet. Ez is privát tagváltozó. preferredcell: Cell: A preferált cellára mutató referenciát tároló privát tagváltozó. Azért kell, mert a bankrabló ezt megváltoztathatja (játékos által), vagy városkijáratnál, esetleg forgalommal szemben. Metódusok void busted(): Ha a rablót elkapják, a bekövetkező események lekezeléséért ez a publikus függvény felel. void choosefrom(cin: Cell[], cout: Cell[]): Az adott celláról kilépő, illetve belépő cellák közül választ ez protected (védett) láthatóságú függvény. void crash():ha a rabló beleütközik valamilyen járműbe (de nem a nyusziba), akkor ez a függvény kezeli le a teendőket. Publikus. void decreasespeed(): A sebesség csökkentéséért felelős publikus függvény. void increasespeed(): A sebesség megnöveléséért felelős publikus függvény. void setpreferredcell(c: Cell): Beállítja a preferált cellát, ennek az eseményeit valósítja meg ez a publikus függvény. Viharvadász csapat,

76 6. Részletes tervek Vihar void startgodmode(): Ha a nyuszit felszedte a rabló, akkor átlép sebezhetetlen módba. Ezért a feladatért felel ez a publikus láthatóságú tagfüggvény. void turnaround(): Ez a publikus függvény valósítja meg a megfordulást.. void getroad(): Lekéri az utat, amin éppen tartózkodik, lévén szüksége van rá a rendőr figyelésekor. Publikus. void hide(): Ha a bankrabló eléri a rejtekhelyet, elbújik. Ennek lekezeléséről gondoskodik ez a tagfüggvény, mely publikus. Road Felelősség Egy utat valósít meg, cellákat tartalmaz, melyből két kiemelt szerepű cella (mely nem mellékesen kereszteződés) van: Egy belépő és egy kilépő (az út eleje és vége csatlakozik ide). Ősosztályok Interfészek Attribútumok cells: Cell[]: Az út saját celláit tartalmazó lista. Privát a láthatósága. entry: Intersection: A belépő kereszteződés. Privát. exit: Intersection: A kilépő kereszteződés. Láthatóságát tekintve privát. Metódusok void generatecells(): Legenerálja a saját celláit az út, ez a függvény érte a felelős. Hogy meg tudjuk hívni kívülről, láthatósága publikus. Intersection getentryintersection(): Felelős a belépő kereszteződés visszaadásáért, ennek érdekében publikus tagfüggvény. Intersection getexitintersection(): Ld. fentebb, csak kilépő. Természetesen publikus tagfüggvény. StopSign Felelősség Egy ISign interfészű tábla, méghozzá speciálisan STOP tábla. Az ide érkező járművek várakozásra kényszerülnek, mielőtt továbbhaladnának. Ősosztályok Interfészek ISign Attribútumok int tickamount: Privát attribútum, azt határozza meg, mennyi van még a várakozási időből vissza. Viharvadász csapat,

77 6. Részletes tervek Vihar int waittime: A várakozási időt deklarálja egy adott STOP táblánál. Így tehát privát belső változó. Metódusok TrafficLight Felelősség Közlekedési lámpát valósít meg ez az osztály. Hol zöld, hol piros. Ez utóbbinál a járművek várakozni kényszerülnek, míg ismét nem vált a lámpa. Ősosztályok Interfészek ISign Attribútumok int greentime: A zöld idejét határozza meg ez a privát attribútum. int redtime: A piros idejét határozza meg ez a privát belső tagváltozó. int offset: Két állapot közötti számláló, ez alapján váltakozik, ld. állapotdiagram. Láthatósága privát. Vehicle Felelősség Egy olyan absztrakt osztály, megy el általános, közlekedésre képes járművet valósít meg az utakon. Dönt arról, hogy merre haladjon, betartja a szabályokat (táblák, lámpák és utcairányítások). Kerüli az ütközést, konkrétan nem ütközik (csak ha belemegy a rabló). Ősosztályok Interfészek Attribútumok cell: Cell: A cella referenciája, amin tartózkodik. Privát. game: Game: A játék. Privát. inversespeed: int: A sebességét megadó integer privát változó. ticksleft: int: A következő lépésig hátralévő idő tickekben (maximumértéke nyilván az inversespeed értéke). Ebből kifolyólag ez is privát. Metódusok void accept(v: Vehicle): Ha lép, itt kezeli le a cellára lépés következményeit a jármű. Maga hívja meg, így láthatóságára az OO elvek betartását szem előtt tartva privát. Viharvadász csapat,

78 6. Részletes tervek Vihar Cell choosefrom(c: Cell[]): Választ a lehetséges cellák közül. Lévén maga hívja meg a keresett cellákat átadva, láthatósága protected szükség van rá a leszármazottaknál is. void die(): Ütközés, kilépés stb. esetén megszűnik, ennek lekezelését ez a publikus függvény végzi el. Cell getcell(): Lekérhető a cella, ahol tartózkodik. void interact(r: Robber): Kezeli a találkozást egy bankrablóval. Publikus. void interact(c: CivilCar): Kezeli a találkozást egy civil autóval. Láthatósága publikus. void interact(p: Policeman): Kezeli a találkozást egy rendőrrel. Láthatóságát tekintve ez is publikus. void interact(b: Bunny): Kezeli a találkozást egy nyuszival. Publikus void setcell(c: Cell): Egy cellát beállít, melyre éppen megérkezik a jármű. Ennek megfelelően publikus tagfüggvény. void tick(): Lépteti a járművet, mely ennek hatására változtat a hátralévő lépésein, vagy bepróbálkozik a lépéssel. Más hívja meg, így ez is publikus függvény. 6.2 A tesztek részletes tervei, leírásuk a teszt nyelvén Car vs Sign Leírás Egy autó odaér egy kereszteződés elé és ott egy stoptábla megállítja. Ellenőrzött funkcionalitás, várható hibahelyek Az autó valóban megálle a blokkoló tábla hatására. Az esetleges hiba a Cell.getSign(), illetve az StopSign.isBlocking() metódusokban keresendő. Bemenet loadmap map1.txt writemap setsign 0 true turnoffspeed tick 3 exit map1.txt: E[0]F{C[0]}FF{S[0]}X[0] Elvárt kimenet E[0]F{C[0]}FF{S[0]}X[0] o tick 1 o Event CivilCar C[0] moved to next cell o tick 2 o Event CivilCar C[0] moved to next cell o tick 3 o Event CivilCar C[0] blocked by S[0] Car vs Car Leírás Egy autó utolér egy másikat, majd lelassít mögötte. Viharvadász csapat,

79 6. Részletes tervek Vihar Ellenőrzött funkcionalitás, várható hibahelyek Az autó valóban lelassíte, nem próbál rálépni a következő mezőre. Az esetleges hiba a Cell.getVehicle(), Vehicle.accept(), illetve a Vehicle.interact() metódusokban keresendő. Bemenet loadmap map2.txt writemap setinversespeed c 0 0 setinversespeed c 1 10 tick 2 exit map2.txt: E[0]F{C[0]}FF{C[1]}X[0] Elvárt kimenet E[0]F{C[0]}FF{C[1]}X[0] o tick 1 o Event CivilCar C[0] moved to next cell o tick 2 o Event CivilCar C[0] waiting for C[1] to pass Robber vs Car Leírás A rabló belefut egy civilbe. Ellenőrzött funkcionalitás, várható hibahelyek Az ütközés megfelelő működése. Az esetleges hiba Cell.getVehicle(), Vehicle.accept(), Vehicle.interact(), illetve a Robber.die() metódusokban keresendő. Bemenet loadmap map3.txt writemap setinversespeed c 0 10 setinversespeed r 0 tick 2 exit map3.txt: E[0]F{R}FF{C[0]}X[0] Elvárt kimenet E[0]F{R}FF{C[0]}X[0] o tick 1 o Event Robber R moved to next cell o tick 2 o Event Robber R crashed to C[0] o Event Robber R dies o Game Over Car Chooses Direction Leírás Egy autó választ a lehetőségek közül, hogy merre haladjon egy elágazás közepén. Viharvadász csapat,

80 6. Részletes tervek Vihar Ellenőrzött funkcionalitás, várható hibahelyek Az autó az útkeresztezősédeken jól halad át. Az esetleges hiba az Intersection.getNextCells(), illetve a Vehicle.chooseFrom() metódusokban keresendő. Bemenet loadmap map4.txt writemap turnoffspeed movecivil 0 0 tick 2 writemap exit map4.txt: E[0]F{C[0]}I[0] I[0]FX[0] I[0]FX[1] Elvárt kimenet E[0]F{C[0]}I[0] I[0]FX[0] I[0]FX[1] o tick 1 o Event CivilCar C[0] moved to next cell o tick 2 o Event CivilCar C[0] moved to cell option 0 E[0]FI[0] I[0]F{C[0]}X[0] I[0]FX[1] Robber Chooses Direction Leírás A rabló kiválasztja, hogy merre haladjon egy elágazásnál. A többi autóéhoz képest máshogy működik. Ellenőrzött funkcionalitás, várható hibahelyek Az rabló az útkeresztezősédeken jól halad át. Az esetleges hiba az Intersection.getNextCells(), Intersection.getPreviousCells(), illetve a Robber.chooseFrom() metódusokban keresendő. Bemenet loadmap map5.txt writemap turnoffspeed moverobber 2 tick 2 writemap exit map5.txt: E[0]F{R}I[0] E[1]FI[0] I[0]FX[0] Viharvadász csapat,

81 6. Részletes tervek Vihar Elvárt kimenet E[0]F{R}I[0] E[1]FI[0] I[0]FX[0] o tick 1 o Event Robber R moved to next cell o tick 2 o Event Robber R moved to cell option 2 E[0]FI[0] E[1]F{R}I[0] I[0]FX[0] Policeman vs Robber Leírás A rendőr abba az utcába érkezik, ahol a rabló tartózkodik. Ellenőrzött funkcionalitás, várható hibahelyek Rabló letartóztatásának tesztelése. Az esetleges hiba a Policeman.onTheSameRoad(), Robber.busted(), illetve a Robber.die() metódusokban keresendő. Bemenet loadmap map6.txt writemap turnoffspeed tick 2 exit map6.txt: E[0]F{P[0]}I[0] I[0]F{R}FX[0] Elvárt kimenet E[0]F{P[0]}I[0] I[0]F{R}FX[0] o tick 1 o Event Policeman P[0] moved to next cell o Event Robber R moved to next cell o tick 2 o Event Policeman P[0] moved to cell option 0 o Event Policeman P[0] arrested R o Event Robber R dies o Game Over Robber Gets From Bank to HidingPlace Leírás A rabló eljut a banktól a rejtekhelyre, közben a többi jármű megadott módon viselkedik. Ellenőrzött funkcionalitás, várható hibahelyek Játék felépítésének tesztelése, rabló és egyéb járművek mozgásának tesztelése, sebességek, lámpák tesztelése, HidingPlace elérésénél játék leállításának tesztelése. Az esetleges hiba az osztályok tick() metódusában, illetve a Robber.hide() metódusban keresendő. Viharvadász csapat,

82 6. Részletes tervek Vihar Bemenet loadmap map7.txt writemap movepolice 0 0 movecivil 0 1 moverobber 0 setinversespeed r 1 setinversespeed c 0 2 setinversespeed c 1 3 setinversespeed p 0 4 tick 2 moverobber 3 tick 1 exit map7.txt: E[0]{P[0]}FB{R} E[0]FH BFFF{T[0]}I[0] HF{C[0]}I[0] I[0]F{C[1]}FF{S[0]}X[0] I[0]FFFX[1] Elvárt kimenet E[0]{P[0]}FB{R} E[0]FH BFFF{T[0]}I[0] HFF{C[0]}I[0] I[0]F{C[1]}FF{S[0]}X[0] I[0]FFFX[1] o tick 1 o tick 2 o Event Robber R moved to cell option 0 o tick 3 o Event CivilCar C[0] moved to next cell o tick 4 o Event CivilCar C[1] moved to next cell o Event Robber R moved to next cell o tick 5 o Event TrafficLight T[0] changed to blocking o Event Policeman P[0] moved to cell option 0 o tick 6 o Event CivilCar C[0] moved to cell option 1 o Event Robber R moved to next cell o tick 7 o tick 8 o Event CivilCar C[1] moved to next cell o Event Robber R moved to next cell o tick 9 o Event CivilCar C[0] moved to next cell o tick 10 Viharvadász csapat,

83 6. Részletes tervek Vihar o Event TrafficLight T[0] changed to nonblocking o Event Policeman P[0] moved to next cell o Event Robber R moved to cell option 3 o tick 11 o tick 12 o Event CivilCar C[0] moves to next cell o Event CivilCar C[1] blocked by S[0] o Event Robber R moved to next cell o tick 13 o tick 14 o Event Robber R moved to next cell o Event Robber R hides o You won the game! Car vs CityExit then Regenerate Leírás Egy autó kilép a városból egy CityExiten, majd egy CityEntryn visszatér. Ellenőrzött funkcionalitás, várható hibahelyek CityExit és CityEntry, valamint újragenerálás tesztelése. Az esetleges hiba a CityExit.enter(), illetve a Game.regenerateVehicles() metódusokban keresendő. Bemenet loadmap map8.txt writemap turnoffspeed tick 2 exit map8.txt: E[0]F{C[0]}X[0] Elvárt kimenet E[0]F{C[0]}X[0] o tick 1 o Event CivilCar C[0] moves to next cell o Event CivilCar C[0] leaves the city o Event CivilCar C[0] dies o tick 2 o Event CivilCar C[0] created at E[0] Lamp moves from nonblocking to blocking Leírás Egy lámpa a tickek haladtával állapotot vált. Ellenőrzött funkcionalitás, várható hibahelyek A lámpa helyes működése. Az esetleges hiba a TrafficLight.tick() metódusban keresendő. Bemenet loadmap map9.txt writemap tick 5 exit Viharvadász csapat,

84 6. Részletes tervek Vihar map9.txt: E[0]F{T[0]}X[0] Elvárt kimenet E[0]F{T[0]}X[0] o tick 1 o tick 2 o tick 3 o tick 4 o tick 5 o Event TrafficLight T[0] changed to blocking Robber hits bunny and gets GodMode Leírás A rabló elüti a húsvéti nyuszit, így egy időre halhatatlan lesz. Ellenőrzött funkcionalitás, várható hibahelyek Nyuszi és rabló kapcsolatának tesztelése. Az esetleges hiba a Bunny.interact(), Policeman.onTheSameRoad(), illetve a Robber.busted() metódusokban keresendő. Bemenet loadmap map10.txt writemap setgodmodeduration 5 moverobber 0 turnoffspeed tick 7 exit map10.txt: E[0]F{R}F{U}I[0] I[0]F{P[0]}FFFFFFFX[0] Elvárt kimenet E[0]F{R}F{U}I[0] I[0]F{P[0]}FFFFFFFX[0] o tick 1 o Event Policeman P[0] moved to next cell o Event Robber R hits bunny, GodMode activated o Event Bunny U dies o Event Robber R moved to next cell o tick 2 o Event Policeman P[0] moved to next cell o Event Robber R moved to next cell o tick 3 o Event Policeman P[0] moved to next cell o Event Robber R moved to cell option 0 o tick 4 o Event Policeman P[0] moved to next cell o Event Policeman P[0] failed to arrest R o Event Robber R moved to next cell Viharvadász csapat,

85 6. Részletes tervek Vihar o tick 5 o Event Policeman P[0] moved to next cell o Event Policeman P[0] failed to arrest R o Event Robber R moved to next cell o tick 6 o Event Policeman P[0] moved to next cell o Event Policeman P[0] failed to arrest R o Event Robber R moved to next cell o Event Robber R is no longer in GodMode o tick 7 o Event Policeman P[0] moved to next cell o Event Policeman P[0] arrested R o Event Robber R dies o Game Over CivilCar hits the bunny Leírás Az autó elüti a húsvéti nyuszit, nem történik semmi különös Ellenőrzött funkcionalitás, várható hibahelyek Autó és nyuszi kapcsolatának vizsgálata. Az esetleges hiba a Bunny.interact() függvényben keresendő. Bemenet loadmap map11.txt writemap turnoffspeed tick 2 exit map11.txt: E[0]F{C[0]}F{U}FX[0] Elvárt kimenet E[0]F{C[0]}F{U}FX[0] o tick 1 o Event CivilCar C[0] hits bunny o Event Bunny U dies o Event CivilCar C[0] moved to next cell o tick 2 o Event CivilCar C[0] moved to next cell 6.3 A tesztelést támogató programok tervei A tesztelés közben a pálya bármikor kiíratható a megadott formátumban, lementhetjük az aktuális játékállást egy későbbi teszthez. Mivel össze kell hasonlítanunk a futások eredményét a referenciakimenettel, ezért írunk egy programot, mely el tudja végezni az összehasonlítást két szöveges fájl között. Paraméterek: in1.txt in2.txt Viharvadász csapat,

86 6. Részletes tervek Vihar Leírás: Az in1.txt bemeneti fájlt karakterről karakterre összehasonlítja az in2.txt bemeneti fájllal. Ha egyeznek kiírja, hogy a tesztelés sikeres, ha nem, kiírja az első eltérés karakterpozícióját. Pl.: in1.txt alma barack kutya CompareFiles in1.txt in2.txt The two input files are identical! Testing case was succesful in1.txt alma barack kutya in2.txt alma barack kutya in2.txt alma baaarack kutya CompareFiles in1.txt in2.txt The two input files differs. First character position of difference: Specifikációváltozás A specifikáció változása a modellünkben nem avatkozott bele komolyan a rendszerbe, hiszen az előre elhatározott elveket szem előtt tartva olyan analízis modellt teremtettünk a hetek során, melybe egy ilyen mértékű változtatás könnyen beépíthető volt. A változás a következő volt: Egy nyuszi tűnik fel időnként a pályán, melyet ha felszed a rabló, a rendőr nem tudja elkapni valamilyen módon. Természetesen azért előre nem tudtuk a változást, így módosult a modellünk több ponton is. A következő néhány táblázatban ezeket a módosításokat, valamint javításokat tüntetünk fel. Viharvadász csapat,

87 6. Részletes tervek Vihar A megváltozott osztálydiagram Viharvadász csapat,

88 6. Részletes tervek Vihar A bankrabló következő cellát választ Viharvadász csapat,

89 6. Részletes tervek Vihar A civil autó lép Viharvadász csapat,

90 6. Részletes tervek Vihar A rabló immunitás állapota A rabló nyuszival találkozik Viharvadász csapat,

91 6. Részletes tervek Vihar A rabló járművel találkozik Jármű nyuszival találkozik Viharvadász csapat,

92 6. Részletes tervek Vihar Jármű járművel találkozik A jármű a következő üres cellára lép Viharvadász csapat,

93 6. Részletes tervek Vihar 6.5 Napló Kezdet Időtartam Résztvevők Leírás óra Szebeni Változtatás modellezése : óra Szebeni, Pál, Herber Értekezlet, konzultáció, feladatkiosztás :00 1 óra Herber Hibajavítások, fontosabb feladatok : óra Szebeni, Nagy értekezlet, model megbeszélése :00 3 óra Nagy Tesztesetek részletes tervei :30 2 óra Herber Use case diagram, class diagram, bunny state chart :30 1 óra Herber, Szebeni értekezlet, model ismertetése, részletek megbeszélése (Skype) :30 4 óra Szebeni use casek, osztálydiagram, mult heti doksi javítása, apróbb hibák javítása :30 4 óra Herber activity diagram, hibák javitása, bugfix :30 2,5 Pál Specifikációváltozás dokumentálása, Osztályok és metódusok tervei :00 0,5 óra Nagy Tesztesetek részletes tervei Összesítve: Név Ezen a héten Összesen Herber 9,5 64 Pál 4 49 Szebeni Nagy 4 41 Viharvadász csapat,

94 7. Prototípus beadása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

95 7. Prototípus beadása Vihar Prototípus beadása 7.1 Fordítási és futtatási útmutató Fájllista Fájl neve Méret Keletkezés ideje Tartalom src\ Bank.java :16 Bankot reprezentáló osztály Bunny.java :16 A Húsvéti nyuszit reprezentáló osztály Cell.java :16 Cellát reprezentáló osztály CityEntry.java :16 Városhatárbejáratot reprezentáló osztály CityExit.java :16 Városhatárkijáratot reprezentáló osztály CivilCar.java :16 Civil autót megvalósító osztály Clock.java :16 Játékórát megvalósító osztály ConsoleLogger.java :16 Parancssorra naplózó osztály CustomReader.java :16 Bemenetet olvasó osztály FileLogger.java :22 Fájlba naplózó osztály Game.java :11 Játékot összefogó osztály HidingPlace.java :16 Rejtekhelyet reprezentáló osztály INamedObject.java :16 Névvel rendelkező osztályok interfésze Intersection.java :16 Útkereszteződést reprezentáló osztály ISign.java :16 Közlekedési jelzések közös interfésze Logger.java :16 Általános naplózó osztály NamedObject.java :16 Névvel rendelkező osztályok közös őse Policeman.java :11 Rendőrt megvalósító osztály Proto.java :11 A Prototípus főosztálya Road.java :16 Utat reprezentáló osztály RoadCell.java :16 Úton egy cellát reprezentáló osztály Robber.java :16 Bankrablót megvalósító osztály StopSign.java :16 Stop táblát megvalósító osztály TrafficLight.java :16 Közlekedési lámpát megvalósító osztály Vehicle.java :11 Általános jármű osztály bin\ check_output :41 Szöveges állományokat összehasonlító segédprogram (Linux) check_output.exe :14 Szöveges állományokat összehasonlító segédprogram (Windows) 95

96 7. Prototípus beadása Vihar compile.bat :18 Fordítást segítő batch fájl (Windows) compile.sh :12 Fordítást segítő script (UNIX) runme.bat :12 Futtatást segítő batch fájl (Windows) runme.sh :11 Futtatást segítő script (UNIX) testcases.bat :31 Összes teszteset futtatását segítő batch fájl (Windows) testcases.sh :12 Összes teszteset futtatását segítő script (UNIX) bin\maps map1.commands :11 1. tesztpálya parancsai map1.expect :11 1. tesztpálya elvárt kimenete map1.txt :16 1. tesztpálya reprezentációja map10.commands : tesztpálya parancsai map10.expect : tesztpálya elvárt kimenete map10.txt : tesztpálya reprezentációja map11.commands : tesztpálya parancsai map11.expect : tesztpálya elvárt kimenete map11.txt : tesztpálya reprezentációja map2.commands :11 2. tesztpálya parancsai map2.expect :11 2. tesztpálya elvárt kimenete map2.txt :16 2. tesztpálya reprezentációja map3.commands :11 3. tesztpálya parancsai map3.expect :11 3. tesztpálya elvárt kimenete map3.txt :16 3. tesztpálya reprezentációja map4.commands :11 4. tesztpálya parancsai map4.expect :11 4. tesztpálya elvárt kimenete map4.txt :16 4. tesztpálya reprezentációja map5.commands :11 5. tesztpálya parancsai map5.expect :11 5. tesztpálya elvárt kimenete map5.txt :16 5. tesztpálya reprezentációja map6.commands :11 6. tesztpálya parancsai map6.expect :11 6. tesztpálya elvárt kimenete map6.txt :16 6. tesztpálya reprezentációja map7.commands :11 7. tesztpálya parancsai map7.expect :11 7. tesztpálya elvárt kimenete map7.txt :16 7. tesztpálya reprezentációja map8.commands :11 8. tesztpálya parancsai map8.expect :11 8. tesztpálya elvárt kimenete map8.txt :16 8. tesztpálya reprezentációja map9.commands :11 9. tesztpálya parancsai map9.expect :11 9. tesztpálya elvárt kimenete map9.txt :16 9. tesztpálya reprezentációja 96

97 7. Prototípus beadása Vihar Fordítás A program kódját mellékeltük egy src nevű mappában, valamint egy bin mappát. Ezen belül a maps mappában találhatóak az egyes tesztesetek bemeneteit, illetve elvárt kimeneteit tartalmazó fájlok. A bin mappában pedig batch, illetve shell szkript fájlok találhatóak, valamint egy segédprogram bináris állományai. A compile.bat (illetve compile.sh) a fordítást megkönnyítendő, lefuttatása után (ha javac megtalálható PATHban), a bin\proto mappába fordítja a programot. Persze a hagyományos javac fordítást is végezhetjük. Megjegyzés: A fordításnak feltétele, hogy a globális PATH változók között szerepeljenek a java futtatókörnyezet és sdk bináris fájljai Futtatás Automatikus tesztelés A testcases.bat fájl segítségével egy indításra ellenőrizhetjük az összes tesztesetet. Ekkor a prototípus az összes teszteset bemeneteire lefut, majd a mellékelt segédprogram (check_output) összehasonlítja a kimeneteket az elvárt kimenettel, és megjeleníti az eredményt. Ezáltal rögtön láthatjuk, mely esetekben fordul elő eltérés. A segédprogram a fájlok egyezése esetén az Input files match!, eltérés esetén az Input files differ! üzenetet jeleníti meg. Az egyes tesztesetek konkrét kimeneteit a maps mappában lévő fájlok által tekinthetjük meg: az n. teszteset elvárt kimenetét a mapn.expect, kapott kimenetét pedig a mapn.output fájl tartalmazza Kézi tesztelés Amennyiben a tesztelést kézileg szeretnénk elvégezni, úgy a programot a runme.bat szkript segítségével vagy (ha paramétereket is szeretnénk átadni) következő paranccsal indíthatjuk: java classpath bin proto.proto [args] A program a következő parancssori paramétereket ismeri: nogreeting : ez esetben a program nem ír ki üdvözlő, illetve elköszönő üzenetet. i file.txt: A megadott fájlben lévő parancsokat dolgozza fel a program, így nem kézzel kell őket bevinni a konzolon. Ennek a paraméternek a használata egyenértékű azzal, mintha a paraméter nélkül indított programnak a loadcommands file.txt parancsot adtuk volna ki. Akár több bemeneti fájlt is megadhatunk i file1.txt i file2.txt... formában, ekkor a program egymás után hajtja végre a bennük található parancsokat. o file.txt: A program a kimenetét a konzol helyett a megadott nevű fájlba írja A program alapvető kezelése A kézileg futtatott program parancssoros vezérlésű, a felhasználónak kell a kívánt parancsokat és paramétereiket szövegesen megadnia. A használható utasítások listája és rövid leírásuk elérhető a dokumentáció 7.1.2es pontjában, ahogy arról a program is tájékoztat. Rövid példaként és bevezetőként azonban a legfontosabb parancsokra itt is kitérünk: A loadmap file.txt paranccsal a file.txtben leírt pályát (utakat, kereszteződéseket, járműveket) tölthetjük be. A pálya leírásának formátumáról bővebb tájékoztatás szintén a 7es számú dokumentumban található. 97

98 7. Prototípus beadása Vihar A writemap paranccsal a bármikor kiírhatjuk a pálya aktuális állását a fentebb említett formátumban. Így tájékozódhatunk a járművek pozíciójáról. A moverobber n paranccsal adhatjuk meg, hogy a rabló a következő kereszteződésbe érve melyik utat válassza. A utak a következőképpen vannak számozva: 0val kezdve először a kereszteződésből kifutó utak (a pályaleírásban veló megjelenésük sorrendjében), majd őket követve a bemenő utak (szintén a leírásbeli sorrendjüknek megfelelően) A tick n paranccsal léptethetjük a játékot (n körrel) 7.2 Tesztek jegyzőkönyvei Car vs Sign Tesztelő neve Nagy Krisztián Teszt időpontja :05 Tesztelő neve Nagy Krisztián Teszt időpontja :00 Teszt eredménye A tábla nem blokkolja az autó áthaladását Lehetséges hibaok StopSign.isBlocking() függvény hibás megvalósítása Változtatások Az említett függvényben elírt relációsjel javítva Car vs Car Tesztelő neve Nagy Krisztián Teszt időpontja : Robber vs Car Tesztelő neve Nagy Krisztián Teszt időpontja :22 Tesztelő neve Nagy Krisztián Teszt időpontja :20 Teszt eredménye A Game Over felirat kiírásánál null pointer kivétellel megszakad a program futása. Lehetséges hibaok A Robber objektum game tagváltozója nem lett inicializálva a pálya felépítésénél. Változtatások A Robber osztály game tagváltozója törölve, mivel már az ősosztályban szerepel ilyen tagváltozó Car Chooses Direction Tesztelő neve Nagy Krisztián 98

99 7. Prototípus beadása Vihar Teszt időpontja :25 Tesztelő neve Nagy Krisztián Teszt időpontja :20 Teszt eredménye A pálya kiírásánál nem látszik az autó. Lehetséges hibaok Az Intersection.getNextCells függvény nem a várt visszatérési értéket adja. Változtatások A Game.generateLevel(String) függvényben az intersections tömb feltöltése után a nextcells és previouscells tagváltozók nullázása minden Intersectionre Robber Chooses Direction Tesztelő neve Nagy Krisztián Teszt időpontja :22 Tesztelő neve Nagy Krisztián Teszt időpontja :07 Teszt eredménye A második ticknél kiindexelési kivételt produkál a program a choosefrom függvényben. Lehetséges hibaok Az Intersection.getPreviousCells függvény nem a várt visszatérési értéket adja. Változtatások A Road.generateCells() függvényben lévő bug javítva, miszerint az első és utolsó cella is a bejáratkereszteződéshez (entry) volt kötve Policeman vs Robber Tesztelő neve Nagy Krisztián Teszt időpontja :00 Tesztelő neve Nagy Krisztián Teszt időpontja :44 Teszt eredménye Az onthesameroad függvény nullpointer kivétellel megszakad. Lehetséges hibaok A Policeman objektum wanted mezője nincs inicializálva. Változtatások Game.generateLevel(String) függvényben a rendőrökhöz setwanted metódussal a player hozzákötése. Tesztelő neve Nagy Krisztián Teszt időpontja :50 Teszt eredménye A Game Over üzenet után még lép a Robber. Lehetséges hibaok A Game.gameOver() függvény nem állítja meg a játékot / akadályozza folytatását. Változtatások Game.gameOverFlag boolean típusú tagváltozó felvéve, melyet a gameover truera állít, és ami esetén a tick() metódus nem csinál semmit. 99

100 7. Prototípus beadása Vihar Robber Gets From Bank to HidingPlace Tesztelő neve Nagy Krisztián Teszt időpontja :08 Tesztelő neve Nagy Krisztián Teszt időpontja :05 Teszt eredménye A járművek 1 ütemmel korábban lépnek. Lehetséges hibaok A tick() függvény azelőtt csökkenti a számlálót, hogy ellenőrizné a 0val való egyezést. Változtatások Vehicle, Policeman és Robber tick() függvényeiben a számláló csökkentés a végére került. Tesztelő neve Nagy Krisztián Teszt időpontja :10 Teszt eredménye A játék 3 tick után nem folytatódik. Lehetséges hibaok Hibás a parancsokat tartalmazó bemeneti fájl. Változtatások A bemeneti fájlban a tick 1 sort tick 12 re módosítottam. Tesztelő neve Nagy Krisztián Teszt időpontja :16 Teszt eredménye A járművek nem jókor lépnek. Lehetséges hibaok A tick() függvények a lépés ütemében is csökkentik a számlálót. Változtatások Vehicle, Policeman és Robber tick() függvényeiben a számláló csökkentés visszakerült az elejére, de egy else ággal elválasztva. Tesztelő neve Nagy Krisztián Teszt időpontja :26 Teszt eredménye A 10. ütemben a rendőr elkapja a rablót. (holott ekkor egy kereszteződésen áll) Lehetséges hibaok Az Policeman.onTheSameRoad() függvény nincs felkészítve a kereszteződéskre. Változtatások Az említett függvény false értéket ad, ha a rendőr kereszteződésen áll. Tesztelő neve Nagy Krisztián Teszt időpontja :42 Teszt eredménye A 12. ütemben a rabló a várttal ellentétes irányban mozog Lehetséges hibaok Kereszteződésből való kilépéskor nincs beállítva a Robber isgoingforward tagja. Változtatások A Robber.accept() függvény mostatól beállítja az isgoigforward változót a megfelelő értékre. Tesztelő neve Nagy Krisztián Teszt időpontja :06 Teszt eredménye A rabló egy ütemmel korábban nyer. Lehetséges hibaok Rossz a bemeneti pályaleíró fájl. 100

101 7. Prototípus beadása Vihar Változtatások Egy plusz mezőt beszúrtam a pályaleíró fájlba Car vs CityExit then Regenerate Tesztelő neve Nagy Krisztián Teszt időpontja :00 Tesztelő neve Nagy Krisztián Teszt időpontja :30 Teszt eredménye A kilépett kocsi nem generálódik újra. Lehetséges hibaok A kocsi cell tagváltozója nem nullázódik, ezért a game nem veszi észre, hogy elhagyta a várost. Változtatások A cell tagváltozó megváltoztatása nem az Vehicle.accept()en, hanem a Cell.enter()en keresztül (a Cell.setVehicle()ben) hívódik meg, így függ attól, hogy milyen típusú cellára léptünk a CityExit típusú nullázza Lamp moves from nonblocking to blocking Tesztelő neve Nagy Krisztián Teszt időpontja : Robber hits bunny and gets GodMode Tesztelő neve Nagy Krisztián Teszt időpontja :25 Tesztelő neve Nagy Krisztián Teszt időpontja :10 Teszt eredménye A rendőr a nyuszi elütése után is elkapja rablót. Lehetséges hibaok A Robber.godModeTicksLeft tagváltozó értéke nullán marad. Változtatások A Bunny.interact(Robber) metódusból hiányzó Robber.startGodMode() hívás pótolva. Tesztelő neve Nagy Krisztián Teszt időpontja :20 Teszt eredménye A rendőr a nyuszi elütése után is elkapja rablót. Lehetséges hibaok A Robber.godModeTicksLeft tagváltozó értéke nullán marad. Változtatások A Bunny.interact(Robber) metódusból hiányzó Robber.startGodMode() hívás pótolva. Tesztelő neve Nagy Krisztián Teszt időpontja :25 Teszt eredménye A 2. és 3. ticknél még nincs letartóztatási kísérlet. Lehetséges hibaok Rossz a megadott referenciakimenet. Változtatások A kimenetet kell megváltoztatni, a program fut jól. 101

102 7. Prototípus beadása Vihar CivilCar hits the bunny Tesztelő neve Nagy Krisztián Teszt időpontja : Értékelés A csapat szembesült a kódolással. Itt más szereposztás érvényesült, így az eddigi terhelések némiképp felcserélődtek, bár nem teljesen. Akik eddig kevesebbet, most többet dolgoztak, beérve, sőt, túl is teljesítve egyegy héten a többieket. Ezzel az elosztás már óraszámban is jobban tükröződik, valamint a ráfordított valós időben is. A dokumentálás fennmaradó probléma, de a kódolás komolyabb hangsúlyt kapott, mint az első hetekben. Ennek tükrében döntöttünk az alábbiakról. Tag neve Munka százalékban Herber Máté 25 Nagy Krisztián 25 Pál Balázs 25 Szebeni Szilveszter Napló Kezdet Időtartam Résztvevők Leírás :00 2 óra Herber, Nagy, Értekezlet, konzultáció Szebeni, Pál :00 2,5 óra Nagy Proto fejlesztés :00 4 óra Nagy Proto fejlesztés :00 2,5 óra Nagy Proto implementáció :30 6,5 óra Nagy Proto implementáció és tesztelés :30 1 óra Nagy Proto implementáció és tesztelés :30 2 óra Nagy Fordításhoz és futtatáshoz segédfájlok 2010:04:12 20:00 3 óra Pál Dokumentáció, javadoc felfejlesztése, értékelés vázlata 2010:04:12 22:00 1 óra Szebeni Doksi ellenőrzése, hibák jelzése 2010:04:12 22:30 0,5 óra Herber Forditás, és ahhoz utmutató irás 2010:04:13 07:00 0,5 óra Szebeni Feltöltendő fájlok, leforditása, feltöltése és doksi nyomtatása Összesítve: héten összesen Herber Pál 5 54 Szebeni Nagy

103 8. Grafikus felület specifikálása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

104 8. Grafikus felület specifikációja Vihar 8. Grafikus felület specifikációja 8.1 A grafikus interfész A játékablak (vázlat) A kezeléshez három gomb nyújt segítséget: Új játék indítása: Új játékot indít a kijelölt térképpel. Térképválasztó: Térképmappában lévő térképek közül választhatunk Pause: Egy pillanatra megállítja a játékot 8.2 A grafikus rendszer architektúrája A felület működési elve Az elv kiválasztásánál figyelembe vettük az eddig kialakítást, s végül a pull alapú felépítésnél döntöttünk, azaz a felület lekérdezi a modelltől, hogy ki mikor, mit változott. Egyrészt lehetősége van a felületnek az egészet újra kirajzolni (előnyös, ha elrejtettük az ablakot, vagy kezdetben akarunk mindent megjeleníteni), de a frissítéssel csak az rajzolja újra magát (vagy törli előző állapotának helyét), aki frissült. Ehhez létrehoztunk egy IDrawer interfészt (illetve annak specifikus ősosztályait), s ennek deklaráltunk Draw és Refresh függvényeket , Viharvadász csapat 104

105 8. Grafikus felület specifikációja Vihar A felület osztálystruktúrája Grafikus felület új osztálydiagramja Itt jól megfigyelhetőek az új elemek. Az IDrawer interfész mondja ki az alapelveket (draw() és refresh()), ennek leszármazottai specifikusan járműveket, utat (két kereszteződés között), vagy kereszteződéseket, esetlegesen jelzőtáblát tudnak rajzolni. Ez utóbbiról az út gondoskodik, hogy megfelelő helyre kerüljön. Koordinátákat az elágazásokhoz rendelünk (így az út a két elágazás között gond nélkül rajzolhat ki, mert ismeri azokat, s le tudja kérni a koordinátákat valamint a táblának is tud osztani koordinátákat). A járműveket rajzoló ősosztály képes törölni önmagát az előző mezőről, valamint kirajzolni azt (ami lehet nyuszi, de éppen egy sima civil autó is). Az IDrawer interfészű objektumok egy listáját tárolja a Game, így számára mindenki kirajzolható, illetve frissíthető. A külön (megvalósított) Drawer osztályok pedig szoros kapcsolatban állnak a modell osztályával, így tudják, mit kell kirajzolniuk (például a piros lámpa hol pirosat, hol zöldet). 8.3 A grafikus objektumok felsorolása IDrawer Felelősség Deklarálja a szükséges interfészt a játék számára, azaz milyen képességekkel (tagfüggvényekkel) kell rendelkeznie egy önmagát kirajzolni és frissíteni képes osztálynak. Ősosztályok Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre , Viharvadász csapat 105

106 8. Grafikus felület specifikációja Vihar + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) SignDrawer Felelősség Rendelkezik a szükséges képességekkel, hogy kirajzoljon egy útjelző táblát. Tisztában van vele, hogy hol helyezkedik el (ezt leszármazottainak is láthatóvá teszi), valamint az útjelző interfészt is ismeri. Ősosztályok Interfészek IDrawer Attribútumok # sign: ISign: Az adott jelzőtábla/lámpa referenciája. # x: int: Az útjelző X koordinátája. # y: int: Az útjelző Y koordinátája. Metódusok StopSignDrawer Felelősség A STOP tábla kirajzolásához szükséges függvényeket valósítja meg. Ősosztályok SignDrawer Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) TrafficLightDrawer Felelősség Megvalósítja a közlekedési lámpához szükséges kirajzolás függvényeit , Viharvadász csapat 106

107 8. Grafikus felület specifikációja Vihar Ősosztályok SignDrawer Interfészek Attribútumok prevstate: int: Előző állapota a lámpának (piros, vagy zöld?). Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) IntersectionDrawer Felelősség Képes az elágazásokat kirajzolni, azaz bármilyen olyan cellát, mely mint elágazás létezik (ilyen a Bank, a rejtekhely, belépési pontok, stb.). Ősosztályok Interfészek IDrawer Attribútumok intersection: Intersection: Az adott elágazásra (ősosztályra) mutató referencia. x: int: Az X koordináta a térképen. y: int: Az Y koordináta. Metódusok + int X(): Visszaadja az elágazás X koordinátáját. + int Y(): Visszaadja az Y koordinátát BankDrawer Felelősség A Bank kirajzolására képes. Ősosztályok IntersectionDrawer Interfészek , Viharvadász csapat 107

108 8. Grafikus felület specifikációja Vihar Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) HidingPlaceDrawer Felelősség A rejtekhelyet képes kirajzolni, illetve frissíteni. Ősosztályok IntersectionDrawer Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) CintyEntryDrawer Felelősség Képes a város bejáratának kirajzolására, frissítésére, megkülönböztetve. Ősosztályok IntersectionDrawer Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) , Viharvadász csapat 108

109 8. Grafikus felület specifikációja Vihar CityExitDrawer Felelősség Feladata és képessége a város kijáratát felrajzolni. Ősosztályok Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) RoadDrawer Felelősség Ki tudja rajzolni az utat. Ezt úgy teszi, hogy ismeri a két elágazást az út két végén. Ezek között húzza ki az utat (hiszen lekérheti az elágazások koordinátáit). Ha talál az úton táblát vagy lámpát, azt is kirajzolja a megfelelő szélére az útnak. Ősosztályok Interfészek IDrawer Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) VehicleDrawer Felelősség Ki tudja rajzolni a járműveket, vagyis éppen a megfelelő járműhöz tartozó osztály képes erre. Tudja, hogy a járműje melyik, s hol állt az előző esetben (előző cella). Ezen felül tisztában van a jelenlegi X és Y koordinátáival is (lekérhető) , Viharvadász csapat 109

110 8. Grafikus felület specifikációja Vihar Ősosztályok Interfészek IDrawer Attribútumok # vehicle: Vehicle: A jármű, melyhez ez a kirajzoló tartozik. prevcell: Cell: Az előző cella, melyen ez a jármű volt/lehetett (törléshez). Metódusok CivilCarDrawer Felelősség Képes civil autó kirajzolására. Ősosztályok VehicleDrawer Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) PolicemanDrawer Felelősség Ki tud rajzolni egy rendőrt a pályára. Ősosztályok VehicleDrawer Interfészek Attribútumok , Viharvadász csapat 110

111 8. Grafikus felület specifikációja Vihar Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) RobberDrawer Felelősség Képes a bankrabló (játékos) kirajzolására a pálya megfelelő helyére. Ősosztályok VehicleDrawer Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) BunnyDrawer Felelősség Ki tudja rajzolni a húsvéti nyuszit. Ősosztályok VehicleDrawer Interfészek Attribútumok Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges) , Viharvadász csapat 111

112 8. Grafikus felület specifikációja Vihar 8.4 Kapcsolat az alkalmazói rendszerrel A grafikus objektumok laza kapcsolatban állnak a modellel, visszafelé azonban nincsen kapcsolat köztük (tehát a modell nem tud a kirajzolásról). A Game teremti meg a kapcsolatot a kirajzolás és a modell között, amikor frissíti a rajzoló interfészű elemeit. Ebből következik, hogy a kirajzoló objektumok tisztában vannak a modellben fellelhető megfelelőikkel (az állapotuk ismeretére szükség van), így lekérhetnek paramétereket tőlük (melyet igény szerint megőriznek, lásd közlekedési lámpa). Viszont önkényesen nem rajzolgatnak, ezt a játék teszi lehetővé. Ő felelős a létrehozásért, a kezdeti kirajzolásért (és az invalidálásért), valamint az elemek külön frissítéséért (azaz azok lekérdezéséért). Ezen események menete a következőképpen zajlik: Kirajzolók elkészítése, felelős: a Game A játék kezdetekor a megfelelő rajzoló objektumokat létrehozza a játék, berakja a listájába (IDrawersként) , Viharvadász csapat 112

113 8. Grafikus felület specifikációja Vihar Teljes kirajzolás A teljes kirajzolás esetén a játék mindenkit felszólít a kirajzolásra, hogy a teljes pálya megjelenjen (pl. kezdetben, takarás után). Frissítés A folyamatos újrarajzolgatást elkerülendő, a Game időnként megkérdezi a teljes listát, hogy ki változott. Ha valaki változást észlel belső állapotában, és ezt szükséges kirajzolással is frissíteni (mert például a STOP tábla állapotait nem jelöljük grafikusan), akkor a rajzoló példány megteszi azt, , Viharvadász csapat 113

114 8. Grafikus felület specifikációja Vihar 8.5 Napló Kezdet Időtartam Résztvevők Leírás : óra Pál Javadoc magyarítása, kiegészítése : óra Szebeni Javadoc feladatok áttekintése, karakterkódolás :00 1 óra Szebeni, Pál Értekezlet, grafikai megoldások :00 2 óra Szebeni, Nagy, Herber, Pál Értekezlet, grafika kitalálása :00 2 óra Nagy Grafikus felülethez kapcsolódó diagramok elkészítése : óra Pál A grafikus felület dokumentációjának elkészítése ábrával : óra Pál Nyomtatás Összesítés erre a hétre és eddig: A héten Eddig összesen Herber Pál Szebeni Nagy , Viharvadász csapat 114

115 9. Grafikus változat beadása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY Nagy Krisztián FDQKAY Pál Balázs Sándor YZZIKV Szebeni Szilveszter UBZ6RP

116 9. Grafikus változat beadása Vihar 9. Grafikus változat beadása 9.1 Fordítási és futtatási útmutató Fájllista Fájl neve Méret Keletkezés ideje Tartalom \src Bank.java :04 Bankot reprezentáló osztály BankDrawer.java :04 Bankot rajzoló osztály A Húsvéti nyuszit Bunny.java :37 reprezentáló osztály BunnyDrawer.java :43 Nyuszit rajzoló osztály Cell.java :04 Cellát reprezentáló osztály Városhatárbejáratot CityEntry.java :04 reprezentáló osztály CityEntryDrawer.java :04 Városhatárbejáratot rajzoló osztály CityExit.java :04 Városhatárkijáratot reprezentáló osztály CityExitDrawer.java :04 Városhatárkijáratot rajzoló osztály CivilCar.java :37 Civil autót megvalósító osztály CivilCarDrawer.java :43 Civil autót rajzoló osztály Clock.java :04 Játékórát megvalósító osztály ConsoleLogger.java :04 Parancssorra naplózó osztály CustomReader.java :04 Bemenetet olvasó osztály FileLogger.java :04 Fájlba naplózó osztály Game.java :43 Játékot összefogó osztály A grafikus változat GUI.java :43 főosztálya GUICanvas.java :43 Rajzfelületet megvalósító osztály HidingPlace.java :04 Rejtekhelyet reprezentáló osztály HidingPlaceDrawer.java :04 Rejtekhelyet rajzoló osztály Rajzolható osztályok közös IDrawer.java :43 interfésze INamedObject.java :43 Névvel rendelkező osztályok interfésze Intersection.java :37 Útkereszteződést reprezentáló osztály IntersectionDrawer.java :09 Kereszteződést rajzoló osztály ISign.java :04 Közlekedési jelzések közös interfésze Logger.java :04 Általános naplózó osztály NamedObject.java :04 Névvel rendelkező osztályok , Viharvadász csapat 116

117 9. Grafikus változat beadása Vihar közös őse Policeman.java :43 Rendőrt megvalósító osztály PolicemanDrawer.java :43 Rendőrt rajzoló osztály Road.java :43 Utat reprezentáló osztály Úton egy cellát reprezentáló RoadCell.java :04 osztály RoadDrawer.java :37 Utat rajzoló osztály Bankrablót megvalósító Robber.java :43 osztály RobberDrawer.java :43 Rablót rajzoló osztály RobberStatusDrawer.java :43 Rabló állapotát rajzoló osztály SignDrawer.java :09 Jelet rajzoló osztály StopSign.java :43 Stop táblát megvalósító osztály StopSignDrawer.java :37 Stop táblát rajzoló osztály Közlekedési lámpát TrafficLight.java :43 megvalósító osztály Közlekedési lámpát rajzoló osztály TrafficLightDrawer.java :37 Vehicle.java :37 Általános jármű osztály VehicleDrawer.java :43 Járművet rajzoló osztály \bin compilegui.bat :43 Fordítást segítő batch fájl (Windows) compilegui.sh :43 Fordítást segítő script (UNIX) javadocgui.bat :09 Dokumentum fordítását segítő batch fájl (Windows) README.txt :43 Tudnivalókról adott leírás Futtatást segítő batch fájl runmegui.bat :09 (Windows) runmegui.sh :43 \bin\maps testmap.coords :09 testmap.txt :09 Futtatást segítő script (UNIX) Pályán elhelyezkedő kereszteződések koordinátái Pálya leírását megadó térképfájl Fordítás és telepítés A fordítást egy compilegui.bat segítségével végezhetjük el. Ez a bin/gui mappába fordítja a forráskódot, a térképek pedig a maps mappában találhatóak. A forráskódból futtatható állapotba hozáshoz ennyi elegendő is. Szükség esetén a parancs: javac..\src\gui\*.java d.\ gui Abban az esetben, ha a parancssor a bin mappából fut, valamint a javac elérhető a PATHból , Viharvadász csapat 117

118 9. Grafikus változat beadása Vihar Futtatás A futtatáshoz a runmegui.bat indítása elegendő, ezzel el is indul a parancssor, majd a grafikus felület is. A használható parancs pedig: java classpath./gui gui/gui Futtatás a bin mappából (command prompt), a PATHban benne kell lennie a java elérési útjának Javadoc futtatása A Javadoc elkészítéséhez igénybe vehető egy bat fájl (javadocgui.bat). Ezzel elkészül a src/gui/javadoc mappába a Javadoc, ami az index.html megnyitásával böngészhető. A parancs pedig a következő: javadoc..\src\gui\*.java d..\src\gui\javadoc A karakterkódolást érdemes átállítani, ha az ékezetes karakterek nem megfelelőek (pl. UTF 8). 9.2 Játékmenet A kezeléshez három gomb nyújt segítséget: Új játék indítása: Új játékot indít a kijelölt térképpel. Térképválasztó: Térképmappában lévő térképek közül választhatunk Pause: Egy pillanatra megállítja a játékot A bankrabló irányításához, 5 billentyűre van szükség: Jobb, Bal: Bankrabló irányát határozza meg. Fel, Le: Bankrabló sebességét határozza meg. Backspace: Bankrabló megfordul A játék a piros színnel megkülönböztetett útkereszteződéstől indul, ahol a bank is van. A célja eljutni a rejtekhelyre, ami kék színnel szerepel a térképen. Eközben kerülnie kell az ütközést az autókkal (fehér színűek), valamint az egy útra kerülést a rendőrrel (kék autó), ezen esetekben veszít. A bankrabló autója piros. 9.3 Értékelés Tag neve Munka százalékban Herbert Máté 25 Nagy Krisztián 25 Pál Balázs 25 Szebeni Szilveszter 25 A csapatban most a kódolásé volt a főszerep, ezt pedig nem tudta mindenki együtt végezni, így egy emberre hárult a legnagyobb része. Emellett azonban fejlesztettünk megtekintőt is, valamint a dokumentálás és kommentelés is fennmaradt, mint feladat. A csapat koordinálása sem bizonyult egyszerű feladatnak, elvégre a sok elfoglaltság miatt sokkal nehezebb volt összehangolni a projektmunkát. Ennek ellenére jól haladtunk, s nem állt be késés a munkafolyamatok egyikénél sem , Viharvadász csapat 118

119 9. Grafikus változat beadása Vihar 9.4 Napló Kezdet Időtartam Résztvevők Leírás :00 2 óra Szebeni, Herber, Pál Koznultáció, Értekezlet :00 2 óra Herber Térkép kirajzoló program :00 5 óra Herber Térkép kirajzoló program :00 3 óra Nagy Gui fejlesztés :00 8 óra Nagy Gui fejlesztés :00 7 óra Herber Térkép kirajzoló program + Térkép készítése :00 3 óra Nagy Gui fejlesztés :00 2 óra Pál, Nagy Szebeni Értekezlet, Tesztelés :00 3 óra Nagy Gui fejlesztés, Bugfix :00 5 óra Pál Javadoc :00 1 óra Szebeni Javadoc, nyomtatás héten összesen Herber Pál Szebeni Nagy , Viharvadász csapat 119

120 Értékelés A csapattagok véleménye a projektről A csapat a következő céllal alakult: Teljesíteni a tárgyat a lehető legjobbat nyújtva (tehát a legjobb elérhető jegyért), törekedve az egyszerűségre, a feladat elbonyolítását minden áron elkerülve. A csapat tagjai jól ismerték egymást, így mindenki előre sejtette, hogy milyen részt vállal a projekt során. Biztosak csupán azért nem lehettünk szerepünkben, mert nem tudtuk, a kis fejlesztőgárdánk milyen típusú feladattal néz szembe. Ha csak az elején nem tudtuk volna, akkor nem lett volna nagy gond. De sajnos a kidolgozás során is le voltunk maradva picit: A modellt nagyon jól megterveztük, csak abban a formában nem volt működőképes, valamint a valós implementáció alapján született meg a működőképes modell, bár ezt mindnyájan sejtettük, hogy nem korrekt. A dokumentátor szerepe háttérbe szorult (ellenben az elején a több tíz órás dokumentációs munkákkal), a végén pedig csak a kódolás jutott előtérbe. A kódolásban eleinte voltak ütközések, később ezt nem jó módon hárítottuk el: Egy ember vállalta magára a szoftver elkészítését. Bár az idők így is kiegyensúlyozottak maradtak (aki kódolt, kevesebb szerepet vállalt a modellezésben, dokumentációt pedig nem készített). Többször is elgondolkodtunk azon, mi lehet a kitűzendő cél a csapattagok 25%os részvétele mellett. Van értelme annak, hogy akkor most mindenki vegye ki a részét mindenből? Vagy mindenki csinálja azt, amihez jobban ért? Így kevesebb az ütközés, drámai mértékben megnő a hatékonyság. Előbbit terveztük, utóbbinál kötöttünk ki. Elvégre a közlekedésügyi miniszter se küzd az egészségügyi reformmal, s az egészségügyi miniszter sem foglalkozik családi pótlék elosztásával. Természetesen miniszterelnök, csapatvezető is kell, s nálunk is megvolt erre az ember. Kellett, aki koordinálja az embereket, összekapcsolja a munkafolyamatokat. Itt gyakran ütköztünk abba a problémába, hogy 4 órán át nem csinált a csapatvezető semmit, de közben a másik három emberrel tartotta a kapcsolatot, közvetítette a részeredményeket és lehetővé tette, hogy ne ütközzenek a munkák. Ilyenkor a naplóba végül beírtuk ezeket is, nem alaptalanul. Hárman a csapatból diákszervezet tagjai vagyunk, így nem sokkolt a csapatmunka, de amikor ennyire szétszedhetőek a feladatok (dokumentálás, modellezés, kódolás ), akkor bizony felülbíráltuk ezeket a konvenciókat és mindenki azt írta, alkotta, amihez értett. A szoftver fejlesztésének folyamatában meg sem fordult senkiben az, hogy a játékot élvezet lehessen játszani (vagyis de, de a dokumentáló gondolata volt ez, akinek vajmi kevés szava volt a folyamatban bár a rendőr speciális szere pl. az ő ötlete volt, hogy ne csak vizuálisan legyen más szegény). A cél a modell egyszerűsége, könnyű és kevés hibát hordozó megvalósítása volt. Ennek megfelelően alakult ki a grafikus felület is. Ennek ellenére a jó tesztpályák és az ötletes úthálózat miatt egy nagyon kellemes játék született a végére, ahol hasonló móka volt komoly városi dugókat okozni, mint az utolsó pillanatban a zöldre váltó lámpa előtt várakozó civil elé hajtani, aki emiatt az ismét pirosra váltó lámpa miatt megint várni kényszerült. A specifikációváltozás olyan volt, mint az izlandi vulkán: Azt hittük, az egyirányú falucskából űrbázisszimulációvá fajul a dolog, de végül még füstje is alig volt: Egy egyszerű nyuszi megjelenítése. Amit ez a projekt megvalósítása adott: Megtanultunk 30 oldalas dokumentációt megírni másnap reggel 8ig. Viccet félretéve, rájöttünk, hogy ha valamit valaki az utolsó pillanatra hagy, akkor a másik három ember nem tud aludni miatta, hogy elkészüljön.

121 Tartalomjegyzék Vihar május 10. Viharvadász csapat

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

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

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

2. Követelmény, projekt, funkcionalitás 2. Követelmény, projekt, funkcionalitás 39 Kapufa-Soft Konzulens: Hartung István Csapattagok Deák Endre BNOX1H profendre@gmail.com Diószegi Tamás T08LBX diotomi@gmail.com Mácsai Gábor GQ1EGW matcha8@gmail.com

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

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

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

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

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

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

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

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

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

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

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

é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

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

Dr. Mileff Péter

Dr. Mileff Péter Dr. Mileff Péter 1 2 1 Szekvencia diagram Szekvencia diagram Feladata: objektumok egymás közti üzenetváltásainak ábrázolása egy időtengely mentén elhelyezve. Az objektumok életvonala egy felülről lefelé

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

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

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

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

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

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

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter Dr. Mileff Péter 1 2 Szekvencia diagram Feladata:objektumok egymás közti üzenetváltásainak ábrázolása egy időtengely mentén elhelyezve. Az objektumok életvonala egy felülről lefelé mutató időtengelyt képvisel.

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

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

DebitTray program Leírás

DebitTray program Leírás DebitTray program Leírás Budapest 2015 Bevezetés Egy-egy kintlévőséghez tartozó határidő elmulasztásának komoly következménye lehet. Éppen ezért a Kintlévőség kezelő program főmenü ablakában a program

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

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

ContractTray program Leírás

ContractTray program Leírás ContractTray program Leírás Budapest 2015 Bevezetés Egy-egy szerződéshez tartozó határidő elmulasztásának komoly gazdasági következménye lehet. Éppen ezért a Szerződés kezelő program főmenü ablakában a

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

Csatlakozási állapot megjelenítése

Csatlakozási állapot megjelenítése Csatlakozási állapot megjelenítése Ellenőrizheti a vevő és a jármű között a csatlakozás állapotát. Ezek a kapcsolatok felelősek az olyan információkért, mint a GPS információ és a parkolási jelzések. 1

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

Modellező eszközök, kódgenerálás

Modellező eszközök, kódgenerálás Modellező eszközök, kódgenerálás Budapesti Műszaki és Gazdaságtudományi Egyetem Hibatűrő Rendszerek Kutatócsoport Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek

Részletesebben

OOP és UML Áttekintés

OOP és UML Áttekintés OOP és UML Áttekintés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) OOP és UML Áttekintés 2013 1 / 32 Tartalom jegyzék 1 OOP Osztály Öröklődés Interfész, Absztrakt Osztály Kivétel kezelé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ás II gyakorlat. 6. Polimorfizmus

Programozás II gyakorlat. 6. Polimorfizmus Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással

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

(Teszt)automatizálás. Bevezető

(Teszt)automatizálás. Bevezető (Teszt)automatizálás Bevezető Órák ( az előadások sorrendje változhat) 1. Bevezető bemutatkozás, követelmények, kérdések és válaszok 2. Előadás Unit test in general, 3. Előadás Unit test, Tools and practices,

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

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

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

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

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

JOGI STÁTUSZ KEZELÉS MŰKÖDÉSE

JOGI STÁTUSZ KEZELÉS MŰKÖDÉSE JOGI STÁTUSZ KEZELÉS MŰKÖDÉSE Felhasználói dokumentáció verzió 1.0. Budapest, 2012. Változáskezelés Változás Verzió Dátum Pont Cím Oldal 1.1. 2013.07.10. 3.2. Üzenetküldés 7. Kiadás: 2012.09.04. Verzió:

Részletesebben

Előzmények 2011.10.23.

Előzmények 2011.10.23. Előzmények Dr. Mileff Péter A 80-as évek közepétől a szoftverek komplexitása egyre növekszik. Megjelentek az OO nyelvek. Az OO fejlesztési módszerek a rendszer különböző nézőpontú modelljeit készítik el.

Részletesebben

TERC V.I.P. hardverkulcs regisztráció

TERC V.I.P. hardverkulcs regisztráció TERC V.I.P. hardverkulcs regisztráció 2014. második félévétől kezdődően a TERC V.I.P. költségvetés-készítő program hardverkulcsát regisztrálniuk kell a felhasználóknak azon a számítógépen, melyeken futtatni

Részletesebben

Folyamatmodellezés és eszközei. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Folyamatmodellezés és eszközei. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Folyamatmodellezés és eszközei Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Folyamat, munkafolyamat Ez vajon egy állapotgép-e? Munkafolyamat (Workflow):

Részletesebben

Bevezetés a programozásba 2

Bevezetés a programozásba 2 Bevezetés a programozásba 2 4. Előadás: Esettanulmány http://digitus.itk.ppke.hu/~flugi/ Pong játék Játékleírás: adott egy pálya, alul és fölül fallal, és két játékoshoz tartozó egy-egy ütő két oldalon.

Részletesebben

UML (Unified Modelling Language)

UML (Unified Modelling Language) UML (Unified Modelling Language) UML (+ Object Constraint Language) Az objektum- modellezés egy szabványa (OMG) UML A 80-as, 90-es években egyre inkább terjedő objektum-orientált analízis és tervezés (OOA&D)

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

Rendszermodellezés: házi feladat bemutatás

Rendszermodellezés: házi feladat bemutatás Rendszermodellezés: házi feladat bemutatás Budapest University of Technology and Economics Fault Tolerant Systems Research Group Budapest University of Technology and Economics Department of Measurement

Részletesebben

Programozási Technológia 1. 1. előadás bevezetés. Előadó: Lengyel Zsolt

Programozási Technológia 1. 1. előadás bevezetés. Előadó: Lengyel Zsolt Programozási Technológia 1. 1. előadás bevezetés Előadó: Lengyel Zsolt Tartalom Információk a tantárggyal kapcsolatban Programozási technológiai eszközök áttekintése UML tervezőeszközök JAVA fejlesztőeszközök,

Részletesebben

FELHASZNÁLÓI KÉZIKÖNYV SCHEDULEDETAIL KEZELÉSI ÚTMUTATÓ (DEBRECEN VÁROS KÖZLEKEDÉSE) 1.00 verzió Dátum: 2013.09.05

FELHASZNÁLÓI KÉZIKÖNYV SCHEDULEDETAIL KEZELÉSI ÚTMUTATÓ (DEBRECEN VÁROS KÖZLEKEDÉSE) 1.00 verzió Dátum: 2013.09.05 FELHASZNÁLÓI KÉZIKÖNYV (DEBRECEN VÁROS KÖZLEKEDÉSE) 1.00 verzió Dátum: 2013.09.05 Tartalom 1. Rendszerigény... 3 2. Bevezető... 3 3. Az alkalmazás indítása... 3 4. Az oldal felépítése... 4 4.1. Főképernyő...

Részletesebben

VBA makrók aláírása Office 2007 esetén

VBA makrók aláírása Office 2007 esetén VBA makrók aláírása Office 2007 esetén Windows tanúsítványtárban és/vagy kriptográfia eszközökön található tanúsítványok esetén Office 2007 alkalmazással 1(10) 1. Tartalomjegyzék 1. Tartalomjegyzék...

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

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

Bevezetés a Python programozási nyelvbe

Bevezetés a Python programozási nyelvbe Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban

Részletesebben

Rekurzió. Dr. Iványi Péter

Rekurzió. Dr. Iványi Péter Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(

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

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 04. 17. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési

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

FELHASZNÁLÓI KÉZIKÖNYV

FELHASZNÁLÓI KÉZIKÖNYV FELHASZNÁLÓI KÉZIKÖNYV SZEGED VÁROS KÖZLEKEDÉSE 1.00 verzió Dátum: 2012.02.29. Tartalom 1. Rendszerigény... 3 2. Bevezető... 3 3. Az alkalmazás indítása... 3 4. Az oldal felépítése... 4 4.1. Főképernyő...

Részletesebben

Thermo1 Graph. Felhasználói segédlet

Thermo1 Graph. Felhasználói segédlet Thermo1 Graph Felhasználói segédlet A Thermo Graph program a GIPEN Thermo eszközök Windows operációs rendszeren működő grafikus monitorozó programja. A program a telepítést követően azonnal használható.

Részletesebben

Concurrency in Swing

Concurrency in Swing Concurrency in Swing A szálkezelés a swing alkalmazásokban is fontos. Cél egy olyan felhasználói felület készítése, amely soha nem fagy, mindig válaszol a felhasználói interakciókra, bármit is csináljon

Részletesebben

Szakterületi modell A fogalmak megjelenítése. 9. fejezet Applying UML and Patterns Craig Larman

Szakterületi modell A fogalmak megjelenítése. 9. fejezet Applying UML and Patterns Craig Larman Szakterületi modell A fogalmak megjelenítése 9. fejezet Applying UML and Patterns Craig Larman 1 Néhány megjegyzés a diagramokhoz Ez a tárgy a rendszer elemzésről és modellezésről szól. Noha például egy

Részletesebben

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20 Teljesítmény Mérés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés 2013 1 / 20 Tartalomjegyzék 1 Bevezetés 2 Visual Studio Kód metrikák Performance Explorer Tóth Zsolt

Részletesebben

GráfRajz fejlesztői dokumentáció

GráfRajz fejlesztői dokumentáció GráfRajz Követelmények: A GráfRajz gráfokat jelenít meg grafikus eszközökkel. A gráfot többféleképpen lehet a programba betölteni. A program a gráfokat egyedi fájl szerkezetben tárolja. A fájlokból betölthetőek

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

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

cím: 6725 Szeged Bokor u. 18. telefon: +36 1 808 9666 Innomedio Kft Scrum módszertan 1.0 Verzió Érvényes: 2012. április 1-től

cím: 6725 Szeged Bokor u. 18. telefon: +36 1 808 9666 Innomedio Kft Scrum módszertan 1.0 Verzió Érvényes: 2012. április 1-től Innomedio Kft Scrum módszertan 1.0 Verzió Érvényes: 2012. április 1-től Alapfogalmak: 1. hiba: egy már meglévő, funkcionalitásban hibás működést eredményező programrész hibás működésének leírása konkrét

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

Programtervezés. Dr. Iványi Péter

Programtervezés. Dr. Iványi Péter Programtervezés Dr. Iványi Péter 1 A programozás lépései 2 Feladat meghatározás Feladat kiírás Mik az input adatok A megoldáshoz szükséges idő és költség Gyorsan, jót, olcsón 3 Feladat megfogalmazása Egyértelmű

Részletesebben

Időjárási csúcsok. Bemenet. Kimenet. Példa. Korlátok. Nemes Tihamér Nemzetközi Informatikai Tanulmányi Verseny, 2-3. korcsoport

Időjárási csúcsok. Bemenet. Kimenet. Példa. Korlátok. Nemes Tihamér Nemzetközi Informatikai Tanulmányi Verseny, 2-3. korcsoport Időjárási csúcsok Ismerjük N napra a déli hőmérséklet értékét. Lokálisan melegnek nevezünk egy napot (az első és az utolsó kivételével), ha az aznap mért érték nagyobb volt a két szomszédjánál, lokálisan

Részletesebben

Programozási alapismeretek 1. előadás

Programozási alapismeretek 1. előadás Programozási alapismeretek 1. előadás Tartalom A problémamegoldás lépései programkészítés folyamata A specifikáció Az algoritmus Algoritmikus nyelvek struktogram A kódolás a fejlesztői környezet 2/33 A

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek 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/23 Tartalomjegyzék

Részletesebben

A szoftver-folyamat. Szoftver életciklus modellek. Szoftver-technológia I. Irodalom

A szoftver-folyamat. Szoftver életciklus modellek. Szoftver-technológia I. Irodalom A szoftver-folyamat Szoftver életciklus modellek Irodalom Ian Sommerville: Software Engineering, 7th e. chapter 4. Roger S. Pressman: Software Engineering, 5th e. chapter 2. 2 A szoftver-folyamat Szoftver

Részletesebben

1. SZÁMÚ FÜGGELÉK MŰSZAKI LEÍRÁS

1. SZÁMÚ FÜGGELÉK MŰSZAKI LEÍRÁS 1. SZÁMÚ FÜGGELÉK MŰSZAKI LEÍRÁS Az Enterprise Architect (EA) modell illesztése az számú, Komplex népegészségügyi szűrések elnevezésű kiemelt projekt megvalósításához kapcsolódóan 1. Fogalmak és rövidítések

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

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata jelentése: gyors, fürge 1990-es évek vége Változás igénye Módszertan-család

Részletesebben

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató GPRS Remote GPRS alapú android applikáció távvezérléshez Kezelési útmutató Tartalomjegyzék Általános leírás... 1 Új modul beállítás... 2 Új okostelefon beállítás... 2 Modulok karbantartása... 3 Okostelefonok

Részletesebben

Autóbusz előnyben részesítésének lehetőségei

Autóbusz előnyben részesítésének lehetőségei Autóbusz előnyben részesítésének lehetőségei 1 Pécsett Pásztor Petronella Konzulensek: Dr. Bede Zsuzsanna, Dr. Tettamanti Tamás Külső konzulens: Kiss Géza 2 Bevezetés Pécs: utazások ~40%-a tömegközlekedéssel

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

Szimulációs technikák

Szimulációs technikák SZÉCHENYI ISTVÁN EGYETEM Műszaki Tudományi Kar Informatikai tanszék Szimulációs technikák ( NGB_IN040_1) 2. csapat Comparator - Dokumentáció Mérnök informatikus BSc szak, nappali tagozat 2012/2013 II.

Részletesebben

A Java EE 5 plattform

A Java EE 5 plattform A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11. 13. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési

Részletesebben

KIR-STAT internetes adatgyűjtő rendszer

KIR-STAT internetes adatgyűjtő rendszer - internetes adatgyűjtő rendszer Kitöltési útmutató Budapest, 2012. október 1. TARTALOMJEGYZÉK 1.1. Milyen lépések szükségesek az adatszolgáltatás sikeres teljesítéséhez? 1.2. Belépéssel kapcsolatos tudnivalók

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

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május) Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május) Teszt kérdések 1. Melyik állítás igaz a folytonos integrációval (CI) kapcsolatban? a. Folytonos

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

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

Sú gó az ASIR/PA IR Públikús felú lethez

Sú gó az ASIR/PA IR Públikús felú lethez Sú gó az ASIR/PA IR Públikús felú lethez Súgó a magyarországi központi Agrárstatisztikai és Piaci Árinformációs rendszer publikus moduljához. 1 Publikus felhasználói regisztráció A publikus felület Regisztráció

Részletesebben

3. Beadandó feladat dokumentáció

3. Beadandó feladat dokumentáció 3. Beadandó feladat dokumentáció Készítette: Giachetta Roberto E-mail: groberto@inf.elte.hu Feladat: Készítsünk programot a közismert Tic-Tac-Toe játékra. Ebben a játékban a játékosok egy -as játékmezőn

Részletesebben

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan Telepítés internetről A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan Új szolgáltatásunk keretén belül, olyan lehetőséget kínálunk a TERC VIP költségvetéskészítő program

Részletesebben

V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus

V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus 1 Az előadás tartalma A GI helye az informatikában Az előadás tartalmának magyarázata A

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2009. november 13. Ismétlés El z órai anyagok áttekintése Ismétlés Specikáció Típusok, kifejezések, m veletek, adatok ábrázolása, típusabsztakció Vezérlési szerkezetek Függvények, paraméterátadás, rekurziók

Részletesebben

Minőségellenőrzési kérdőív kitöltő program Felhasználói kézikönyv

Minőségellenőrzési kérdőív kitöltő program Felhasználói kézikönyv Minőségellenőrzési kérdőív kitöltő program Felhasználói kézikönyv Magyar Könyvvizsgálói Kamara 2010. augusztus 18. Tartalom A program főablaka... 3 A fejléc, a felső menüsor valamint az eszköztár... 4

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