Kazsik Ádám Programozás Technológia 1. Első beadandó feladat Dokumentáció
Tartalom: I. A program jellemzői ............................................................................................... 3 Játékszabályok ................................................................................................................ 3 Hadsereg .................................................................................................................... 3 Hadszíntér .................................................................................................................. 3 Hadszíntér ábra .................................................................................................. 3 Magaslat..................................................................................................................... 4 Egységek..................................................................................................................... 4 Lerohanás ................................................................................................................... 4 Tábor .......................................................................................................................... 4 Lovas .......................................................................................................................... 4 Lándzsás ..................................................................................................................... 4 Íjász ............................................................................................................................ 4 II. A program megvalósítása ........................................................................................ 5 Interface-ek ............................................................................................................ 5 Harcol ......................................................................................................................... 5 Elo .............................................................................................................................. 5 Osztalyok ............................................................................................................... 5 Katona ........................................................................................................................ 5 Ijasz ............................................................................................................................ 6 Landzsas ..................................................................................................................... 6 Lo ................................................................................................................................ 6 NehezCsatalo ............................................................................................................. 6 KonnyuCsatalo ........................................................................................................... 6 Lovas ......................................................................................................................... 6 Hadszinter .................................................................................................................. 6 Hadsereg .................................................................................................................... 6 Tabor .......................................................................................................................... 7 III. Osztálydiagram ...................................................................................................... 8 IV. Továbbfejlesztési lehetőségek................................................................................ 9 A program interaktívvá tétele. ................................................................................ 9 A programot grafikus felülettel láthatnánk el.......................................................... 9
2
I. A program jellemzői A program egy középkori csatát szimulál.
A program implementálása és az osztálydiagram elkészítése előtt, legalább elméletben meg kellett alkotni egy szabályrendszert a programhoz, amely segítséget nyújtott abban, hogy milyen függvényekre lesz szükség a program egyes osztályaiban. Mivel a program egy „játékprogramnak” minősíthető így ezt játékszabályokként fogom ettől kezdve említeni. Játékszabályok: A játék egy hadszíntéren indul, melyen két hadsereg szerepel, és ezek egymással harcolnak. Hadsereg: A hadseregek egységekből állnak, így a játék elején mindkét hadsereg minden embere kap egy koordinátát. A játék nem tiltja, hogy a két hadsereg „véletlenül” (legalábbis a random számok generálása miatt) ugyanarra a koordinátára kerüljön már a játék elején. Ha két különböző koordinátáról indulnak, akkor ettől kezdve az egységek már külön mozognak. Amennyiben az ellenfél valamely egységével megegyező koordinátára lépnek, akkor harcolnak. Hadszintér: A hadszíntér a rögzített számok miatt, egy 6x6 egység méretű térként képzelhető el.
(A kép csupán szemléltető eszköz, hibái csak rajzi hiányosságok)
3
Magaslat: A program felismeri, hogy az y = 3-nál nagyobb y koordinátájú pontok „magasabban” vannak. Egységek: Minden egységre jellemző tulajdonság, az élete, a páncélja, és a támadópontja, illetve a koordinátája. Lerohanás: Amennyiben valamely egység, eljut az (5,5)-ös koordinátára, akkor hadserege megtámadhatja az ellenfél táborát, ha az épp nem üres. Tábor: Ehhez arra is szükség van, hogy feltételt szabjunk, milyen esetben vannak egységek a táborban. Ezért egy egység akkor kerül a saját hadseregének táborába, ha előtte legyőzött egy ellenséges katonát (azaz az törlődött az ellenség hadseregéből). Ha egy egység a táborába kerül, akkor életpontjai és páncélja is nő. Amennyiben egy hadszíntéren lévő hadseregből az összes katona elfogy, akkor a program fokozatosan visszaküldi a táborban lévő egységeiket a hadszíntérre. Lovas: A lovas egység abban különbözik a többitől, hogy egy speciális rá jellemző tulajdonsága, a lova. A lovával együtt lehet létrehozni, azonban ha a lovának életpontjai elfogynak, a lovas önmagában is teljes értékű egységként harcol tovább. Amíg a lova életben van, addig ha a hadszíntér méretei engedik, a lovas képes két koordinátát is elmozdulni. Továbbá ha él a lova, akkor harc közben annak támadópontjaival sebződik az ellenség megtámadott egysége. S végül szintén a lovától függően, amíg a lova él, addig a sebzéseket is a ló életpontjaiból vonjuk le. Lándzsás: A lándzsás egyszerű egység. Íjász: Egyszerű egység, azonban képes távolabbról is megsebezni az ellenfelét, amennyiben pedig magaslaton áll, és az y koordinátája nagyobb, mint a megtámadott ellenfél y koordinátája (azaz magasabban van) akkor még nagyobb távolságról képes támadni.
4
II. A program megvalósítása: Az egységek főbb műveleteit két interfész : Harcol(), Elo() tárolja. Ezekben szereplő absztrakt függvények: tamad(Harcol harcol); - megadható vele melyik egységünk kit támadjon sebzodik(float sebzes); - megadható vele hogy mennyivel sebződik a megtámadott egység mozog(); - akkor hívódik meg ha az egység senkit nem tud megtámadni a közelében double tavolsag(Point2D.Double p1, Point2D.Double p2); - kiszámolja milyen távol van pl: egy Ijasz egység az ellenfelétől int getId(); - megadja az egység generált ID kódját, (csak a névegyezés miatti megkülönböztetésben segít, nincs lényegi szerepe) boolean elo(); - eldönti az adott egység életpontja nagyobb-e mint 0 Ezt a két interfészt a Katona osztály valósítja meg. Ez az osztály tartalmazza az egységek fő konstruktorát, és főbb attribútumait. Illetve segédfüggvényeket tartalmaz ahhoz, hogy az egységekről adatok legyenek lekérdezhetőek más osztályok számára. Pl : Tabor, Hadsereg. A Katona osztály felüldefiniálja az interfészek függvényeit. Ezentúl függvényei: getElet(), setElet(float elet), getPancel(), setPancel(float pancel); - Getter/Setter páros, az Élet és a Páncél beállítására: getPos(),setP1(); - Getter/Setter az egység pozíciójának beállításához: setMagaslat() - Setter annak beállítására, hogy az egységünk épp magaslaton áll-e. toString() - toString felüldefiniálása, az egyes egységek nevének könnyebb kiírásához. log(String message) - felhasználói üzenetekhez segédfüggvény.
5
A Katona osztályból származnak az Ijasz, Landzsas, Lo és Lovas osztályok. -
az Ijasz csupán a tavolsag(Point2D.Double p1, Point2D.Double p2) függvényt definiálja felül. a Lovas felüldefiniálja a tamad(Harcol harcol), sebzodik(float sebzes), és a mozog() függvényeket. a Lo osztály absztrakt osztály belőle nem hozhatóak létre Lo egységek, azonban A Lo osztályból származnak a KonnyuCsatalo és NehezCsatalo osztályok. Ezek csak adataikban különböznek egymástól.
A Hadszinter osztály alapvetően hadseregeket tárol, ezentúl a getRandomPosition() függvény visszaad egy random koordinátát, melyet a seregElhelyez(Hadszinter mezo) beállít a hadsereg kiinduló koordinátájának. Ezen kívül függvényei: addHadsereg(Hadsereg hadsereg) - Hozzáadható egy paraméterül kapott hadsereg a hadszíntérhez getSize() - Visszaadja a hadszíntér listánk méretét getSereg(int szam) - Visszaadja a paraméterül kapott indexű hadsereget a hadszíntér listából removeSereg(Hadsereg hadsereg) - Eltávolítja a paraméterül kapott hadsereget a hadszíntér listából A Hadsereg osztály alapvetően egységeket tárol, valamint van egy neve, és egy koordinátája, amit a csata elején kap meg. Ezen kívül függvényei: Hadsereg(String name) - konstruktor a hadsereg létrehozásához. getP1(),setPosition(Point2D.Double p1) - getter/setter páros a hadsereg koordinátájának beállításához, és lekérdezéséhez. getName() - getter a hadsereg nevének lekérdezéséhez. addKatona(Katona katona) - hozzáadja a paraméterül kapott katonát a hadsereg listához. lerohanas(Tabor tabor) - a paraméterül kapott tábor katonáit a hadsereg összes egysége megtámadja taborba(Katona katona, Tabor tabor) - a paraméterül kapott katonát a paraméterül kapott táborba helyezi át 6
getKatona() - visszaad egy random katonát a hadsereg listából getSereg() - visszaadja a hadsereg listát (kiíráshoz) getSize() - visszaadja a hadsereg lista méretét remove(Katona katona) - a paraméterül kapott katonát törli a hadsereg listából. A Tabor osztály alapvetően egységeket tárol, valamint van egy név attribútuma. Ezen kívül függvényei: Tabor(String name) - a Tabor osztály konstruktora getName() - visszaadja a tábor nevét. id(Katona katona) - visszaadja a paraméterül kapott katona ID-jét addTaborozo(Katona katona) - a tábor listához hozzáadja a paraméterül kapott katonát remove(Katona katona) - a paraméterül kapott katonát kitörli a tábor listából getKatona() - visszaad egy random katonát a tábor listából gyogyit(Katona katona), javit(Katona katona) - a paraméterül kapott katonának növeli az élet/páncél pontjait. getSize() - visszaadja a tábor lista méretét seregbe(Katona katona, Hadsereg hadsereg) - a paraméterül kapott katonát áthelyezi a paraméterül kapott hadseregbe getTabor() - visszaadja a Tabor listát (kiíráshoz)
7
III. Osztálydiagram:
8
IV. Továbbfejlesztési lehetőségek: 1. A program kiegészítése, bővítése. - Új egység osztályok megalkotása, ezáltal a játék árnyalása. - Minden egység speciális tulajdonságokkal való felruházása (Interface-ek függvényeinek felüldefiniálása). 2. A program interaktívvá tétele. - Egységek mozgásának interaktívvá tétele, ezáltal nem csak véletlenszerűen lépkednének. - Az egységek létrehozásának befolyásolhatóvá tétele, így a felhasználó dönthetné el, milyen egységet melyik hadseregbe hoz létre. - A tábor megtámadásának manuálissá tétele, így a felhasználó dönthetné el, hogy az adott hadsereg mikor támadja meg az ellenfél táborát. - Az egységek táborba küldésének manuálissá tétele, így a felhasználó dönthetné el, hogy az adott egység mikor kerüljön a hadseregének táborába. - A felhasználó dönthesse el, mikor lépjen két koordinátát, és mikor egyet a Lovas egység, ezáltal több taktikázásra nyílna lehetőség. 3. A programot grafikus felülettel láthatnánk el. - A hadszíntér grafikus megjelenítése, ezáltal vizuálisan megjeleníthetőek lennének rajta az egységek, ezáltal nem kellene koordinátákat memorizálni a játékhoz. - Látnánk mennyi egység van épp a hadszíntéren, így szükség szerint visszahívhatnánk egységeinket a táborunkból. - Megjeleníthetőek lennének, az egységek attribútumai, ezáltal könnyebben felmérhetővé válna, melyik egységnek van szüksége gyógyításra (táborba küldésre). - Mivel látnánk a csata folyamatát, nem volna szükség felhasználói üzenetekre, s sokkal átláthatóbbá válna a program működése.
9