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



Hasonló dokumentumok
Verkehrsmeldungen am UML

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

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

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

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

Space Invaders Dokumenta cio

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

01. gyakorlat - Projektalapítás

A követelmények leírása

Már megismert fogalmak áttekintése

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

2. Beadandó feladat dokumentáció

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

Tamagocsi Projektterv

és az instanceof operátor

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

Dr. Mileff Péter

Interfészek. PPT 2007/2008 tavasz.

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

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

2. Beadandó feladat dokumentáció

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

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

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter

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

ELTE, Informatikai Kar december 12.

DebitTray program Leírás

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

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

ContractTray program Leírás

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

Csatlakozási állapot megjelenítése

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

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

OOP és UML Áttekintés

Modell alapú tesztelés mobil környezetben

Programozás II gyakorlat. 6. Polimorfizmus

VII. Appletek, grafika

(Teszt)automatizálás. Bevezető

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

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

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

Iman 3.0 szoftverdokumentáció

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

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

Előzmények

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

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

Bevezetés a programozásba 2

UML (Unified Modelling Language)

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

Rendszermodellezés: házi feladat bemutatás

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

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

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

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

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

Bevezetés a Python programozási nyelvbe

Rekurzió. Dr. Iványi Péter

I. Objektumorientált programozás

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

Szkeleton. 8 datcode. Konzulens: Budai Péter

FELHASZNÁLÓI KÉZIKÖNYV

Thermo1 Graph. Felhasználói segédlet

Concurrency in Swing

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

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

GráfRajz fejlesztői dokumentáció

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

Szerepjáték Project Story of my life

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

Szoftver újrafelhasználás

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

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

Programozási alapismeretek 1. előadás

Java programozási nyelv

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

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

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

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

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

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

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

Szimulációs technikák

A Java EE 5 plattform

KIR-STAT internetes adatgyűjtő rendszer

Gyakorlati vizsgatevékenység A

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

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

C++ programozási nyelv

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

3. Beadandó feladat dokumentáció

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

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

Adatszerkezetek és algoritmusok

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

OOP. Alapelvek Elek Tibor

Átírás:

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é QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 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 (UI 1 ) A végleges, elkészült szoftver irányítása az egér, billentyűzet segítségével lesz elérhető, valamint grafikus felhasználói felülettel (GUI 2 ) fog rendelkezni. 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 User Interface 2 Graphic User Interface Viharvadászok, 20100511 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, 20100511 5

1. Követelmény, projekt, funkcionalitás Vihar Modern technológiák beépítése A csapat figyelemmel kíséri a legújabb technológiák által nyújtott tapasztalati tényezőket. Így az UML 3, valamint a RUP 4 alapos ismeretének segítségével hatékonyan szétválasztható a tervezés és az implementáció, csökkenthető a kettő konfliktusából adódó probléma, s egyszerűsíthető az utókövetés, a mérföldkövek kijelölése. A projekt így áttekinthetővé, követhetővé válik mind a csapattagok, mind egy külső szemlélő számára is. 1.2 Projekt terv 1.2.1 A felhasznált fejlesztőeszközök A fejlesztőgárda az Eclipse 5 fejlesztőkörnyezetet választotta, közös megegyezés alapján. Mivel eltérő operációs rendszereket használ a csapat, fontos volt az univerzalitás. A könnyű hozzákapcsolhatóság is fontos szempont volt az SVN szervert, illetve az UML diagramok elkészítését és azokból a Java kód generálását segítő Visual Paradigm 6 modul (Community Edition) szépen integrálni tudta a fejlesztőgárda. A tervezés és a kód szoros kapcsolata lehetővé tette a kiemelt szempontok betartását, az SVN szerver pedig a kommunikáció megkönnyítésén kívül a változtatások követésében különösen hatékony eszköz a csapat kezében. A dokumentációnál a hagyományosnak tekinthető Microsoft Office 7.doc kiterjesztéssel bíró fájljait használtuk, igénybe véve az SVN szerver és a Google Code 8 által nyújtott utókövetési és módosítási lehetőségeket, így az Eclipseen belül is folyamatosan nyomon követhető, valamint szerkeszthető dokumentációrendszert kaptunk. 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 Unified Modeling Language 4 Rational Unified Process 5 http://www.eclipse.org/ 6 http://www.visualparadigm.com/ 7 http://office.microsoft.com 8 http://code.google.com/p/viharszglab4/ Viharvadászok, 20100511 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 projekttalálkozó között eltelik. A közvetett kommunikációra már komolyabb szabályok és összetettebb megoldások vonatkoznak, hiszen a kódolás, a dokumentálás összehangolása mellett a felmerülő problémák jelzése, azok megoldása sem elhanyagolható, de ilyen fontos a feladatok kiosztása, a határidők meghatározása. Ez segíthet egy folyamatban a kritikus részfolyamatok, a teljes hossz, vagy a szűk keresztmetszet feltárásában, tehát egy egyszerű azonnali üzenetváltó program (MSN, Skype) nem képes ezt a problémát kezelni, ekkora terhelést elbírni, nem beszélve az ellenőrzésről. Választásunk egy kiforrott rendszerre, a Google Code felületre esett. Ezen belül integrálható az SVN szerver (látható a kód, a változtatások, a folyamatos frissítések, a dokumentáció, és megjegyzései, hozzászólásokkal). Itt elérhető még a hibajelző, melyekhez tulajdonságokat (labeleket) adhatunk, így jelezve a probléma típusát, sürgősségét, állapotát, továbbá megjegyzéseket fűzhetünk hozzá. Ezen kívül egy Wiki felület is rendelkezésre áll. Itt fontos írott anyagokat tehetnek a csapattagok közzé egymás számára, ilyen a feladat kiírása, a projekt ütemterve is. A letöltések, vagy összehasonlítások már csupán extrák, de a könnyebb használatot segítik. Hamarabb érhető el egy pdf fájl, vagy könnyebben észrevehető a változtatás a kódsorban. Ezen felül szükségünk volt levelezőlistára is, ahol a felmerülő problémákat fórumjelleggel tudjuk megtárgyalni, s mivel csupán négyen vagyunk, erre ez a legalkalmasabb platform. Ennek használata a koordinációban is fontos, az információk így jutnak el garantáltan mindenkihez. Az azonnali üzenetváltás természetesen nem veszhet el a többi megoldás mellett, mert a felmerülő hardver vagy szoftverbeli problémákban ez nyújt megoldást, de a csupán egy személyhez szóló információk, kritikák, javaslatok is ezen a kommunikációs csatornán zajlanak. Erre az MSN, de a Skype is alkalmas, utóbbival a konferenciabeszélgetés is alapja egy gyors, hatékony információcserének, akár a teljes csapat számára. Megállapodás továbbá a csapattagok számára, hogy minden változtatáshoz kötelezően ajánlott megjegyzést írni, így a változtatás jelentősége is pillanatok alatt felmérhető. Ez igaz a dokumentációra is, ahogyan a kódolás sem kivétel ez alól. A projekt tisztában van azzal is, hogy nem mindenki elérhető minden pillanatban, ezért a határidők kijelölése nem szorulhat háttérbe egyetlen feladat kijelölésénél sem (a későbbi folyamatok késését elkerülendő). 1. ábra: Levelezőlista Viharvadászok, 20100511 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 Csapatok regisztrációja 14h Követelmény, projekt, funkcionalitás (beadás) Analízis modell kidolgozása 1. (beadás) Viharvadászok, 20100511 8

