Viharvadász csapat Bankrablós játék
2006. augusztus 20.
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..............................................................................................103 Grafikus változat beadása ...................................................................................................115 Értékelés.............................................................................................................................120
2010. május 10.
Viharvadász csapat
1. Követelmény, projekt, funkcionalitás 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.02.16.
1. Követelmény, projekt, funkcionalitás
Vihar
1. Követelmény, projekt, funkcionalitás 1.1 Követelmény definíció 1.1.1 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.
1.1.2 A felhasználói felület (UI1) 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 (GUI2) fog rendelkezni.
1.1.3 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.
1.1.4 A szoftver fejlesztésével kapcsolatos alapkövetelmények, elvek, célok
1 2
User Interface Graphic User Interface
Viharvadászok, 2010-05-11
4
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, 2010-05-11
5
Vihar
1. Követelmény, projekt, funkcionalitás 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 UML3, valamint a RUP4 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 1.2.1 A felhasznált fejlesztőeszközök A fejlesztőgárda az Eclipse5 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 Paradigm6 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 Office7 „.doc” kiterjesztéssel bíró fájljait használtuk, igénybe véve az SVN szerver és a Google Code8 által nyújtott utókövetési és módosítási lehetőségeket, így az Eclipse-en belül is folyamatosan nyomon követhető, valamint szerkeszthető dokumentáció-rendszert kaptunk.
1.2.2 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.
1.2.3 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 4
Unified Modeling Language Rational Unified Process
5
http://www.eclipse.org/ http://www.visual-paradigm.com/ 7 http://office.microsoft.com 8 http://code.google.com/p/viharszglab4/ 6
Viharvadászok, 2010-05-11
6
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 projekt-talá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órum-jelleggel 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, 2010-05-11
7
1. Követelmény, projekt, funkcionalitás
Vihar
2. ábra: Frissítések
3. ábra: Wiki felület
1.2.4 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.
1.2.5 Határidők Február 10 Február 16 Február 23
Viharvadászok, 2010-05-11
Csapatok regisztrációja 14h Követelmény, projekt, funkcionalitás (beadás) Analízis modell kidolgozása 1. (beadás)
8
Vihar
1. Követelmény, projekt, funkcionalitás 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)
1.2.6 Á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, e-mail útján, Portable Document (PDF) formában.
1.2.7 Kockázatelemzés Valószínűségek osztályozása: Alacsony – 0-20% valószínűséggel bekövetkező esemény Közepes – 20-60% 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 Specifikációváltozás Javítandó heti beadandó feladat Sikertelen heti beadandó Csapattag kiválása vagy kirakása Csapattag távolléte (pl. betegség) Hardver meghibásodása Szoftver meghibásodása Határidő lekésése Hiányzás a tanácskozásról, közös fejlesztésekről
Valószínűség Magas Alacsony Alacsony Alacsony Alacsony Magas9 Közepes Alacsony Magas
Hatás Alacsony Alacsony Közepes Komoly Komoly Közepes Elhanyagolható Közepes Alacsony
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, 2010-05-11
9
1. Követelmény, projekt, funkcionalitás
Vihar
1.2.8 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, 2010-05-11
10
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 Bankrablók autója Bank Bejárható Csomópont Győz Időegység
Jármű, autó Játékos Kanyarodik Lámpás jelzőőr (piros lámpa) Letartóztat Megáll Megfordul Mező Összetör Rejtekhely Rendőr(autó) Sebesség Sebesség szabályozása STOP tábla
Út Úthálózat Ütközik Viharvadászok, 2010-05-11
Magyarázat Az autó, mellyel a bankrablók menekülnek, a játékos ezt irányítja. Olyan csomópont, ahol a bank épülete áll (vizuálisan megkülönböztetett). Minden csomópontból minden csomópont elérhető nulla, vagy több csomóponton keresztül (kivétel a városhatár). Útkereszteződés, ahova be- illetve kilépnek utak. A bankrabló eléri a rejtekhelyet, a játékos nyer. Az a legkisebb időintervallum, amíg elemi esemény (egy autó léptetése; döntése, hogy behajt-e egy csomópontba) történik. Általános esetben adott sebességgel közlekedik, véletlenszerű útvonalat választ. Az, aki játszik a játékkal és irányítja a bankrabló autóját. A jármű új utat választ egy csomópontban. Utak utolsó mezője lehet kereszteződés előtt, vizuálisan látható a lámpák állapota. Ha a bankrablót letartóztatja a rendőr, a játékos veszít. A jármű egy időre nem halad előre, például az autók a STOP táblák előtt. A játékos autóját megfordíthatja, így megváltozik a haladási iránya. Egy egységnyi út, ahol maximum egy autó tartózkodhat. A bankrabló ütközés esetén összetöri autóját, a küldetést nem teljesítheti, veszít. Olyan csomópont, ahol a bankrablók rejtekhelye van (vizuálisan megkülönböztetett csomópont). Vizuálisan megkülönböztetett, ha a bankrablóval egy utcában van, elkapja. Az autó haladását jellemző mérték, hány mezőt lép időegység alatt. A játékos az általa irányított bankrabló-autó sebességét egy maximális szintig, valamint a nulla sebességig szabályozhatja, időegységnyi lépésekben. 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). Két csomópontot összekötő, mezőkből álló, egyirányú vonal. A város útjai. Más járművel egy mezőre érkezik, a játékos ez esetben 11
1. Követelmény, projekt, funkcionalitás
Város Városhatár
Vihar
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 use-case -ek 1.5.1 Use-case diagram
4. ábra. Essential use-case -ek
1.5.2 Use-case leírások Use-case neve Rövid leírás Aktorok Forgatókönyv
A játék indítása
Use-case 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, 2010-05-11
A játék elindítása. Játékos A pálya betöltődik.
12
1. Követelmény, projekt, funkcionalitás
Use-case neve Rövid leírás Aktorok Forgatókönyv
Viharvadászok, 2010-05-11
Vihar
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.
13
Vihar
1. Követelmény, projekt, funkcionalitás
Napló Kezdet 2010.02.11. 14:30
Időtartam 0,5 óra
Résztvevők Herber
2010.02.11. 20:00
1 óra
Herber
2010.02.11. 21:00
2,5 óra
Herber, Szebeni
2010.02.12. 10:00
2 óra
Pál Szebeni
2010.02.12. 12:00
2 óra
Pál, Szebeni, Nagy, Herber
2010.02.12. 17:00
0,5 óra
Pál
2010.0.13 11:00
5 óra
Pál
2010.02.13 17:00
1 óra
Szebeni
2010.02.14 21:45
0,5 óra
Pál
2010.02.14 22:00 2010.02.14 16.00
0,5 óra 0,5 óra
Szebeni Pál
2010.02.14 17.00
0,5 óra
Nagy
2010.02.14 16:40
0,5 óra
Szebeni, Pál
Viharvadászok, 2010-05-11
Leírás SVN beállítása, tesztelés Sablon fedőlapok elkészítése + SVNre Értekezlet Technológiák: Eclipse Subclipce Uml2 for Eclipse Értekezlet, brainstorming Értekezlet, brainstorming, specifikálunk, docot használunk Balázs megírja az első házit Google Code felületének finomítása Követelménydefiníció és projekt terv leírása, még befejezetlen Dokumentáció átolvasása, kiegészítése, észrevételek leírása Dokumentáció frissítése megjegyzések alapján Képek, Use Case Dokumentálás (feladatleírása) Use Case elkészítése Feladat további konkretizálása, időegységek működésének megbeszélése
14
Vihar
1. Követelmény, projekt, funkcionalitás 2010.02.14 17:00
4 óra
Pál
2010.02.14 20:20
0,5 óra
Pál
2010.02.14 22:00
2 óra
Szebeni
2010.02.14 22:30
0,5 óra
Herber
2010.02.14 23:00
1 óra
Pál, Szebeni
2010.02.15 08:00
0,5 óra
Szebeni
Viharvadászok, 2010-05-11
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) Logó és egyéb adminisztráció Feladatkiírás átnézése, kommentelése a spreadsheetben, kijavítása Dokumentációhoz észrevételek kapcsolása Dokumentáció véglegesítése Nyomtatás
15
2. Analízis modell kidolgozása 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.03.02.
2. Analízis modell kidolgozása
Vihar
2. Analízis modell kidolgozása 2.1 Objektum katalógus 2.1.1 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.
2.1.2 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ú).
2.1.3 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.
2.1.4 RoadCell Leszármazottja a Cell absztrakt osztálynak, specialitása az, hogy kapcsolódik 1-1 szomszédos útcellához, tartalmaz ISign interfészt megvalósító objektumot, valamint egy konkrét úthoz tartozik egy ilyen cella.
2.1.5 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.
2.1.6 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.
2.1.7 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.
16 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
2.1.8 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).
2.1.9 CivilCar Ez az objektum leszármazottja a Vehicle absztrakt ősosztálynak.
2.1.10
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.
2.1.11
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.
2.1.12
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.
2.1.13
CityEntry
Speciális Intersection, ahol beléphetnek az autók és a rendőr is (ha kilépett). Továbbá az Intersection-nek köszönhetően a Cell absztrakt osztály leszármazottja.
2.1.14
CityExit
Speciális Intersection, ahol kiléphetnek az autók és a rendőr is. Továbbá az Intersection-nek köszönhetően a Cell absztrakt osztály leszármazottja.
2.1.15
Bank
Speciális Intersection, itt kezdődik a játék, vizuálisan megkülönböztetett.
2.1.16
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.
17 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
2.1.17
Vihar
Clock
Feladata az időközönkénti vezérlés-indí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..*] Policeman [1..*] Robber Road [1..*] Intersection [1..*] Clock Int int Bank
cars policemen player roads intersections
Az autók. A rendőr. A bankrabló. Az utak. Az elágazások.
clock minPolice minCivilCar Bank
Az időzítő. A minimum rendőrszám. A minimum autószám. A bank.
Szolgáltatások void
void void void void void
void void 1
Meghívja mindenkinek a tick() függvényét megfelelő sorrendben. gameOver() Vereség esetén hívódik meg. generateLevel() A pályát megfelelő módon legenerálja. generateMap() A térképet a megadott módon legenerálja. generateVehicles() Elhelyezi az autókat. winGame Győzelem esetén fut le, gondoskodik a nyerés esetén szükséges úlépésekről. kill(c: CivilCar) Törli a c civil járművet. kill(p: PoliceMan) Törli a p rendőrt. tick()
Ez később külön szálon is megvalósítható.
18 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása void void
kill(r: Robber) regenerateKilled Vehicles()
Cell
getEmptyCityEntry ()
Törli a r bankrablót. Ha kevesebb Civil Car, vagy Policeman van, generál. Visszaadja az üres városbejárat celláját.
2.2.1 Road Az utakat reprezentáló osztály, cellákból áll és ezeket kezeli. A pálya felépítésekor ő generálja celláit. Ősosztályok: Nincs Interfészek: Nincs. Példányok száma: n Komponensek: Cell [1..*] Cell Cell
cells entry exit
Az utat felépítő cellák. Belépő cella, az út eleje. Kilépő cella, az út vége.
Szolgáltatások: Cell Cell void void
Visszaadja a kilépő cellára mutató referenciát. getEntryIntersection() Visszaadja a belépő cellára mutató referenciát. generateCells() Legenerálja a saját celláit. placeCar(v: Vehicle) Elhelyez egy ’v’ autót egy szabad celláján. getExitIntersection()
2.2.2 Cell 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: 19 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása Cell [1..*]
getNextCells()
Cell [1..*]
getPreviousCells()
void
enter(r: Robber)
void
enter(p: Robber)
void
enter(c: Robber)
Vehicle
getVehicle()
void
setVehicle(v: Vehicle)
Road
getRoad()
void
leave()
ISign
getSign()
A következő cellákat tartalmazó listát adja vissza. Az előző cellákat tartalmazó listát adja vissza. Egy ’r’ Robber objektum lép be. Egy ’p’ Policeman objektum lép be. Egy ’c’ CivilCar objektum lép be. Visszaadja a cellán álló Vehicle objektumot. Beállít a cellára egy v objektumot. Visszaadja, hogy a cella melyik úton van. Elhagyja a cellán álló Vehicle a cellát (törlődik a nyilvántartásból) Visszaadja a cellán lévő ISign objektumot (piros lámpa…)
2.2.3 RoadCell Egy Cell-bő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 Cell Road sign
nextCell previousCell road ISign
Az előző cellára mutató referencia. A következő cellára mutat. Melyik úton is van ez az útcella. Van-e, illetve milyen a Sign a cellán.
Szolgáltatások:
20 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása void
setNeighbourCells Beállítja az előző és következő (prev: Cell, celláját a RoadCell egy next: Cell) példánya.
2.2.4 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. Ősosztályok: Nincs. Interfészek: Nincs. Példányok száma: n Komponensek: Szolgáltatások: boolean void void
Éppen aktuálisan blokkolja-e a cellán való továbbhaladást. vehicleEntered() A cellába az ISign objektumhoz jármű érkezett. tick() Időegység eltelik, ez vizsgálja a kihatást a járműre a cellán. isBlocking()
2.2.5 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 int int
redTime greenTime offset
Piros világítás ideje. Zölden világítás ideje. Állapot: hol tart.
Szolgáltatások: -
21 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása
2.2.6 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 int
waitTime tickAmount
Várakozási idő. Hol tart a visszaszámlálásban a tábla.
Szolgáltatások: -
2.2.7 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
Cell
cell
inverseSpeed
player
Game
game
Ennyi időegység múlva lehet lépni. Ezen a mezőn tartózkodik a jármű. A jármű sebessége (tick/mező). A játék. Ismeri, hogy jelezze a bekövetkező eseményeket.
Szolgáltatások: void void
tick() die()
Léptetés. Meghal, azaz lekerül a pályáról.
22 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
void
accept (v: Vehicle)
Cell
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.
2.2.8 Policeman 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.
onTheSameRoad()
Feladata eldönteni, hogy a bankrabló és a rendőr egy úton van-e, visszatérő értéke ennek igazsága.
Szolgáltatások: boolean
2.2.9 CivilCar Egy civil autót valósít meg, a Vehicle minden tulajdonságát felhasználva. A celláit (Vehicle-ben 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 -
23 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
2.2.10
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
int int Cell
minInverseSpeed maxInverseSpeed preferredCell
Visszaadja, hogy menetiránynak megfelelően halad-e a bankrabló az utcán. Minimális sebesség. Maximális sebesség. Előnyben részesített (beállítható) cella elágazáshoz.
Szolgáltatások: void void void void
2.2.11
void
increaseSpeed() decreaseSpeed() turnAround() setPreferredCell( c: Cell) hide()
void
busted()
Cell
chooseFrom(cIn, cOut: Cell[1..*])
Sebesség növelése. Sebesség csökkentése. Megfordul a bankrabló. Beállítja a c-t, mint előnyben részesített cella Megtalálja a rejtekhelyet s elrejtőzik. A rendőr elkapja, ütközés által, vagy egy utcába kerülve vele. 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 Cell-nek), 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. 24 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
Példányok száma: n Komponensek: Cell [1..*]
nextCells
Cell [1..*]
previousCells
Következő cellákat tartalmazó tömb. Előző cellákat tartalmazó tömb.
Szolgáltatások:
2.2.12
void
addNextCell(c: Cell)
void
addPreviousCell(c: Cell)
Listához ad egy cellát, mint kilépő cella az Intersection-ből. Előző cellalistájához csatol egy cellát.
CityEntry
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: -
2.2.13
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 25 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása void void
2.2.14
Vihar 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 -
2.2.15
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
2.2.16
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és-indítás engedélyezése. Ősosztályok: Nincs. 26 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása Interfészek: Nincs. Példányok száma: 1 Komponensek: Szolgáltatások boolean
tick()
Engedélyezi a tick-et.
Statikus struktúra diagramok
1. ábra: osztálydiagram
27 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
Szekvencia diagramok
2. ábra: Játék inicializálása
28 Viharvadász csapat, 2010-03-02
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
29 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
5. ábra: Rendőr és bankrabló egy utcán
30 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
6. ábra: Bankrabló következő cellát választ
31 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
7. ábra: Bankrabló és jármű összetalálkozása
8. ábra: Bankrabló rátalál a rejtekhelyre
32 Viharvadász csapat, 2010-03-02
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
33 Viharvadász csapat, 2010-03-02
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
34 Viharvadász csapat, 2010-03-02
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
35 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
15. ábra: Sebességek
36 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
State-chartok
16. ábra: Stop tábla state chart-ja
17. ábra: Traffic Light (lámpás jelzőőr) state chart-ja
37 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
18. ábra: Jármű state chart-ja
38 Viharvadász csapat, 2010-03-02
2. Analízis modell kidolgozása
Vihar
Napló Kezdet 2010.02.26 12:00
Időtartam 2 óra
2010.02.27 13:00
1 óra
2010.02.28 14:00
3,5 óra
2010.02.28 20:00
4,5 óra
2010.02.28 21:00
1 óra
2010.03.01 12:00 2010.03.01 13:00
1 óra 0,5 óra
2010.03.01 13:30 2010.03.01 13:30 2010.03.01 13:30 2010.03.01 13:30 2010.03.01 20:00
0,5 óra 0,5 óra 0,5 óra 0,5 óra 2 óra
2010.03.01 20:30
2 óra
Résztvevők Leírás Herber, Szebeni, Pál Megbeszélés személyesen, konzultáció, class diagram átalakítása Szebeni class diagram, robber vs city exit 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) 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) Pál Vehicle sebességek szekvencia diagram elkészítése, valamint a jármű state chartjának összeállítása Szebeni, Herber, Pál értekezlet Szebeni, Herber, értekezlet Pál, Nagy Nagy class diagram javitása Szebeni szekvenciák javítása Pál szekvenciák javítása Herber szekvenciák javítása Pál Dokumentáció megírása, átírása Szebeni osztály diagram javítgatása, átnézése, dokumentáció ellenőrzése, nyomtatás
39 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása
Ö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ás-besorolá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 Herber Pál Szebeni Nagy
2. hét
3. hét
Összesen
5
11,5
8,5
25
16,5
11,5
7
35
11
16,5
10,5
38
2,5
10,5
1
14
40 Viharvadász csapat, 2010-03-02
Vihar
2. Analízis modell kidolgozása
Második hét
Első hét Nagy 7%
Herber 14%
Szebeni 31%
Nagy 21%
Nagy 4%
Herber 23%
Herber
Herber
Pál
Pál
Szebeni Pál 48%
Harmadik hét
Herber 31%
Herber
Szebeni 39%
Pál
Szebeni
Nagy Szebeni 33%
Pál 23%
Szebeni
Nagy
Nagy Pál 26%
Összesen Nagy 13%
Herber 22%
Herber Pál Szebeni
Szebeni 34%
Nagy Pál 31%
41 Viharvadász csapat, 2010-03-02
3. Szkeleton tervezése 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.03.09.
Vihar
3. Szkeleton tervezése
3. Szkeleton tervezése 3.1 A szkeleton modell valóságos use-case-ei 3.1.1 Use-case diagram
Óra use-case diagramja
Viharvadász csapat, 2010-05-11
44
Vihar
3. Szkeleton tervezése
3.1.2 Use-case leírások Use-case 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.
Use-case 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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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ó.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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 case-t fogja lekezelni.
Use-case neve Rövid leírás Aktorok Forgatókönyv
Civil autó léptetése Civil autó mozgatása Óra Lásd autó léptetése
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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, 2010-05-11
45
Vihar
3. Szkeleton tervezése
Use-case 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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
Rendőr léptetése Mint az autó tick, a „rabló keresés”-sel együtt Óra Ld. Autó tick-je.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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 case-t fogja lekezelni.
Use-case neve Rövid leírás Aktorok Forgatókönyv
Rabló elbújása A rabló megmenekül Óra Ha a rabló elérte a rejtekhelyet, akkor elbújik.
Viharvadász csapat, 2010-05-11
46
Vihar
3. Szkeleton tervezése Use-case 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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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 use-case diagramokon ábrázoltakat. A szekvencia-diagramok segítségével ellenőrizhető az egyes lefutási sorrendek minden esetben, mely külön szekvencia-diagramon á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
Viharvadász csapat, 2010-05-11
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
47
3. Szkeleton tervezése
5.
6.
7.
8.
Analóg esetek: RegeneratePoliceman Leírás: Eltűnt CivilCar visszahelyezése a pályára. 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. 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 CivilCar-ral ütközik. 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 HidingPlace-re. 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.
Vihar 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, 2010-05-11
48
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 szekvencia-diagramok í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és-e (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|5442986] -> [civilcar0|CivilCar|10891203] . tick()|CALL [civilcar0|CivilCar|10891203] -> [cell1|RoadCell|9023134] . getVehicle()|CALL [civilcar0|CivilCar|10891203] <- [cell1|RoadCell|9023134] . getVehicle()|RETURN [civilcar0|CivilCar|10891203] -> [civilcar0|CivilCar|10891203] . accept(Vehicle v)|CALL [civilcar0|CivilCar|10891203] <- [civilcar0|CivilCar|10891203] . accept(Vehicle v)|RETURN [civilcar0|CivilCar|10891203] -> [cell0|RoadCell|19336051] . leave()|CALL [civilcar0|CivilCar|10891203] <- [cell0|RoadCell|19336051] . leave()|RETURN [civilcar0|CivilCar|10891203] -> [cell1|RoadCell|9023134] . enter(Vehicle v|CALL [civilcar0|CivilCar|10891203] <- [cell1|RoadCell|9023134] . enter(Vehicle v)|RETURN [game|Game|5442986] <- [civilcar0|CivilCar|10891203] . 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, 2010-05-11
49
Vihar
3. Szkeleton tervezése
4.
Egy a várost elhagyó autót (civil vagy rendőr) visszateszünk az egyik bejövő városhatárra.
Regenerate Killed Vehicles
5.
A rabló kiválasztja a következő cellát, amerre haladni szeretne.
Robber chooses next cell
6.
A rabló összeütközik egy autóval (civil vagy rendőr).
Robber meets Vehicle
7.
A rabló eléri a rejtekhelyét, azaz megmenekül.
Robber vs hidingPlace
8.
Egy autó (civil vagy rendőr) kiválasztja a következő cellát, amerre haladni szeretne.
Vehicle chooses next cell
9.
Egy autó (civil, rendőr vagy rabló) törli a referenciáját az aktuális mezőről, mielőtt meghal.
Vehicle Dies
10.
Egy autó (civil vagy rendőr) lelassít egy másik, lassabb autó (civil vagy rendőr) mögött.
Vehicle meets Vehicle, Sebességek
11.
Egy autó (civil, rendőr vagy rabló) a következő mezőre lép.
Vehicle moves to next empty cell
12.
Egy autó (civil vagy rendőr) elhagyja a várost.
Vehicle vs CityExit
3.5 Napló Kezdet 2010.03.03. 21.30
Időtartam 2,5 óra
2010.03.05 12:00
2 óra
2010.03.06 09:00
0,5 óra
2010.03.06 14:00
2 óra
2010.03.06 16:00
0,5 óra
Viharvadász csapat, 2010-05-11
Résztvevők Nagy
Leírás Részletes Use-Case diagramok elkészítése Szebeni, Herber, Pál Értekezlet, Use Case módosítása, skeleton átbeszélése, feladatkiosztás Pál Előző dokumentáció javítása (követelmény) Herber Tesztesetek összeírása. Szebeni Kimaradt szekvencia szerkeztése, usecase 50
Vihar
3. Szkeleton tervezése
2010.03.06 19:00
1 óra
Herber
2010.03.07 15:00
0,5 óra
Pál
2010.03.08 12:00
2 óra
Szebeni, Herber, Pál, Nagy
diagramok szerkesztése Kimaradt tesztesetek beillesztese, javítás. Dokumentációhoz tartozó szöveg elkészítése Értekezlet
Összesítve: Név Herber Máté Pál Balázs Szebeni Szilveszter Nagy Krisztián
Ezen a héten 7 5 4.5 4.5
Viharvadász csapat, 2010-05-11
Összesen 32 40 42.5 18.5
51
4. Szkeleton beadása 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.03.16.
Vihar
4. Szkeleton beadás
Szkeleton beadás 4.1 Fordítási és futtatási útmutató 4.1.1 Fájllista Fájl neve Bank.java Cell.java CityEntry.java CityExit.java CivilCar.java Clock.java ConsoleLogger.java CustomReader.java Game.java HidingPlace.java INamedObject.java Intersection.java ISign.java
Méret (byte) Utolsó módosítás 175 2010-03-16 17:40 1202 2010-03-16 21:48 218 2010-03-16 17:40 1119 2010-03-16 06:39 849 300 249 2843 11386 613
2010-03-16 06:39 2010-03-16 17:40 2010-03-16 17:40 2010-03-16 19:57 2010-03-16 06:39 2010-03-16 06:39
107 2010-03-16 17:40 1205 2010-03-16 06:39 141 2010-03-16 06:39
Logger.java NamedObject.java
4252 2010-03-16 06:39 453 2010-03-16 06:39
Policeman.java Road.java RoadCell.java
1942 2010-03-16 06:39 4707 1814 2010-03-16 21:48
Robber.java
5085 2010-03-16 06:39
Skeleton.java StopSign.java TrafficLight.java Vehicle.java compile.bat runme.bat testcases.bat
25142 2010-03-16 06:39 781 2010-03-16 06:39 816 2010-03-16 06:39 4707 59 22 577
2010-03-16 06:39 2010-03-16 22:14 2010-03-16 21:48 2010-03-16 06:39
compile.sh compileandrun.sh
737 2010-03-16 19:57 223 2010-03-16 10:15
runalltestcases.sh
722 2010-03-16 19:57
Tartalom Bankot reprezentáló osztály Cellát reprezentáló osztály Városhatár-bejáratot reprezentáló osztály Városhatár-kijáratot reprezentáló osztály Civil autót megvalósító osztály Játékórát megvalósító osztály Parancssorra naplózó osztály Bemenetet olvasó osztály Játékot összefogó osztály Rejtekhelyet reprezentáló osztály Névvel rendelkező osztályok interfésze Útkereszteződést reprezentáló osztály Közlekedési jelzések közös interfésze Általános naplózó osztály Névvel rendelkező osztályok közös őse Rendőrt megvalósító osztály Utat reprezentáló osztály Úton egy cellát reprezentáló osztály Bankrablót megvalósító osztály A szkeleton főosztálya Stop táblát megvalósító osztály Közlekedési lámpát megvalósító osztály Általános jármű osztály Fordítást segítő batch fájl A programot futtató batch fájl A programot a tesztesetfájlokkal futtató batch fájl Fordítást segítő bash szkript Fordítást és futtatást is végző bash szkript A programot a tesztesetfájlokkal futtató bash szkript 53
4. Szkeleton beadás level1.txt level2.txt level3.txt level4.txt level5.txt level6.txt level7.txt level8.txt level9.txt level10.txt level11.txt level12.txt
Vihar 383 146 65 66 60 35 35 41 44 118 38 38
2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39 2010-03-16 06:39
Első teszteset példabemenetei 2. teszteset példabemenetei 3. teszteset példabemenetei 4. teszteset példabemenetei 5. teszteset példabemenetei 6. teszteset példabemenetei 7. teszteset példabemenetei 8. teszteset példabemenetei 9. teszteset példabemenetei 10. teszteset példabemenetei 11. teszteset példabemenetei 12. teszteset példabemenetei
4.1.2 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.
4.1.3 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
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 Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
Munka százalékban 25 25 25 25
55
Vihar
4. Szkeleton beadás
4.3 Napló Kezdet 2010.03.12. 12.00
Időtartam 2 óra
Résztvevők Herber, Szebeni
2010.03.12. 14.00 2010.03.13. 12.00 2010.03.13. 15.00
1.5 óra 2.5 óra 1 óra
Szebeni Nagy Szebeni
2010.03.13. 16.00 2010.03.13. 19.00 2010.03.13. 20.00 2010.03.13 01:00 2010.03.13 12:00
1 óra 3 óra 0.5 óra 2.5 óra 2 óra
Nagy Nagy Szebeni Herber Herber
2010.03.13 19:30
1.5 óra
Herber
2010.03.14 00:00 2010.03.15 10:30
3 óra 1 óra
Herber Szebeni
2010.03.15 12:30 2010.03.15 14.00 2010.03.15 16:30
1 óra 3.5 óra 4.5 óra
Herber Nagy Herber
2010.03.15 20:30 2010.03.15 22:00 2010.03.15.19.00
1 óra 0.5 óra 5 óra
Pál Szebeni Nagy
Név Herber Pál Szebeni Nagy
Ezen a héten 14.5 1 6.5 15
Leírás Konzultáció, Tesztek folyamatának átbeszélése, feladatok kiosztása Mult heti usecase leírások Szkeleton fejlesztés Mult heti usecase leírások, és az óra use case diagram változtatása Szkeleton fejlesztés Szkeleton fejlesztés Szkeleton tesztelése Szkeleton fejlesztés Szkeleton fejlesztés, tesztesetek és szekvencia diagramok Szkeleton fejlesztés, fordítási és futtatási doksi Szkeleton fejlesztés Szkeletont megnéztem, leforditottam, futatttam, sok még a hiány, megbeszéltem Krisztiánnal, hogy befejezi ma délutánra Szkeleton fejlesztés Szkeleton fejlesztés Szkeleton fejlesztés, batok, doksi bugfix, összefoglaló Dokumentációk javítása Értékelés Szkeleton fejlesztés Összesen 46.5 41 49 33.5
56
5. Prototípus koncepciója 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.03.23.
5. Prototípus koncepciója
Vihar
5. Prototípus koncepciója 5.1 Prototípus interface-definí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ás-sorrendet 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.
5.1.1 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.
5.1.2 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, 2010-05-11
58
5. Prototípus koncepciója
Vihar
Leírás: Autók sebességének kikapcsolása/bekapcsolása (sw paraméterrel). (Minden autó minden tick-re 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 Leírás: Az egész játékteret n-el lépteti (n darab tick) Opciók: n exit 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 i-re (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
5.1.3 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, 2010-05-11
59
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 egy-egy ú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, 2010-05-11
60
5. Prototípus koncepciója
Vihar
5.2 Összes részletes use-case
Viharvadász csapat, 2010-05-11
61
Vihar
5. Prototípus koncepciója
5.2.1 Játékoshoz kapcsolódó use case-ek Use-case 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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
5.2.2 Órához kapcsolódó use case-ek
Use-case 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.
5.2.3 Utakhoz kapcsolódó use case-ek Use-case 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.
5.2.4 Táblálkhoz kapcsolódó use case-ek Use-case 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.
5.2.5 Városhatárhoz kapcsolódó use case-ek Use-case 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, 2010-05-11
62
Vihar
5. Prototípus koncepciója Use-case 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ó.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
5.2.6 Minden járműhöz kapcsolódó use case-ek Use-case 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 case-t fogja lekezelni.
Use-case neve Rövid leírás Aktorok Forgatókönyv
Car Moving To Next Cell Autó lép Óra Egy autó megpróbál lépni a következő cellára.
5.2.7 Rendőrhöz és Civil autóhoz kapcsolódó use case-ek Use-case 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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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, 2010-05-11
63
Vihar
5. Prototípus koncepciója
5.2.8 Rendőrhöz kapcsolódó use case-ek Use-case neve Rövid leírás Aktorok Forgatókönyv
Finding Robber Rendőr keresi a rablót Óra A rendőr, ha egy utcában van a rablóval, akkor megtalálta.
Use-case 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.
5.2.9 Rablóhoz kapcsolódó use case-ek
Use-case 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 case-t fogja lekezelni.
Use-case neve Rövid leírás Aktorok Forgatókönyv
Robber Hiding A rabló megmenekül Óra Ha a rabló elérte a rejtekhelyet, akkor elbújik, így megmenekül.
Use-case neve Rövid leírás Aktorok Forgatókönyv
Robber Moving To Next Cell Rabló lép Óra A rabló megpróbál lépni a következő cellára.
Use-case 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.
Use-case 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, 2010-05-11
64
Vihar
5. Prototípus koncepciója
5.2.10
Nyuszi kapcsolódó use case-ek
Use-case neve Rövid leírás Aktorok Forgatókönyv
Robber Hit Bunny Rabló elüti a nyuszit, és átmegy GodMode-ba Óra Ha a rabló elüti a nyuszit, ilyenkor átmegy GodMode-ba és a nyuszi meghal és a rendőr lép egyet.
Use-case 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 GodMode-ba, ami azt jelenti, hogy egy időre, immunitást élvez és ilyenkor nem tudja elkapni a rendőr.
Use-case neve Rövid leírás Aktorok Forgatókönyv
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. Teszt-eset 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
Teszt-eset neve Rövid leírás Teszt célja
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.
Teszt-eset neve Rövid leírás Teszt célja
Robber vs Car A rabló belefut egy civilbe. A rabló ütközésének tesztelése, játék vége.
Teszt-eset neve Rövid leírás
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.
Teszt célja
Viharvadász csapat, 2010-05-11
65
Vihar
5. Prototípus koncepciója
Teszt-eset neve Rövid leírás Teszt célja Teszt-eset neve Rövid leírás Teszt célja Teszt-eset 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.
Teszt célja
Car vs CityExit then Regenerate Egy autó kilép a városból egy CityExit-en, majd egy CityEntry-n visszatér. CityExit és CityEntry, valamint újragenerálás tesztelése.
Teszt-eset neve Rövid leírás Teszt célja
Lamp moves from nonblocking to blocking Egy lámpa a tickek haladtával állapotot vált. Lámpák állapotainak tesztelése.
Teszt-eset neve Rövid leírás
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.
Teszt-eset neve Rövid leírás
Teszt célja Teszt-eset neve Rövid leírás Teszt célja
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 referencia-kimenettel, 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, 2010-05-11
66
Vihar
5. Prototípus koncepciója
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: 8
5.5 Napló Kezdet 2010.03.12. 12.00
Időtartam 2 óra
2010.03.21. 09.00 2010.03.21. 18:00 2010.03.22. 12:00 2010.03.22. 12:30
1 óra 6 óra 0,5 óra 1,5 óra
Herber Pál Szebeni Nagy
Viharvadász csapat, 2010-05-11
Résztvevők Herber, Szebeni, Pál, Nagy Szebeni Herber Pál Pál, Szebeni, Nagy
héten 8 4 5.5 3.5
Leírás Konzultáció, Tesztelés Use casek, kód vizsgálata dokumentáció írás. dokumentáció véglegesítése Értekezlet, jövő heti munkák kiosztása összesen 54.5 45 54.5 37
67
6. Részletes tervek 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.03.30.
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, 2010-05-11
69
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, 2010-05-11
70
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, 2010-05-11
71
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ár-bejá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, 2010-05-11
72
6. Részletes tervek
Vihar
void regenerateKilledVehicles(): A játék közben valamilyen úton-mó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, 2010-05-11
73
6. Részletes tervek
Ősosztályok -
Interfészek -
Attribútumok -
Vihar
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 blokkolja-e 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 vannak-e, í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ű, egy-kilépésű) reprezentál. Ennek megfelelően van felépítve (attribútumok, stb.).
Ősosztályok Cell
Interfészek -
Viharvadász csapat, 2010-05-11
74
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, 2010-05-11
75
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, 2010-05-11
76
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ő tick-ekben (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, 2010-05-11
77
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 8.1.1 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áll-e 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, 2010-05-11
78
6. Részletes tervek
Vihar
Ellenőrzött funkcionalitás, várható hibahelyek Az autó valóban lelassít-e, 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, 2010-05-11
79
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, 2010-05-11
80
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] o Event Robber R moved o tick 2 o Event Policeman P[0] o Event Policeman P[0] o Event Robber R dies o Game Over
moved to next cell to next cell moved to cell option 0 arrested R
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, 2010-05-11
81
6. Részletes tervek
Vihar
Bemenet loadMap map7.txt writeMap movePolice 0 0 moveCivil 0 1 moveRobber 0 setInverseSpeed r setInverseSpeed c setInverseSpeed c setInverseSpeed p tick 2 moveRobber 3 tick 1 exit
1 0 2 1 3 0 4
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, 2010-05-11
82
6. Részletes tervek o o o o o o o o o o o o o
Vihar
Event TrafficLight T[0] changed to non-blocking Event Policeman P[0] moved to next cell Event Robber R moved to cell option 3 tick 11 tick 12 Event CivilCar C[0] moves to next cell Event CivilCar C[1] blocked by S[0] Event Robber R moved to next cell tick 13 tick 14 Event Robber R moved to next cell Event Robber R hides You won the game!
Car vs CityExit then Regenerate
Leírás Egy autó kilép a városból egy CityExit-en, majd egy CityEntry-n 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 o Event CivilCar o Event CivilCar o tick 2 o Event CivilCar
C[0] moves to next cell C[0] leaves the city C[0] dies 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, 2010-05-11
83
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, 2010-05-11
84
6. Részletes tervek o o o o o o o o o o o o o o
Vihar
tick 5 Event Policeman P[0] Event Policeman P[0] Event Robber R moved tick 6 Event Policeman P[0] Event Policeman P[0] Event Robber R moved Event Robber R is no tick 7 Event Policeman P[0] Event Policeman P[0] Event Robber R dies Game Over
moved to next cell failed to arrest R to next cell moved to next cell failed to arrest R to next cell longer in GodMode moved to next cell arrested R
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 referencia-kimenettel, 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, 2010-05-11
85
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
in2.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 baaarack kutya
CompareFiles in1.txt in2.txt The two input files differs. First character position of difference: 8
6.4 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, 2010-05-11
86
6. Részletes tervek
Vihar
A megváltozott osztálydiagram
Viharvadász csapat, 2010-05-11
87
6. Részletes tervek
Vihar
A bankrabló következő cellát választ
Viharvadász csapat, 2010-05-11
88
6. Részletes tervek
Vihar
A civil autó lép
Viharvadász csapat, 2010-05-11
89
6. Részletes tervek
Vihar
A rabló immunitás állapota
A rabló nyuszival találkozik
Viharvadász csapat, 2010-05-11
90
6. Részletes tervek
Vihar
A rabló járművel találkozik
Jármű nyuszival találkozik
Viharvadász csapat, 2010-05-11
91
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, 2010-05-11
92
Vihar
6. Részletes tervek
6.5 Napló Kezdet 2010.03.24. 09.30 2010.03.26 12:00
Időtartam 5 óra 1.5 óra
2010.03.26 14:00 2010.03.26 16:00 2010.03.29.18:00 2010.03.29 18:30
1 óra 0.5 óra 3 óra 2 óra
Résztvevők Szebeni Szebeni, Pál, Herber Herber Szebeni, Nagy Nagy Herber
2010.03.29 20:30
1 óra
Herber, Szebeni
2010.03.29 21:30
4 óra
Szebeni
2010.03.29 21:30
4 óra
Herber
2010.03.29 22:30
2,5
Pál
2010.03.29.23:00
0,5 óra
Nagy
Leírás Változtatás modellezése Értekezlet, konzultáció, feladatkiosztás Hibajavítások, fontosabb feladatok értekezlet, model megbeszélése Tesztesetek részletes tervei Use case diagram, class diagram, bunny state chart értekezlet, model ismertetése, részletek megbeszélése (Skype) use casek, osztálydiagram, mult heti doksi javítása, apróbb hibák javítása activity diagram, hibák javitása, bugfix Specifikációváltozás dokumentálása, Osztályok és metódusok tervei Tesztesetek részletes tervei
Összesítve: Név Herber Pál Szebeni Nagy
Ezen a héten 9,5 4 12 4
Viharvadász csapat, 2010-05-11
Összesen 64 49 66.5 41
93
7. Prototípus beadása 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.04.12.
7. Prototípus beadása
Vihar
Prototípus beadása 7.1 Fordítási és futtatási útmutató 7.1.1 Fájllista Fájl neve
Méret
src\ Bank.java Bunny.java
274 1 966
Cell.java CityEntry.java
2 199 330
CityExit.java CivilCar.java Clock.java ConsoleLogger.java CustomReader.java FileLogger.java Game.java HidingPlace.java INamedObject.java Intersection.java ISign.java
976 1 639 494 246 3 296 615 24 014 530 104 2 061 814
Logger.java NamedObject.java
4 614 450
Policeman.java Proto.java Road.java RoadCell.java
2 862 8 619 3 668 1 852
Robber.java StopSign.java TrafficLight.java
4 658 1 397 1 823
Vehicle.java bin\ check_output
5 049
check_output.exe
Keletkezés ideje
Tartalom
2010.04.13 0:16 Bankot reprezentáló osztály 2010.04.13 0:16 A Húsvéti nyuszit reprezentáló osztály 2010.04.13 0:16 Cellát reprezentáló osztály 2010.04.13 0:16 Városhatár-bejáratot reprezentáló osztály 2010.04.13 0:16 Városhatár-kijáratot reprezentáló osztály 2010.04.13 0:16 Civil autót megvalósító osztály 2010.04.13 0:16 Játékórát megvalósító osztály 2010.04.13 0:16 Parancssorra naplózó osztály 2010.04.13 0:16 Bemenetet olvasó osztály 2010.04.13 2:22 Fájlba naplózó osztály 2010.04.13 2:11 Játékot összefogó osztály 2010.04.13 0:16 Rejtekhelyet reprezentáló osztály 2010.04.13 0:16 Névvel rendelkező osztályok interfésze 2010.04.13 0:16 Útkereszteződést reprezentáló osztály 2010.04.13 0:16 Közlekedési jelzések közös interfésze 2010.04.13 0:16 Általános naplózó osztály 2010.04.13 0:16 Névvel rendelkező osztályok közös őse 2010.04.13 2:11 Rendőrt megvalósító osztály 2010.04.13 2:11 A Prototípus főosztálya 2010.04.13 0:16 Utat reprezentáló osztály 2010.04.13 0:16 Úton egy cellát reprezentáló osztály 2010.04.13 0:16 Bankrablót megvalósító osztály 2010.04.13 0:16 Stop táblát megvalósító osztály 2010.04.13 0:16 Közlekedési lámpát megvalósító osztály 2010.04.13 2:11 Általános jármű osztály
8 539 2010.04.12. 22:41 Szöveges állományokat összehasonlító segédprogram (Linux) 7 680 2010.04.13 2:14 Szöveges állományokat összehasonlító segédprogram (Windows) 95
7. Prototípus beadása
Vihar
compile.bat
91
compile.sh runme.bat
209 17
runme.sh testcases.bat
17 1 581
testcases.sh
286
bin\maps map1.commands map1.expect map1.txt map10.commands map10.expect map10.txt map11.commands map11.expect map11.txt map2.commands map2.expect map2.txt map3.commands map3.expect map3.txt map4.commands map4.expect map4.txt map5.commands map5.expect map5.txt map6.commands map6.expect map6.txt map7.commands map7.expect map7.txt map8.commands map8.expect map8.txt map9.commands map9.expect map9.txt
71 171 24 91 920 40 57 175 21 88 130 24 86 142 21 79 176 36 78 160 33 56 240 30 192 994 88 56 178 16 43 107 16
2010.04.13 2:18 Fordítást segítő batch fájl (Windows) 2010.04.13 2:12 Fordítást segítő script (UNIX) 2010.04.13 2:12 Futtatást segítő batch fájl (Windows) 2010.04.13 2:11 Futtatást segítő script (UNIX) 2010.04.13 2:31 Összes teszteset futtatását segítő batch fájl (Windows) 2010.04.13 2:12 Összes teszteset futtatását segítő script (UNIX) 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16 2010.04.13 2:11 2010.04.13 2:11 2010.04.13 0:16
1. tesztpálya parancsai 1. tesztpálya elvárt kimenete 1. tesztpálya reprezentációja 10. tesztpálya parancsai 10. tesztpálya elvárt kimenete 10. tesztpálya reprezentációja 11. tesztpálya parancsai 11. tesztpálya elvárt kimenete 11. tesztpálya reprezentációja 2. tesztpálya parancsai 2. tesztpálya elvárt kimenete 2. tesztpálya reprezentációja 3. tesztpálya parancsai 3. tesztpálya elvárt kimenete 3. tesztpálya reprezentációja 4. tesztpálya parancsai 4. tesztpálya elvárt kimenete 4. tesztpálya reprezentációja 5. tesztpálya parancsai 5. tesztpálya elvárt kimenete 5. tesztpálya reprezentációja 6. tesztpálya parancsai 6. tesztpálya elvárt kimenete 6. tesztpálya reprezentációja 7. tesztpálya parancsai 7. tesztpálya elvárt kimenete 7. tesztpálya reprezentációja 8. tesztpálya parancsai 8. tesztpálya elvárt kimenete 8. tesztpálya reprezentációja 9. tesztpálya parancsai 9. tesztpálya elvárt kimenete 9. tesztpálya reprezentációja
96
7. Prototípus beadása
Vihar
7.1.2 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ó PATH-ban), 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.
7.1.3 Futtatás 7.1.3.1 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. 7.1.3.2 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: --no-greeting : 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. 7.1.3.3 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.2-es 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.txt-ben 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 7-es számú dokumentumban található. 97
Vihar
7. Prototípus beadása
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: 0-val 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 7.2.1 Car vs Sign Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.10 22:05
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.10 22:00 A tábla nem blokkolja az autó áthaladását StopSign.isBlocking() függvény hibás megvalósítása Az említett függvényben elírt relációsjel javítva.
7.2.2 Car vs Car Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 14:42
7.2.3 Robber vs Car Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 15:22
Tesztelő neve Teszt időpontja Teszt eredménye
Nagy Krisztián 2010.04.12 15 :20 A Game Over felirat kiírásánál null pointer kivétellel megszakad a program futása. A Robber objektum game tagváltozója nem lett inicializálva a pálya felépítésénél. A Robber osztály game tagváltozója törölve, mivel már az ősosztályban szerepel ilyen tagváltozó.
Lehetséges hibaok Változtatások
7.2.4 Car Chooses Direction Tesztelő neve
Nagy Krisztián 98
7. Prototípus beadása
Vihar
Teszt időpontja
2010.04.12 16:25
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok
Nagy Krisztián 2010.04.12 16:20 A pálya kiírásánál nem látszik az autó. Az Intersection.getNextCells függvény nem a várt visszatérési értéket adja. 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 Intersection-re.
Változtatások
7.2.5 Robber Chooses Direction Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 17:22
Tesztelő neve Teszt időpontja Teszt eredménye
Nagy Krisztián 2010.04.12 17:07 A második tick-nél kiindexelési kivételt produkál a program a chooseFrom függvényben. Az Intersection.getPreviousCells függvény nem a várt visszatérési értéket adja. A Road.generateCells() függvényben lévő bug javítva, miszerint az első és utolsó cella is a bejárat-kereszteződéshez (entry) volt kötve.
Lehetséges hibaok Változtatások
7.2.6 Policeman vs Robber Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 18:00
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.12 17:44 Az onTheSameRoad függvény nullpointer kivétellel megszakad. A Policeman objektum wanted mezője nincs inicializálva. Game.generateLevel(String) függvényben a rendőrökhöz setWanted metódussal a player hozzákötése.
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok
Nagy Krisztián 2010.04.12 17:50 A Game Over üzenet után még lép a Robber. A Game.gameOver() függvény nem állítja meg a játékot / akadályozza folytatását. Game.gameOverFlag boolean típusú tagváltozó felvéve, melyet a gameOver true-ra állít, és ami esetén a tick() metódus nem csinál semmit.
Változtatások
99
7. Prototípus beadása
Vihar
7.2.7 Robber Gets From Bank to HidingPlace Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 19:08
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok
Nagy Krisztián 2010.04.12 18:05 A járművek 1 ütemmel korábban lépnek. A tick() függvény azelőtt csökkenti a számlálót, hogy ellenőrizné a 0-val való egyezést. Vehicle, Policeman és Robber tick() függvényeiben a számláló csökkentés a végére került.
Változtatások
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.12 18:10 A játék 3 tick után nem folytatódik. Hibás a parancsokat tartalmazó bemeneti fájl. A bemeneti fájlban a „tick 1” sort „tick 12”-re módosítottam.
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.12 18:16 A járművek nem jókor lépnek. A tick() függvények a lépés ütemében is csökkentik a számlálót. 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 Teszt időpontja Teszt eredménye
Nagy Krisztián 2010.04.12 18:26 A 10. ütemben a rendőr elkapja a rablót. (holott ekkor egy kereszteződésen áll) Az Policeman.onTheSameRoad() függvény nincs felkészítve a kereszteződéskre. Az említett függvény false értéket ad, ha a rendőr kereszteződésen áll.
Lehetséges hibaok Változtatások
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok
Nagy Krisztián 2010.04.12 18:42 A 12. ütemben a rabló a várttal ellentétes irányban mozog Kereszteződésből való kilépéskor nincs beállítva a Robber isGoingForward tagja. A Robber.accept() függvény mostatól beállítja az isGoigForward változót a megfelelő értékre. Nagy Krisztián 2010.04.12 19:06 A rabló egy ütemmel korábban nyer. „Rossz” a bemeneti pályaleíró fájl. 100
7. Prototípus beadása
Vihar Egy plusz mezőt beszúrtam a pályaleíró fájlba.
Változtatások
7.2.8 Car vs CityExit then Regenerate Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 20:00
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok
Nagy Krisztián 2010.04.12 19:30 A kilépett kocsi nem generálódik újra. A kocsi cell tagváltozója nem nullázódik, ezért a game nem veszi észre, hogy elhagyta a várost. 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.
Változtatások
7.2.9 Lamp moves from nonblocking to blocking Tesztelő neve Teszt időpontja
7.2.10
Nagy Krisztián 2010.04.12 20:06
Robber hits bunny and gets GodMode
Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 22:25
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.12 22:10 A rendőr a nyuszi elütése után is elkapja rablót. A Robber.godModeTicksLeft tagváltozó értéke nullán marad. A Bunny.interact(Robber) metódusból hiányzó Robber.startGodMode() hívás pótolva.
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.12 22:20 A rendőr a nyuszi elütése után is elkapja rablót. A Robber.godModeTicksLeft tagváltozó értéke nullán marad. A Bunny.interact(Robber) metódusból hiányzó Robber.startGodMode() hívás pótolva.
Tesztelő neve Teszt időpontja Teszt eredménye Lehetséges hibaok Változtatások
Nagy Krisztián 2010.04.12 22:25 A 2. és 3. tick-nél még nincs letartóztatási kísérlet. Rossz a megadott referenciakimenet. A kimenetet kell megváltoztatni, a program fut jól. 101
Vihar
7. Prototípus beadása
7.2.11
CivilCar hits the bunny
Tesztelő neve Teszt időpontja
Nagy Krisztián 2010.04.12 22:30
7.3 É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 egy-egy 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 25 25 25 25
Herber Máté Nagy Krisztián Pál Balázs Szebeni Szilveszter
7.4 Napló Kezdet 2010.04.02 12:00
Időtartam 2 óra
2010.04.05 17:00 2010.04.05 20:00 2010.04.10. 21:00 2010.04.12. 13:30 2010.04.12. 21:30 2010.04.12. 22:30 2010:04:12 20:00
2,5 óra 4 óra 2,5 óra 6,5 óra 1 óra 2 óra 3 óra
Résztvevők Herber, Nagy, Szebeni, Pál Nagy Nagy Nagy Nagy Nagy Nagy Pál
2010:04:12 22:00 2010:04:12 22:30 2010:04:13 07:00
1 óra 0,5 óra 0,5 óra
Szebeni Herber Szebeni
Leírás Értekezlet, konzultáció Proto fejlesztés Proto fejlesztés Proto implementáció Proto implementáció és tesztelés Proto implementáció és tesztelés Fordításhoz és futtatáshoz segédfájlok Dokumentáció, javadoc felfejlesztése, értékelés vázlata Doksi ellenőrzése, hibák jelzése Forditás, és ahhoz utmutató irás Feltöltendő fájlok, leforditása, feltöltése és doksi nyomtatása
Összesítve:
Herber Pál Szebeni Nagy
héten 2.5 5 3.5 20.5
összesen 66.5 54 70 61.5
102
8. Grafikus felület specifikálása 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.04.20.
Vihar
8. Grafikus felület specifikációja
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 8.2.1 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.
2010-05-11, Viharvadász csapat
104
8. Grafikus felület specifikációja
Vihar
8.2.2 A felület osztály-struktú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 8.3.1 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.
2010-05-11, Viharvadász csapat
105
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).
8.3.2 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 -
8.3.3 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).
8.3.4 TrafficLightDrawer
Felelősség Megvalósítja a közlekedési lámpához szükséges kirajzolás függvényeit.
2010-05-11, Viharvadász csapat
106
8. Grafikus felület specifikációja
Ősosztályok SignDrawer
Interfészek
Vihar
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).
8.3.5 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.
8.3.6 BankDrawer
Felelősség A Bank kirajzolására képes.
Ősosztályok IntersectionDrawer
Interfészek -
2010-05-11, Viharvadász csapat
107
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).
8.3.7 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).
8.3.8 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).
2010-05-11, Viharvadász csapat
108
8. Grafikus felület specifikációja
Vihar
8.3.9 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).
8.3.10
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).
8.3.11
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ő).
2010-05-11, Viharvadász csapat
109
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 -
8.3.12
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).
8.3.13
PolicemanDrawer
Felelősség Ki tud rajzolni egy rendőrt a pályára.
Ősosztályok VehicleDrawer
Interfészek -
Attribútumok -
2010-05-11, Viharvadász csapat
110
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).
8.3.14
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).
8.3.15
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).
2010-05-11, Viharvadász csapat
111
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 (IDrawers-ként).
2010-05-11, Viharvadász csapat
112
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,
2010-05-11, Viharvadász csapat
113
Vihar
8. Grafikus felület specifikációja
8.5 Napló Kezdet 2010.04.14 20:00
Időtartam 2.5 óra
Résztvevők Pál
2010.04.14 19:30
0.5 óra
Szebeni
2010.04.16 11:00
1 óra
Szebeni, Pál
2010.04.06 12:00
2 óra
2010.04.18.21:00
2 óra
Szebeni, Nagy, Herber, Pál Nagy
2010.04.19 22:30
2.5 óra
Pál
2010.04.20 07:00
0.5 óra
Pál
Leírás Javadoc magyarítása, kiegészítése Javadoc feladatok áttekintése, karakterkódolás Értekezlet, grafikai megoldások Értekezlet, grafika kitalálása Grafikus felülethez kapcsolódó diagramok elkészítése A grafikus felület dokumentációjának elkészítése ábrával Nyomtatás
Összesítés erre a hétre és eddig:
Herber Pál Szebeni Nagy
A héten 2 8.5 3.5 4
2010-05-11, Viharvadász csapat
Eddig összesen 68.5 62.5 73.5 65.5
114
9. Grafikus változat beadása 37 - Vihar Konzulens:
Hartung István
Csapattagok Herber Máté Nagy Krisztián Pál Balázs Sándor Szebeni Szilveszter
QQA5BY FDQKAY YZZIKV UBZ6RP
[email protected] [email protected] [email protected] [email protected]
2010.05.03.
Vihar
9. Grafikus változat beadása
9. Grafikus változat beadása 9.1 Fordítási és futtatási útmutató 9.1.1 Fájllista Fájl neve
Méret
\src Bank.java BankDrawer.java
268 190
Bunny.java BunnyDrawer.java Cell.java
2 007 1 424 2 212
CityEntry.java
303
CityEntryDrawer.java
202
CityExit.java
911
CityExitDrawer.java
200
CivilCar.java CivilCarDrawer.java Clock.java ConsoleLogger.java CustomReader.java FileLogger.java Game.java
1 669 335 492 244 3 294 613 28 344
GUI.java
7 370
GUICanvas.java
1 570
HidingPlace.java HidingPlaceDrawer.java
528 205
IDrawer.java
370
INamedObject.java
309
Intersection.java IntersectionDrawer.java ISign.java Logger.java NamedObject.java 2010-05-11, Viharvadász csapat
2 218 806 812 4 612 448
Keletkezés ideje
Tartalom
2010.04.30 1:04 Bankot reprezentáló osztály 2010.04.30 1:04 Bankot rajzoló osztály A Húsvéti nyuszit 2010.05.03 12:37 reprezentáló osztály 2010.05.04 3:43 Nyuszit rajzoló osztály 2010.04.30 1:04 Cellát reprezentáló osztály Városhatár-bejáratot 2010.04.30 1:04 reprezentáló osztály Városhatár-bejáratot rajzoló 2010.04.30 1:04 osztály Városhatár-kijáratot 2010.04.30 1:04 reprezentáló osztály Városhatár-kijáratot rajzoló 2010.04.30 1:04 osztály Civil autót megvalósító 2010.05.03 12:37 osztály 2010.05.04 3:43 Civil autót rajzoló osztály 2010.04.30 1:04 Játékórát megvalósító osztály 2010.04.30 1:04 Parancssorra naplózó osztály 2010.04.30 1:04 Bemenetet olvasó osztály 2010.04.30 1:04 Fájlba naplózó osztály 2010.05.04 3:43 Játékot összefogó osztály A grafikus változat 2010.05.04 3:43 főosztálya Rajzfelületet megvalósító 2010.05.04 3:43 osztály Rejtekhelyet reprezentáló 2010.04.30 1:04 osztály 2010.04.30 1:04 Rejtekhelyet rajzoló osztály Rajzolható osztályok közös 2010.05.04 3:43 interfésze Névvel rendelkező osztályok 2010.05.04 3:43 interfésze Útkereszteződést 2010.05.03 12:37 reprezentáló osztály Kereszteződést rajzoló 2010.05.03 23:09 osztály Közlekedési jelzések közös 2010.04.30 1:04 interfésze 2010.04.30 1:04 Általános naplózó osztály 2010.04.30 1:04 Névvel rendelkező osztályok 116
Vihar
9. Grafikus változat beadása
Policeman.java PolicemanDrawer.java Road.java
3 005 350 3 712
2010.05.04 3:43 2010.05.04 3:43 2010.05.04 3:43
RoadCell.java RoadDrawer.java
1 850 4 704
2010.04.30 1:04 2010.05.03 12:37
Robber.java RobberDrawer.java
5 199 3 084
2010.05.04 3:43 2010.05.04 3:43
RobberStatusDrawer.java SignDrawer.java
1 719 1 030
2010.05.04 3:43 2010.05.03 23:09
StopSign.java StopSignDrawer.java
1 396 420
2010.05.04 3:43 2010.05.03 12:37
TrafficLight.java
2 016
2010.05.04 3:43
TrafficLightDrawer.java Vehicle.java VehicleDrawer.java \bin
782 5 191 3 590
2010.05.03 12:37 2010.05.03 12:37 2010.05.04 3:43
compilegui.bat
79
compilegui.sh
163
javadocgui.bat README.txt
93 3 123
runmegui.bat
75
runmegui.sh \bin\maps
30
testmap.coords
216
testmap.txt
591
közös őse Rendőrt megvalósító osztály Rendőrt rajzoló osztály Utat reprezentáló osztály Úton egy cellát reprezentáló osztály Utat rajzoló osztály Bankrablót megvalósító osztály Rablót rajzoló osztály Rabló állapotát rajzoló osztály Jelet rajzoló osztály Stop táblát megvalósító osztály Stop táblát rajzoló osztály Közlekedési lámpát megvalósító osztály Közlekedési lámpát rajzoló osztály Általános jármű osztály Járművet rajzoló osztály
Fordítást segítő batch fájl 2010.05.04 3:43 (Windows) Fordítást segítő script 2010.05.04 3:43 (UNIX) Dokumentum fordítását 2010.05.03 23:09 segítő batch fájl (Windows) 2010.05.04 3:43 Tudnivalókról adott leírás Futtatást segítő batch fájl 2010.05.03 23:09 (Windows) Futtatást segítő script 2010.05.04 3:43 (UNIX) Pályán elhelyezkedő 2010.05.03 23:09 kereszteződések koordinátái Pálya leírását megadó 2010.05.03 23:09 térképfájl
9.1.2 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.
2010-05-11, Viharvadász csapat
117
Vihar
9. Grafikus változat beadása
9.1.3 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 PATH-ban benne kell lennie a java elérési útjának.
9.1.4 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. UTF8).
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 Herbert Máté Nagy Krisztián Pál Balázs Szebeni Szilveszter
Munka százalékban 25 25 25 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.
2010-05-11, Viharvadász csapat
118
Vihar
9. Grafikus változat beadása
9.4 Napló Kezdet
Időtartam
Résztvevők
Leírás
2010.04.23 12:00 2010.04.26 18:00 2010.04.26 22:00 2010.04.26 23:00 2010.04.27 13:00 2010.04.28 18:00
2 óra 2 óra 5 óra 3 óra 8 óra 7 óra
Szebeni, Herber, Pál Herber Herber Nagy Nagy Herber
2010.05.01 12:00 2010.05.03 12:00 2010.05.03 17:00 2010.05.03 18:00 2010.05.04 8:00
3 óra 2 óra 3 óra 5 óra 1 óra
Nagy Pál, Nagy Szebeni Nagy Pál Szebeni
Koznultáció, Értekezlet Térkép kirajzoló program Térkép kirajzoló program Gui fejlesztés Gui fejlesztés Térkép kirajzoló program + Térkép készítése Gui fejlesztés Értekezlet, Tesztelés Gui fejlesztés, Bugfix Javadoc Javadoc, nyomtatás
Herber Pál Szebeni Nagy
2010-05-11, Viharvadász csapat
héten
összesen
16.5 9.5 5.5 19.5
85 72 78 85
119
É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ázis-szimulá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 8-ig. 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.
Tartalomjegyzék
2010. május 10.
Vihar
Viharvadász csapat