04. Analízis modell kidolgozása 2. - AdjustmentBeaver/szoftlab GitHub Wiki

Analízis modell kidolgozása 2.

Objektum katalógus

Map

A pálya létrehozásakor keletkező Map objektum tartalmazza a vonatokat és a különböző pályaelemeket (Node-okat). A pályához tartozik egy pályaállapot, amiben az aktuális állás található.

Node

A Node objektumok írják le a pálya elemeit. Ezek határozzák meg a vonatok irányát. Ismerik a szomszédos Node-okat. Akkor szomszédos két Node, ha sínpálya köti őket össze. Ha a vonatelemnek szüksége van a következő Node-ra, akkor a vonatelem haladási irányának megfelelő szomszédját adja vissza. Ha egy vonatelem olyan Node-ra ér, amely nem ad számára meg következő szomszédot, akkor felrobbantja az egész vonatot.

SpecialPlace

Ezek megkülönböztetett helyek a pályán. Egyik irányból csak másik SpecialPlace-hez lehet hozzácsatlakoztatni. Az alagutak bejáratául szolgál. Építhető vagy lerombolható rajta alagút. Építeni akkor lehet, ha hozzákötjük egy másik ilyen helyhez, lerombolni pedig, ha nem tartózkodik vonat az alagútban. Egyszerre csak egy alagút lehet felépítve.

Station

A játékban vannak vonatállomások. Rendelkeznek azonosító színnel. Ha egy vonat beérkezik az állomásra, akkor a legelső utasokat szállító kocsi utasai leszállhatnak ott - feltéve ha az állomás és a kocsi színe megegyezik.

Switch

Speciális pályaelem, amely három irányból is megközelíthető. Ha a megfelelő irányból közelítjük meg, akkor a beállítástól függően változik, hogy melyik csomópont a következő. Egyéb esetben csak egy irányba haladhatunk tovább, ez megegyezik azzal, amelyikből érkezve több opciónk is van. Ha egy vonat rajta tartózkodik nem állítható, melyik a következő csomópont.

Train

A Train osztály példányai jelképezik a pályán futó vonatokat. TrainPart-okat (vonatelemeket) tartalmaz. A vonat felrobbantásáért felelős, vizsgálja a vonatok közti ütközést. Ismeri az utolsó vonatelemét, van sebessége, illetve ismeri az objektum az utolsó nem üres vonatelemének a színét.

TrainCar

A játékban a kocsik utasokat szállítanak és rendelkeznek szín azonosítóval. A színazonosító adja meg, hogy a rajta utazó emberek hol kívánnak leszállni. Ha elért egy csomópontot mindig a következő szomszédos elem felé fog mozogni. Ismeri, hogy melyik vonathoz tartozik.

TrainEngine

Ez a mozdony vonatelem, amely a vonat elején áll. Ez határozza meg a vonat sebességét. Ha elért egy csomópontot mindig a következő szomszédos elem felé fog mozogni. Ismeri, hogy melyik vonathoz tartozik.

Statikus struktúra diagramok

Fő osztálydiagram

A map létrehozással kapcsolatos

Node leszármazott típus

Train osztályhoz tartozó osztályok

Osztályok leírása

Color

  • Felelősség
    A vonatelemek és az állomások rendelkeznek színnel. Ezt reprezentálja ez az osztály. Az, hogy egy adott kocsi üres-e a színétől függ, ekkor "semleges" színet kap.

Coordinate

  • Felelősség
    A pályán elhelyezett elemek helyzetét leíró osztály. A játék folytonosan van szimulálva, az elemek közötti távolság , az egyes kis időegységek alatt bekövetkezett elmozdulások számításában van szerepe. A szimulációs modell szerves részét képezi (nem csak a grafikai megjelenéshez kapcsolódik).

Game

  • Felelősség
    Inicializálja a játékhoz szükséges objektumokat. Létrehozza a SimulationTimer és a MapManager objektumokat. Rajra keresztül állítható a játék állapota.

  • Attribútumok

    • SimulationTimer timer: Szimulációs időzítő. A Game hozza létre.

    • MapManager mapManager: A Game hozza létre. Pályák menedzseléséhez.

  • Metódusok

    • Main(args: string[]): Létrehozza a SimulationTimer és a MapManager objektumokat.

    • void newGame(String nextLevel): Megállítja a szumulációt, majd szól a MapManagernek, hogy hozzon létre egy új pályát, végül pedig elindítja azt.

    • void startGame(): Elindítja a szimulációt. A SimulationTimernek start üzenetet küld, aminek hatására elindul az időzítés.

    • void stopGame(): Megállítja a szimulációt. A SimulationTimernek stop üzenetet küld, aminek a hatására az időzítés megáll.

    • void resumeGame(): A játék előző állapota alapján dönt. Ha futott a játék akkor újra elindítja azt.

