A Funkcionális modell tartalmazza a rendszerben zajló legfontosabb feldolgozási lépéseket, az egyes tevékenységek között szükséges adat áramlásokat.
Regisztráció:
A RegistrationController -ben megadjuk a megfelelő adatokat a newUser funkcióban, Name,BirthDay,Username,Password,Email, majd az osztály ezt átadja a DBContext-nek ami a UserUnitOfWork segítségével lementi ezt a felhasználót ezekkel az adatokkal az adatbázisba.
Login:
A Login Controller -ben megadjuk a megfelelő adatokat a loginUser funkcióban, Username, Password, majd az osztály ezt a felhasználót átadja a DbContext-nek ami a UserUnitOfWork segítségével kikeresi ezt az adatbázisból, ha talál ilyet belépteti a felhasználót a főoldalra, ha nem akkor értesíti a felhasználót, hogy az adatok nem jók.
Shop:
A MainMenuViewController segítségével megnyitjuk a shop felületét, ahol a ShopControllerben szereplő funkciókat tudjuk használni. Ha decket szeretnénk vásárolni akkor a buyDeck funkciót használjuk , ha pedig pénzt szeretnénk vásárolni akkor pedig a buygameCurrency-t, mindkettő használt esetén a használat után a DbContect a ShopUnitOfWork segítségével kommunikál az adatbázissal. Deck vásárlása esetén előbb lekérdezi a get-tel a jelenlegi pénzünket, majd ha van elegendő akkor elvégzi a buyDeck funckiót, ha nincs elég pénzünk és szeretnénk venni akkor a buyGameCurrency lép érvénybe, befejezéskor a ShopUnitOfWork frissíti a pénzünket az adatbázisban.
Play:
A MainMenuViewController play esetén továbbnavigál minket a PlayController-re, ami betölti a PlayGroundViewController-t,ez használja a User-t és a Level -t a felhasználó és a szint megjelenítésére. Ha lapot szertnénk húzni akkor a Dealer osztályt használjuk, amely először a shuffleDeck funkcióval randomizálja a pakliban lévő kártyákat, majd meghívja a HandControllert- amely a handCounter-rel számolj a kezünkben lévő lapokat, mivel van limit a kézben tartható lapokra ezért csak akkor tudjuk a Dealer osztály getCard funkcióját használni ha a handCounter még nem érte el a limitet. Húzás után egy EffectCardObject típusú lapot kapunk a kezünkbe. A pályán lévő lapokat az OnGroundCardObject-tel érjük el, itt két típusú lap érhető el a GroundCardObject és az AirCardObject.
Támadás esetén az osztályok a getCardAttackPower alapján sebzik az ellenfél lapjait, védekezés esetén pedig a getCardHP által védekeznek, ha valamelyik kártyának 0 alá megy a HealtPointja, itt a DestrocedCardObject lép érvénybe, ami az isDestroyed funkcióval vizsgálja azt, hogy egy kártyát már elpusztítottak-e.
A kézből való kártyahasználatnál egy EffectCardObject típusú kártyát használunk, itt a getEffect funkció lép érvénybe ami a kijelölt kártya adatait módosítja a paraméterek alapján
Az összes kártyának a leírását a CardDescriptionController vezérli, amelyben a getCardName a kártya nevének kiírására és a getDescription a kártya tulajdonságainak és leírásának kiírására használatos.
Options:
A Beállítások megjelenítéséért az OptionsViewController felelős, itt több féle beállítást találunk, ha a hangot szeretnénk állítani akkor azt a SoundManager segítségével tudjuk megtenni, ahol a hangerő szabályozásánál a changeVolume funkciót használjuk, a zenék beállításánál pedig a changeMusic funkciót.
Ha a felbontást szeretnénk állítani a játékban akkor az OptionsViewController a DisplayManager-t használja, ahol a felbontás állításánál a changeResolution funckió lép érvénybe, a teljes képernyős mód állításánál pedig a fullscreen funckió.
A felhasználói fiók módosításakor a UserDataManager-t használjuk, Név változtatáskor a setName funkció, Jelszó változtatáskor a setPassword funkció, profilkép cserekor pedig a setProfilePic funkció hívódik meg. A UserDataManager változtatáskor a DbContectet ami pedig a UserUnitOfWorkot használja az adatbázisba való változtatásra és mentésre.
A Beállításokban lehetőségünk van Paklik készítésére is, amit a Deck osztállyal tudunk megtenni. Pakli létrehozásakor a setDeck funkciót használjuk, pakli törlésekor a destroyDeck funkciót. Már meglévő pakli változtatás esetén először a CardUnitOfWork segítségével kiszedjük az adatbázisból a már meglévő deckben lévő kártyákat, és úgy változtatunk rajta. Változtatások után a DbContect a CardUnitOfWork segítségével meni az adatbázisba a paklikban lévő változtatásokat.
3.3 Funkcionális modell
A Funkcionális modell tartalmazza a rendszerben zajló legfontosabb feldolgozási lépéseket, az egyes tevékenységek között szükséges adat áramlásokat.
Regisztráció:
A RegistrationController -ben megadjuk a megfelelő adatokat a newUser funkcióban, Name,BirthDay,Username,Password,Email, majd az osztály ezt átadja a DBContext-nek ami a UserUnitOfWork segítségével lementi ezt a felhasználót ezekkel az adatokkal az adatbázisba.
Login: A Login Controller -ben megadjuk a megfelelő adatokat a loginUser funkcióban, Username, Password, majd az osztály ezt a felhasználót átadja a DbContext-nek ami a UserUnitOfWork segítségével kikeresi ezt az adatbázisból, ha talál ilyet belépteti a felhasználót a főoldalra, ha nem akkor értesíti a felhasználót, hogy az adatok nem jók.
Shop:
A MainMenuViewController segítségével megnyitjuk a shop felületét, ahol a ShopControllerben szereplő funkciókat tudjuk használni. Ha decket szeretnénk vásárolni akkor a buyDeck funkciót használjuk , ha pedig pénzt szeretnénk vásárolni akkor pedig a buygameCurrency-t, mindkettő használt esetén a használat után a DbContect a ShopUnitOfWork segítségével kommunikál az adatbázissal. Deck vásárlása esetén előbb lekérdezi a get-tel a jelenlegi pénzünket, majd ha van elegendő akkor elvégzi a buyDeck funckiót, ha nincs elég pénzünk és szeretnénk venni akkor a buyGameCurrency lép érvénybe, befejezéskor a ShopUnitOfWork frissíti a pénzünket az adatbázisban.
Play:
A MainMenuViewController play esetén továbbnavigál minket a PlayController-re, ami betölti a PlayGroundViewController-t,ez használja a User-t és a Level -t a felhasználó és a szint megjelenítésére. Ha lapot szertnénk húzni akkor a Dealer osztályt használjuk, amely először a shuffleDeck funkcióval randomizálja a pakliban lévő kártyákat, majd meghívja a HandControllert- amely a handCounter-rel számolj a kezünkben lévő lapokat, mivel van limit a kézben tartható lapokra ezért csak akkor tudjuk a Dealer osztály getCard funkcióját használni ha a handCounter még nem érte el a limitet. Húzás után egy EffectCardObject típusú lapot kapunk a kezünkbe. A pályán lévő lapokat az OnGroundCardObject-tel érjük el, itt két típusú lap érhető el a GroundCardObject és az AirCardObject. Támadás esetén az osztályok a getCardAttackPower alapján sebzik az ellenfél lapjait, védekezés esetén pedig a getCardHP által védekeznek, ha valamelyik kártyának 0 alá megy a HealtPointja, itt a DestrocedCardObject lép érvénybe, ami az isDestroyed funkcióval vizsgálja azt, hogy egy kártyát már elpusztítottak-e. A kézből való kártyahasználatnál egy EffectCardObject típusú kártyát használunk, itt a getEffect funkció lép érvénybe ami a kijelölt kártya adatait módosítja a paraméterek alapján Az összes kártyának a leírását a CardDescriptionController vezérli, amelyben a getCardName a kártya nevének kiírására és a getDescription a kártya tulajdonságainak és leírásának kiírására használatos.
Options:
A Beállítások megjelenítéséért az OptionsViewController felelős, itt több féle beállítást találunk, ha a hangot szeretnénk állítani akkor azt a SoundManager segítségével tudjuk megtenni, ahol a hangerő szabályozásánál a changeVolume funkciót használjuk, a zenék beállításánál pedig a changeMusic funkciót. Ha a felbontást szeretnénk állítani a játékban akkor az OptionsViewController a DisplayManager-t használja, ahol a felbontás állításánál a changeResolution funckió lép érvénybe, a teljes képernyős mód állításánál pedig a fullscreen funckió. A felhasználói fiók módosításakor a UserDataManager-t használjuk, Név változtatáskor a setName funkció, Jelszó változtatáskor a setPassword funkció, profilkép cserekor pedig a setProfilePic funkció hívódik meg. A UserDataManager változtatáskor a DbContectet ami pedig a UserUnitOfWorkot használja az adatbázisba való változtatásra és mentésre. A Beállításokban lehetőségünk van Paklik készítésére is, amit a Deck osztállyal tudunk megtenni. Pakli létrehozásakor a setDeck funkciót használjuk, pakli törlésekor a destroyDeck funkciót. Már meglévő pakli változtatás esetén először a CardUnitOfWork segítségével kiszedjük az adatbázisból a már meglévő deckben lévő kártyákat, és úgy változtatunk rajta. Változtatások után a DbContect a CardUnitOfWork segítségével meni az adatbázisba a paklikban lévő változtatásokat.