279 lines
15 KiB
TeX
279 lines
15 KiB
TeX
\documentclass[a4paper, 12pt]{article}
|
||
\usepackage[T1]{fontenc}
|
||
\usepackage[utf8]{inputenc}
|
||
\usepackage{graphicx}
|
||
\usepackage{amsmath}
|
||
\usepackage{amsfonts}
|
||
\usepackage{amssymb}
|
||
\usepackage{color}
|
||
\usepackage[french]{babel}
|
||
\usepackage[hidelinks]{hyperref}
|
||
\usepackage{mathtools}
|
||
\usepackage[nottoc, numbib]{tocbibind}
|
||
\usepackage{lipsum}
|
||
|
||
\usepackage{contour}
|
||
\usepackage{ulem}
|
||
\renewcommand{\ULdepth}{1.8pt}
|
||
\contourlength{0.8pt}
|
||
\newcommand{\myuline}[1]{%
|
||
\uline{\phantom{#1}}%
|
||
\llap{\contour{white}{#1}}%
|
||
}
|
||
|
||
\graphicspath{
|
||
{../images/}
|
||
}
|
||
|
||
\usepackage[
|
||
top=1.5cm,
|
||
bottom=1.5cm,
|
||
left=1.5cm,
|
||
right=1.5cm
|
||
]{geometry}
|
||
|
||
\setlength{\parskip}{0.2cm}
|
||
|
||
\begin{document}
|
||
|
||
\begin{figure}[t]
|
||
\centering
|
||
\includegraphics[width=5cm]{inp_n7.jpg}
|
||
\end{figure}
|
||
|
||
\title{
|
||
\vspace{4cm}
|
||
\textbf{Projet long de Technologie Objet} \\
|
||
Fonctionnalités de l’application \\
|
||
Sagittarius
|
||
\vspace{2cm}
|
||
}
|
||
\author{
|
||
\myuline{Groupe IJ-1}
|
||
\vspace{2mm} \\
|
||
Fainsin Laurent \\
|
||
Guillemin Johan \\
|
||
Guillotin Damien \\
|
||
Heurtebise Tom \\
|
||
Jourdan Pierre-eliot \\
|
||
Kirupananthan Nadesan
|
||
}
|
||
\date{
|
||
\vspace{7cm} Département Sciences du Numérique \\
|
||
Première année \\
|
||
2020 — 2021
|
||
}
|
||
|
||
\maketitle
|
||
|
||
\newpage
|
||
|
||
%\setcounter{tocdepth}{1}
|
||
\tableofcontents
|
||
|
||
\newpage
|
||
|
||
\begin{figure}[ht!]
|
||
\centering
|
||
\includegraphics[width=7cm]{sagittarius.png}
|
||
\end{figure}
|
||
|
||
Nous envisageons de créer un programme permettant de jouer à Sagittarius \cite{sagittarius}, un jeu tour par tour donc l'unique but est de tirer avec un arc et des flèches sur les autres joueurs et où le mécanisme principal est la gravité !
|
||
|
||
\section{Objectif général du projet}
|
||
|
||
L'objectif principal de ce programme est de pouvoir jouer à autant de parties de Sagittarius que l'on souhaite. Lors de la création d'une partie, il se génère aléatoirement un environnement céleste dans lequel des joueurs seront placés. Une partie pourra se jouer de 2 à 4 joueurs. Avant le début des hostilités, les utilisateurs auront le choix de leur couleur, mais aussi des paramètres de la partie. Lors de la partie, les joueurs peuvent se déplacer librement sur leur planète avant de tirer. La partie se déroule tour par tour, cependant ceux-ci seront limités à 30 secondes (par défaut) pour ne pas ralentir le jeu. Une partie se finit lorsqu’il ne reste qu'un seul joueur encore en vie.
|
||
|
||
\section{Fonctionnalités}
|
||
|
||
\subsection{Génération du terrain} %Damien
|
||
|
||
La génération du terrain se fera aléatoirement. Cependant, les planètes générées devront être suffisamment espacées et en nombre raisonnable (il faudra au moins autant de planètes que de joueurs). Les joueurs seront aléatoirement associés à une planète et avec une position aléatoire sur celle-ci.
|
||
|
||
\subsection{Tirer des flèches} %Laurent
|
||
|
||
Grâce aux entrées (souris et/ou clavier) les joueurs pourront choisir la direction initiale de la flèche ainsi que sa vitesse initiale. La flèche décrira ensuite une trajectoire, calculée à partir des forces que les planètes exercent sur elle.
|
||
|
||
\subsection{Mourir} %Tom
|
||
|
||
Une fonctionnalité qui peut paraître incongrue et qui pourtant est la base même de notre jeu est la possibilité pour le joueur de mourir. Par mourir nous entendons que si jamais le joueur est frappé par une flèche adverse son avatar disparaît de la planète sur laquelle il se trouvait et il perd la partie. Il faudra donc implémenter la disparition des avatars et donc la mort des joueurs. A ceci nous ajouterons la possibilité pour un joueur d'abandonner pour ne plus prendre part à la partie en cours. Cette option se modélisera par une flèche tirée au-dessus de lui qui fera disparaître le joueur.
|
||
|
||
\subsection{Se déplacer} %johan
|
||
|
||
Les joueurs doivent pouvoir se déplacer sur la surface de leur planète, vers la gauche et la droite (contrôles avec les flèches). Ils doivent ainsi pouvoir faire le tour de leur planète.
|
||
|
||
\subsection{Choisir le nombre de joueurs} %pe
|
||
|
||
Lors du lancement d’une partie, il est nécessaire de définir le nombre de joueurs. Le nombre de joueurs pour une même partie pourra aller de 1 (mode solo) à 4.
|
||
|
||
\subsection{Personnaliser son pseudo/couleur} %pe
|
||
|
||
L’étape suivante (plus secondaire) du lancement d’une partie, sera d’affecter à chaque joueur un nom et une couleur. Chaque joueur pourra ainsi définir le nom qu’il souhaite et choisir sa couleur (qui sera aussi celle de sa planète).
|
||
|
||
\subsection{Nombre de vies} %Laurent
|
||
|
||
Lors de la sélection des paramètres de la partie, les utilisateurs auront la possibilité de choisir le nombre de flèche nécessaire à l’élimination d’un joueur.
|
||
|
||
\subsection{(Visualiser la trajectoire des flèches)} %Damien
|
||
|
||
Pour faciliter la visée (et le debug), l’option d’affichage de la prévision de la trajectoire pourra être activée. Le tracé de la trajectoire de la flèche sera dessiné avant même que la flèche ne soit lancée.
|
||
|
||
\subsection{(Tableau des scores)} %Tom
|
||
|
||
Une autre fonctionnalité qui pourra être implanté si le temps le permet est l'affichage des scores et de certaines données. On pourra ainsi afficher le taux de précision de chaque joueur, le nombre d'autres joueurs touchés ainsi que la place obtenue.
|
||
|
||
\subsection{(Densité de planètes)} %pe
|
||
|
||
Lors de l’initialisation de la partie, chaque joueur aura la possibilité de choisir la taille et la densité de sa planète de départ. Les autres planètes seront réparties de manière aléatoire (avec une densité aléatoirement associée) lors de la génération du terrain.
|
||
|
||
\subsection{(Taille de la carte)} %Laurent
|
||
|
||
Lors de la création de la partie, un paramètre permettra de sélectionner la taille de la carte. Plus celle-ci sera grande, plus la distance séparant deux joueurs/planète sera élevée.
|
||
|
||
\subsection{(Planète/Lunes mobiles)} % Laurent
|
||
|
||
Lors de la création de la partie, un paramètre permettra de sélectionner si des planètes/lunes mobiles (en orbite) seront présentes dans la partie. Celles-ci viendront ajouter un niveau de difficulté à la partie.
|
||
|
||
\subsection{(Caméra mobile)} %johan
|
||
|
||
Déplacement du point de vue, soit si la carte est trop petite, soit pour avoir une meilleure vision pour le tir et ainsi pour viser plus facilement.
|
||
|
||
\subsection{(Gadget)} %Damien
|
||
|
||
Lorsque le joueur touche un objet spécial avec sa flèche, il obtient un bonus/malus.
|
||
|
||
\subsection{(Mode par équipe)} %Tom
|
||
|
||
Dans ce mode, la survie ne se fait plus individuellement mais par équipes. Ainsi les joueurs peuvent choisir leur couleur qui définit leur équipe. La dernière couleur en vie remporte la partie.
|
||
|
||
\subsection{(Changer de planète)} %Tom
|
||
|
||
Une fonctionnalité optionnelle est la possibilité pour un joueur de changer de planète. Évidemment ce dernier ne peut changer que pour une planète non occupée par un joueur. Cette possibilité lui sera offerte s'il parvient à se débarrasser d'un de ses adversaires et uniquement dans ce cas-là. Au tour qui suivra le « kill », le joueur survivant aura la possibilité de changer de planète pour celle de sa victime. Cette action vient se substituer à la capacité de tirer pour le tour en cours.
|
||
|
||
\subsection{(Aimbot)} %Damien
|
||
|
||
Le mode aimbot a pour but de déterminer le meilleur angle et la meilleure puissance de tir afin d’atteindre une cible. Il permettra d’implanter des ordinateurs pour jouer en solo, mais pourra aussi être utilisé par des joueurs mal intentionnés.
|
||
|
||
\subsection{(IA)} %Laurent
|
||
|
||
Lors de la création des parties, les archers peuvent être pilotés par une intelligence artificielle dont le niveau de difficulté définit leur précision.
|
||
|
||
\subsection{(Mort subite)} %pe
|
||
|
||
Pour éviter que la partie ne s’éternise, on définit un temps (ayant une valeur par défaut mais pouvant être changé au moment de l’initialisation d’une partie) à partir duquel des astéroïdes/météorites apparaissent, de manière régulière, avec des trajectoires aléatoires sur le terrain, susceptibles de tuer un joueur s'ils le touchent.
|
||
|
||
\subsection{(Sauter)} %pe
|
||
|
||
Si nous avons suffisamment de temps pour le faire, nous souhaitons implanter une fonctionnalité qui permettrait au joueur, en plus de se déplacer sur la planète, d’effectuer des sauts pour éviter les flèches envoyées.
|
||
|
||
\subsection{(Mode solo)} %Tom
|
||
|
||
Dans ce mode, un unique joueur humain peut s’exercer au travers de niveau dans lesquels il y a différentes cibles qui sont des PNJ (Personnages Non Joueurs). Pour passer au niveau d’après le joueur doit atteindre toutes les cibles. Nous nous réservons le droit d’ajouter une fonctionnalité dans laquelle le joueur dispose d’un nombre limité de flèches avant de recommencer le niveau et une fonctionnalité dans laquelle ce nombre est illimité.
|
||
|
||
\section{Interfaces utilisateur}
|
||
|
||
Voici de \textit{magnifiques} esquisses/exemples d'interfaces que le jeu utilisera.
|
||
|
||
\subsection{Menu principal} %pe
|
||
|
||
\begin{center}
|
||
\includegraphics[width=12cm]{menuPrincipal.png}
|
||
\end{center}
|
||
|
||
\subsection{Menu pause} %Damien
|
||
|
||
\begin{center}
|
||
\includegraphics[width=12cm]{menuPause.png}
|
||
\end{center}
|
||
|
||
\subsection{Menu customisation archer} %johan
|
||
|
||
\begin{center}
|
||
\includegraphics[width=12cm]{menuPerso.png}
|
||
\end{center}
|
||
|
||
\subsection{Menu option} %Tom
|
||
|
||
\begin{center}
|
||
\includegraphics[width=12cm]{MenuParametre.png}
|
||
\end{center}
|
||
|
||
\subsection{Menu paramètres de la partie} %Tom
|
||
|
||
\begin{center}
|
||
\includegraphics[width=12cm]{Menu_Tom.png}
|
||
\end{center}
|
||
|
||
\subsection{Affichage de la map} %Laurent
|
||
|
||
\begin{center}
|
||
\includegraphics[width=12cm]{affichage_map.png}
|
||
\end{center}
|
||
|
||
\section{Scénarios} %Tom
|
||
|
||
Les scénarios pour tester le jeu sont multiples. Cette section sera sûrement à compléter par la suite mais en voici un premier jet.
|
||
|
||
\subsection{Scénario n°1}
|
||
|
||
Tout d'abord dans le premier scénario nous testerons si le jeu se lance bien et surtout si le mode classique (le mode de 2 à 4 joueurs humains) est fonctionnel. Aucun test automatique ne sera possible puisqu'il s'agira d'interagir avec le jeu directement. Dans l'exécution de ce scénario il faudra donc lancer le programme principal qui affiche l'interface graphique, (le lancement en ligne de commande ou par le biais d'un autre type d'IHM sera à notre convenance. Une fois lancé le menu des paramètres nous vérifierons que le menu principal nous amène bien dans chacun des modes (mode solo, mode à plusieurs, etc…). À chaque fois nous reviendrons au menu principal. Suite à cela nous entrerons dans le mode solo. Le test de ce mode se fera suivant un nombre quelconque de joueurs (4 par exemple) et avec des noms/couleurs aussi quelconques. Une fois la partie lancée nous constaterons que l’ensemble des fonctionnalités prévues pour de ce mode fonctionnent (avec une attention particulière sur les trajectoires de chaque flèche, les déplacements des personnages et leur décès). Nous conclurons ce test par une victoire rapide d’un des joueurs pour vérifier la présence de l’écran de fin et la possibilité de rejouer/revenir au menu principal.
|
||
|
||
\subsection{Scénario n°2}
|
||
|
||
Le deuxième scénario envisagé concerne le mode solo (si implanté) dans lequel le joueur doit abattre des cibles fixes qui seront des PNJ (cf ce qui précède). Si les deux options de ce mode sont implantées il faudra lancer une partie avec le nombre de flèches limité et une deuxième avec le nombre de flèche illimitée. À ce moment il sera opportun de tester le menu de pause pour interrompre la partie qui peut durer indéfiniment.
|
||
|
||
\subsection{Scénario n°3}
|
||
|
||
Un troisième scénario qui pourra être testé est celui qui concerne le mode par équipes. Classiquement nous lancerons le jeu et ce mode en particulier en créant deux équipes de joueurs, (l’équipe rouge et l’équipe bleue par exemple). Pour ce scénario nous essaierons d’abord l’option “tir allié désactivé en faisant tirer le joueur bleu sur son coéquipier. Si tout se passe bien, ce dernier n’aura aucun dégât. Nous terminerons la partie par la victoire de l’équipe rouge suivie d’une deuxième dans laquelle le tir allié sera activé. Le bleu devrait cette fois mourir face au tir de son coéquipier.
|
||
|
||
\subsection{Scénario n°4}
|
||
|
||
Un quatrième scénario pourra nous permettre de tester des fonctionnalités plus avancées comme le mode “plusieurs vies” dans lequel il faut plusieurs flèches pour abattre un ennemi. Ce sera aussi l’occasion de tester l’utilisation d’objets ou encore la possibilité de changer de planètes. Toutes ces options devront être cochées au moment de la création de la partie.
|
||
|
||
\subsection{Scénario n°5}
|
||
|
||
Un dernier scénario devrait nous permettre de tester les fonctionnalités les plus avancées si elles ont pu être implémentées. Nous pourrons ainsi tenter de jouer sur une carte dont les paramètres comme le nombre de planètes et leur taille sont choisis par l’utilisateur. Ce sera aussi l’occasion de tester des modes expérimentaux comme le “aimbot” et éventuellement le jeu contre des Intelligence Artificielle.
|
||
|
||
\section{Difficultés}
|
||
|
||
\subsection{Moteur Graphique} %johan
|
||
|
||
L’affichage graphique sera la partie la plus cruciale du projet car sans affichage pas de jeu, cependant elle va être difficile car nous allons devoir utiliser des librairies annexes \cite{libGDX, swing} que nous ne maîtrisons pas forcément. Cela va donc nous demander un apprentissage il y a le risque de ne pas obtenir le rendu espéré.
|
||
|
||
\subsection{Moteur physique} %Damien
|
||
|
||
La trajectoire des flèches est un élément très important du projet. Toute la physique des flèches et donc du gameplay en dépendra. Il faudra trouver un moyen de calculer les trajectoires de manière efficace afin que le jeu reste fluide \cite{verlet}. Il faudra également trouver un compromis entre réalisme des trajectoires et expérience de jeu.
|
||
|
||
\subsection{Risque que rien ne marche} %Laurent
|
||
|
||
Comme dit précédemment, la création d’un “moteur physique” ainsi que l’utilisation d’un “moteur graphique” sont des tâches assez difficiles séparément, il y a donc un risque non négligeable que rien ne fonctionne si l’une des deux parties ne fonctionne pas.
|
||
|
||
\newpage
|
||
|
||
\begin{thebibliography}{9}
|
||
\bibitem{sagittarius}
|
||
Itch.io, Sagittarius, George Prosser \\
|
||
\href{https://gprosser.itch.io/sagittarius}{https://gprosser.itch.io/sagittarius} \\
|
||
|
||
\bibitem{n_body}
|
||
Wikipedia, n-body problem \\
|
||
\href{https://en.wikipedia.org/wiki/N-body\_problem}{https://en.wikipedia.org/wiki/N-body\_problem} \\
|
||
\href{https://en.wikipedia.org/wiki/Three-body\_problem}{https://en.wikipedia.org/wiki/Three-body\_problem} \\
|
||
|
||
\bibitem{verlet}
|
||
Wikipedia, Verlet integration \\
|
||
\href{https://en.wikipedia.org/wiki/Verlet\_integration}{https://en.wikipedia.org/wiki/Verlet\_integration}\\
|
||
\href{https://gamedev.stackexchange.com/a/41917}{https://gamedev.stackexchange.com/a/41917} \\
|
||
|
||
\bibitem{swing}
|
||
Swing \\
|
||
\href{https://en.wikipedia.org/wiki/Swing\_(Java)}{https://en.wikipedia.org/wiki/Swing\_(Java)} \\
|
||
\href{https://docs.oracle.com/javase/8/docs/technotes/guides/swing/}{https://docs.oracle.com/javase/8/docs/technotes/guides/swing/} \\
|
||
|
||
\bibitem{libGDX}
|
||
libGDX \\
|
||
\href{https://libgdx.com/}{https://libgdx.com/} \\
|
||
|
||
\end{thebibliography}
|
||
|
||
\end{document} |