1. Követelmény, projekt, funkcionalitás Vihar Március 2 Március 9 Március 16 Március 23 Március 30 Április 13 Április 20 Május 4 Május 11 Analízis modell kidolgozása 2. (beadás) Szkeleton tervezése (beadás) Szkeleton (beadás) Prototípus koncepciója (beadás) Részletes tervek (beadás) Prototípus (beadás) Grafikus felület specifikációja (beadás) Grafikus változat (beadás) Összefoglalás (beadás) 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, email útján, Portable Document (PDF) formában. 1.2.7 Kockázatelemzés Valószínűségek osztályozása: Alacsony 020% valószínűséggel bekövetkező esemény Közepes 2060% valószínűséggel bekövetkező esemény Magas 60+% valószínűséggel bekövetkező esemény (biztosnak tekinti a csapat) Hatások osztályozása Elhanyagolható Az esemény elhárítása nem vesz igénybe jelentős erőforrásokat Alacsony A bekövetkezett kár könnyen javítható, de néhány munkaórát, esetleg egy napot igénybe vehet javítása. Közepes A probléma jellegéből adódóan már komolyabb erőforrások együttes befektetését igényli, mely hatással lehet a fejlesztésre, az ütemtervre, s kooperációt igényel a probléma feloldása. Komoly Nem csupán a projekt menetét, hanem a teljes projektet fenyegető, a csapatot veszélybe sodró probléma, mely azonnali, halasztást nem tűrő megoldást igényel, mindenképpen személyes találkozó keretein belül is. Esemény Valószínűség Hatás Specifikációváltozás Magas Alacsony Javítandó heti beadandó feladat Alacsony Alacsony Sikertelen heti beadandó Alacsony Közepes Csapattag kiválása vagy kirakása Alacsony Komoly Csapattag távolléte (pl. betegség) Alacsony Komoly Hardver meghibásodása Magas 9 Közepes Szoftver meghibásodása Közepes Elhanyagolható Határidő lekésése Alacsony Közepes Hiányzás a tanácskozásról, közös Magas Alacsony fejlesztésekről 9 Egyik csapattárs számítógép konfigurációja közel 9 éves, s jelen pillanatban életciklusának utolsó évét tölti. Ezzel együtt gyakoriak a rendszerösszeomlások, s ennek megoldása egyre komolyabb erőforrásokat igényel. Viharvadászok, 20100511 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, 20100511 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 Magyarázat Bankrablók autója Az autó, mellyel a bankrablók menekülnek, a játékos ezt irányítja. Bank Olyan csomópont, ahol a bank épülete áll (vizuálisan megkülönböztetett). Bejárható Minden csomópontból minden csomópont elérhető nulla, vagy több csomóponton keresztül (kivétel a városhatár). Csomópont Útkereszteződés, ahova be illetve kilépnek utak. Győz A bankrabló eléri a rejtekhelyet, a játékos nyer. Időegység Az a legkisebb időintervallum, amíg elemi esemény (egy autó léptetése; döntése, hogy behajte egy csomópontba) történik. Jármű, autó Általános esetben adott sebességgel közlekedik, véletlenszerű útvonalat választ. Játékos Az, aki játszik a játékkal és irányítja a bankrabló autóját. Kanyarodik A jármű új utat választ egy csomópontban. Lámpás jelzőőr (piros lámpa) Utak utolsó mezője lehet kereszteződés előtt, vizuálisan látható a lámpák állapota. Letartóztat Ha a bankrablót letartóztatja a rendőr, a játékos veszít. Megáll A jármű egy időre nem halad előre, például az autók a STOP táblák előtt. Megfordul A játékos autóját megfordíthatja, így megváltozik a haladási iránya. Mező Egy egységnyi út, ahol maximum egy autó tartózkodhat. Összetör A bankrabló ütközés esetén összetöri autóját, a küldetést nem teljesítheti, veszít. Rejtekhely Olyan csomópont, ahol a bankrablók rejtekhelye van (vizuálisan megkülönböztetett csomópont). Rendőr(autó) Vizuálisan megkülönböztetett, ha a bankrablóval egy utcában van, elkapja. Sebesség Az autó haladását jellemző mérték, hány mezőt lép időegység alatt. Sebesség A játékos az általa irányított bankrablóautó sebességét egy szabályozása maximális szintig, valamint a nulla sebességig szabályozhatja, időegységnyi lépésekben. STOP tábla Szabályosan közlekedő autókat megállásra kényszerítő tábla csomópontoknál (utak utolsó mezője, megkülönböztetett vizuálisan). Út Két csomópontot összekötő, mezőkből álló, egyirányú vonal. Úthálózat A város útjai. Ütközik Más járművel egy mezőre érkezik, a játékos ez esetben Viharvadászok, 20100511 11

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

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

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

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

2. Analízis modell kidolgozása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 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 11 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. Viharvadász csapat, 20100302 16

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 Intersectionnek 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 Intersectionnek 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. Viharvadász csapat, 20100302 17

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

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

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

2. Analízis modell kidolgozása Vihar void 2.2.4 ISign setneighbourcells (prev: Cell, next: Cell) Beállítja az előző és következő celláját a RoadCell egy példánya. Ez az interfész írja le, hogy mit tud egy közlekedési lámpa, vagy egy stop tábla. Szól a járműveknek, ha nem haladhatnak át a cellán. Ősosztályok: Nincs. Interfészek: Nincs. Példányok száma: n Komponensek: Szolgáltatások: boolean isblocking() Éppen aktuálisan blokkoljae a cellán való továbbhaladást. void vehicleentered() A cellába az ISign objektumhoz jármű érkezett. void tick() Időegység eltelik, ez vizsgálja a kihatást a járműre a cellán. 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 redtime Piros világítás ideje. int greentime Zölden világítás ideje. int offset Állapot: hol tart. Szolgáltatások: Viharvadász csapat, 20100302 21