Map

  • Felelősség
    A pálya tartalmazza a mindenkori játékállást. A pályán találhatóak meg a vonatok és a csomópontok, illetve a pálya adminisztrációjához szükséges objektumok (Statistics, TrainScheduler).

  • Attribútumok

    • Statistics stat: A játék közbeni statisztika. pl.: mennyi kocsi üres.

    • List<Train> trainList: A játékban résztvevő vonatok.

    • List<Node> nodeLsit: Adminisztrációs lista.

    • List<Notifiable> notifiableList: Azok az objektumok találhatóak ebben a listában akik feliratkoztak az időzítőre (TrainScheduler, CollisisonCheck).

    • TrainScheduler trainScheduler: A vonatok elindításáért felelős.

  • Metódusok

    • Map():Konstruktor

    • void subscribe(SimulationTimer timer): A maphoz tartozó vonatok, TrainScheduler feliratkoztatása az időzítőre.

    • void addNode(Node n): Csomópont hozzáadása a nodeListhez.

    • void addTrainList(List<Train> t): Vonat hozzáadása a trainListhez.

    • void addStatistics(Statisctics s): Statisztika hozzáadása a pályához.

    • void addNotifiable(Notifiable n): Hozzáad egy értesítendő objektumot a pályához.

    • List<Node> getNodeList(): Visszaadja a csomópontokat

    • List<Train> getTrainList(): Visszaadja a vonatokat

    • void activateNode(Coordinate c): Megkeresi ahhoz a koordinátához legközelebb eső Node-ot (egy környezeten belül), amit kapott. Ezen meghívja az activate() függvényt, amire az adott node logkája végrehajtódik

MapBuilder

  • Felelősség
    Ő végzi az IO műveleteket. Létrehozza magát a pályát és feltölti a rajta lévő és a hozzá kapcsolódó elemekkel.

  • Metódusok

    • void MapBuilder(String mapName): Konstruktor. Beállítja a felépíteni kívánt pálya nevét.

    • Map buildMap(Game g): Létrehozza a pálya működéséhez szükséges összetevőket és elvégzi a file olvasás műveletet az adatok feldolgozásával.

MapManager

  • Felelősség
    A pályák kezeléséért felelős. Képes menteni egy játékállást, betölteni egy korábban lementettet, vagy újat, és kezeli az ezzel járó feliratkoztatásokat (ld. subscription szekvencia). Tárolja a jelenlegi Map-ot.

  • Attribútumok

    • SimualtionTimer timer: A MapManager ezen az attribútumon keresztül éri el az időzítőt.

    • Map map: A létrehozott pálya.

  • Metódusok

    • MapManager(SimualtionTimer timer, Game g): Konstruktor, amiben beállításra kerül az időzítő és a játék.

    • void newMap(String mapName): Betölti a paraméterül kapott nevű pályát egy MapBuilder segítségével.

    • void saveMap(String mapName): Lementi az aktuális játékállást a paraméterben kapott néven.

    • void loadMap(String mapName): Betölt egy korábban lementett játékállást.

Node

  • Felelősség
    A TrainPartok következő úticélját határozza meg. A csomópontok gráfot alkotnak.

  • Attribútumok

    • List<Node> neighborNodeList : A szomszédos csomópontokat tárolja.

    • Train lastTrain: A csomóponttal utoljára kapcsolatba lépett vonat.

    • Coordinate pos: A Node helyzetét adja meg.

  • Metódusok

    • Node():Konstruktor

    • void accept(TrainEngine te) : A csomópont irányítja a TrainEnginet a következő állomás felé, ha az létezik.

    • void accept(TrainCart tc) : A csomópont irányítja a TrainCartot a következő állomás felé, ha az létezik.

    • Node route(): Megnézi honnan jött az aktuális TrainPart, és a másik node felé irányítja, mint ahonnan jött.

    • void activate(): A felhaszáló ezzel tudja a node-hoz tartozó logikát aktiválni. Alapértelmezetten ugyan semmi nem történik, de a leszármazottak felüldefiniálják ezt.

    • boolean checkForTrain(): Ellenörzi, hogy van-e a node-on vonat jelenleg.
      A node minden parttal történt interakciónál megjegyzi, hogy mi volt a hozzá tartozó vonat. (lastTrain) Az ellenőrzésnél lekéri ennek a vonatnak az utolsó partját, és megnézi, annak a getNextNode() függvényével, hogy mi a következő célja. Ha nem a node saját maga, akkor már nincs rajta a vonat.

Notifiable

  • Felelősség
    Interfész. Felületet nyújt az időzítőre feliratkozni kívánó osztályok számára.

  • Metódusok

    • void update(): Az időzítéskor meghívott metódus. A SimualtionTimer hívja meg a Notifiablet megvalósító osztályoknak.

SimulationTimer

  • Felelősség
    A szimuláció időzítéséért felelős. Meghatározott időközönként értesíti a szimulációban részt vevő objektumokat.

  • Metódusok

    • SimualtionTimer(): Inicializálja az időzítőt.

    • void start(): Elindítja az időzítőt.

    • void stop(): Megállítja az időzítőt.

    • void addSubscriber(Notifable sub): Az ütemezni kívánt objektumokhoz adja a paraméterül kapott Notifable interfészt megvalósító interfészt.

    • deleteSubscription(): Törli a feliratkozásokat.

SpecialPlace

  • Felelősség Ezeken a speciális csomópontokon tud a felhasználó alagútszájakat építeni. A pályán maximum 2 alagútszáj lehet aktív, amiket alagút köt össze. Megépített alagútszájat le is lehet rombolni, ha nem tartózkodik az alagútban vonat.

  • Ősosztályok

    • Node
  • Metódusok

    • void activate(): Elvégzi az alagútszáj építéséhez köthető logikát, ha az lehetséges. Egy privát statikus változóban tárolódik, hogy mely szájak vannak felépítve a pályán (maximum 2 lehetséges). Ez alapján eldönti, hogy lehetséges-e. Alagútszáj lerombolásánál gondoskodik róla, hogy csak akkor lehessen lerombolni, ha az alagútban nem tartózkodik vonat.

Speed

  • Felelősség
    A vonat sebességét leíró osztály.

Station

  • Felelősség Ezeken a helyeken tudnak leszállni az emberek a kocsiból, de csak akkor, ha az állomás színével megegyező az adott kocsi, és nincs előtte nem üres. Ha adott színű kocsiból több van egymás után, az összes kiürül.

  • Ősosztályok

    • Node
  • Attribútumok

    • Color color: Az állomás színe.

Statistics

  • Felelősség
    A játékról vezet statisztikát. A TrainPartok őt értesítik, ha felrobbantak vagy kiürültek.

  • Attribútumok

    • Integer numberOfCarts: Az összes kocsi száma a pályán.

    • Integer emptyCarts: Üres kocsik száma.

    • List<String> mapList: Pályák hogyan következnek egymás után.

    • String currentLevel: Az aktuális szint.

    • Game game: Rajta keresztül módosítható a játék állapota. (pl. új játék indítása).

  • Metódusok

    • Statistics(Game g): Konstruktor. Beállítja a game attribútumot.

    • void trainExplode(): Train hívja amikor felrobban. Kiadja a pálya újraindítása parancsot.

    • void cartUnloaded(): Egy TrainPart hívja, amikor kiürült. Vizsgálja, hogy sikerült-e teljesíteni a pályát.

Switch

  • Felelősség Egy kereszteződésben ezek segítségével állítható, merre szeretnénk, hogy a vonat továbbhaladjon. Ha a két irány, amelyek irányába állítható a váltó, egyikéből jön a vonat, mindig a harmadik irányba halad tovább. A váltó nem állítható, ha vonat tartózkodik rajta.

  • Ősosztályok

    • Node
  • Attribútumok

    • Node rootNode: A váltó gyökércsomópontja, ahonnan az elágazás indul.

    • Node activeNode: A váltó aktív kimenete.

  • Metódusok

    • void route(): Meghatározza a vonat továbbhaladási irányát. Ha a vonat a root felől jön, akkor az aktív node felé irányíja, ha pedig a másik irányok valamelyikéből, akkor a root felé fog vezetni az irány.

    • void activate(): Elvégzi a váltó állításhoz szükséges logikát. Kiválasztja a haladási irányt, ha a nem tartozkódik rajta vonat.

