Szerepjáték rendszerterv Készítette: Ormándi Mátyás
Verziószám: 2.0
Model Specification
Page: 2
A program leírása: Cél: Egy szerepjáték (RPG) program megvalósítása, amelyben a játékos egy karaktert vezethet végig a játéktéren. A játéktér egyes pontjai különböző küldetéseket rejthetnek, amelyeket teljesítve a játékos végighalad a történeti szálon a játék végéig.
A program felépítése: A programot egyszerre egy játékos játssza, amelynek a program nyomon követi játékidejét, illetve képességeit, amelyeket új játék kezdetekor egy korláton belül tetszőlegesen lehet szabályozni. Ezek a képességek a teljesített küldetésekkel nőnek. A játékos új játék indításakor kiválaszthat egy karaktertípust, amely befolyásolja a kezdeti képességeket, illetve azok növekedési arányát az egyes küldetéstípusok mellett. A játék során tárgyak szerzésére is van lehetőség, amelyek szükségesek egyes küldetések teljesítésére. A program a játéktér kezelése mellett ellátja az új játék, betöltés, mentés feladatokat, valamint lehetőség van a beállítások megtételére. A játéktér egyes pontjai az egyes helyszíneket jelölik, amelyeken 1-1 küldetés fogadja a játékost. A játék kezdetekor csak egy küldetés érhető el. Egy küldetés sikeres, illetve sikertelen teljesítésével változnak a játéktéren megjelenített küldetések. Egy adott küldetés teljesítésére a játéknak vége lesz, amelyhez többféle módon is eljuthat a játékos (legalább 10 küldetést lehessen teljesíteni egy játék során).
Küldetések: A küldetések lehetnek matematikai feladványok, tárgykeresések, illetve, csaták. Az egyes küldetések teljesítése tapasztalati pontot szerez a játékos, amely a képességeit fejleszti, illetve tárgyk birtokába is juthat, amiket más küldetésben is felhasználhat. Matematikai feladványnál a kérdés egy szám, amely a feladványban megadott képlet, vagy számsorozat alapján következtethető ki (a képességek függvényében lehet tippeket adni a játékosnak). A tárgykeresési küldetésnek akkor van vége, ha a játékos birtokában van a keresett tárgynak. A játékos kap egy szöveget, amely utalást ad arra, hogy melyik helyszínen, milyen küldetés teljesítésével kaphatja meg az adott tárgyat. Csata esetén a játékos az ellenséget különböző támadásokkal támadhatja, amelyek különböző mértékben sebzik az ellenséget, aki persze visszatámad (egy játékos támadást egy ellenséges támadás követ). A csatának akkor van vége, ha valaki meghal (ha a játékos, akkor a játéknak is vége). A játékos képességei, illetve az ellenség képességei döntik el a kimenetelt, annak függvényében, hogy a játékos milyen támadási módot választ. Karakter: Új játék indításakor választhatjuk ki a karaktert, és adhatunk neki nevet. A karakter legalább 3 féle típusból választhat, amely rendre befolyásolja a logikai, támadási és védekezési tulajdonságait. A tapasztalati pontok gyűjtésével a képességek automatikusan fejlődnek. A játékos bármikor lekérdezheti karaktere tulajdonságait.
Model Specification
Page: 3
A program struktúrája: 2.1. A projektfejlesztés menete: A projekt Sparx Systems Enterprise Architect 7.8.848 segítségével készült Visual C++ programozási nyelven. A projekt modellezése az Enterprise Architect segítségével készült, amely kódgeneráló funkcióval is rendelkezik, amelyet a programfejlesztés során igénybe vettünk a szimulációt lefolytató osztályok esetében. A program felülete a Visual Studio tervezőjén keresztül készült, annak általános felületi eszközeit használva. 2.2. A program felépítése: A program struktúráját tekintve három fő csomagból áll (lásd 1. diagram). A megjelenítésért felelős felület a GUI, mely a képernyőn való megjelenítésért felel, vagyis egy ablak megjelenítésért és ennek beállításaiért. Ennek megfelelően két osztályt tartalmaz. A Menü csomag felel a menürendszer kezeléséért, ez a felhasználói felület. Ide tartozik az új játék létrehozása, játék mentése, játék betöltése, és a játékbeállítások. A Játéktér felel magáért a játékért, ennek belső szerkezete tartalmazza a játék megvalósításának eszközeit.
Model Specification
Page: 4
pkg RPG GUI Program + Ablak +
Main() : void
Játéktér
+ Grafikai beállítások
Menü
+ Actor1
+ Beállítások
+ Csata
+ Betöltés
+ Exception
+ Mentés
+ Harci_tulajdonságok
+ Új játék
+ Harcos + Item + Játéktér_pont + Karakter + Küldetés + List + Matematikai feladvány + Tárgykeresés + Tolvaj + Varázsló + Játék + Betöltve + Game Over + Happy End + Küldetésválasztás + Küldetésvégrehajtás + EntryPoint + ExitPoint
1.diagram: a teljes rendszer csomagiagramja
Model Specification
Page: 5
GUI: A Windows operációs rendszerekre való grafikai megjelenítést hivatott szolgálni. Az Ablak osztály létrehozza a játék ablakát, alapértelmezett grafikai beállítások mellett. Hogy a felhasználó kezelni tudja a grafikai attribútumokat, ehhez külön kezelő osztályt hoztunk létre, a Grafikai beállítások-at. class GUI Ablak
Grafikai beállítások
2. diagram: A GUI csomag osztálydiagramja
Model Specification
Page: 6
Menü: A Menü csomag felel a menürendszer kezeléséért, ez a felhasználói felület. Ide tartozik az új játék létrehozása, játék mentése, játék betöltése, és a játékbeállítások. class Menü
Új j áték
Mentés
Betöltés
Beállítások
3. diagram: A Menü osztálydiagramja
Model Specification
Page: 7
Játéktér: Osztályai:
Alapvető szerkezeti kérdés a játéktér pontjainak letárolása. Ez egy listában van megoldva, így a játék szabadon továbbfejleszthető, nagyítható lesz. A lista elemeit az Item nevű rekord kezeli, mely így adattagként tartalmaz egy Játéktér_pont-ot. A játéktér pontjai tartalmazzák ugyebár a küldetéseket, mely mindössze egy ősosztály lesz és ennek származtatásából erednek a különféle küldetéstípusok, melyek lehetnek: matematikai feladványok, csaták, esetleg tárgykeresések. A tárgykeresés esetében kénytelen vagyunk visszahivatkozni egy játéktérbeli pontra, hiszen valamelyik másik pont lesz az előfetétele azon küldetés végrehajtásának. A csatában szereplő ellenségnek és a karakternek is egyik meghatározó tulajdonsága a harci képességeinek értéke. Ennek letárolását külön osztály végzi, így amelyik objektumnak csak szüksége van rá, használni tudja és esetenként változtatni is. A karakter osztályból származik a felhasználó számára is egyértelműen észlelhetően a 3 kaszt, mint származtatott osztály, ezek a harcos, tolvaj és varázsló.
Model Specification
Page: 8
class Játéktér Matematikai feladv ány - feladvány: string - megoldás: int
«struct» Item
Játéktér_pont
+ Feladvány megadása() : void + Matematikai feladvány()
- Küldetés: Küldetés - láthatóság: boolean - teljesítettség: boolean + Játéktér_pont() + Pontra_lépés() : void
Tárgykeresés
- data: Játéktér_pont - next: Item*
-next
+ Item(Játéktér_pont*, Item*)
- tárgy helye: Játéktér_pont - tárgy neve: string
-First, Last
+ Tárgykeresés() + Utalás a tárgyra() : void
Csata
Küldetés
«enumeration» Exception
- TP: int - utolsó-e: boolean
EMPTY_LIST
- Ellenség: Harci_tulajdonságok + + + +
Csata() Kamikaze_támadás() : void Kiegyensúlyozott_támadás() : void Védekező_taktika() : void
List - First: Item* - Last: Item*
Karakter
Harci_tulajdonságok -
Ép: Sp: TÉ: VÉ:
+ + + + + +
- Fizikai_tul: Harci_tulajdonságok - Logikai_tul: int - Tárgylista: string
int int int int
+ + + +
+ Harci_tulajdonságok() + Változtatás(int, int, int, int)() : void
Él-e() : boolean Küldetés_végrehajtás() : void Szintlépés() : void Tárgylista_lekérdezés() : string
Harcos
Tolv aj
Varázsló
+ Harcos() + Szintlépés() : void
+ Szintlépés() : void + Tolvaj()
+ Szintlépés() : void + Varázsló()
4. diagram: A játéktér osztálydiagramja.
copy(List&) : void deallocate() : void In(Polygon*) : void isEmpty() : bool ~List() List() List(List&) operator=(List&) : List&
Model Specification
Page: 9
List class Játéktér
List -
First: Item* Last: Item*
+ + + + + +
copy(List&) : void deallocate() : void In(Polygon*) : void isEmpty() : bool ~List() List() List(List&) operator=(List&) : List&
Lista osztály. Connections Connector Aggregation Source -> Destination
Source Public Exception
Target Public List
Aggregation Source -> Destination
Private First, Last Item
Public List
Attributes Attribute
Notes
Notes
Constraints and tags
First Item* Private
Lista első elemére mutató pointer.
Default:
Last Item* Private
Lista utolsó elemére mutató pointer.
Default:
Notes Másoló metódus
Parameters List& [in] l
Operations Method copy() void Private deallocate() void Private In() void Public
Megszüntető metódus.
isEmpty() bool Public ~List() Public List() Public
Üres-e a lista.
Behelyezés a listába
Destruktor. Konstruktor
Polygon* [in] t
Model Specification
Page: 10
Method List() Public
Notes Másoló konstruktor.
Parameters List& [in] l
operator=() List& Public
Egyenlőség operátor.
List& [in] l
Exception class Játéktér
«enumeration» Exception EMPTY_LIST
A listházoz tartozó kivételek osztálya. Connections Connector Aggregation Source -> Destination
Attributes Attribute EMPTY_LIST Public
Source Public Exception
Target Public List
Notes
Notes
Constraints and tags
Üres lista kivétele.
Default:
Item class Játéktér
«struct» Item -
data: Játéktér_pont next: Item*
+
Item(Játéktér_pont*, Item*)
-next
Lista elem rekord. Connections Connector Aggregation Source -> Destination
Source Private Játéktér_pont
Target Public Item
Aggregation Source -> Destination
Private First, Last Item
Public List
Aggregation
Private next
Public
Notes
Model Specification
Connector Source -> Destination
Attributes Attribute
Page: 11
Source Item
Target Item
Notes
Notes
Constraints and tags
data Játéktér_pont Private
a rekord értéke
Default:
next Item* Private
a rekord rákövetkezője
Default:
Notes Konstruktor.
Parameters Játéktér_pont* [in] t Item* [in] x
Operations Method Item() Public
Játéktér_pont class Játéktér
Játéktér_pont -
Küldetés: Küldetés láthatóság: boolean teljesítettség: boolean
+ +
Játéktér_pont() Pontra_lépés() : void
A játéktéren lévő pontokat reprezentáló osztály.
Connections Connector Aggregation Source -> Destination
Source Private Játéktér_pont
Target Public Item
Aggregation Source -> Destination
Public Küldetés
Public Játéktér_pont
Aggregation Source -> Destination
Public Játéktér_pont
Public Tárgykeresés
Sequence pontra lépés Source -> Destination
Public Karakter
Public Játéktér_pont
Sequence küldetés
Public
Public
Notes
Model Specification
Page: 12
Connector meghívása Source -> Destination
Source Játéktér_pont
Target Küldetés
Sequence pontról lelépés Source -> Destination
Public Játéktér_pont
Public Actor1
Attributes Attribute
Notes
Notes
Constraints and tags
Küldetés Küldetés Private
A pont által tartalmazott küldetés.
Default:
láthatóság boolean Private
Képes-e a játékos erre a pontra léni.
Default:
teljesítettség boolean Private
teljesítette-e már a játékos ezt a küldetést.
Default:
Notes Konstruktor
Parameters
Operations Method Játéktér_pont() Public Pontra_lépés() void Public
Adott pontra lépés, azaz a küldetés meghívása.
Küldetés class Játéktér
Küldetés -
TP: int utolsó-e: boolean
A küldetésfajták ősosztálya.
Connections Connector Generalization Source -> Destination
Source Public Csata
Target Public Küldetés
Aggregation Source -> Destination
Public Küldetés
Public Játéktér_pont
Generalization Source -> Destination
Public Tárgykeresés
Public Küldetés
Notes
Model Specification
Page: 13
Connector
Source
Target
Generalization Source -> Destination
Public Matematikai feladvány
Public Küldetés
Association Unspecified
Public Karakter
Public Küldetés
Sequence küldetés meghívása Source -> Destination
Public Játéktér_pont
Public Küldetés
Sequence küldetés sikere Source -> Destination
Public Küldetés
Public Actor1
Notes
Attributes Attribute
Notes
Constraints and tags
TP int Private
Mennyi tapasztalat jár a küldetés végrehajtásáért.
Default:
utolsó-e boolean Private
Végső küldetés-e.
Default:
Matematikai feladvány class Játéktér
Matematikai feladv ány -
feladvány: string megoldás: int
+ +
Feladvány megadása() : void Matematikai feladvány()
A matematikai feladványok osztálya.
Connections Connector Generalization Source -> Destination
Attributes Attribute feladvány string Private
Source Public Matematikai feladvány
Target Public Küldetés
Notes
Notes
Constraints and tags
A feladvány szövege
Default:
Model Specification
Page: 14
Attribute
Notes
Constraints and tags
megoldás int Private
A feladvány megoldása.
Default:
Notes A feladvány feladása a játékosnak.
Parameters
Operations Method Feladvány megadása() void Public Matematikai feladvány() Public
Konstruktor.
Tárgykeresés class Játéktér
Tárgykeresés -
tárgy helye: Játéktér_pont tárgy neve: string
+ +
Tárgykeresés() Utalás a tárgyra() : void
A tárgykeresési küldetések osztálya.
Connections Connector Generalization Source -> Destination
Source Public Tárgykeresés
Target Public Küldetés
Aggregation Source -> Destination
Public Játéktér_pont
Public Tárgykeresés
Attributes Attribute
Notes
Notes
Constraints and tags
tárgy helye Játéktér_pont Private
A tárgy helyét tartalmazó Játéktér_pont
Default:
tárgy neve string Private
A keresett tárgy neve.
Default:
Notes Konstruktor.
Parameters
Operations Method Tárgykeresés() Public
Model Specification
Method Utalás a tárgyra() void Public
Page: 15
Notes A tárgyra utaló rejtvény megadása.
Parameters
Csata class Játéktér
Csata -
Ellenség: Harci_tulajdonságok
+ + + +
Csata() Kamikaze_támadás() : void Kiegyensúlyozott_támadás() : void Védekező_taktika() : void
A csatát tartalmazó küldetések osztálya. Connections Connector Aggregation Source -> Destination
Source Public Harci_tulajdonságok
Target Public Csata
Generalization Source -> Destination
Public Csata
Public Küldetés
Attributes Attribute Ellenség Harci_tulajdonságok Private
Notes
Notes
Constraints and tags
Az ellenség adatait tartalmazó változó.
Default:
Operations Method Csata() Public Kamikaze_támadás() void Public Kiegyensúlyozott_támadás() void Public Védekező_taktika() void Public
Notes Konstruktor Megnövelt Támadó Értékű és Sebzés Pontú támadás, sokkal alacsonyabb Védő Értékért cserébe. Változatlan értékekkel lebonyolított támadás.
Plusz Védő Érték, kisebb Támadó Érték.
Parameters
Model Specification
Page: 16
Karakter class Játéktér
Karakter -
Fizikai_tul: Harci_tulajdonságok Logikai_tul: int Tárgylista: string
+ + + +
Él-e() : boolean Küldetés_végrehajtás() : void Szintlépés() : void Tárgylista_lekérdezés() : string
A játékos karakterét magába foglaló osztály.
Connections Connector Generalization Source -> Destination
Source Public Varázsló
Target Public Karakter
Generalization Source -> Destination
Public Tolvaj
Public Karakter
Generalization Source -> Destination
Public Harcos
Public Karakter
Association Unspecified
Public Karakter
Public Küldetés
Aggregation Source -> Destination
Public Harci_tulajdonságok
Public Karakter
Sequence karakter létrehozása Source -> Destination
Public Actor1
Public Karakter
Sequence pontra lépés Source -> Destination
Public Karakter
Public Játéktér_pont
Sequence karakter lementése Source -> Destination
Public Karakter
Public Actor1
Attributes Attribute Fizikai_tul Harci_tulajdonságok Private
Notes
Notes
Constraints and tags
A karakter fizikai attribútumai.
Default:
Model Specification
Page: 17
Attribute
Notes
Constraints and tags
Logikai_tul int Private
A karakter logikai érzéke.
Default:
Tárgylista string Private
A karakternél lévő tárgyak listája, stringbe tárolva, tárgyak ';'-vel elválasztva.
Default:
Notes A karakter életben van-e.
Parameters
Operations Method Él-e() boolean Public Küldetés_végrehajtás() void Public Szintlépés() void Public Tárgylista_lekérdezés() string Public
Egy küldetés elvállalása (azaz a Játéktér egy pontjára való lépés) Tulajdonságok növekedése, kaszttól függűen. A tárgylistát tartalmazó string lekérdezése.
Harci_tulajdonságok class Játéktér
Harci_tulaj donságok -
Ép: Sp: TÉ: VÉ:
int int int int
+ +
Harci_tulajdonságok() Változtatás(int, int, int, int)() : void
A harci tulajdonságokat letároló osztály. Connections Connector Aggregation Source -> Destination
Source Public Harci_tulajdonságok
Target Public Csata
Aggregation Source -> Destination
Public Harci_tulajdonságok
Public Karakter
Notes
Attributes Attribute
Notes
Ép int Private
Életerő Pont, ennyi Sebzés Pontot bír még ki az Default: objektum.
Constraints and tags
Model Specification
Page: 18
Attribute
Notes
Constraints and tags
Sp int Private
Sebzés Pont, ennyi sebzést képes adni az objektum.
Default:
TÉ int Private
Támadó Érték, ennyire jó a támadásban az objektum.
Default:
VÉ int Private
Védő Érték, ennyire ért a védekezéshez és a támadások elkerüléséhez az objektum.
Default:
Notes Konstruktor.
Parameters
Operations Method Harci_tulajdonságok() Public Változtatás(int, int, int, int)() void Public
Értékek cseréje (szintlépés, életerő vesztés, etc)
Harcos class Játéktér
Harcos + +
Harcos() Szintlépés() : void
Harcos kaszt, nagy TÉ és Sp Connections Connector Source Public Generalization Source -> Destination Harcos
Operations Method Harcos() Public Szintlépés() void Public
Tolvaj class Játéktér
Tolv aj + +
Szintlépés() : void Tolvaj()
Notes Konstruktor Harcos szintlépése.
Target Public Karakter
Notes
Parameters
Model Specification
Page: 19
Tolvaj kaszt, magas VÉ. Connections Connector Generalization Source -> Destination
Operations Method Szintlépés() void Public Tolvaj() Public
Source Public Tolvaj
Target Public Karakter
Notes Szintlépést elvégző metódus.
Notes
Parameters
Konstruktor.
Varázsló class Játéktér
Varázsló + +
Szintlépés() : void Varázsló()
Varázsló kaszt, kiemelkedően magas logika. Connections Connector Generalization Source -> Destination
Operations Method Szintlépés() void Public Varázsló() Public
Source Public Varázsló
Notes Szintlépés a kasztra. Konstruktor.
Target Public Karakter
Notes
Parameters
Model Specification
Page: 20
A játéktér állapotai: Az új játék indítása vagy a mentett játák betöltése után a játéktér a Betöltve állapotba kerül. Ekkor van aktívan használva, innen egészen a kilépési pontig aktív marad. Ezután lép át a Küldetésválasztás állapotába, mikor a felhasználó küldetést választ, amit azután megpróbál végrehajtani a Küldetésvégrehajtás állapotában. Innen újabb küldetésekkel próbálkozhat, vagy ha az utolsó küldetést teljesítette (ez szoros összefüggésben áll a Küldetés osztály utolsó-e adattagjának értékével) akkor a Happy End állapotba kerülve befejeződik a játék, illetve ha a karakter meghal, vagy a felhasználó kilép a játákból a Game Over állapotba kerül a játéktér. A Happy End és a Game Over állapotokból ezután már nincs visszalépés, a játék befejeződött a Játéktér az ExitPointjához érkezik. stm Játéktér Küldetésv álasztás
Betöltv e Indítás EntryPoint Happy End
[utolsó küldetés teljesítve]
Küldetésv égrehaj tás
ExitPoint Game Ov er
[karakter meghalt V kilépés]
5. diagram: a Játéktér állapotdiagramja
EntryPoint Belépési pont. Connections Connector Transition Indítás Source -> Destination
Betöltve A játék be lett töltve.
Source Public EntryPoint
Target Public Betöltve
Notes
Model Specification
Page: 21
Connections Connector Transition Source -> Destination
Source Public Betöltve
Target Public Küldetésválasztás
Transition Indítás Source -> Destination
Public EntryPoint
Public Betöltve
Notes
Küldetésválasztás A játék a küldetés kiválasztási állapotában van. Connections Connector Transition Source -> Destination
Source Public Betöltve
Target Public Küldetésválasztás
Transition Source -> Destination
Public Küldetésvégrehajtás
Public Küldetésválasztás
Transition Source -> Destination
Public Küldetésválasztás
Public Küldetésvégrehajtás
Notes
Küldetésvégrehajtás A játékos éppen a küldetést próbálja végrehajtani egy adott játéktérbeli ponton. Connections Connector Transition Source -> Destination
Source Public Küldetésvégrehajtás
Target Public Küldetésválasztás
Transition Source -> Destination
Public Küldetésvégrehajtás
Public Game Over
Transition Source -> Destination
Public Küldetésválasztás
Public Küldetésvégrehajtás
Transition Source -> Destination
Public Küldetésvégrehajtás
Public Happy End
Connections Connector Transition Source -> Destination
Source Public Küldetésvégrehajtás
Target Public Game Over
Transition Source -> Destination
Public Game Over
Public ExitPoint
Notes
Game Over Játék sikertelen teljesítése.
Notes
Model Specification
Connector
Page: 22
Source
Target
Notes
Connections Connector Transition Source -> Destination
Source Public Happy End
Target Public ExitPoint
Notes
Transition Source -> Destination
Public Küldetésvégrehajtás
Public Happy End
Kilépési pont. Connections Connector Transition Source -> Destination
Source Public Happy End
Target Public ExitPoint
Transition Source -> Destination
Public Game Over
Public ExitPoint
Happy End Játék sikeres teljesítése.
ExitPoint Notes
Model Specification
Page: 23
A játéktér szekvenciadiagramja: A szekvenciális elemzéshez az egyetlen új szereplő az eddigiekhez képest maga a felhasználó, akit Actor1-nek hívunk. Ő felel a játék elindításáért, mikor is új karaktert hoz létre. Ekkor a karakter osztály is aktív lesz, majd kezdetét veszi maga a játék magja, egy ciklus, mely egészen a játék befejeztéig ismtélődik. A ciklus magja a karakter egy Játéktér_pontra lépésével kezdődik, mely pont így meghív egy Küldetést, majd a Küldetés visszatér valamilyen eredménnyel a felhasználó számára. A ciklus lefutása után a Játéktér_pont inaktívvá válik, mivel leléptek róla, a Karakter elmentődik a program mappájába, a későbbi adatlekérés miatt, majd a játékos kilép a játékból.
sd Játéktér Karakter
Játéktér_pont
Küldetés
Actor1 karakter létrehozása()
loop Játék
pontra lépés()
[Élő karakter & utolsó küldetés teljesítetlen] küldetés meghívása()
küldetés sikere()
pontról lelépés()
karakter lementése()
játék vége()
6. diagram: A Játéktér szekvenciadiagramja
Model Specification
Page: 24
Actor1 A felhasználó, jelen esetben a játékos. Connections Connector Sequence karakter létrehozása Source -> Destination
Source Public Actor1
Target Public Karakter
Sequence küldetés sikere Source -> Destination
Public Küldetés
Public Actor1
Sequence pontról lelépés Source -> Destination
Public Játéktér_pont
Public Actor1
Sequence karakter lementése Source -> Destination
Public Karakter
Public Actor1
Sequence játék vége Source -> Destination
Public Actor1
Public Actor1
Notes