Ajout diagramme classes

This commit is contained in:
Mattéo Delabre 2016-04-18 21:07:06 +02:00
parent dc5d9b2f21
commit 5349e2690c
6 changed files with 296 additions and 13 deletions

Binary file not shown.

View File

@ -0,0 +1,215 @@
\begin{tikzpicture}
%%%%%%%%%%%%%%%%%%%%%%%
%% CLASSES GÉNÉRALES %%
%%%%%%%%%%%%%%%%%%%%%%%
% Spécifications du gestionnaire de jeu
\umlclass{Manager}{
window : fenêtre\\
resource\_manager : \texttt{ResourceManager}\\
clock : horloge\\
states : pile de \texttt{State}
}{
start() : vide\\
pushState(state : \texttt{State}) : vide\\
popState() : vide
}
% Spécifications du gestionnaire de ressources
\umlclass[x=4,y=-4.5]{ResourceManager}{
textures : dictionnaire \texttt{string -> texture}\\
fonts : dictionnaire \texttt{string -> police}
music : musique
}{
getTexture(name : string) : texture\\
getFont(name : string) : texture\\
getLevelPath(name : string) : string\\
playMusic(name : string) : vide\\
stopMusic() : vide
}
\umluniassoc{Manager}{ResourceManager}
% Spécfications d'un état de jeu
\umlabstract[x=-4,y=-4.5]{State}{
manager : \texttt{Manager}
}{
\umlvirt{enable() : vide}\\
\umlvirt{processEvent(event : événement) : vide}\\
\umlvirt{frame() : vide}
}
\umlunicompo{Manager}{State}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ÉTATS DE JEU PRINCIPAUX %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Spécifications de l'état de jeu abstrait "niveau"
% qui est une collection d'objets
\umlabstract[y=-11]{Level}{
name : string\\
background : sprite\\
music : string\\
camera : vue\\
gravity\_direction : direction\\
total\_time : entier\\
players : \texttt{[Player]}\\
objects : \texttt{[Object]}\\
zone : \texttt{[vecteur]}
}{
enable() : vide\\
processEvent(event : événement) : vide\\
load(file : string) : vide\\
save(file : string) : vide\\
\umlvirt{frame() : vide}\\
draw() : vide\\
addObject(object : \texttt{Object})\\
removeObject(object : \texttt{Object})
}
\umlinherit{State}{Level}
% Spécifications de l'état de jeu "éditeur" qui permet
% de modifier des niveaux de jeu
\umlclass[x=-3.5,y=-18]{Editor}{
selection : \texttt{[Object]}
}{
enable() : vide\\
processEvent(event : événement) : vide\\
frame() : vide\\
select(objet: \texttt{Object}) : vide\\
selectAll() : vide\\
clearSelection() : vide\\
}
\umlinherit{Level}{Editor}
% Spécifications de l'état de jeu "jeu" qui permet
% de jouer aux niveaux créés
\umlclass[x=3.5,y=-18]{Game}{
mode : mode\\
next\_frame\_time : temps\\
pending\_kill : \texttt{[Object]}\\
time\_left : flottant
}{
enable() : vide\\
processEvent(event : événement) : vide\\
frame() : vide\\
update() : vide\\
kill(objet : \texttt{Object}) : vide
}
\umlinherit{Level}{Game}
% Spécifications des objets du jeu
\umlabstract[y=-25]{Object}{
acceleration : vecteur\\
velocity : vecteur\\
position : vecteur\\
mass : flottant\\
charge : flottant\\
restitution : flottant\\
static\_friction : flottant\\
dynamic\_friction : flottant\\
layer : entier
}{
\umlvirt{getForces(game : \texttt{Game}) : vecteur}\\
\umlvirt{activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur}\\
\umlvirt{getAABB() : boîte}\\
\umlvirt{getRadius() : flottant}\\
\umlvirt{draw(level : \texttt{Level}) : vide}\\
updateVelocity(game : \texttt{Game}) : vide\\
updatePosition() : vide\\
solveCollision(game : \texttt{Game}, object : \texttt{Object}, normal : vecteur) : vide\\
positionalCorrection(object : \texttt{Object}, normal : vecteur, depth : flottant) : vide\\
}
\umlunicompo{Level}{Object}
% Spécifications de l'objet "joueur"
\umlclass[x=-4,y=-31.5]{Player}{
player\_number : entier non-signé
}{
getForces(game : \texttt{Game}) : vecteur\\
draw(level : \texttt{Level}) : vide\\
activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur\\
getAABB() : boîte\\
getRadius() : flottant\\
}
\umlinherit{Object}{Player}
% Spécifications de l'objet "bloc"
\umlclass[x=4,y=-31.5]{Block}{}{
draw(level : \texttt{Level}) : vide\\
prepareDraw(resources : \texttt{ResourceManager}) : vide\\
activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur\\
getAABB() : boîte\\
getRadius() : flottant\\
}
\umlinherit{Object}{Block}
% Spécifications de l'objet "bloc de fin" permettant
% quand il est activé de terminer le niveau
\umlclass[x=0,y=-35]{FinishBlock}{}{
prepareDraw(resources : \texttt{ResourceManager}) : vide\\
activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur
}
\umlinherit{Block}{FinishBlock}
% Spécifications de l'objet "bloc de gravité" permettant
% quand il est activé de réorienter la gravité du niveau
\umlclass[x=8,y=-35]{GravityBlock}{
gravity\_direction : direction
}{
prepareDraw(resources : \texttt{ResourceManager}) : vide\\
activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur
}
\umlinherit{Block}{GravityBlock}
% Spécifications de l'objet "bloc tueur" permettant
% quand il est activé par un joueur de le tuer
\umlclass[x=0,y=-37.5]{KillBlock}{}{
prepareDraw(resources : \texttt{ResourceManager}) : vide\\
activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur
}
\umlinherit{Block}{KillBlock}
% Spécifications de l'objet "bloc d'échange" permettant
% quand il est activé par un joueur d'échanger sa charge
\umlclass[x=8,y=-37.5]{SwitchBlock}{}{
prepareDraw(resources : \texttt{ResourceManager}) : vide\\
activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur
}
\umlinherit{Block}{SwitchBlock}
%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ÉTATS DE JEU DU MENU %%
%%%%%%%%%%%%%%%%%%%%%%%%%%
% Spécifications de l'état de jeu "menu"
% qui est le premier état au démarrage et permet
% d'afficher les différents choix de jeu
\umlclass[x=-7,y=-11]{Menu}{
background : sprite\\
choices : \texttt{[string]}\\
actions : \texttt{[callback]}\\
selection : entier non-signé
}{
loadMainMenu() : vide\\
loadLevelMenu() : vide\\
loadEditorMenu() : vide\\
launchGame(path : string) : vide\\
launchEditor(path : string) : vide\\
launchRules() : vide\\
quit() : vide\\
enable() : vide\\
processEvent(event : événement) : vide\\
frame() : vide
}
\umlinherit{State}{Menu}
% Spécifications de l'état de jeu "règles" qui
% affiche l'image décrivant les règles
\umlclass[x=-14,y=-11]{Rules}{
background : sprite\\
}{
processEvent(event : événement) : vide\\
frame() : vide
}
\umlinherit{State}{Rules}
\end{tikzpicture}

