Laureline's Wiki

Laureline's Wiki

Ars Tactica: Rapport Intermédiaire - Modèle de Domaine

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.