2. Analízis modell kidolgozása Vihar 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 waittime Várakozási idő. int tickamount 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 Ennyi időegység múlva lehet lépni. Cell cell Ezen a mezőn tartózkodik a jármű. inversespeed player A jármű sebessége (tick/mező). Game game A játék. Ismeri, hogy jelezze a bekövetkező eseményeket. Szolgáltatások: void tick() Léptetés. void die() Meghal, azaz lekerül a pályáról. Viharvadász csapat, 20100302 22

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

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

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

2. Analízis modell kidolgozása Vihar void void enter(p: Policeman) enter(c: CivilCar) A rendőr eléri a városhatárt, és kilép. A civil autó elhagyja a várost, kilép. 2.2.14 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 enter(r: Robber) A bankrabló belép a rejtekhelyre, vagyis az azt tartalmazó elágazás cellába. Győz. 2.2.16 Clock Ennek az objektumnak feladata az időközönkénti vezérlésindítás engedélyezése. Ősosztályok: Nincs. Viharvadász csapat, 20100302 26

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. Szkeleton tervezése 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 2010.03.09.

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

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

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

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

3. Szkeleton tervezése Vihar Analóg esetek: RegeneratePoliceman Leírás: Eltűnt CivilCar visszahelyezése a pályára. 5. tesztpálya: Mezők száma: 4 Mezők típusa: Roadcell, Intersection, RoadCell, RoadCell Mezők tartalma: Robber, Empty, Empty, Empty Analóg esetek: Leírás: Robber következő mezőt választ. 6. tesztpálya: Mezők száma: 2 Mezők típusa: RoadCell, RoadCell Mezők tartalma: Robber, CivilCar Analóg esetek: Robber Rendőrrel ütközik Leírás: Robber CivilCarral ütközik. 7. tesztpálya: Mezők száma: 2 Mezők típusa: RoadCell, HidingPlace Mezők tartalma: Robber, Empty Analóg esetek: Leírás: Robber eljut a HidingPlacere. 8. tesztpálya: Mezők száma: 4 Mezők típusa: Roadcell, Intersection, RoadCell, RoadCell Mezők tartalma:civilcar, Empty, Empty, Empty Analóg esetek: Policeman chooses next cell Leírás: CivilCar következő mezőt választ. 9. tesztpálya: Mezők száma: 1 Mezők típusa: Roadcell Mezők tartalma:civilcar Analóg esetek: Policeman dies, Robber dies Leírás: CivilCar törli magát az őt tartalmazó celláról. 10. tesztpálya: Mezők száma: 2 Mezők típusa: Roadcell, RoadCell Mezők tartalma:civilcar, CivilCar Analóg esetek: Policeman vs Policeman, Policeman vs CivilCar Leírás: CivilCar lelassít egy másik CivilCar mögött. 11. tesztpálya: Mezők száma: 2 Mezők típusa: Roadcell, RoadCell Mezők tartalma:civilcar, CivilCar Analóg esetek: Policeman moves, Robber moves Leírás: CivilCar a következő mezőre lép. 12. tesztpálya: Mezők száma: 2 Mezők típusa: Roadcell, CityExit Mezők tartalma:civilcar, Empty Analóg esetek: Policeman vs CityExit Leírás: CivilCar kilép a városból. 3.3 A szkeleton kezelői felületének terve, dialógusok A szkeletonban minden később alkalmazandó objektum szerepel, ezeknek azonban csak az interfészük definiált. Algoritmus egyetlen metóduson belül sincs implementálva, ez előre definiált módon történik (felhasználótól bekér adatot). Minden metódus hívásakor és visszatérésekor kiírja a standard kimenetre az ő nevét, azonosítóját, típusát, paramétereit. Viharvadász csapat, 20100511 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 szekvenciadiagramok így könnyen ellenőrizhetőek lesznek, erről a részletezett kiírás is gondoskodik, méghozzá a következőképpen: Minden sorba az alábbi adatok kerülnek: Objektum neve Osztály neve Objektum hash kódja Meghívott vagy visszatérő metódus neve és paramétere(i), visszatérési értéke (ha van), ezek tulajdonságai, meghívott objektum ugyanilyen tulajdonságai (név, kód, osztálynév) Hívás, vagy visszatérése (call és return) Egy példa a fentiekre: Software laboratory 4 Team vihar Skeleton Input file given as command line argument: testcases\level10.txt *** Test case 11: Car moves to next cell *** [game Game 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, 20100511 49

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

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

4. Szkeleton beadása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 2010.03.16.

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

4. Szkeleton beadás Vihar level1.txt 383 20100316 06:39 Első teszteset példabemenetei level2.txt 146 20100316 06:39 2. teszteset példabemenetei level3.txt 65 20100316 06:39 3. teszteset példabemenetei level4.txt 66 20100316 06:39 4. teszteset példabemenetei level5.txt 60 20100316 06:39 5. teszteset példabemenetei level6.txt 35 20100316 06:39 6. teszteset példabemenetei level7.txt 35 20100316 06:39 7. teszteset példabemenetei level8.txt 41 20100316 06:39 8. teszteset példabemenetei level9.txt 44 20100316 06:39 9. teszteset példabemenetei level10.txt 118 20100316 06:39 10. teszteset példabemenetei level11.txt 38 20100316 06:39 11. teszteset példabemenetei level12.txt 38 20100316 06:39 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 Munka százalékban Herber Máté 25 Nagy Krisztián 25 Pál Balázs Sándor 25 Szebeni Szilveszter 25 55

4. Szkeleton beadás Vihar 4.3 Napló Kezdet Időtartam Résztvevők Leírás 2010.03.12. 12.00 2 óra Herber, Szebeni Konzultáció, Tesztek folyamatának átbeszélése, feladatok kiosztása 2010.03.12. 14.00 1.5 óra Szebeni Mult heti usecase leírások 2010.03.13. 12.00 2.5 óra Nagy Szkeleton fejlesztés 2010.03.13. 15.00 1 óra Szebeni Mult heti usecase leírások, és az óra use case diagram változtatása 2010.03.13. 16.00 1 óra Nagy Szkeleton fejlesztés 2010.03.13. 19.00 3 óra Nagy Szkeleton fejlesztés 2010.03.13. 20.00 0.5 óra Szebeni Szkeleton tesztelése 2010.03.13 01:00 2.5 óra Herber Szkeleton fejlesztés 2010.03.13 12:00 2 óra Herber Szkeleton fejlesztés, tesztesetek és szekvencia diagramok 2010.03.13 19:30 1.5 óra Herber Szkeleton fejlesztés, fordítási és futtatási doksi 2010.03.14 00:00 3 óra Herber Szkeleton fejlesztés 2010.03.15 10:30 1 óra Szebeni Szkeletont megnéztem, leforditottam, futatttam, sok még a hiány, megbeszéltem Krisztiánnal, hogy befejezi ma délutánra 2010.03.15 12:30 1 óra Herber Szkeleton fejlesztés 2010.03.15 14.00 3.5 óra Nagy Szkeleton fejlesztés 2010.03.15 16:30 4.5 óra Herber Szkeleton fejlesztés, batok, doksi bugfix, összefoglaló 2010.03.15 20:30 1 óra Pál Dokumentációk javítása 2010.03.15 22:00 0.5 óra Szebeni Értékelés 2010.03.15.19.00 5 óra Nagy Szkeleton fejlesztés Név Ezen a héten Összesen Herber 14.5 46.5 Pál 1 41 Szebeni 6.5 49 Nagy 15 33.5 56

5. Prototípus koncepciója 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 2010.03.23.

5. Prototípus koncepciója Vihar 5. Prototípus koncepciója 5.1 Prototípus interfacedefiníciója A prototípus a szkeletonhoz hasonlóan konzolos felületen keresztül lesz irányítható, valamint konzolra írja ki az adatokat. Az irányítás az általunk meghatározott különböző parancsokkal lesz lehetséges. A prototípus már nem csak függvényhívássorrendet fog mutatni (szekvenciákat), hanem a játék tényleges működését. A teszteléshez teszteseteket hozunk létre, melyek konkrét parancssorozatból állnak, így automatikusan tudják a játék menetét befolyásolni. Minden teszteset kimenetének egyeznie kell az általunk előre meghatározott referencia kimenettel. Ezen referencia kimenetek majd a prototípus részletes tervében kerülnek bemutatásra. Fontos, hogy a tesztek mindenki számára egyértelmű eseménysorozatot tartalmazzanak, valamint többször, azonos formában megismételhetőek legyenek, az utóbbi érdekében a véletlen paraméterek is beállíthatóak (a véletlenszerűség továbbá kikapcsolható). A teszteseteket fájlból is be lehet olvasni. Minden csapattag ezen elveket szem előtt tartva látott a tervezéshez. 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, 20100511 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 tickre lép, vagy sebességüknek megfelelően). Opciók: sw setsign Leírás: Beállítja az n. lámpa/ állapotát blocking állapotra, és beállítja a megfelelő számlálókat. Opciók: n, blocking tick exit Leírás: Az egész játékteret nel lépteti (n darab tick) Opciók: n Leírás: Kilép a tesztelésből. Opciók: n writemap Leírás: Kiírja a pálya állását. (Bementként is értelmezhető formátumban) (Lásd pálya szerkezete) setgodmodeduration A nyuszi elütése által okozott halhatatlanság hosszát állítja be ire (tickekben mérve) Opciók: i setinversespeed A kiválasztott jármű inverz sebességét állítja be. Opciók: típus: c CivilCar / p Policeman / r Robber sorszám: jármű sorszáma (Robber esetén kimarad) érték: a kívánt inverz sebességérték 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, 20100511 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 egyegy út szerepel, a két szélén az őt körbevevő Intersection elemekkel. Ha egy útelem (Cell) tartalmaz egy objektumot (Vehicle vagy Sign típusút), akkor kapcsos zárójelek között kell rögzíteni mögé (ha többet is, akkor vesszővel elválasztva kapcsos zárójelek között. Ilyen módon egyértelműen generálható a pálya az általunk megadott leírásból. A tábla és lámpa elemek ugyanazon sorszámozáson osztoznak, hiszen vezérlés szempontjából nem különböznek. A menetirány balról jobbra halad minden út esetében. Példa: E[0]B{R} B{R}FF{S[0]}I[0] E[1]F{C[0]}I[0] I[0]FI[1] I[1]FF{P[0]}H HX[0] I[1]F{C[1],T[1]}X[1] Akkor jó egy pálya, ha: Minden olyan intersection, amiből csak kifelé indul út, az CityEntry. Tinden olyan intersection, amibe csak befelé megy út, az CityExit. Tábla vagy lámpa csak az út utolsó celláján lehet. Viharvadász csapat, 20100511 60

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

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

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

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

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

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

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

6. Részletes tervek 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 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, 20100511 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, 20100511 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, 20100511 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árbejáratot, ha létezik ilyen. void kill(c: CivilCar): A c civil autót megölő, eltüntető publikus függvény. void kill(p: Policeman): A p rendőrt eltüntető publikus függvény. void kill(r: Robber): Az r bankrablót megsemmisítő publikus tagfüggvény. void kill(b: Bunny): A b nyuszikát eltakarító publikus tagfüggvény. Viharvadász csapat, 20100511 72

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

6. Részletes tervek Vihar Ősosztályok Interfészek Attribútumok Metódusok boolean isblocking(): Egy publikus láthatóságú boolean függvény, mely annak megfelelően tér vissza, hogy a tábla vagy lámpla éppen blokkoljae az áthaladást. void tick(): Tick parancs (publikus függvény), mely a táblákat szólítja fel az időegység léptetésére. void vehicleentered(): Egy jármű belépését kezeli le (elindítja a várakoztatást, stb.). Láthatósága publikus. Policeman Felelősség A rendőrt megvalósító osztály, mely a jármű minden tulajdonságával rendelkezik, valamint tisztában van magával a bankrablóval is, és ha egy utcába kerülnek, így el is tudja kapni őt. Ősosztályok Vehicle Interfészek Attribútumok wanted: Robber: A bankrablót tároló privát attribútum. A rendőr arra használja fel ezt a tudást, hogy ellenőrizze, egy utcában vannake, így el tudja kapni. Metódusok boolean onthesameroad(r: Robber): Ha egy utcára kerül a rendőr a rablóval, abban a pillanatban letartóztatja. RoadCell Felelősség Az útcella egy olyan speciális cella, mely egy konkrét cellát (egy úthoz tartozó egybelépésű, egykilépésű) reprezentál. Ennek megfelelően van felépítve (attribútumok, stb.). Ősosztályok Cell Interfészek Viharvadász csapat, 20100511 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, 20100511 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, 20100511 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ő tickekben (maximumértéke nyilván az inversespeed értéke). Ebből kifolyólag ez is privát. Metódusok void accept(v: Vehicle): Ha lép, itt kezeli le a cellára lépés következményeit a jármű. Maga hívja meg, így láthatóságára az OO elvek betartását szem előtt tartva privát. Viharvadász csapat, 20100511 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álle a blokkoló tábla hatására. Az esetleges hiba a Cell.getSign(), illetve az StopSign.isBlocking() metódusokban keresendő. Bemenet loadmap map1.txt writemap setsign 0 true turnoffspeed tick 3 exit map1.txt: E[0]F{C[0]}FF{S[0]}X[0] Elvárt kimenet E[0]F{C[0]}FF{S[0]}X[0] o tick 1 o Event CivilCar C[0] moved to next cell o tick 2 o Event CivilCar C[0] moved to next cell o tick 3 o Event CivilCar C[0] blocked by S[0] Car vs Car Leírás Egy autó utolér egy másikat, majd lelassít mögötte. Viharvadász csapat, 20100511 78

6. Részletes tervek Vihar Ellenőrzött funkcionalitás, várható hibahelyek Az autó valóban lelassíte, nem próbál rálépni a következő mezőre. Az esetleges hiba a Cell.getVehicle(), Vehicle.accept(), illetve a Vehicle.interact() metódusokban keresendő. Bemenet loadmap map2.txt writemap setinversespeed c 0 0 setinversespeed c 1 10 tick 2 exit map2.txt: E[0]F{C[0]}FF{C[1]}X[0] Elvárt kimenet E[0]F{C[0]}FF{C[1]}X[0] o tick 1 o Event CivilCar C[0] moved to next cell o tick 2 o Event CivilCar C[0] waiting for C[1] to pass Robber vs Car Leírás A rabló belefut egy civilbe. Ellenőrzött funkcionalitás, várható hibahelyek Az ütközés megfelelő működése. Az esetleges hiba Cell.getVehicle(), Vehicle.accept(), Vehicle.interact(), illetve a Robber.die() metódusokban keresendő. Bemenet loadmap map3.txt writemap setinversespeed c 0 10 setinversespeed r 0 tick 2 exit map3.txt: E[0]F{R}FF{C[0]}X[0] Elvárt kimenet E[0]F{R}FF{C[0]}X[0] o tick 1 o Event Robber R moved to next cell o tick 2 o Event Robber R crashed to C[0] o Event Robber R dies o Game Over Car Chooses Direction Leírás Egy autó választ a lehetőségek közül, hogy merre haladjon egy elágazás közepén. Viharvadász csapat, 20100511 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, 20100511 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] moved to next cell o Event Robber R moved to next cell o tick 2 o Event Policeman P[0] moved to cell option 0 o Event Policeman P[0] arrested R o Event Robber R dies o Game Over Robber Gets From Bank to HidingPlace Leírás A rabló eljut a banktól a rejtekhelyre, közben a többi jármű megadott módon viselkedik. Ellenőrzött funkcionalitás, várható hibahelyek Játék felépítésének tesztelése, rabló és egyéb járművek mozgásának tesztelése, sebességek, lámpák tesztelése, HidingPlace elérésénél játék leállításának tesztelése. Az esetleges hiba az osztályok tick() metódusában, illetve a Robber.hide() metódusban keresendő. Viharvadász csapat, 20100511 81

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

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

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

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

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

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

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