View File

@ -1 +1,58 @@
\chapter{Analyse du projet}
\section{Découpage du projet}
Le jeu est constitué d'une suite de niveaux organisés de manière
semblable à ceux d'un jeu de plateformes. Ces niveaux contiennent des entités.
Les entités du jeu sont multiples : blocs, blocs spéciaux, joueurs,
éléments de décor. Ces entités -- ou objets, interagissent entre eux
par un certain nombre de phénomènes physiques « naturels ». Pour répondre
à ce besoin, un moteur physique est nécessaire. Le moteur physique est
chargé de gérer les forces s'appliquant aux objets du jeu, de répondre
aux collisions entre objets et de faire évoluer les objets en conséquence
des forces qui leur sont appliquées.
Plusieurs moteurs physiques en 2D existent déjà dans le langage que nous
avons choisi, notamment Box2D. Nous avons choisi d'implémenter le moteur
physique du jeu par nous-mêmes pour répondre aux besoins particuliers
(notamment la force d'attraction) et car cela nous permet de mettre en
pratique les savoirs acquis au premier semestre dans le module
de physique générale.
Les niveaux du jeu sont constitués de ces entités et d'autres
métadonnées. Pour pouvoir éditer les niveaux, les sauvegarder et
y rejouer plus tard, il est nécessaire de pouvoir les stocker
en dehors de la mémoire. Nous avons pour ce faire choisi de définir
un format de fichier binaire permettant leur stockage sur le disque.
Des fonctions pour coder et décoder ce format devront être écrites.
Skizzle propose différents états de jeu, notamment, on peut à tout moment
se trouver dans l'éditeur, dans le jeu en lui-même ou sur la vue des règles.
Pour pouvoir accéder à ces états, nous devons créer un menu. L'ensemble
des états du jeu doit être abstrait pour pouvoir être géré dans la classe
principale. Certains états du jeu proposeront des éléments interactifs
(boutons, barres d'outils, zones de texte) qui doivent être implémentés.
Enfin, les différents objets du jeu sont représentés à l'écran en
dessinant des textures. Nous avons également choisi d'ajouter des musiques
au jeu pour le rendre plus convivial. D'autres éléments graphiques doivent
être créés, par exemple le fond du menu. Tous ces éléments sont regroupés
dans l'univers graphique du jeu.
\section{Découpage du code}
\begin{figure}[p!]
\scalebox{0.56}{\input{figures/analyse-uml.tex}}
\caption{
Diagramme de la répartition des tâches. En vert, les tâches
affectées à Maëlle~; en cyan, les tâches affectées à Rémi~;
en rouge, les tâches affectées à Mattéo~; en noir, les
tâches résolues en groupe
}
\label{fig:analyse-uml}
\end{figure}
\subsection{Moteur physique}
\subsection{Niveaux}
\subsection{Interface}

View File

@ -16,18 +16,18 @@ Tout au long de la réalisation du projet, nous communiquions par Skype
afin de s'informer de l'avancement et réfléchir à des solutions lorsqu'un
problème était rencontré.
\begin{landscape}
\newgeometry{left=1cm,top=2cm,bottom=2cm,right=1cm}
\begin{figure}[p!]
\scalebox{0.56}{\input{figures/organisation-gantt.tex}}
\input{figures/organisation-gantt.tex}
\caption{
Diagramme de la répartition des tâches. En vert, les tâches
affectées à Maëlle~; en cyan, les tâches affectées à Rémi~;
en rouge, les tâches affectées à Mattéo~; en noir, les
affectées à Maëlle~; en bleu, les tâches affectées à Rémi~;
en rouge, les tâches affectées à Mattéo~; en gris, les
tâches résolues en groupe
}
\label{fig:organisation-gantt}
\end{figure}
\end{landscape}
\restoregeometry
\section{Outils de développement}

View File

@ -1,20 +1,31 @@
\documentclass{report}
% Packages basiques
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage{hyperref}
% Graphismes
\usepackage[pdftex]{graphicx}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{gantt}
\usepackage{tikz-uml}
\usepackage{pgfgantt}
\usepackage{lscape}
\usepackage{rotating}
% Couleurs personnalisées
\definecolor{matred}{RGB}{239,83,80}
\definecolor{matgreen}{RGB}{156,204,101}
\definecolor{matblue}{RGB}{41,182,246}
\definecolor{matyellow}{RGB}{255,235,59}
\definecolor{matblack}{RGB}{33,33,33}
\definecolor{matgray}{RGB}{224,224,224}
\definecolor{matbrown}{RGB}{78,52,46}
% Packages basiques
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{geometry}
\usepackage[french]{babel}
\usepackage{hyperref}
% Noms personnalisés
\addto{\captionsfrench}{\renewcommand{\bibname}{Webographie}}