Rapport final : fusion des structures

This commit is contained in:
Mattéo Delabre 2016-04-18 19:36:54 +02:00
parent a79f1e99e3
commit 76f84b55b1
10 changed files with 179 additions and 203 deletions

View File

@ -1,199 +0,0 @@
\documentclass[12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage[frenchb]{babel}
\usepackage[pdftex]{graphicx}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{gantt}
\usepackage{pdflscape}
\setlength{\parskip}{0.3cm}
\newcommand{\hsp}{\hspace{20pt}}
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}}
\begin{document}
\begin{titlepage}
\begin{sffamily}
\begin{center}
% Upper part of the page. The '~' is needed because \\
% only works if a paragraph has started.
\includegraphics[scale=0.4]{logo_fds.jpg}~
\\[1cm]
\includegraphics[scale=0.5]{img1.png}~\\[1.5cm]
\textsc{\Large Rapport de projet}\\[1.5cm]
\textsc{\Large L1 - CMI Spécialité Informatique}\\[1.5cm]
% Title
\HRule \\[0.4cm]
{ \huge \bfseries Skizzle\\[0.4cm] }
\HRule \\[2cm]
% Author and supervisor
\begin{minipage}{0.4\textwidth}
\begin{flushleft} \large
Maëlle \textsc{BEURET}\\
Mattéo \textsc{DELABRE}\\
Rémi \textsc{CERES}\\
\end{flushleft}
\end{minipage}
\begin{minipage}{0.4\textwidth}
\begin{flushright} \large
\emph{Année :} \textsc{2015-2016}\\
Soutenu le : \textsc{jj/mm/aaaa}
\end{flushright}
\end{minipage}
\includegraphics[scale=0.5]{logo_CMI.jpg}~
\includegraphics[scale=0.5]{logo_figure.jpg}~
\vfill
\end{center}
\end{sffamily}
\end{titlepage}
\renewcommand{\contentsname}{Sommaire}
\tableofcontents
\chapter{Introduction}
\section{Généralités}
\section{Sujet}
\section{Cahier des charges}
\chapter{Organisation du projet}
\section{Organisation du travail}
Chaque membre du groupe a travaillé en autonomie. Les réunions lors des séances prévues étaient consacrées aux explications sur le travail de chacun ainsi qu'à la répartition des tâches pour la semaine suivante.
Chacun d'entre nous était chargé de tâches spécifiques (voir figure 1). Certaines parties du développement nécessitaient plusieurs personne et étaient ainsi partagées entre certains membres du groupe. La conception et les tests des niveaux, le fond des menus ainsi que les décors furent réalisés par Rémi et Maëlle, et la gestion de projet par tout le groupe.
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}
\scalebox{0.56}{
\begin{gantt}{32}{32}
\begin{ganttitle}
\titleelement{Semaine 1 : 04/03 - 10/03}{4}
\titleelement{Semaine 2 : 11/03 - 17/03}{4}
\titleelement{Semaine 3 : 18/03 - 24/03}{4}
\titleelement{Semaine 4 : 25/03 - 31/03}{4}
\titleelement{Semaine 5 : 01/04 - 08/04}{4}
\titleelement{Semaine 6 : 09/04 - 15/04}{4}
\titleelement{Semaine 7 : 16/04 - 22/04}{4}
\titleelement{Semaine 8 : 23/04 - 29/04}{4}
\end{ganttitle}
\ganttgroup{Moteur physique}{0}{14}
\ganttbar[color=red]{Organisation des classes}{0}{6}
\ganttbar[color=green]{Gestion de l'affichage}{0}{8}
\ganttbar[color=red]{Implémentation des forces}{0}{8}
\ganttbar[color=red]{Gestion des collisions}{4}{10}
\ganttbar[color=cyan]{Tests du moteur}{4}{10}
\ganttgroup{Niveaux du jeu}{6}{26}
\ganttbar[color=cyan]{Définition du format de fichier}{6}{2}
\ganttbar[color=red]{Lecture et écriture du format}{12}{4}
\ganttbar[color=red]{Création de l'éditeur}{16}{5}
\ganttbar[color=red]{Blocs spécialisés}{18}{3}
\ganttbar[color=cyan]{Niveau de test}{19}{2}
\ganttbar{Conception des niveaux}{19}{13}
\ganttbar{Tests des niveaux}{19}{13}
\ganttgroup{Interface du jeu}{10}{22}
\ganttbar[color=red]{Découpage en états de jeu}{10}{4}
\ganttbar[color=green]{Création du menu}{12}{6}
\ganttbar[color=red]{Interface de l'éditeur}{16}{5}
\ganttbar[color=red]{Menus gagné, perdu, pause}{24}{8}
\ganttgroup{Univers graphique}{8}{20}
\ganttbar[color=green]{Création des musiques}{8}{8}
\ganttbar{Fond du menu}{12}{8}
\ganttbar{Décor}{14}{7}
\ganttbar[color=cyan]{Textures blocs}{18}{3}
\ganttbar[color=red]{Implémentation décor}{24}{4}
\ganttgroup{Gestion de projet}{21}{11}
\ganttmilestone{Rendu du code}{21}
\ganttbar{Rédaction du rapport}{21}{4}
\ganttmilestone{Rendu du rapport}{25}
\ganttbar{Tests pré-présentation}{25}{7}
\ganttmilestone{Présentation du jeu}{32}
\end{gantt}
}
\end{landscape}
\hfill\\
\hfill\\
Légende du document~:
\begin{itemize}
\item Vert~: tâches affectées à Maëlle~;
\item Cyan~: tâches affectées à Rémi~;
\item Rouge~: tâches affectées à Mattéo~;
\item Noir~: tâches de groupe~;
\end{itemize}
\section{Outils de développement}
Nous avons choisi le C++ tout d'abord car il s'agit du langage que nous apprenons cette année. De plus, il possède de nombreuses bibliothèques. C'est un langage très utilisé dont le code est élégant. Parmi les bibliothèques graphiques, nous avons choisi la SFML car son utilisation est simple et elle correspondait bien à nos besoins.
Pour écrire le code, nous avons utilisé différents éditeurs de texte (atom et gedit). Nous compilions notre programme avec g++. Pour faciliter la compilation, nous avons utilisé CMake.
Git nous a permis de gérer les versions du programme, avec le gestionnaire de projet GitHub, où nous déposions le code ainsi que les documents tels que le diagramme UML de classes permettant de s'y retrouver plus facilement dans les nombreuses classes que nous avons créées.
\chapter{Analyse du projet}
\chapter{Développement du moteur physique}
Cette partie du projet est basée sur l'algorithme du pré-rapport. La première tâche fut l'organisation des classes, réalisée par Mattéo à partir du diagramme de classe. Lors de cette première étape, le projet était constitué de trois classes : la classe Engine, contenant le moteur physique et gérant l'affichage du jeu, la classe Ball qui contenait les propriétés de l'objet ball, ainsi que la classe Block qui contenait les propriétés des blocs. Des classes furent rajoutées plus tard dans le développement du projet afin de mieux répondre aux besoins d'affichage et de moteur physique.
L'affichage fut géré par des fonctions draw() permettant de boucler sur les différents objets afin de mettre à jour le dessin affiché en fonction de leur position. Il fallut également gérer la caméra avec l'objet view de la SFML, et l'adapter au redimensionnement de la fenêtre. Enfin, pour un meilleur rendu graphique, nous avons chargé et appliqué des textures aux objets (textures provisoires lors de cette étape). Pour cela, nous avons décidé de créer la classe ResourceManager afin de permettre de charger les ressources depuis tout dossier où se trouverait l'exécutable.
Lors de l'implémentation des forces et des collisions, nous avons rencontré quelques difficultés, notamment au niveau des collisions. En effet, grâce aux tests du moteur dans différentes situations, nous avons pu repérer des erreurs de collisions. Cela mena à la création d'une nouvelle classe Object réunissant les balles et les blocs dans un même tableau et définissant les propriétés communes des objets. Nous avons donc passé plus de temps que prévu sur cette partie du projet.
\chapter{Développement des niveaux du jeu}
Tout d'abord, il fallut définir le format des fichiers de niveaux, puis lire et écrire le format. Afin de pouvoir créer des niveaux plus facilement, mais également permettre aux utilisateurs de jouer à leurs propres niveaux, nous avons choisi de créer un éditeur de niveau en mode graphique. Cela nous prit plus de temps que prévu, c'est pourquoi il nous restait peu de temps pour la création de niveaux. Nous avons donc réfléchi à des niveaux courts mais demandant de la réflexion afin de les rendre intéressants malgré le manque de temps.
\chapter{Développement de l'interface du jeu}
Afin de mieux gérer l'affichage entre les menus, l'éditeur et les niveaux, nous avons décidé de découper le jeu en états. Nous avons créé une classe abstraite gérant tous ces états, ainsi qu'une classe par état : Menu pour le menu principal, Rules pour les règles du jeu, Editor pour l'éditeur de niveaux et Game pour le jeu, ainsi qu'une classe abstraite Level pour gérer les niveaux.
Le menu principal se basait ainsi sur ce découpage. Chaque option renvoyait à un état différent ou modifiait l'état du menu si cela envoyait sur un autre menu (choix de niveaux).
interface de l'éditeur ?
Menus pause, gagné, perdu ?
\chapter{Développement de l'univers graphique}
Nous avons décidé d'ajouter des musiques au jeu afin de le rendre plus vivant. Pour cela, nous avons fait appel à un étudiant de l'IUT de Montpellier, Maxime PETITJEAN, pour aider Maëlle à créer des musiques pour chaque niveau ainsi que pour le menu à l'aide du logiciel Ableton.
Nous avons également décidé de créer nos propres textures pour un rendu du jeu plus personnel. Après les dessins préalablement réalisés par Maëlle sur papier, Rémi s'est chargé de les numériser en repassant les contours pour créer une image vectorielle sur Inkscape. Puis Maëlle les a colorées avec le même logiciel, pendant que Rémi se chargeait des textures des blocs que nous avions au préalable définies à l'oral en groupe.
Nous n'avons pas eu le temps d'implémenter le décor avant le rendu du code, mais il est prévu que cela soit fait avant le passage à l'oral.
\chapter{Manuel d'utilisation}
\chapter{Perspectives et conclusions}
\section{Perspectives}
\section{Conclusions}
\subsection{Fonctionnement de l'application}
\subsection{Fonctionnement du groupe de travail}
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

View File

@ -1 +1,80 @@
\chapter{Développement}
\section{Moteur physique}
Cette partie du projet est basée sur l'algorithme du pré-rapport.
La première tâche fut l'organisation des classes, réalisée par Mattéo
à partir du diagramme de classe. Lors de cette première étape, le projet
était constitué de trois classes : la classe Engine, contenant le moteur
physique et gérant l'affichage du jeu, la classe Ball qui contenait les
propriétés de l'objet ball, ainsi que la classe Block qui contenait les
propriétés des blocs. Des classes furent rajoutées plus tard dans le
développement du projet afin de mieux répondre aux besoins d'affichage
et de moteur physique.
L'affichage fut géré par des fonctions draw() permettant de boucler
sur les différents objets afin de mettre à jour le dessin affiché en
fonction de leur position. Il fallut également gérer la caméra avec
l'objet view de la SFML, et l'adapter au redimensionnement de la
fenêtre. Enfin, pour un meilleur rendu graphique, nous avons chargé
et appliqué des textures aux objets (textures provisoires lors de
cette étape). Pour cela, nous avons décidé de créer la classe
ResourceManager afin de permettre de charger les ressources depuis
tout dossier où se trouverait l'exécutable.
Lors de l'implémentation des forces et des collisions, nous avons
rencontré quelques difficultés, notamment au niveau des collisions.
En effet, grâce aux tests du moteur dans différentes situations,
nous avons pu repérer des erreurs de collisions. Cela mena à la
création d'une nouvelle classe Object réunissant les balles et les
blocs dans un même tableau et définissant les propriétés communes
des objets. Nous avons donc passé plus de temps que prévu sur cette
partie du projet.
\section{Niveaux du jeu}
Tout d'abord, il fallut définir le format des fichiers de niveaux,
puis lire et écrire le format. Afin de pouvoir créer des niveaux
plus facilement, mais également permettre aux utilisateurs de jouer
à leurs propres niveaux, nous avons choisi de créer un éditeur de
niveau en mode graphique. Cela nous prit plus de temps que prévu,
c'est pourquoi il nous restait peu de temps pour la création de
niveaux. Nous avons donc réfléchi à des niveaux courts mais
demandant de la réflexion afin de les rendre intéressants
malgré le manque de temps.
\section{Interface du jeu}
Afin de mieux gérer l'affichage entre les menus, l'éditeur et les
niveaux, nous avons décidé de découper le jeu en états. Nous avons
créé une classe abstraite gérant tous ces états, ainsi qu'une
classe par état : Menu pour le menu principal, Rules pour les
règles du jeu, Editor pour l'éditeur de niveaux et Game pour
le jeu, ainsi qu'une classe abstraite Level pour gérer les niveaux.
Le menu principal se basait ainsi sur ce découpage. Chaque option
renvoyait à un état différent ou modifiait l'état du menu si cela
envoyait sur un autre menu (choix de niveaux).
Interface de l'éditeur ?
Menus pause, gagné, perdu ?
\section{Univers graphique}
Nous avons décidé d'ajouter des musiques au jeu afin de le rendre
plus vivant. Pour cela, nous avons fait appel à un étudiant de
l'IUT de Montpellier, Maxime \textsc{Petitjean}, pour aider Maëlle
à créer des musiques pour chaque niveau ainsi que pour le menu
à l'aide du logiciel Ableton.
Nous avons également décidé de créer nos propres textures pour un
rendu du jeu plus personnel. Après les dessins préalablement
réalisés par Maëlle sur papier, Rémi s'est chargé de les numériser
en repassant les contours pour créer une image vectorielle sur
Inkscape. Puis Maëlle les a colorées avec le même logiciel,
pendant que Rémi se chargeait des textures des blocs que nous
avions au préalable définies à l'oral en groupe.
Nous n'avons pas eu le temps d'implémenter le décor avant le rendu
du code, mais il est prévu que cela soit fait avant le passage à l'oral.

View File

@ -1 +1,47 @@
\chapter{Organisation du projet}
\section{Organisation du travail}
Chaque membre du groupe a travaillé en autonomie. Les réunions lors des séances
prévues étaient consacrées aux explications sur le travail de chacun ainsi qu'à
la répartition des tâches pour la semaine suivante.
Chacun d'entre nous était chargé de tâches spécifiques (voir figure 1).
Certaines parties du développement nécessitaient plusieurs personne et
étaient ainsi partagées entre certains membres du groupe. La conception
et les tests des niveaux, le fond des menus ainsi que les décors furent
réalisés par Rémi et Maëlle, et la gestion de projet par tout le groupe.
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}
\begin{figure}[p!]
\scalebox{0.56}{\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
tâches résolues en groupe
}
\label{fig:organisation-gantt}
\end{figure}
\end{landscape}
\section{Outils de développement}
Nous avons choisi le C++ tout d'abord car il s'agit du langage que nous
apprenons cette année. De plus, il possède de nombreuses bibliothèques.
C'est un langage très utilisé dont le code est élégant. Parmi les bibliothèques
graphiques, nous avons choisi la SFML car son utilisation est simple et
elle correspondait bien à nos besoins.
Pour écrire le code, nous avons utilisé différents éditeurs de texte
(atom et gedit). Nous compilions notre programme avec g++. Pour faciliter
la compilation, nous avons utilisé CMake.
Git nous a permis de gérer les versions du programme, avec le gestionnaire
de projet GitHub, où nous déposions le code ainsi que les documents tels
que le diagramme UML de classes permettant de s'y retrouver plus facilement
dans les nombreuses classes que nous avons créées.

View File

@ -7,16 +7,66 @@
\usepackage[french]{babel}
\usepackage{hyperref}
% Graphismes
\usepackage[pdftex]{graphicx}
\usepackage{lmodern}
\usepackage{tikz}
\usepackage{gantt}
\usepackage{lscape}
\usepackage{rotating}
% Noms personnalisés
\addto{\captionsfrench}{\renewcommand{\bibname}{Webographie}}
\begin{document}
% Page de garde
\title{Projet L1 -- C.M.I.}
\date{29 février 2016}
\author{Maëlle Beuret, Rémi Cérès, Mattéo Delabre}
\maketitle
\begin{titlepage}
\centering
% Titre de la formation
\textsc{\LARGE Projet L1 -- C.M.I.}\\
\vspace{.25cm}
{\Large Spécialité informatique}
\vspace{3cm}
% Titre du projet
\rule{\linewidth}{0.5mm}\\
\vspace{.4cm}
{\huge\bfseries Skizzle}\\
\vspace{.2cm}
\rule{\linewidth}{0.5mm}
\vspace{2cm}
% Author and supervisor
\begin{minipage}{0.495\textwidth}
\begin{flushleft}\large
Maëlle \textsc{Beuret}\\
Rémi \textsc{Cérès}\\
Mattéo \textsc{Delabre}
\end{flushleft}
\end{minipage}
\begin{minipage}{0.495\textwidth}
\begin{flushright}\large
\textbf{Année :} 2015 -- 2016\\
\textbf{Soutenu le :} 29/04/2016
\end{flushright}
\end{minipage}
\vfill
% Logos
\newcommand{\logo}[2]{
\raisebox{-.5\height}{
\includegraphics[scale=#2]{#1}
}
}
\logo{figures/frontpage-logo-um.png}{0.5}
\logo{figures/frontpage-logo-fds.png}{0.25}
\logo{figures/frontpage-logo-cgi.png}{0.05}
\logo{figures/frontpage-logo-figure.png}{1}
\end{titlepage}
% Table des matières
\setcounter{tocdepth}{1}