6. Részletes tervek Vihar A rabló járművel találkozik Jármű nyuszival találkozik Viharvadász csapat, 20100511 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, 20100511 92

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

7. Prototípus beadása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 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 Keletkezés ideje Tartalom src\ Bank.java 274 2010.04.13 0:16 Bankot reprezentáló osztály Bunny.java 1 966 2010.04.13 0:16 A Húsvéti nyuszit reprezentáló osztály Cell.java 2 199 2010.04.13 0:16 Cellát reprezentáló osztály CityEntry.java 330 2010.04.13 0:16 Városhatárbejáratot reprezentáló osztály CityExit.java 976 2010.04.13 0:16 Városhatárkijáratot reprezentáló osztály CivilCar.java 1 639 2010.04.13 0:16 Civil autót megvalósító osztály Clock.java 494 2010.04.13 0:16 Játékórát megvalósító osztály ConsoleLogger.java 246 2010.04.13 0:16 Parancssorra naplózó osztály CustomReader.java 3 296 2010.04.13 0:16 Bemenetet olvasó osztály FileLogger.java 615 2010.04.13 2:22 Fájlba naplózó osztály Game.java 24 014 2010.04.13 2:11 Játékot összefogó osztály HidingPlace.java 530 2010.04.13 0:16 Rejtekhelyet reprezentáló osztály INamedObject.java 104 2010.04.13 0:16 Névvel rendelkező osztályok interfésze Intersection.java 2 061 2010.04.13 0:16 Útkereszteződést reprezentáló osztály ISign.java 814 2010.04.13 0:16 Közlekedési jelzések közös interfésze Logger.java 4 614 2010.04.13 0:16 Általános naplózó osztály NamedObject.java 450 2010.04.13 0:16 Névvel rendelkező osztályok közös őse Policeman.java 2 862 2010.04.13 2:11 Rendőrt megvalósító osztály Proto.java 8 619 2010.04.13 2:11 A Prototípus főosztálya Road.java 3 668 2010.04.13 0:16 Utat reprezentáló osztály RoadCell.java 1 852 2010.04.13 0:16 Úton egy cellát reprezentáló osztály Robber.java 4 658 2010.04.13 0:16 Bankrablót megvalósító osztály StopSign.java 1 397 2010.04.13 0:16 Stop táblát megvalósító osztály TrafficLight.java 1 823 2010.04.13 0:16 Közlekedési lámpát megvalósító osztály Vehicle.java 5 049 2010.04.13 2:11 Általános jármű osztály bin\ check_output 8 539 2010.04.12. 22:41 Szöveges állományokat összehasonlító segédprogram (Linux) check_output.exe 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 2010.04.13 2:18 Fordítást segítő batch fájl (Windows) compile.sh 209 2010.04.13 2:12 Fordítást segítő script (UNIX) runme.bat 17 2010.04.13 2:12 Futtatást segítő batch fájl (Windows) runme.sh 17 2010.04.13 2:11 Futtatást segítő script (UNIX) testcases.bat 1 581 2010.04.13 2:31 Összes teszteset futtatását segítő batch fájl (Windows) testcases.sh 286 2010.04.13 2:12 Összes teszteset futtatását segítő script (UNIX) bin\maps map1.commands 71 2010.04.13 2:11 1. tesztpálya parancsai map1.expect 171 2010.04.13 2:11 1. tesztpálya elvárt kimenete map1.txt 24 2010.04.13 0:16 1. tesztpálya reprezentációja map10.commands 91 2010.04.13 2:11 10. tesztpálya parancsai map10.expect 920 2010.04.13 2:11 10. tesztpálya elvárt kimenete map10.txt 40 2010.04.13 0:16 10. tesztpálya reprezentációja map11.commands 57 2010.04.13 2:11 11. tesztpálya parancsai map11.expect 175 2010.04.13 2:11 11. tesztpálya elvárt kimenete map11.txt 21 2010.04.13 0:16 11. tesztpálya reprezentációja map2.commands 88 2010.04.13 2:11 2. tesztpálya parancsai map2.expect 130 2010.04.13 2:11 2. tesztpálya elvárt kimenete map2.txt 24 2010.04.13 0:16 2. tesztpálya reprezentációja map3.commands 86 2010.04.13 2:11 3. tesztpálya parancsai map3.expect 142 2010.04.13 2:11 3. tesztpálya elvárt kimenete map3.txt 21 2010.04.13 0:16 3. tesztpálya reprezentációja map4.commands 79 2010.04.13 2:11 4. tesztpálya parancsai map4.expect 176 2010.04.13 2:11 4. tesztpálya elvárt kimenete map4.txt 36 2010.04.13 0:16 4. tesztpálya reprezentációja map5.commands 78 2010.04.13 2:11 5. tesztpálya parancsai map5.expect 160 2010.04.13 2:11 5. tesztpálya elvárt kimenete map5.txt 33 2010.04.13 0:16 5. tesztpálya reprezentációja map6.commands 56 2010.04.13 2:11 6. tesztpálya parancsai map6.expect 240 2010.04.13 2:11 6. tesztpálya elvárt kimenete map6.txt 30 2010.04.13 0:16 6. tesztpálya reprezentációja map7.commands 192 2010.04.13 2:11 7. tesztpálya parancsai map7.expect 994 2010.04.13 2:11 7. tesztpálya elvárt kimenete map7.txt 88 2010.04.13 0:16 7. tesztpálya reprezentációja map8.commands 56 2010.04.13 2:11 8. tesztpálya parancsai map8.expect 178 2010.04.13 2:11 8. tesztpálya elvárt kimenete map8.txt 16 2010.04.13 0:16 8. tesztpálya reprezentációja map9.commands 43 2010.04.13 2:11 9. tesztpálya parancsai map9.expect 107 2010.04.13 2:11 9. tesztpálya elvárt kimenete map9.txt 16 2010.04.13 0:16 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ó PATHban), a bin\proto mappába fordítja a programot. Persze a hagyományos javac fordítást is végezhetjük. Megjegyzés: A fordításnak feltétele, hogy a globális PATH változók között szerepeljenek a java futtatókörnyezet és sdk bináris fájljai. 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: nogreeting : ez esetben a program nem ír ki üdvözlő, illetve elköszönő üzenetet. i file.txt: A megadott fájlben lévő parancsokat dolgozza fel a program, így nem kézzel kell őket bevinni a konzolon. Ennek a paraméternek a használata egyenértékű azzal, mintha a paraméter nélkül indított programnak a loadcommands file.txt parancsot adtuk volna ki. Akár több bemeneti fájlt is megadhatunk i file1.txt i file2.txt... formában, ekkor a program egymás után hajtja végre a bennük található parancsokat. o file.txt: A program a kimenetét a konzol helyett a megadott nevű fájlba írja. 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.2es pontjában, ahogy arról a program is tájékoztat. Rövid példaként és bevezetőként azonban a legfontosabb parancsokra itt is kitérünk: A loadmap file.txt paranccsal a file.txtben leírt pályát (utakat, kereszteződéseket, járműveket) tölthetjük be. A pálya leírásának formátumáról bővebb tájékoztatás szintén a 7es számú dokumentumban található. 97

7. Prototípus beadása Vihar A writemap paranccsal a bármikor kiírhatjuk a pálya aktuális állását a fentebb említett formátumban. Így tájékozódhatunk a járművek pozíciójáról. A moverobber n paranccsal adhatjuk meg, hogy a rabló a következő kereszteződésbe érve melyik utat válassza. A utak a következőképpen vannak számozva: 0val kezdve először a kereszteződésből kifutó utak (a pályaleírásban veló megjelenésük sorrendjében), majd őket követve a bemenő utak (szintén a leírásbeli sorrendjüknek megfelelően) A tick n paranccsal léptethetjük a játékot (n körrel) 7.2 Tesztek jegyzőkönyvei 7.2.1 Car vs Sign Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.10 22:05 Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.10 22:00 Teszt eredménye A tábla nem blokkolja az autó áthaladását Lehetséges hibaok StopSign.isBlocking() függvény hibás megvalósítása Változtatások Az említett függvényben elírt relációsjel javítva. 7.2.2 Car vs Car Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 14:42 7.2.3 Robber vs Car Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 15:22 Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 15 :20 Teszt eredménye A Game Over felirat kiírásánál null pointer kivétellel megszakad a program futása. Lehetséges hibaok A Robber objektum game tagváltozója nem lett inicializálva a pálya felépítésénél. Változtatások A Robber osztály game tagváltozója törölve, mivel már az ősosztályban szerepel ilyen tagváltozó. 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 Nagy Krisztián Teszt időpontja 2010.04.12 16:20 Teszt eredménye A pálya kiírásánál nem látszik az autó. Lehetséges hibaok Az Intersection.getNextCells függvény nem a várt visszatérési értéket adja. Változtatások A Game.generateLevel(String) függvényben az intersections tömb feltöltése után a nextcells és previouscells tagváltozók nullázása minden Intersectionre. 7.2.5 Robber Chooses Direction Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 17:22 Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 17:07 Teszt eredménye A második ticknél kiindexelési kivételt produkál a program a choosefrom függvényben. Lehetséges hibaok Az Intersection.getPreviousCells függvény nem a várt visszatérési értéket adja. Változtatások A Road.generateCells() függvényben lévő bug javítva, miszerint az első és utolsó cella is a bejáratkereszteződéshez (entry) volt kötve. 7.2.6 Policeman vs Robber Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 18:00 Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 17:44 Teszt eredménye Az onthesameroad függvény nullpointer kivétellel megszakad. Lehetséges hibaok A Policeman objektum wanted mezője nincs inicializálva. Változtatások Game.generateLevel(String) függvényben a rendőrökhöz setwanted metódussal a player hozzákötése. Tesztelő neve Nagy Krisztián Teszt időpontja 2010.04.12 17:50 Teszt eredménye A Game Over üzenet után még lép a Robber. Lehetséges hibaok A Game.gameOver() függvény nem állítja meg a játékot / akadályozza folytatását. Változtatások Game.gameOverFlag boolean típusú tagváltozó felvéve, melyet a gameover truera állít, és ami esetén a tick() metódus nem csinál semmit. 99

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

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

7. Prototípus beadása Vihar 7.2.11 CivilCar hits the bunny Tesztelő neve Nagy Krisztián Teszt időpontja 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 egyegy héten a többieket. Ezzel az elosztás már óraszámban is jobban tükröződik, valamint a ráfordított valós időben is. A dokumentálás fennmaradó probléma, de a kódolás komolyabb hangsúlyt kapott, mint az első hetekben. Ennek tükrében döntöttünk az alábbiakról. Tag neve Munka százalékban Herber Máté 25 Nagy Krisztián 25 Pál Balázs 25 Szebeni Szilveszter 25 7.4 Napló Kezdet Időtartam Résztvevők Leírás 2010.04.02 12:00 2 óra Herber, Nagy, Értekezlet, konzultáció Szebeni, Pál 2010.04.05 17:00 2,5 óra Nagy Proto fejlesztés 2010.04.05 20:00 4 óra Nagy Proto fejlesztés 2010.04.10. 21:00 2,5 óra Nagy Proto implementáció 2010.04.12. 13:30 6,5 óra Nagy Proto implementáció és tesztelés 2010.04.12. 21:30 1 óra Nagy Proto implementáció és tesztelés 2010.04.12. 22:30 2 óra Nagy Fordításhoz és futtatáshoz segédfájlok 2010:04:12 20:00 3 óra Pál Dokumentáció, javadoc felfejlesztése, értékelés vázlata 2010:04:12 22:00 1 óra Szebeni Doksi ellenőrzése, hibák jelzése 2010:04:12 22:30 0,5 óra Herber Forditás, és ahhoz utmutató irás 2010:04:13 07:00 0,5 óra Szebeni Feltöltendő fájlok, leforditása, feltöltése és doksi nyomtatása Összesítve: héten összesen Herber 2.5 66.5 Pál 5 54 Szebeni 3.5 70 Nagy 20.5 61.5 102

