You are here: Links of Interest » HEIG-VD » [GEN] Génie Logiciel » Ars Tactica: Rapport Intermédiaire » Ars Tactica: Rapport Intermédiaire - Modèle de Domaine
Ars Tactica: Rapport Intermédiaire - Modèle de Domaine
Table of Contents
Ars Tactica: Rapport Intermédiaire - Modèle de Domaine
Jeu
<uml title=“Game Domain Model”> hide empty members
class Partie class Carte class Acteur class Bâtiment class Unité class Joueur class Equipe
Acteur <|– Bâtiment Acteur <|– Unité
Partie *– “*” Carte Partie *- “*” Equipe Equipe *– “*” Joueur
Joueur *- “*” Acteur
</uml>
Client
<uml title=“Client Domain Model”> hide empty fields hide empty methods hide class circle hide interface circle
package “Networking” { interface NetworkService
LoginService ←- NetworkService LobbyService ←- NetworkService GameService ←- NetworkService
NetworkService <.d.> Netty
class Netty «(L,lightblue)» }
package “Display” { LoginScreen —> LoginService
LoginScreen <.r.> MenuScreen
MenuScreen —> LobbyService
MenuScreen <.r.> GameScreen
}
GameScreen –> Interactor Interactor –> GameState Interactor —> GameService
</uml>
Notes
Ecrans
libGDX permet la gestion des écrans (Screen
). Un écran occupe toute la surface de rendu
et permet de rapidement changer la présentation.
Chaque écran agit à la fois comme un Contrôlleur et une Vue. Il est chargé d'afficher sa Vue dans sa méthode render()
.
Services Réseau
Les services réseau servent à abstraire l'interaction avec le réseau.
Interacteur
Permet d'abstraire les interactions avec l'état de jeu à travers le réseau. Il notifie des modifications effectuées à l'état aux observateurs pour qu'ils puissent les afficher.
Serveur
<uml title=“Server Domain Model”> hide empty members hide empty fields hide class circle hide interface circle
package “Networking” { class Netty class NetworkHandler } class GameHandler class LoginHandler class MatchmakingHandler package “Login” { class User «Model» class Session class SessionManager «Singleton» } package “Matchmaking” { class MatchmakingManager «Service» class Queue } package “Game” { class GameSession class GameState class StateHandler class TurnHandler class ActionFactory }
SessionManager *– “*” Session Session *- User
Netty <..> NetworkHandler
note as N1 Packets are dispatched to the correct handler as defined by the user session endnote
NetworkHandler ..> N1 Session .r.> N1 N1 ..> MatchmakingHandler N1 ..> LoginHandler N1 ..> GameHandler
Session <.. LoginHandler: creates
MatchmakingHandler — MatchmakingManager
MatchmakingManager – Queue
GameHandler – GameSession
GameSession *– TurnHandler GameSession *–o StateHandler GameSession *– GameState StateHandler *– ActionFactory
</uml>
Notes
Session (de Connexion)
Une session est crée à l'établissement d'une connexion au serveur et persiste jusqu'à la déconnexion du client. La session permet de gérer l'état d'authentification ainsi que la cible des paquets.
Matchmaking
Le matchmaking s'effectue en plaçant les sessions dans des files d'attente. Une fois qu'une file d'attente à atteint le nombre requis de joueurs en fonction de sa configuration. Une session de jeu est crée en y ajoutant les joueurs.
Session de Jeu
Lorsqu'une session de jeu est crée elle est initialisée avec ses paramètres de jeu (joueurs, carte, …). Elle transmet ensuite l'état de jeu initial les joueurs du début de partie et les notifie qu'elle est prête à recevoir les interactions des joueurs.
- GameState: Contient l'état de la partie. Toutes les unités en jeu ainsi qu'une représentation de la carte.
- StateHandler: Effectue les opérations de modification sur le GameState et garde trace des changements pour pouvoir effectuer les mises à jour différentielles.
- ActionFactor: Mécanisme générique de gestion des actions sur l'état de jeu.
- TurnHandler: Gère le turn order pour la partie.