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} | ||||
| 
 | ||||
| \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 | ||||
| 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} | ||||
| 
 | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							|  | @ -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}} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue