Skip to content

10. Prototípus

Istvan Telek edited this page May 11, 2017 · 16 revisions

Prototípus beadása

Változások

Osztályok

MapBuilder

Az osztály buildMap függvénye megváltozott, csak a pálya elérési útvonalát kell neki megadni, illetve törlésre került a Statistics osztály használata.

NullAttributeException

Ez az osztály az RuntimeException osztály leszármazottja, a pálya fájl feldolgozásakor, hiányzó attribútum esetén keletkezik.

SpecialPlace

  • Attribútumok

    • -isConstructed:boolean - Fel van-e építve az alagútszáj
  • Metódusok

    • -canConstruct():boolean - Megadja, hogy felépíthető-e a alagútszáj a pályán

LoaderStation

Az állomásról, csak egyszer szállhatnak fel utasok. Ezzel biztosítva van, hogy az első megfelelő színű kocsi fog feltöltődni.

  • Attribútumok

    • -hasPassengers:boolean - Megadja vannak-e utasok az állomáson

BoundingBox

A kocsik kiterjedését reprezentálja. Egy Coordinate és egy irány segítségével meghatározható a vonat kiterjedése, ami alapján vizsgálható az ütközés és a kirajzolásban is segíteni fog.

  • Attríbútumok

    • -middle:Coordinate - Az alakzat közepe

    • -direction:Coordinate - Az alakzat iránya, vektor

    • -points:List - Az alakzat pontjai

  • Metódusok

    • +BoundingBox(m:Coordinate, d:Coordinate) - Konstruktor, beállítja a BoundingBoxot

    • +setPos(m:Coordinate, d:Coordinate) - Beállítja az aktuális középpontot és irányt, majd ezek segítségével kiszámolja az alakzat csúcspontjait

    • +getPoints():List - Visszaadja a BoundingBox pontjait

    • +isCollided():boolean - Összehasonlítja, hogy a paraméterben kapott BoundigBox-al ütközött-e

    • -checkAxisCollision(otherBoundingBox:BoundingBox, axis:Coordinate):boolean - Megnézi egy adott irányra van-e átfedés. Ütközés belső logika

    • -getScalarForCollision(Coordinate point, Coordinate axis):double - Mehatározza egy pont vetületét egy tengelyre (irányra)

Coordinate

  • Metódusok

    • +normalize():void - Vektorként kezelve a koordinátát normalizálja azt

    • +getLength():double - Helyvektorként kezelve megadja a vektor hosszát

    • +getDistanceTo(p:Coordinate):double - Megadja egy pont távolságát egy másik ponthoz viszonyítva

TrainPart

  • Attribútumok

    • -boundingBox:BoundingBox - BoundingBox az ütközésvizsgálathoz

    • -direction:Coordinate - Irány, amiben a kocsi halad

    • isEmpty:boolean - Üres-e a TrainPart

    • -activateRadius:double - Megadja milyen sugarú körben triggelelődik a csomópont, aminek a közelébe ért a TrainPart

  • Metódusok

    • setActivateRadius(activateRadius:double) - Beállíja a csomópontokhoz érés sugarát (Ilyen sugarú körben aktiválódik a csomópont)

    • -getBoundingBox():BoundingBox - Visszaadja a kocsi BoundigBoxát

Pálya formátum

A pálya formátumot a könnyebb feldolgozhatóság érdekében megváltoztattuk, a pályák formátuma (DTD) a következő lett:

<!ELEMENT level (nodes,trains)>
<!ELEMENT nodes (node*)>
<!ELEMENT node (position, neighbours)>
<!ATTLIST node type CDATA #REQUIRED>
<!ATTLIST node name CDATA #REQUIRED>
<!ATTLIST node color CDATA #IMPLIED>
<!ELEMENT position EMPTY>
<!ATTLIST position x CDATA #REQUIRED>
<!ATTLIST position y CDATA #REQUIRED>
<!ELEMENT neighbours (neighbour*)>
<!ELEMENT neighbour EMPTY>
<!ATTLIST neighbour name CDATA #REQUIRED>
<!ELEMENT trains (train*)>
<!ELEMENT train (trainPart*)>
<!ATTLIST train start_node CDATA #REQUIRED>
<!ATTLIST train start_time CDATA #REQUIRED>
<!ELEMENT trainPart EMPTY>
<!ATTLIST trainPart type CDATA #REQUIRED>
<!ATTLIST trainPart speed CDATA #IMPLIED>
<!ATTLIST trainPart color CDATA #IMPLIED>

A teszt pálya fájlja ezek alapján a következő:

<level>
    <nodes>
        <node type="node" name="sin1">
            <position x="0" y="1"/>
            <neighbours>
                <neighbour name="sin2"/>
            </neighbours>
        </node>
        <node type="node" name="sin2">
            <position x="1" y="1"/>
            <neighbours>
                <neighbour name="sin1"/>
                <neighbour name="valto"/>
            </neighbours>
        </node>
        <node type="switch" name="valto">
            <position x="2" y="1"/>
            <neighbours>
                <neighbour name="sin2"/>
                <neighbour name="sin3"/>
                <neighbour name="sin4"/>
            </neighbours>
        </node>
        <node type="node" name="sin3">
            <position x="2" y="2"/>
            <neighbours>
                <neighbour name="valto"/>
            </neighbours>
        </node>
        <node type="node" name="sin4">
            <position x="2" y="0"/>
            <neighbours>
                <neighbour name="valto"/>
            </neighbours>
        </node>
    </nodes>
    <trains>
        <train start_node="sin1" start_time="0">
            <trainPart type="engine" speed="1"/>
            <trainPart type="cart" color="blue"/>
        </train>
    </trains>
</level>

Kimeneti nyelv

  • listNodes - A csomópontokat külön sorba írja, az egyes specifikus csomópontokhoz megjeleníti a hozzá kapcsolódó tulajdonságokat is.
Node (0) type=node pos=(1.0,0.0)  
Node (1) type=node pos=(2.0,0.0)  
Node (2) type=switch pos=(3.0,0.0) active=[type=node pos=(2.0,0.0)]
  • listTrains - A vonatról több információt listáz. Új sorokben megjeleníti a vonathoz kapcsolódó kocsikat és azok információit.
Train (0) isRunning = false startTime = 0 exploded = false pos = null  
[0] pos = null next = [null] empty = true  
Train (1) isRunning = false startTime = 1 exploded = false pos = null  
[0] pos = null next = [null] empty = true
  • step (lépésszám) - A kiíratás formátuma megváltozott: (Vonat | Következő csomópont, ami felé tart)
Train0 \| type=station pos=(8.0,0.0) color=green

Fordítási és futtatási útmutató

Fájllista

Fájl neve Méret (byte) Keletkezés ideje Tartalom
compile.bat 233 2017-03-17 22:56 Fordításhoz szükséges kötegelt állomány.
filelist.sh 72 2017-03-17 23:05 A jelen helyen látható Fájllista legenerálásához szükséges script.
magic.bat 138 2017-03-17 22:56 A fordításhoz és futtatáshoz szükséges kötegelt állomány.
run.bat 121 2017-03-17 22:56 Futtatáshoz szükséges kötegelt állomány.
test.bat 472 2017-04-18 07:59 Autómatikus tesztelést futtató kötegelt állomány.
src/Game.java 5974 2017-03-18 16:56 Game osztály.
src/Map.java 4615 2017-03-18 16:56 Map osztály.
src/MapBuilder.java 4038 2017-03-18 16:56 MapBuilder osztály.
src/MapManager.java 2372 2017-03-18 16:56 MapManager osztály.
src/Node.java 4273 2017-03-18 16:56 Node osztály.
src/Notifiable.java 339 2017-03-18 16:56 Notifiable osztály.
src/SimulationTimer.java 1722 2017-03-18 16:56 SimulationTimer osztály.
src/SpecialPlace.java 1117 2017-03-18 16:56 SpecialPlace osztály.
src/Station.java 1608 2017-03-18 16:56 Station osztály.
src/Switch.java 1661 2017-03-18 16:56 Switch osztály.
src/Train.java 4560 2017-03-18 16:56 Train osztály.
src/TrainCart.java 1617 2017-03-18 16:56 TrainCart osztály.
src/TrainCoalWagon.java 817 2017-04-16 21:49 TrainCoalWagon osztály
src/TrainEngine.java 1267 2017-03-18 16:56 TrainEngine osztály.
src/TrainPart.java 2722 2017-03-18 16:56 TrainPart osztály.
src/TrainScheduler.java 1322 2017-03-18 16:56 TrainScheduler osztály.
src/util/BoundingBox.java 5129 2017-04-18 01:01 BoundingBox osztály
src/util/Color.java 195 2017-03-14 19:33 Color osztály.
src/util/Coordinate.java 101 2017-03-18 15:08 Coordinate osztály.
src/util/Speed.java 187 2017-03-14 19:33 Speed osztály.
src/util/NullAttributeException.java 680 2017-04-16 17:46 NullAttributeException osztály
test/input/alagut_mukodes.in 90 2017-04-18 08:18 Teszt bemenet
test/input/hosszu.in 54 2017-04-18 09:40 Teszt bemenet
test/input/jatekallas_betoltes.in 114 2017-04-18 09:54 Teszt bemenet
test/input/jatekallas_mentese.in 41 2017-04-18 09:47 Teszt bemenet
test/input/jatek_megnyeres.in 28 2017-04-18 09:44 Teszt bemenet
test/input/palya_betoltese.in 50 2017-04-18 09:59 Teszt bemenet
test/input/utasok_felszallasa.in 31 2017-04-18 07:55 Teszt bemenet
test/input/utasok_leszallasa.in 29 2017-04-18 05:46 Teszt bemenet
test/input/utkozes.in 31 2017-04-18 05:46 Teszt bemenet
test/input/vakvaganyra_futas.in 29 2017-04-18 05:46 Teszt bemenet
test/input/valto_mukodes.in 53 2017-04-18 07:24 Teszt bemenet
test/input/vonatok_inditasa.in 28 2017-04-18 05:46 Teszt bemenet
test/output/alagut_mukodes.out 761 2017-04-18 08:15 Teszt kimenet
test/output/hosszu.out 201 2017-04-18 09:40 Teszt kimenet
test/output/jatekallas_betoltes.out 460 2017-04-18 09:54 Teszt kimenet
test/output/jatekallas_mentese.out 56 2017-04-18 09:49 Teszt kimenet
test/output/jatek_megnyeres.out 546 2017-04-18 09:43 Teszt kimenet
test/output/palya_betoltese.out 418 2017-04-18 09:59 Teszt kimenet
test/output/utasok_felszallasa.out 1366 2017-04-18 07:56 Teszt kimenet
test/output/utasok_leszallasa.out 305 2017-04-18 05:46 Teszt kimenet
test/output/utkozes.out 460 2017-04-18 05:46 Teszt kimenet
test/output/vakvaganyra_futas.out 124 2017-04-18 05:46 Teszt kimenet
test/output/valto_mukodes.out 288 2017-04-18 09:35 Teszt kimenet
test/output/vonatok_inditasa.out 224 2017-04-18 05:46 Teszt kimenet
levels/alagut_mukodes.xml 1572 2017-04-16 17:46 Teszt pálya
levels/hosszu.xml 1485 2017-04-16 17:47 Teszt pálya
levels/jatekallas_betoltes.xml 1210 2017-04-16 17:46 Teszt pálya
levels/jatekallas_mentes.xml 678 2017-04-16 17:46 Teszt pálya
levels/jatek_megnyeres.xml 1317 2017-04-18 01:27 Teszt pálya
levels/level.dtd 729 2017-04-16 17:46 Teszt pálya
levels/palya_betoltese.xml 1037 2017-04-16 17:46 Teszt pálya
levels/utasok_felszallasa.xml 1351 2017-04-18 01:51 Teszt pálya
levels/utasok_leszallasa.xml 1044 2017-04-18 05:46 Teszt pálya
levels/utkozes.xml 1180 2017-04-16 17:46 Teszt pálya
levels/vakvaganyra_futas.xml 678 2017-04-16 17:46 Teszt pálya
levels/valto_mukodes.xml 1390 2017-04-16 17:46 Teszt pálya
levels/vonatok_inditasa.xml 1265 2017-04-16 17:46 Teszt pálya

Fordítás

A fordítás következő parancs kiadásával lehetséges (a feladat mappájában kell kiadni): compile

Futtatás

A futtatáshoz az alábbi parancsot kell kiadni a feladat mappájában: run
ProTip: A program fordításához, majd futtatásához elegendő csupán a magic parancsot használni.
A parancsok kiadásához szükséges előzetesen a %JAVA_HOME% környezeti változót a JDK fő könyvtárára beállítani.

Tesztek jegyzőkönyvei

Autotest

A tesztek autómatikusan futtathatóak a következő paranccsal: test
A parancsot a feladat mappájában kell kiadni. A kimenet a testresult.txt fájlban tekinthető meg.
Lehetőség van a tesztkészlet bővítésére. A test\input, test\output mappákba kell felvenni az új teszt bementét illetve elvárt kimenetét azonos néven.

Az alagút helyes működése

Tesztelő neve Kövér
Teszt időpontja 04.18. 0:10
Teszt eredménye Hibás
Lehetséges hibaok Nem volt rombolható az alagútszáj
Változtatások Rombolhatóság javítása kódban
Tesztelő neve Kövér
Teszt időpontja 04.18. 0:30
Teszt eredménye Sikeres

Hosszú vonat a csomópontokon

Tesztelő neve Kövér
Teszt időpontja 04.18. 0:12
Teszt eredménye Sikeres

Játék megnyerése

Tesztelő neve Földvári
Teszt időpontja 2017.04.17 20:00
Teszt eredménye Hibás
Lehetséges hibaok Más tesztekben a pályán egy mozdony volt, autómatikusan teljesült a pálya.
Változtatások Lehet csak egy mozdonyból alló vonat, nem teljesül a pálya (Tesztekhez)
Tesztelő neve Földvári
Teszt időpontja 2017.04.17 20:00
Teszt eredménye Sikeres

Játékállás betöltése

Tesztelő neve Dobai
Teszt időpontja április 17. 17:00
Teszt eredménye Sikeres

Játékállás mentése

Tesztelő neve Földvári
Teszt időpontja 2017.04.17 20:00
Teszt eredménye Hibás
Lehetséges hibaok Az újonnan bevezetett módositások miatt (Game, BoundingBox), a sorozítás nem volt megvalósíható
Változtatások Sorosíthatóság hozzáadása a fent megnevezett osztályokhoz. (Bizonyos transient attribútumok megadása.)
Tesztelő neve Földvári
Teszt időpontja 2017.04.17 20:00
Teszt eredménye Sikeres

Pálya betöltése

Tesztelő neve Kövér
Teszt időpontja 04.18. 0:14
Teszt eredménye Sikeres

Utasok felszállása

Tesztelő neve Kövér
Teszt időpontja 04.18. 0:14
Teszt eredménye Hibás
Lehetséges hibaok Kevés node volt felvéve, a vonat előbb kisiklott, minthogy állomáshoz érne
Változtatások Csomópontok felvétele
Tesztelő neve Kövér
Teszt időpontja 04.18. 0:32
Teszt eredménye Sikeres

Utasok leszállása

Tesztelő neve Kövér
Teszt időpontja 04.18. 0:16
Teszt eredménye Hibás
Lehetséges hibaok Kevés node volt felvéve, a vonat előbb kisiklott, minthogy állomáshoz érne
Változtatások Csomópontok felvétele
Tesztelő neve Kövér
Teszt időpontja 04.18. 0:34
Teszt eredménye Sikeres

Vonatok ütköznek

Tesztelő neve Dobai
Teszt időpontja április 17. 17:00
Teszt eredménye Sikeres

Vakvágányra futás

Tesztelő neve Dobai
Teszt időpontja április 17. 17:00
Teszt eredménye Sikeres

A váltó helyes működése

Tesztelő neve Földvári
Teszt időpontja 2017.04.17 20:00
Teszt eredménye Hibás
Lehetséges hibaok A váltó aktíválásnál az aktív irányt nem jelenítette meg.
Változtatások Akítv irány is megjelenik a kimeneten.
Tesztelő neve Földvári
Teszt időpontja 2017.04.17 20:06
Teszt eredménye Sikeres

Vonatok elindítása

Tesztelő neve Kövér
Teszt időpontja 04.18. 0:20
Teszt eredménye Sikeres

Értékelés

Tag neve Munka százalékban
Dobai Botond 12,5%
Dömötör Szilárd 27,2%
Földvári András 19%
Kövér Márton 17%
Telek István 24,3%

Napló

Kezdet Időtartam Résztvevők Leírás
április 12. 19:30 3.5 óra Telek Pálya bemeneti fájl parser
április 14. 16:00 1.5 óra Földvári Station, SpecialPlace, Node, TrainCart, Switch. test outputs, inputs
április 15. 13:00 1 óra Földvári TrainCart, LoaderStation, debug
április 16. 15:00 7 óra Dömötör Game, Map, MapBuilder osztályok, test, bugfix
április 16. 17:30 3 óra Földvári Moves, CollisionCheck, Coordinate, BoundingBox
április 16. 17:30 4 óra Kövér Train, BoundingBox, TrainPart, debug
április 16. 13:30 7 óra Telek MapBuilder, palya xml fajlok, TrainScheduler, Coordinate, Error handling, event handling, output print
április 17. 20:00 2.5 óra Földvári Teszt kimenetek, debug
április 17. 23:00 2.5 óra Kövér Tesztelés, debug
április 17. 07:00 2 óra Földvári Autoteszt, tesztek
április 17. 17:00 0.5 óra Dobai Node, Switch, SpecialPlace, Station, LoaderStation átnézés, debug
április 18. 12:00 0.5 óra Kövér dokumentum szerkesztése

Clone this wiki locally