8. Grafikus felület specifikálása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 2010.04.20.

8. Grafikus felület specifikációja Vihar 8. Grafikus felület specifikációja 8.1 A grafikus interfész A játékablak (vázlat) A kezeléshez három gomb nyújt segítséget: Új játék indítása: Új játékot indít a kijelölt térképpel. Térképválasztó: Térképmappában lévő térképek közül választhatunk Pause: Egy pillanatra megállítja a játékot 8.2 A grafikus rendszer architektúrája 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. 20100511, Viharvadász csapat 104

8. Grafikus felület specifikációja Vihar 8.2.2 A felület osztálystruktúrája Grafikus felület új osztálydiagramja Itt jól megfigyelhetőek az új elemek. Az IDrawer interfész mondja ki az alapelveket (draw() és refresh()), ennek leszármazottai specifikusan járműveket, utat (két kereszteződés között), vagy kereszteződéseket, esetlegesen jelzőtáblát tudnak rajzolni. Ez utóbbiról az út gondoskodik, hogy megfelelő helyre kerüljön. Koordinátákat az elágazásokhoz rendelünk (így az út a két elágazás között gond nélkül rajzolhat ki, mert ismeri azokat, s le tudja kérni a koordinátákat valamint a táblának is tud osztani koordinátákat). A járműveket rajzoló ősosztály képes törölni önmagát az előző mezőről, valamint kirajzolni azt (ami lehet nyuszi, de éppen egy sima civil autó is). Az IDrawer interfészű objektumok egy listáját tárolja a Game, így számára mindenki kirajzolható, illetve frissíthető. A külön (megvalósított) Drawer osztályok pedig szoros kapcsolatban állnak a modell osztályával, így tudják, mit kell kirajzolniuk (például a piros lámpa hol pirosat, hol zöldet). 8.3 A grafikus objektumok felsorolása 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. 20100511, 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. 20100511, Viharvadász csapat 106

8. Grafikus felület specifikációja Vihar Ősosztályok SignDrawer Interfészek Attribútumok prevstate: int: Előző állapota a lámpának (piros, vagy zöld?). Metódusok + void draw(): Kirajzolja az adott elemet a megfelelő helyre. + void refresh(): Frissíti az adott elemet, ha van változás (és töröl is, ha szükséges). 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 20100511, 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). 20100511, 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ő). 20100511, 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 20100511, 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). 20100511, 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 (IDrawersként). 20100511, 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, 20100511, Viharvadász csapat 113

8. Grafikus felület specifikációja Vihar 8.5 Napló Kezdet Időtartam Résztvevők Leírás 2010.04.14 20:00 2.5 óra Pál Javadoc magyarítása, kiegészítése 2010.04.14 19:30 0.5 óra Szebeni Javadoc feladatok áttekintése, karakterkódolás 2010.04.16 11:00 1 óra Szebeni, Pál Értekezlet, grafikai megoldások 2010.04.06 12:00 2 óra Szebeni, Nagy, Herber, Pál Értekezlet, grafika kitalálása 2010.04.18.21:00 2 óra Nagy Grafikus felülethez kapcsolódó diagramok elkészítése 2010.04.19 22:30 2.5 óra Pál A grafikus felület dokumentációjának elkészítése ábrával 2010.04.20 07:00 0.5 óra Pál Nyomtatás Összesítés erre a hétre és eddig: A héten Eddig összesen Herber 2 68.5 Pál 8.5 62.5 Szebeni 3.5 73.5 Nagy 4 65.5 20100511, Viharvadász csapat 114

9. Grafikus változat beadása 37 Vihar Konzulens: Hartung István Csapattagok Herber Máté QQA5BY p0l4rf0x@gmail.com Nagy Krisztián FDQKAY nkrisztian89@gmail.com Pál Balázs Sándor YZZIKV arnongoth@gmail.com Szebeni Szilveszter UBZ6RP szebenisz@gmail.com 2010.05.03.

9. Grafikus változat beadása Vihar 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 Keletkezés ideje Tartalom \src Bank.java 268 2010.04.30 1:04 Bankot reprezentáló osztály BankDrawer.java 190 2010.04.30 1:04 Bankot rajzoló osztály A Húsvéti nyuszit Bunny.java 2 007 2010.05.03 12:37 reprezentáló osztály BunnyDrawer.java 1 424 2010.05.04 3:43 Nyuszit rajzoló osztály Cell.java 2 212 2010.04.30 1:04 Cellát reprezentáló osztály Városhatárbejáratot CityEntry.java 303 2010.04.30 1:04 reprezentáló osztály CityEntryDrawer.java 202 2010.04.30 1:04 Városhatárbejáratot rajzoló osztály CityExit.java 911 2010.04.30 1:04 Városhatárkijáratot reprezentáló osztály CityExitDrawer.java 200 2010.04.30 1:04 Városhatárkijáratot rajzoló osztály CivilCar.java 1 669 2010.05.03 12:37 Civil autót megvalósító osztály CivilCarDrawer.java 335 2010.05.04 3:43 Civil autót rajzoló osztály Clock.java 492 2010.04.30 1:04 Játékórát megvalósító osztály ConsoleLogger.java 244 2010.04.30 1:04 Parancssorra naplózó osztály CustomReader.java 3 294 2010.04.30 1:04 Bemenetet olvasó osztály FileLogger.java 613 2010.04.30 1:04 Fájlba naplózó osztály Game.java 28 344 2010.05.04 3:43 Játékot összefogó osztály A grafikus változat GUI.java 7 370 2010.05.04 3:43 főosztálya GUICanvas.java 1 570 2010.05.04 3:43 Rajzfelületet megvalósító osztály HidingPlace.java 528 2010.04.30 1:04 Rejtekhelyet reprezentáló osztály HidingPlaceDrawer.java 205 2010.04.30 1:04 Rejtekhelyet rajzoló osztály Rajzolható osztályok közös IDrawer.java 370 2010.05.04 3:43 interfésze INamedObject.java 309 2010.05.04 3:43 Névvel rendelkező osztályok interfésze Intersection.java 2 218 2010.05.03 12:37 Útkereszteződést reprezentáló osztály IntersectionDrawer.java 806 2010.05.03 23:09 Kereszteződést rajzoló osztály ISign.java 812 2010.04.30 1:04 Közlekedési jelzések közös interfésze Logger.java 4 612 2010.04.30 1:04 Általános naplózó osztály NamedObject.java 448 2010.04.30 1:04 Névvel rendelkező osztályok 20100511, Viharvadász csapat 116

9. Grafikus változat beadása Vihar közös őse Policeman.java 3 005 2010.05.04 3:43 Rendőrt megvalósító osztály PolicemanDrawer.java 350 2010.05.04 3:43 Rendőrt rajzoló osztály Road.java 3 712 2010.05.04 3:43 Utat reprezentáló osztály Úton egy cellát reprezentáló RoadCell.java 1 850 2010.04.30 1:04 osztály RoadDrawer.java 4 704 2010.05.03 12:37 Utat rajzoló osztály Bankrablót megvalósító Robber.java 5 199 2010.05.04 3:43 osztály RobberDrawer.java 3 084 2010.05.04 3:43 Rablót rajzoló osztály RobberStatusDrawer.java 1 719 2010.05.04 3:43 Rabló állapotát rajzoló osztály SignDrawer.java 1 030 2010.05.03 23:09 Jelet rajzoló osztály StopSign.java 1 396 2010.05.04 3:43 Stop táblát megvalósító osztály StopSignDrawer.java 420 2010.05.03 12:37 Stop táblát rajzoló osztály Közlekedési lámpát TrafficLight.java 2 016 2010.05.04 3:43 megvalósító osztály Közlekedési lámpát rajzoló osztály TrafficLightDrawer.java 782 2010.05.03 12:37 Vehicle.java 5 191 2010.05.03 12:37 Általános jármű osztály VehicleDrawer.java 3 590 2010.05.04 3:43 Járművet rajzoló osztály \bin compilegui.bat 79 2010.05.04 3:43 Fordítást segítő batch fájl (Windows) compilegui.sh 163 2010.05.04 3:43 Fordítást segítő script (UNIX) javadocgui.bat 93 2010.05.03 23:09 Dokumentum fordítását segítő batch fájl (Windows) README.txt 3 123 2010.05.04 3:43 Tudnivalókról adott leírás Futtatást segítő batch fájl runmegui.bat 75 2010.05.03 23:09 (Windows) runmegui.sh 30 2010.05.04 3:43 \bin\maps testmap.coords 216 2010.05.03 23:09 testmap.txt 591 2010.05.03 23:09 Futtatást segítő script (UNIX) Pályán elhelyezkedő kereszteződések koordinátái Pálya leírását megadó térképfájl 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. 20100511, Viharvadász csapat 117

9. Grafikus változat beadása Vihar 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 PATHban 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. UTF 8). 9.2 Játékmenet A kezeléshez három gomb nyújt segítséget: Új játék indítása: Új játékot indít a kijelölt térképpel. Térképválasztó: Térképmappában lévő térképek közül választhatunk Pause: Egy pillanatra megállítja a játékot A bankrabló irányításához, 5 billentyűre van szükség: Jobb, Bal: Bankrabló irányát határozza meg. Fel, Le: Bankrabló sebességét határozza meg. Backspace: Bankrabló megfordul A játék a piros színnel megkülönböztetett útkereszteződéstől indul, ahol a bank is van. A célja eljutni a rejtekhelyre, ami kék színnel szerepel a térképen. Eközben kerülnie kell az ütközést az autókkal (fehér színűek), valamint az egy útra kerülést a rendőrrel (kék autó), ezen esetekben veszít. A bankrabló autója piros. 9.3 Értékelés Tag neve Munka százalékban Herbert Máté 25 Nagy Krisztián 25 Pál Balázs 25 Szebeni Szilveszter 25 A csapatban most a kódolásé volt a főszerep, ezt pedig nem tudta mindenki együtt végezni, így egy emberre hárult a legnagyobb része. Emellett azonban fejlesztettünk megtekintőt is, valamint a dokumentálás és kommentelés is fennmaradt, mint feladat. A csapat koordinálása sem bizonyult egyszerű feladatnak, elvégre a sok elfoglaltság miatt sokkal nehezebb volt összehangolni a projektmunkát. Ennek ellenére jól haladtunk, s nem állt be késés a munkafolyamatok egyikénél sem. 20100511, Viharvadász csapat 118

9. Grafikus változat beadása Vihar 9.4 Napló Kezdet Időtartam Résztvevők Leírás 2010.04.23 12:00 2 óra Szebeni, Herber, Pál Koznultáció, Értekezlet 2010.04.26 18:00 2 óra Herber Térkép kirajzoló program 2010.04.26 22:00 5 óra Herber Térkép kirajzoló program 2010.04.26 23:00 3 óra Nagy Gui fejlesztés 2010.04.27 13:00 8 óra Nagy Gui fejlesztés 2010.04.28 18:00 7 óra Herber Térkép kirajzoló program + Térkép készítése 2010.05.01 12:00 3 óra Nagy Gui fejlesztés 2010.05.03 12:00 2 óra Pál, Nagy Szebeni Értekezlet, Tesztelés 2010.05.03 17:00 3 óra Nagy Gui fejlesztés, Bugfix 2010.05.03 18:00 5 óra Pál Javadoc 2010.05.04 8:00 1 óra Szebeni Javadoc, nyomtatás héten összesen Herber 16.5 85 Pál 9.5 72 Szebeni 5.5 78 Nagy 19.5 85 20100511, Viharvadász csapat 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ázisszimulációvá fajul a dolog, de végül még füstje is alig volt: Egy egyszerű nyuszi megjelenítése. Amit ez a projekt megvalósítása adott: Megtanultunk 30 oldalas dokumentációt megírni másnap reggel 8ig. Viccet félretéve, rájöttünk, hogy ha valamit valaki az utolsó pillanatra hagy, akkor a másik három ember nem tud aludni miatta, hogy elkészüljön.

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