Train

  • Felelősség A vonat felrobbantásáért felelős, ekkor triggereli Statistics osztály figyelő függvényét. Tárolja a kocsikat, mozdonyt. Mozgatja saját magát.

  • Interfészek

    • Notifiable
  • Attribútumok

    • List<TrainPart> trainPartList: Tartalmazza, hogy milyen egységekből áll a vonat.

    • Color colorToUnload: A következő színű kocsi, amit ki lehet üríteni.

    • Boolean running: A vonat a pályán van-e.

    • Statisctics stat: Statisztikát kezelő objektum.

  • Metódusok

    • Train(Staistics s): Konstruktor. Beállítja a statistics attribútumot.

    • void move() : Mozgatja a vonatelemeket.

    • void explode() : Felrobbantja a vonatot. Megsemmisíti a vonatelemeket. triggereli Statistics-ot.

    • boolean isRunning(): Visszadja, hogy a vonat a pályán van-e már.

    • void addPart(TrainPart p) : Hozzáad egy kocsit a vonathoz.

    • Color getColor() : Visszaadja az utolsó nem üres vonatelem színét.

    • void startTrain(): Elindítja a vonatot.

    • void checkCollision(): Ütközés vizsgálata a vonatok között. A vonat minden TrainPart-ját összehasonlítja a az összes többi vonat TrainPart-jával. Minden szimulációs lépésben végrehajtódik.

    • List<TrainPart> getPartList(): Visszaadja a Train-hez tartozó TrainPartok listáját.

    • void update(): A Notifiable interfész megvalósításából származik. Ezen belül történik a mozgatás (move()) és az ütközésvizsgálat (checkCollision()) műveletek hívása.

TrainCart

  • Felelősség
    A vonat része a kocsi, utasokat szállít, meghatározott színe van.

  • Ősosztályok

    • TrainPart
  • Attribútumok

    • Color color: A kocsi színe.

    • Statistics stat: Statisztika a játékról.

    • Train train: Megadja melyik vonat része a kocsi.

  • Metódusok

    • TrainCart(Train t, Statistics st, Color color): Konstruktor, a Statistics osztályt ismeri, itt kapja meg. Beállításra kerül még, hogy melyik vonathoz tartozik.

    • Color getColor(): Visszaadja a kocsi színét.

    • void unload(): Kiüríti a kocsit. Ha szükséges beállítja semleges színűre és triggereli a Statistics osztály ürítéseket számláló függvényét.

TrainEngine

  • Felelősség
    A vonat része a mozdony, meghatározza a vonat sebességét. Ha több mozdony lenne, tetszőleges logika szerint lehetne vonat eredő sebességét számolni.

  • Ősosztályok

    • TrainPart
  • Attribútumok

    • Speed speed: A mozdony sebességét adja meg.
  • Metódusok

    • TrainEngine(Speed s): Konstruktor, beállítja a sebességet.

    • Speed getSpeed(): Visszaadja a mozdony sebességét.

TrainPart

  • Felelősség Absztrakt bázisosztály vonatelemekhez. A vonatok TrainPartokból állnak, a vonatok mozgatása a TrainPartok mozgatására vezethetö vissza, ezért minden TrainPart mozgatja saját magát. Mozgatáskor érheti el a célpontjául szolgáló adott állomást, és visitor minta szerint meglátogatja, azaz triggereli a node-okat ha elért hozzájuk.

  • Attribútumok

    • Node nextNode: Következő cél Node-ja, ahová tart.

    • Coordinate pos: A TrainPart helyzetét határozza meg.

  • Metódusok

    • void move(): Mozgatja a TrainPartot. Absztrakt, a leszármazottak valósítják meg.

    • setNextNode(Node n): Beállítja a kapott Node-ot az adott kocsi következő céljának.

    • Train getTrain(): Visszaadja a Vonatot aminek a TrainPart a része.

    • boolean checkCollision(TrainPart tp): Megvizsgálja, hogy a paraméterül kapott másik trainParttal összeütközött-e.

TrainScheduler

  • Felelősség
    Vonatok indításának ütemezéséért felelős osztály. A SimulationTimer triggereli, ekkor ha szükséges indítja a következő vonatot.

  • Interfészek

    • Notifiable
  • Metódusok

    • TrainScheduler(List<Train> list): Konstruktor, itt kapja meg a vonatok listáját, innen keres vonatot, amit tud indítani.

    • update(): Notifiable interfész megvalósítása, itt történik a vonatindítási logika.

Szekvencia diagramok

Init

New Game

Map Building

Load Game

Save Game

Start Game

Stop Game

Resume Game

Train Explode

Train Moving

Unloading

Subscription

Notifying

Activate

Collision Checking

State-chartok

Game

Special Places

Switch

Train Cart

Train

Napló

Kezdet Időtartam Résztvevők Leírás
március 2. 14:00 2 óra Dobai, Dömötör, Földvári, Telek Megbeszélés: Hibák megbeszélése, javítási javaslatok, következö lépések tisztázása
március 2. 19:00 1 óra Dömötör Trello frissítése, objektumkatalógus szortírozása
március 3. 15:30 1.5 óra Dömötör Trello frissítése, osztályleírások szerkesztése
március 5. 14:00 4 óra Dömötör, Földvári, Telek Szekvencadiagramok átszerkesztése, Osztályleírások, Osztálydiagram kiegészítése