Ajout diagramme classes
This commit is contained in:
parent
dc5d9b2f21
commit
5349e2690c
Binary file not shown.
|
@ -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}
|
|
@ -1 +1,58 @@
|
||||||
\chapter{Analyse du projet}
|
\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}
|
||||||
|
|
|
@ -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
|
afin de s'informer de l'avancement et réfléchir à des solutions lorsqu'un
|
||||||
problème était rencontré.
|
problème était rencontré.
|
||||||
|
|
||||||
\begin{landscape}
|
\newgeometry{left=1cm,top=2cm,bottom=2cm,right=1cm}
|
||||||
\begin{figure}[p!]
|
\begin{figure}[p!]
|
||||||
\scalebox{0.56}{\input{figures/organisation-gantt.tex}}
|
\input{figures/organisation-gantt.tex}
|
||||||
\caption{
|
\caption{
|
||||||
Diagramme de la répartition des tâches. En vert, les tâches
|
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~;
|
affectées à Maëlle~; en bleu, les tâches affectées à Rémi~;
|
||||||
en rouge, les tâches affectées à Mattéo~; en noir, les
|
en rouge, les tâches affectées à Mattéo~; en gris, les
|
||||||
tâches résolues en groupe
|
tâches résolues en groupe
|
||||||
}
|
}
|
||||||
\label{fig:organisation-gantt}
|
\label{fig:organisation-gantt}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
\end{landscape}
|
\restoregeometry
|
||||||
|
|
||||||
\section{Outils de développement}
|
\section{Outils de développement}
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -1,20 +1,31 @@
|
||||||
\documentclass{report}
|
\documentclass{report}
|
||||||
|
|
||||||
% Packages basiques
|
|
||||||
\usepackage[utf8]{inputenc}
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage{lmodern}
|
|
||||||
\usepackage[french]{babel}
|
|
||||||
\usepackage{hyperref}
|
|
||||||
|
|
||||||
% Graphismes
|
% Graphismes
|
||||||
\usepackage[pdftex]{graphicx}
|
\usepackage[pdftex]{graphicx}
|
||||||
\usepackage{lmodern}
|
\usepackage{lmodern}
|
||||||
\usepackage{tikz}
|
\usepackage{tikz}
|
||||||
\usepackage{gantt}
|
\usepackage{tikz-uml}
|
||||||
|
\usepackage{pgfgantt}
|
||||||
\usepackage{lscape}
|
\usepackage{lscape}
|
||||||
\usepackage{rotating}
|
\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
|
% Noms personnalisés
|
||||||
\addto{\captionsfrench}{\renewcommand{\bibname}{Webographie}}
|
\addto{\captionsfrench}{\renewcommand{\bibname}{Webographie}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue