Home
JediSmash - Julien Issartel
Contents
1. structurer le projet Malgr que Vincent aie affect des r les et t ches nous avons tous essay d avoir une vision globale du programme et nombre de fois un responsable d une t che est intervenu dans celle d un autre Voyons la r partition des r les Lionel Aug Responsable 3D Il s est charg de la mod lisation des per sonnages et du d cor sous 3DSMax avec animations textures et exportation puis int gration au projet Il s est occup de charger les mod les md2 dans le programme chargement textures rotation des mod les etc Adrien Benoist Responsable documentation Recherche d informations sur l utilisation de doxgen ainsi que prise en main de Latex Il a centralis les documents li s aux projets et a mis en forme le rapport Concernant le code celui ci s est initi la biblioth que SDL mixer afin de g rer les effets sonores Arnaud Casella Responsable technique Son r le est d avoir une connais sance totale du projet dans ces moindres parties et d ainsi d orienter les pro grammeurs et de les conseiller Il s occupe aussi de mettre en place AI avec les plug ins Vincent Hurbourque Chef de Projet Son r le en tant que chef de projet a t de bien dissocier toutes les parties r aliser et de r partir leur cr ation Il a impl ment IA des bots avec les graphes Julien Issartel Gestion du moteur physique et de la synchronisation des fen tres Gabrielle Luypaerts Gestion
2. ussissent leur saut Donc nous avons d termin qu ils devraient tre guid s d un point A de l tage o ils se trouvent au point B de l tage sup rieur Le saut serait donc parabolique en fonction de la position de A et B qui sont des positions clefs d finies en fonction des plateformes le robot calculerait ses positions tout le long de la parabole de A B en x et en y Si nous comptons impl menter cette id e c est parce qu ainsi le saut est totalement maitris et n est pas influenc par une vitesse initiale trop importante ou pas assez Le r sultat sera probablement moins r aliste mais il fonctionnera De plus la structure m me du graphe facilite cette impl mentation puisque les posi tions clefs des sauts correspondraient mentalement aux n uds du graphe de PTA Nous avons vu que nous avons utilis les boites englobantes pour g rer les collisions nous allons vous en parler un peu mieux 1 pour savoir si la collision a lieu avec un objet inf rieur il suffit de d tecter si la position en y du robot est plus proche du Y sup rieur de la boite englobante que de son Y inf rieur 30 5 5 2 Collision Bounding Box Nous avons g r les collisions entre les personnages personnage joueur et bots utilisant une AT objets sol plateformes et missiles Le sol de la sc ne est un objet aussi puisque nous avions besoin de lui pour d tecter des col lisions avec les robots surtout Expliquons pr cis men
3. contient une liste de pointeurs sur DumbBot qui repr sente les bots de la sc ne et qui va tre initialis e avec la fonction populate La fonction populate va galement associer chaque plug in un groupe de DumBot ce vecteur de pair est l attribut botsPlugins Enfin cette fonction va lire et chercher dans le so la fonction act qui va d finir le comportement du bot on aura ainsi stock e dans botsPluginsAct une liste de comportements En toute logique le ni me groupe de bots stock dans botsPlugins doit adopter le comportement du ni me l ment de la liste botsPluginsAct C est ainsi que les fonctions act des plugins vont tre appel es travers la m thode act de la classe Robots pour chaque i de 0 n on appelle botsPluginsActfi en lui passant botsPlugins i second le groupe de bot associ 4 3 2 Robot Robot se situe dans le package openkn smashstein et d finit un certain nombre d accesseurs aux param tres suivants robotState speaker radarReport radarRange maxSpeed weight gunFrequency gunPower gunProjectileVelocity getBoundingBox NB robotState speaker et radarReport sont respectivement des objets RobotState Speaker et RadarReport et seront d crits plus bas 16 4 3 3 Radar Report La classe DumbRadarReport impl mentant l interface RadarReport est faite pour g rer la visibilit de chaque bot Les methodes getNearbyRobots ge
4. du XML Cr ation fichier Ouverture lec ture chargement Les programmeurs principaux sont Julien Issartel Arnaud Casella Vincent Hurbourque et Gabrielle Luypaerts 3 2 Communication au sein du groupe La communication sur des projets aussi important que celui ci est tr s importante Nous tions six sur ce projet il tait donc constamment en mo dification Pour ne pas tre compl tement perdu dans l avancement du projet nous devions nous tenir au courant des avanc s des uns et des autres Nous nous sommes servi de trois canaux de diffusions principalement les r unions d un googlegroup et de mercuriale 3 2 1 R unions Tout au long de la mise en place de notre projet nous avons effectu plu sieurs r unions Elles sont devenues tr s courantes la rentr e car durant les vacances nous ne pouvions nous voir physiquement pour des raisons de distances Nous nous r unissions l chelle d une r union physique minimum par semaine Nous avons galement fait quasi quotidiennement des r unions vsur Internet en utilisant des messageries instantan es ou encore des logicielles de VoIP Les informations tant ensuite transmises aux autres personnes par email 3 2 2 GoogleGroups Pour permettre la diffusion des informations au sein de notre quipe de d veloppement nous avons mis en place un syst me de liste d envoie google groups Nous avions pour adresse smashstein googlegroups com De cette
5. la sc ne La balise g n rale lt arena gt englobe une balise lt environment gt qui nous ren seigne sur les l ments du d cor comme l image de fond attribut background et la musique d ambiance attribut music Une autre balise lt avatar gt poss de les informations du personnage jou par l utilisateur son nom le plugin utilis sa position initiale et ses dimensions Une balise lt robot gt repr sentera chaque robot ennemi plac dans la sc ne avec pour donn es son nom la biblioth que correspondant son intelligence artificielle des caract ristiques physiques comme sa vitesse et sa r sistance et le nom du fichier md2 qui le repr sentera Enfin le d cor tant constitu de plateformes chacune d entre elles est attribu e une balise lt objet gt qui nous renseigne sur le nom de l objet en question son identifiant sa position dans le d cor ses dimensions et une fois encore le mod le md2 qui lui sera rattach Organisation du fichier XML Modeles cml lt model gt lt avatar gt lt stand gt stand md2 lt stand gt lt run gt run md2 lt run gt lt fall gt fall md2 lt fall gt lt kick gt kick md2 lt kick gt lt saber gt saber md2 lt saber gt lt force gt force md2 lt force gt lt jump gt jump md2 lt jump gt lt avatar gt lt bot1 gt lt stand gt standBotl md2 lt stand gt lt run gt runBotl md2 lt run gt lt fall gt fallBot1 mdx lt fall gt lt kick gt kick
6. le code A l heure actuelle le son n est pas encore int gr au projet Lorsque ce sera fait les sons seront jou s en m me temps que l animation C est dire que l action du personnage sera lanc lors d un v nement clavier La m thode alors appel appellera son tour la m thode permettant de jouer le son 5 5 Moteur Physique 5 5 1 D placement Sur la sc ne les robots sont soit des bots donc contr l s par l ordina teur soit le personnage principal contr l par le joueur Si la fa on de leur donner des ordres est diff rente en revanche ils agissent de la m me mani re Comme pr c demment dit chaque robot coute les ordres qu on lui a donn soit par le clavier soit par VTA et agit en cons quence Courir Tous les robots peuvent courir Comme nous sommes sur une sc ne en 2D faire courir des Bots correspond d placer leur position en x dans un sens ou l autre gr ce au clavier et afficher l animation correspon dante Il suffit pour cela d ajouter la position en x du robot sa vitesse plus ou moins grande selon ce qui est d sir Lorsque le robot s arr te de courir on observe un effet d inertie En effet au lieu de mettre la vitesse du bot instantan ment z ro nous l avons rapide 29 ment diminu e pour donner une impression plus r aliste Sauter Nous avons aussi fait sauter les robots Pour le robot principal nous lui avons appliqu une gravit
7. m mes coups sabre laser coup de pied jet de Force Ce robot n attaque que le Jedi et l ass ne de coups plus puissants et surtout un rythme plus important Sa vitesse de d placement est galement revue la hausse 2 2 Technologies utilis es Pour mener bien notre projet nous avons d utiliser plusieurs techno logies Voici un bref r capitulatif exhaustif de celles dont nous nous sommes servis 2 2 1 BTFX Notre rapport a t r alis en TEX L utilisation de ce format nous a vivement t conseill De plus il donne un caract re professionnel notre rapport car tr s souvent utilis par la communaut scientifique Enfin la plupart d entre nous n ayant jamais fait de LaTeX il tait int ressant de prendre en main ce langage permettant de dissocier le fond de la forme 2 2 2 OpenGL Tout ce qui a trait au rendu visuel a t trait par de OpenGL C est dire que toutes les textures ont t g r es par de OpenGL Nous nous en sommes galement servi pour tout les d placements et rotations des objets de notre sc ne Nous avons ainsi pu cr er notre image d arri re plan gr ce un worldbillboard par exemple 2 2 3 MD2 Le format MD2 est un format de fichier contenant les donn es des mod les en 3D charg es depuis un fichier C est un format relativement simple lorsque l on en a compris le principe qui permet une animation par frame donc correspondant tout fait notre projet
8. qui lui est propre et que nous n utilisons pas en respectant les lois de la physique et qui s applique constamment lui ce qui le fait naturellement redescendre tout moment le robot teste son environnement pour d tecter si des collisions ont lieu entre lui et un objet inf rieur Lorsque c est le cas la gravit du robot s annule En revanche d s qu il n observe plus de collision de haut en bas le robot se remet tomber Maintenant il s agit de faire sauter le robot Pour ce faire nous avons d tect si le robot tait en train de faire un saut par un bool en Si ce n est pas le cas alors nous avons ajout une notion d impulsion au robot qui s ajoute la gravit du robot et la rend positive ce qui fait que le robot monte Cette impulsion d abord positive est d cr ment e ce qui fait que plus le robot monte moins il va vite Ensuite sa gravit devient nulle et ensuite n gative ce qui refait tomber le robot de plus en plus vite car la gravit continue tre d cr ment e Comme vu pr c demment la chute du robot correspond au moment o il d tecte un objet sous lui Quand aux robots de L IA ils r aliseront un saut d une mani re diff rente Au jour o nous crivons ceci n est pas encore impl ment mais non esp rons le faire Pour rejoindre le personnage principal perch en hauteur les robots devront monter sur des plateformes pr d finies Pour ce faire il faut qu ils r
9. saut soit fluide Et non avoir ce sch ma de saut FIGURE 6 Nous connaitrons La hauteur et la largeur de l objet La position de l objet La position du bot 20 FIGURE 7 Graphe Correspondant a FIGURE 8 Saut en ligne droite Si le bot est loin il suivra ce sch ma FIGURE 9 FIGURE 9 Rapprochement du bot avant le saut 21 Voici un pseudo du mouvement du bot Si Xd lt X0 alors Avancer bot tant que Xd lt X0 width 2 epsilon puis Sauter en Xo width 2 gammal Yo gamma2 Sinon si Xd gt X0 alors Avancer bot tant que Xd gt X0 width 2 epsilon puis Sauter en Xo width 2 gammal Yo gamma2 Sinon si Xd gt Xo width 2 et Xd lt X0 width 2 saute droit Yd Y0 gamma2 En revanche si le bot est sous la plate forme il pourra pass a travers mais uniquement dans un sens lorsqu il saute dessus FIGURE 10 FIGURE 10 Rapprochement du bot avant le saut Il est savoir que ce d placement sera simul par l ordre RunAndJump dans notre programme Cet ordre sera au moment ou Xo width 2 5 2 2 IA Bot L intelligence des bots sera assez simpliste On pourra avoir 2 types d IA simples de bots Corps corps Tireur Les bots essaieront toujours de se rapprocher de l avatar afin de l attaquer Si le bot a un profil corps corps alors il essaiera d atteindre sa position en 22 x sinon si c est un profil tireur on d f
10. temps nous afficherons la sc ne globale en fonction des deux personnages de la sc ne les plus loign s en x 5 2 LA Avant tout il faut savoir que nous disposons d une liste de robots qui sera transmise chaque bot par son radar L enjeu de P IA va tre de rejoindre ou de fuir ses ennemis selon le profil team laquelle il appartient Pour cela on va tester dans la liste de robots celui qui est le plus proche 19 5 2 1 IA Smart Nous construirons l IA des bots en fonction du fichier XML du d cor Le fichier XML d crit plus bas dans le rapport contiendra les diff rents objets selon les niveaux Chaque objet sera li d autre s il est accessible Exemple lt objet 1 niveau 1 pos X 10 pos Y 10 gt lt objet 2 niveau 2 saut 1 gt lt objet 3 niveau 3 saut 2 gt lt objet gt Ainsi comme nous le voyons sur la FIGURE 6 ci dessous un bot pourra aller de l objet 1 2 s il poss de une capacit de saut de 1 et pourra aller vers l objet 3 si il poss de une capacit de 2 Nous bloquerons la capacit de saut d un bot au nombre 2 11 ne pourra ainsi pas sauter des hauteurs d mentielles Voyons cela sur le sch ma suivant 1 A CR 00 1 1 Niveau 2 objet MS me 1 2 Objet 2 MS Niveau 1 1 FIGURE 6 Diagramme de Classe Le bot peut se trouver dans 2 positions par rapport au bloc sur lequel il doit sauter En dessous du bloc Eloign du bloc Comment agir pour que le
11. Bot1 md2 kick gt lt saber gt saberBot1 md2 saber gt lt force gt forceBot1 md2 lt force gt lt jump gt jumpBot1 md2 lt j ump gt lt bot1 gt lt objet gt lt sol gt sol md2 lt sol gt lt asteroide gt asteroide md2 lt asteroide gt lt platform gt platform md2 platform gt lt objet gt lt model gt 33 Le fichier modeles xml regroupe tous les mod les md2 qui seront utilises dans le jeu Les mod les peuvent tre de trois types avatar robot ou objet La balise lt avatar gt regroupe les mod les correspondant aux sept actions que peut effectuer le personnage principal tre immobile courir tomber donner un coup utiliser le sabre laser utiliser la Force sauter Ces m mes actions se retrouveront au sein des diff rentes balises filles de lt bot gt Celle ci correspond la cat gorie des robots et chaque type de robot a une apparence diff rente troopers sith etc Enfin la balise lt objet gt renferme les trois cat gories de plate forme que l on peut trouver dans la sc ne le sol un ast ro de et une plate forme 5 6 3 Chargement et Lecture Pour effectuer le chargement des fichiers xml nous avons utilis la li brairie TInyXML qui permet un acc s facile tous les niveaux d informa tion gr ce entre autres aux classes TiXmINode qui repr sente un n ud de l arbre TiXmlElement qui correspond un l ment et TiXmlAttribute pour les attributs de ces l ments Afin d ut
12. E E td an Usa aal A A RE Diagramme de Classe css tilo rios 16 16 16 17 17 18 20 21 21 21 21 25 25 26 26 27 27 27 27 27 29 29 30 30 30 32 33 o O al 9 10 11 12 13 14 15 16 Gestion des widgets 17 Diagramme de Classe en LOS A ten 18 Graphe Correspondant 19 Saut en ligne droite RS da MN STE SAT 19 Rapprochement du bot avant le saut 19 Rapprochement du bot avant le saut 20 Modelisation du Jedi sans Texture 22 Textures et UVW Mapping ome de ela dea Lie 23 Textures appliqu es au personnage 23 Sc ne de notre jeu lt a RTE A NE nes 24 Bot ennemis m es Banane on Re dan daa 24 Univers du Jeu mode sans texture 36 Liste des tableaux 1 INTRODUCTION Le but de ce projet est de cr er un jeu vid o temps r el en C depuis la phase de r flexion jusqu la phase de r alisation Ce projet relativement complexe a une port e dans diff rents domaines allant de la confection de mod le 3D la cr ation d IA Nous d velopperons toutes les tapes et tous les aspects pr sents dans notre jeu au cours de ce rapport Le sujet tait compos de trois parties peu dissociables dans un tel projet savoir la pro grammation l architecture logicielle et la synth se d image Dans un premier temps nous ferons une br ve introduction de notre jeu pour compre
13. Le MD2 ne contient pas de texture nous avons donc utilis des formats ppm pour texturer tous nos objets 2 24 C Pour un projet comme celui qui nous a t propos il fallait utiliser un langage orient objet Mise part le fait que le C nous tait impos il nous paraissait vident d utiliser un tel langage 2 2 5 XML Le XML a jou un r le tr s important dans le projet car toutes les in formations de notre sc ne sont contenues dans ce ces fichiers On y stocke le nombre de d objets plateforme ainsi que leur taille mais galement le nombre n cessaire de sauts entre les plateformes Ils nous permettent de cr er un FS APS ainsi qu un graphe entre les diff rentes structures sur lesquelles les personnages pourront se d placer C est aussi le XML qui stocke les personnages de notre sc ne charger au d but du programme avec leur md2 leurs animations mais aussi les sons li s ces derni res 2 2 6 QT L interface de notre projet est r alis e l aide de QT Cet ensemble de biblioth ques multiplateforme permet de cr er des GUI tr s aboutis 3 ORGANISATION 3 1 D finition des r les Pour ce projet nous tions une quipe form e de six membres Vincent en tant que chef de projet a t charg de r partir les r les selon les capacit s mais aussi les souhaits de chacun Tout au long du projet il a fallu red finir les t ches des personnes selon les p riodes afin de gagner du temps et de
14. NALIT S DU PROGRAMME 5 1 Interface Graphique 5 1 1 QT Qt est une biblioth que logicielle en C qui offre de nombreux com posants dont celui d affichage graphique dont nous nous sommes servis ici L environnent graphique KDE utilis par d faut par Mandriva ou Kubuntu est notamment bas sur la biblioth que logicielle Qt Nous nous sommes servis de cette derni re comme interface autant graphique que physique gestion Clavier Souris La gestion du clavier et de la souris se fait de fa on transparente par rapport Opengl et fonctionne de la m me mani re que sous OpenGL Qt coute le clavier et transforme le message en ordre que l on peut r cup rer sous OpenGL Comme nous avons vu ci dessus Il est possible d afficher de L OpenGL sur Qt C est une des grosses raisons pour laquelle nous avons utilis le fra mework Qt Comme nous devions s parer notre fen tre en quatre affichages OpenGL ind pendants nous avons utilis le syst me de Widget Un widget correspondant un affichage ind pendant sous Qt nous en avons fait quatre et dans chacun d entre eux nous avons affich les fen tres OpenGL d sir es Si nous voulions cr er quatre fen tres pour g rer quatre cam ras nous voulions aussi afficher la m me sc ne Or chaque Widget contient son propre code ind pendant Nous avions donc quatre affichages repr sentant quatre fois la sc ne mais avec les m mes personnages se d pla ant diff remme
15. Universit Paris Est Marne La Vall e Rapport du projet de fin de Semestre en Programmation Synth se d image et Architecture Logicielle RAPPORT PROJET SMASHSTEIN IMAC Deuxi me ann e 14 Janvier 2010 Lionel AUG Adrien BENOIST Arnaud CASELLA Vincent HURBOURQUE Chef de Projet Julien ISSARTEL Gabrielle LUYPAERTS Table des mati res 1 INTRODUCTION 3 2 INTRODUCTION AU PROJET JEDISMASH 4 21 O 214 5 44 pre normes gate Does goal ER Ga he 4 2 1 1 Pr sentation de l univers 4 2 1 2 Principe de Jeu ira Die RE pile pi 4 DL SN RN 4 2 14 Personnages sica e e re a sul s 5 2 2 Technologies utilis es se ir es do a dei 5 22A EE CR Ane m S a E E AE a L a i aA 5 202 Open G in es E eee O er 6 22a MDT a m n A a T E a 6 O A RR 6 A E a E 6 DO O E AN Sd eine 6 3 ORGANISATION 7 3 1 D finition des r les d 3 2 Communication au sein du groupe ooo 8 3 21 R UNIONS 2 202 PT to ia tt a e 8 3 2 2 GoogleGroups es ais se En Ve he Lente A Las 8 3 2 3 Mercuriale 8 4 ARCHITECTURE ET STRUCTURE DU PROJET 10 D D UME o A ld a e ls e A ate did ed 10 E O A o A A E AE S I 10 41 2 Use Cas 222 2 M ht RU gene MU Nan dates 10 4 1 3 Diagramme de Classe o ooa Li donnes 12 4 2 Design Pattern Utilis es aaa a a 12 HAN Singleton Len Vas a aAa AA E ae A E E a 12 DR al t 2 gira a gi a T Aa ERGa a to kiei t a 12 4 2 3 Observa
16. ar ne ou encore si l avatar ou le personnage prot ger est mort 39 7 7 1 BILAN R capitulatif des fonctionnalit es R capitulatif des fonctions impl ment es gestion du gameplay par quipe mode coop ratif avec l ordinateur affichage synchronis de 4 fen tres QT poss dant diverse cam ras animations visuelles et sonores des peronnages gr ce aux models 3D md2 gestion des textures pour les mod les md2 construction d une sc ne partir d un fichier xml plateformes d cor impl mentation d un moteur physique g rant la gravit impl mentation de diff rents IA compil s en binaire pour chaque type de personnage recherche de plus court chemin pathfinding dans VIA du jedi noir pour rejoindre son ennemi gestion des collisions gr ce aux bounding box gestion d un syst me de vie Fonction que nous avions pr vu d impl menter T 2 lanceur al atoir d animation pour une m me action pour ne pas que les coups soit r p titifs ajouter d ordre eventuelle pour pouvoir courir puis sauter agrandissement et switch des diff rentes vues affichage et gestion d un score affichage des barres de d g ts ajout d un menu de d part choix d une ar ne et d un mod le Probl me rencontr s Exportation des mod les md2 Lors de l laboration des mod les md2 nous avons rencontr quelques difficult s En effet nous faisions des mod les qui n taient pas assez optimis s pou
17. es avons modifi s nos fins Pour la sc ne nous avons choisi de mod liser une sc ne dans l espace repr sentant des morceaux d ast ro des FIGURE 11 5 3 2 Texture Comme nos mod les seront export s au format md2 il faut g rer leurs textures d une certaine fa on En effet le format md2 n incorpore pas les tex tures directement Il faut donc utiliser de l UVW Mapping Cette technique consiste plaquer une image 2D sur un objet en 3D Il faut donc d composer 23 d plier notre mod le en face sur un plan 2D et ainsi pouvoir appliquer les textures que l ont veut sur notre mod le FIGURE 12 et 13 FIGURE 11 Modelisation du Jedi sans Texture Sur la FIGURE 12 et 13 ci dessous nous avons s lectionn toutes les faces du bras gauche et nous les avons bien plac s sur l image Ainsi nous avons la texture du bras associ e au mod le Nous veillerons n utiliser qu une seule image 2D avec toutes nos textures dessus car dans le chargement de textures dans le programme nous ne devons avoir qu une seule image Voici un aper u de la sc ne et la r alisation final de notre bot FIGURE 14 et 15 24 O Eat uvws MER File Edit Select Tools Mapping Options Display View T Na FIGURE 13 Textures appliqu es au personnage 25 FIGURE 14 Sc ne de notre jeu FIGURE 15 Bot ennemis 26 5 3 3 Animation Une fois nos mod les finis et les textures appliqu e
18. iliser les donn es contenues dans les fichiers xml il est n cessaire de parcourir leur arborescence Un objet de type TiXmliNode est cr qui correspond la racine de l arbre Un objet TiXmlElement est cr pour nous permettre de nous d placer et de r cup rer les informations En partant d un n ud il est possible d obte nir l l ment qui y est associ gr ce la fonction ToElement Depuis un l ment il est possible de parcourir ses fils gr ce la m thode FirstChildE lement ou ses fr res avec NertSiblingElement Une fois que nous nous sommes plac s sur l l ment connaitre il nous est possible de r cup rer soit la valeur de ses attributs avec la m thode Attri bute soit le texte compris entre la balise en question avec GetText Une fois arriv une feuille de l arbre il est possible de repartir de la racine afin d explorer une nouvelle branche de la m me mani re Chargement des mod les md2 Dans un premier temps tous les mod les md2 sont charg s partir du fichier modeles rml et stock s dans des tables de hachage au sein des classes ap propri es Ces tables permettent d acc der aux mod les directement par leur nom sans avoir besoin d un identifiant num rique qui serait moins clair La classe Avatar contient la table des sept modeles md2 vus pr c demment la classe Robots celle de tous les mod les possible pour les robots et la classe objet la table stockant les tro
19. init une distance minimale atteindre avant de tirer Il faut aussi regarder quel niveau se trouve l avatar si l avatar se trouve un niveau sup rieur alors le bot devra atteindre la plateforme la plus proche et monter dessus Il essaiera de monter au plus haut en sautant sur les plateformes autour de lui 5 2 3 IA Victime La victime doit fuir les ennemis afin de ne pas tre tap e Il est en perp tuel mouvement Si un bot ennemi l approche de trop pr s alors la victime doit s carter de la position Elle dispose d un radar continu et essaye de rester toujours au plus loin des ennemis Si une plateforme est libre alors la victime sautera dessus Si la victime est attaqu e alors elle essaiera de se d fendre via son attaque Il faut noter aussi que si la victime et l avatar sont sur le m me niveau alors la victime ira vers l avatar pour tre prot g 5 3 Animation 5 3 1 Mod lisation Dans notre jeu l univers choisi est celui de Star Wars Il nous a ainsi sem bl obligatoire le fait que nos personnages aient un rapport avec la c l bre sixtilogie Nous avons d cid des personnages suivants L avatar sera un Jedi l ennemi le plus intelligent sera un Seigneur Sith les soldats seront des Clones Trooper et enfin le personnage que doit prot ger l avatar sera un robot de type R2D2 Pour ce faire avec le temps dont nous disposions nous avons pris sur internet des bases de model de 3DS Max et nous l
20. ions concernant l ar ne sont contenu dans un fichier XML Ce fichier renseigne sur le nombre d objets qui sont pr sents Il contient la position des niveau et leur taille ainsi que le nombre d objets accessibles depuis celui ci avec le nombre de saut qu il faut pour y acc der ainsi que le nombre de saut n cessaire pour passer d un objet un autre Par exemple Pour passer de la plate forme num ro 0 situ au niveau 1 plate forme num ro 2 situ au niveau 3 il faudra passer par la plate forme 1 se trouvant au niveau 2 Il a donc fallu impl menter une fonction qui permettais de lire dans un fichier XML 5 6 1 Biblioth que 5 6 2 Structure Organisation des fichiers XML Arena xml lt arena nbObj 3 gt lt environment background background png music music mp3 gt lt avatar gt lt name gt Bobby lt name gt lt plugin gt plugin1 lt plugin gt lt position x 0 y 0 z 0 gt lt dimensions width 5 height 2 gt lt avatar gt lt bot gt lt name gt Bot1 lt name gt lt brain gt libBrain so lt brain gt lt body velocity 1 0 resistance 1 0 gt lt position x 4 y 3 gt lt model nom trooper gt lt bot gt lt objet gt lt nom gt Sol lt nom gt lt id gt 0 lt id gt lt position x 0 y 0 gt lt dimensions width 20 height 3 gt lt model nom sol gt lt objet gt lt arena gt 32 Le fichier xml arena zml contient chaque objet pr sent dans
21. is mod les correspondant aux plate formes 34 Chargement et construction des objets de la sc ne Une fois les mod les md2 charg s et stock s chaque objet de la sc ne est cr gr ce une fonction sp cifique du fichier loadXML cpp La fonction loadA vatar permet de cr er l avatar en remplissant les attributs de la classe avec les valeurs du fichier xml De m me la fonction loadRobots remplit la liste de robots et loadObjets remplit la liste d objets 6 MANUEL DE JEU Les commandes de jeu Dans notre jeu nous avons opt pour un gameplay plut t pratique En effet l utilisateur disposera des touches directionnelles pour d placer l avatar dans la sc ne Les commandes d attaques seront c tes c tes coup de pied z force e coup de sabre laser Il pourra sauter avec la barre d espace Concernant le jeu Pour blesser un ennemi il faut lancer des attaques coup de pied force ou coup de sabre laser Si celui ci est touch cela fera aug menter la barre de dommage d un ennemi et l expulsera plus ou moins loin en fonction du cumul des dommages inflig s Plus un personnage aura encaiss de coups plus sa barre de dommage sera lev e et plus la position de celui ci sera affect e au prochaine impact Un personnage meurt s il est expuls de l ar ne But du jeu Survivre dans l ar ne et prot ger son coh quipier Le jeu prend fin si tout les ennemis sont hors de l
22. mani re tous le monde tait inform en temps et en heure des modifications et des difficult s que rencontraient chacun 3 2 3 Mercuriale Notre quipe est compos e de six personnes et cela risque de poser pro bl me quand l organisation du programme En effet en faisant un projet un nombre lev de personne il est possible qu il y ait des probl mes quand au rassemblement des avanc es de chacun dans le programme Pour viter ces probl mes nous avons mis en place un Mercurial Mercurial est un logiciel de gestion de version Le but de celui ci est de pou voir faire travailler plusieurs d veloppeurs sur un m me ensemble de fichiers sans qu il y ait besoin d une personne qui s occupe d assembler le travail de tout le monde Chacun ajoute sa partie et tout le monde en profite 10 Le projet est pour cela stock sur internet dans un d p t ou repository ici on utilisera le site intuxication org pour h berger notre projet Puis Mer curial va communiquer avec le serveur du site en question pour lui envoyer ou recevoir les mises jour des fichiers du projet en cours de traitement et ce gr ce certaines commandes utilis es Malgr quelques petits probl mes quant sa mise en place ce proc d nous vit de nombreuses heures fastidieuses rassembler toutes les diff rentes parties de chacun et de les compiler Cependant nous sommes conscient du gain de temps dont nous a fait profiter l utilisa
23. ndre ces principes et l univers ainsi que les technologies utilis es Puis nous verrons comment s est organis e la communication interne sur un projet d une telle envergure En ce qui concerne le projet proprement dit nous avons distingu deux parties importantes l architecture du projet permettant de comprendre com ment interagissent les diff rents acteurs de notre jeu et les fonctionnalit s du programme regroupant aussi bien l interface QT que la gestion de lIn telligence Artificielle animation le moteur physique tout le chargement de notre sc ne par XML et les environnements sonores Puis nous concluerons sur le bilan du projet avec le r capitulatif des t ches accomplies des fonction nalit s non impl ment es ainsi que les probl mes majeurs rencontr s Enfin en annexe vous trouverez le manuel d utilisation de notre jeu Notre groupe de travail est form de six membres Lionel Aug Adrien Benoist Arnaud Casella Vincent Hurbourque Julien Issartel Gabrielle Luy paerts 2 INTRODUCTION AU PROJET JEDISMASH 2 1 Le Jeu 2 1 1 Pr sentation de l univers Nous avons d cid d orienter notre jeu vers de l action et du combat Nous tions tous d accord pour que notre projet soit dans la digne lign e d un Sma shBros La mod lisation de personnages tir s de Star Wars tait donc obli gatoire Les animations devaient galement repr senter des mouvements plus ou moins sortis de cet univers tel que le c
24. ne Pour une meilleure gestion des animations en fonction des ordres des robots et avatars nous avons choisi de les centraliser dans une classe pour chaque personnage Chaque classe de personnage poss de des pointeurs vers ses md2 sa texture ainsi que les sons jou s Il y a des m thodes qui permettent ainsi de jouer les animations des robots en utilisant la fonction renderFrame Cette m thode consiste jouer le num ro de la frame pass en argument du md2 Ainsi il suffit de faire une boucle et d incr menter notre indice pour avoir une animation fluide On arr te ou recommence l animation en fonction de l animation lorsque c est la fin de celle ci 28 5 4 Son Pour immerger le joueur d avantage le joueur dans le jeu nous avons mis en place une librairie pour lire des fichiers sonores De cette mani re nous avons une musique de fond Sur celle ci vient s ajouter d autres effets sonores en fonction des actions et cons quences des actions de chacun tels que les sons de tirs de chutes 5 4 1 Librairie Notre choix de librairie c est port sur la SDL En effet cette librairie est tr s compl te et nous permettait donc de r pondre nos besoins Elle est capable de jouer une musique et d iphone Ca prise en main n a pas t tr s difficile Nous devions simplement importer les bons includes et r cup rer les syntaxes pour impl menter le chargement et la lecture des sons 5 4 2 Incorporation dans
25. nt les personnages utilisent de l al atoire pour agir Pour afficher les personnages de la m me fa on dans les quatres widgets nous avons donc d clar les pointeurs du personnage principal ainsi que ro bots la liste des bots de IA dans le fichier instanciant les widgets main Windows cpp qui nous avons pass en param tre ces pointeurs Une fois ceci fait lorsqu on modifie la position d un personnage dans un widget on le fait pour tous les widgets puisqu ils partagent le m me poin teur Nous n avons ainsi crit certains codes qu une seule fois dans wid get cpp widget de d buggage notamment ceux d terminant la position des personnages 18 FIGURE 5 Gestion des widgets 5 1 2 Cam ra Nous devions organiser chaque affichage de la fa on suivante Un devait repr senter le h ros de la sc ne et le suivre tout le temps Un devait suivre un des bots de PIA Un devait repr senter la sc ne dans son ensemble Un dernier devait pouvoir permettre de se d placer librement sur la sc ne pour le d buggage d j impl ment de base Pour chacune des trois premi res cam ras nous avons tout simplement adapt le GluLookAt en fonction de ce que nous avions afficher Les deux premiers visent et se d placent en fonction de la cible d sir e et proposent un plan rapproch Pour l affichage des bots il est possible de switcher entre eux en appuyant sur ou Si nous avons le
26. oup de sabre laser et l utilisation de la Force Nous avons essay travers la bande son de retranscrire au mieux l univers de George Lucas Quant l ar ne elle repr sente un demi ast ro de sur lequel notre personnage et ses ennemis volueront Tout ces principes simples rendent plus facile l immersion de notre joueur car il est plus facile d entrer dans un univers coh rent 2 1 2 Principe de Jeu Les principes du jeu sont relativement simples puisque comme tout Sma shBros notre avatar dirig par le joueur via le clavier doit jecter les ennemis pr sents dans l ar ne Cependant nous avons introduit une petite difficult suppl mentaire notre projet avec la pr sence d un robot alli de vant tre prot g Malgr ses comp tences attaquer les ennemis sa fragilit l emp che de rester longtemps en vie C est donc notre Jedi avatar de le prot ger sous peine de perdre la partie Les conditions de d faite sont donc au nombre de deux soit notre per sonnage est ject soit son alli meurt Les conditions de victoire quant elles sont lorsque tous les ennemis sont ject s 2 1 3 Sc ne Comme nous l avons dit notre sc ne est un ast ro de correspondant notre ar ne de combat Initialement tous les personnages s y trouvent Elle est suspendue dans les airs et n est pas ferm e ni d un c t ni de l autre pour que le Jedi puisse tomber Cela implique l utilisa
27. pr f r la biblioth que SDL Mixer qui est plus simple d installation et d utilisation Gestion de l humain Un groupe de six personnes est difficile g rer En effet chaque personnes ayant des niveaux diff rents dans divers domaines la distribution des t ches a dut tre rigoureusement pens afin d optimiser au maximum le travail 7 3 Apports Personnels Les notions vues en cours pratique et th orique la fois en C en Ar chitecture logicielle ou encore en Synth se d image nous ont permis de mieux aborder le projet et de le rendre plus accessible Ce fut pour nous l occa sion d apprendre incorporer des objets 3D anim s dans une sc ne OpenGl rendant plus attractives nos r alisations Il a fallu s adapter une structure logicielle informatique d j en place et se l approprier selon nos besoins Ce sujet tr s complet nous a permis de mener un v ritable projet de programmation int grant aussi bien des algorithmes connus et utilis s que des interactions visuelles avec l utilisateur Le projet nous a permis d apprendre et d acqu rir une rigueur lors de la conception d un programme en C d Architecture Logicielle et d OpenGL cela provenant du fait que le projet nous a passionn Il y avait un but concret avec des r sultats visibles et divertissants 37 FIGURE 16 Univers du Jeu mode sans texture
28. programme et int ressant utiliser Il contient des don n es g om triques comme les polygones ou les coordonn es de textures mais aussi l animation du mod le frame par frame Il n est pas un format courant 21 pour 3DS Max il a donc fallu se procurer un script disponible sur Internet Pour l exportation au format md2 il a fallu respecter certains crit res des mod les basse r solution pour pouvoir les exporter facilement des mod les unis en maillage ditable texture UV Mapping avec une seule image 2D 5 3 5 Chargement Texture MD2 Une fois que nous avons nos diff rentes animations aux formats md2 il faut les incorporer dans la sc ne Nous devons tout d abord les charger dans notre programme Pour cela nous utilisons le chargeur de md2 fourni avec le squelette du programme Nous cr ons des objets md2 dans nos GLWid get puis nous les chargeons l aide de la m thode LoadModel qui prend en param tre le chemin du md2 Apr s il faut charger les textures du mod le Pour ce faire nous avons converti notre image 2D qui tait l origine au format JPEG au format PPM Ainsi nous avons utilis un chargeur d image LoadPPMRGB puis nous avons charg les textures du mod le en utilisant la fonction LoadTex ture qui permet dans un premier temps de charger l image ppm en texture OpenGL et dans un deuxi me temps d attribuer cette texture au mod le md 2 5 3 6 Incorporation dans la sc
29. r l utilisation que nous en avions Du coup l exportation ne se faisait pas ou tait trop longue Nous avons opt par la suite pour des mod les de qualit moindre Architecture Nous avons eu quelques probl mes d adaptation l archi tecture d j mise en place Nous nous sommes rendu compte qu elle n tait pas totalement adapt e notre vision du projet En analysant bien la nature 36 des personnages nous nous sommes aper u qu ils taient plut t similaires et que par cons quent nous n avions pas besoin de cr er plusieurs classes pour des entit s assez proches par leurs comportements Nous avons donc pr f r factoriser le code Par exemple les radarReports sont les m mes lorsqu il s agit d un Jedi ou d un DumbRobot La liste conte nue dans Robots est de type DumbRobot or pour parcourir celle ci de fa on g n rique cette liste peut contenir la fois des Jedis et des DumbRobots il faut parcourir et appeler des m thodes propres l interface Robot Mercurial Par d sir d une bonne organisation du travail nous avons mis en place un syst me de gestion de version gr ce au logiciel Mercurial N an moins la prise en main a t difficile pour l ensemble de l quipe la fois pour ceux qui ne connaissaient pas ces proc d s et galement pour ceux qui l administraient Gestion du son Initialement nous voulions utiliser FMOD Ex mais de vant les difficult s de compilation nous lui avons
30. s nous devons les ani mer Chaque personnage poss de un nombre d animations qui lui est d fini selon les diff rents tats qu il peut avoir dans le programme Pour animer un mod le il faut lui incorporer un squelette et l attacher en suite au mod le C est ce squelette que nous animons Ainsi nos mod les pourront effectuer parfaitement leurs mouvements Les personnages ont des mouvements communs selon leurs tats Les attaques d pendent elles du personnage Les tats communs Stand le personnage est l arr t Run le personnage cours dans la sc ne Jump lorsqu il saute Fall lorsque le personnage se fait attaquer il tombe au sol est se rel ve Attaques particulier selon les personnages Jedi et Sith Kick il donne un coup de pied de type mawachigueri Saber Kick il donne un coup de sabre laser Force il utilise la force pour projeter son ennemi Troopers Kick le trooper donne un coup de blaster son ennemi Shot le trooper tire avec son blaster R2D2 Kick il donne un coup de t te Il est bien entendu que les animations communes sont particuli res aux personnages 5 3 4 Exportation Une fois les animations r alis es nos mod les sont fin pr ts pour l expor tation au format md2 Le format MD2 est un format de fichier contenant les donn es des mod les 3D de Quake II Nous l avons choisi car il est simple incorporer dans notre
31. s ordres Au d but nous g rions les ordres depuis la sc ne on parcourt la liste de robots pour chacun il y a un test sur l ordre re u on effectue une action adapt e Avec l impl mentation de robots de diff rentes natures il aurait fallu tes ter galement le type de robot pour savoir comment agir Plut t que de faire cela on va d finir dans l interface Robot une m thode traiterOrdre qui prend en param tre l ordre Ainsi par polymorphisme pour chaque l ment de la liste de Robot qu il s agisse d un type DumbRobot ou Jedi l action traiterOrdre sera trait e ind pendamment 4 2 3 Observateur chaque frame et pour chaque projectile une fonction testCollision sera appel e En testant l intersection entre la bounding box du projectile et celle du personnage test on peut d tecter le fait qu un projectile frappe un protagoniste Dans ce cas pr cis il va falloir augmenter la barre de d g ts du robot touch puis pour lancer l animation informer les 4 gd Widgets Pour 14 T 3084 WE JDEIP s52 LUE DEIQ Pue quina FIGURE 4 Diaggamme de Classe UlBISUSe Ls UAUS 0 cela on met en place un syst me d observateur chaque projectile poss de une liste d observateur les gl Widgets chaque collision on calcule les d g ts inflig s la cible on appelle une fonction animHit pour chaque observateur 4 3 Interactions Logicielles 4 8 1 Les Robots Elle
32. t ce qu est une boite englobante Pour g rer les collisions de mani re correcte il fallait prendre la surface globale d on objet En effet prendre les coordonn es de nos objets ainsi que la largeur et la hauteur ne suffisait pas C est l que les boites englobantes interviennent Via le mod le md2 et ses vertices nous avons pu tracer un carr englobant l objet Prenons un exemple Ces bo tes ont plusieurs objectifs d tection des collisions missiles bots et missiles avatar d tection robots et avatar avec le sol qui est un mod le md2 ou objet qui permet de g rer le moteur physique comme expliqu pr c demment Voyons plus pr cis ment comment nous avons g r les missiles 5 5 3 Projectile Un projectile est un type d objet qui contient aussi sa bo te englobante Il contient aussi sa position sa direction tout ce qui peut lui permettre de se d placer Enfin il contient aussi une variable repr sentant le nombre de d g ts qu il peut occasionner A tout moment il fait un test de collision voir si il ne d tecte pas d objet Lorsque c est le cas il dispara t S il rencontre un objet robot celui ci voit sa barre de dommages augmenter en cons quence et subit un d placement d l impact proportionnel son pourcentage de d g ts 31 5 6 XML Le chargement de l ar ne se fait au lancement du programme Il faut ensuite lui transmettre tout ce qui y est pr sent Toutes les informat
33. tNearbyProjectile et getNearbyObstacle vont respectivement renvoyer un vecteur de Robot de Projectile et d Obstacle correspondant aux entit s vi sibles du bot pass en param tre Il tait possible pour nous de g rer la visibilit d un bot soit directement dans le radarReport soit dans VIA il suf fit de s lectionner partir des bots envoy s par radarReport ceux qui sont dans la zone de visibilit or comme d un type de bot l autre la seule chose qui changerait pour son radarReport est sa visibilit nous avons d cid de calculer celle ci dans l IA et ainsi factoriser notre code avec un seul et m me type de radarReport pour n importe quel Robot 4 8 4 Speaker Cette classe va contenir un couple cha ne de caract res flottant que l on appelle un ordre c est la fonction act du plugin qui va envoyer les ordres en fonction du contexte et c est dans GLWidget paintGL qu il sera trait L encore nous avons un seul type de speaker 4 3 5 Robot State Cette classe contient un param tre velocity un vecteur position et un vecteur direction Ces informations sont utilis es dans le GLWidget pour selon l ordre pass dans le Speaker modifier la position du bot Ex s il l ordre est d avancer on calcule la position vers laquelle il faut le translater avec sa direction et sa vitesse de d placement velocity C est galement ici que sera g r e la gravit des objets mobiles de la sc ne 17 5 FONCTION
34. teur 12 4 3 Interactions Logicielles 08 aos gun dou nine x 14 43 1 Les Robots 14 43 2 RODO 2 Ma Te M mn LR ae RP ER 14 4 3 3 Radar Report AS fasses ea er ans 15 43A Speaker ips De SAR NE me 15 435 Robot State Pin PE NE Sd mess nee te 15 5 FONCTIONNALIT S DU PROGRAMME 5 1 Interface Graphiques das nas sn a SE LS PC A a a A AS Camera a a a io A E A E e AAA a a R a A A 52D E RS dates di mens e te enguti an DD JA Bots ah a monte Ma ee Me o ea 52 37 A NICHE aras Lena Dane A SS AMM MO E A A eo A ia sensa GR AM AE NS nes Do2 a Senna AR Re Lie 2 De Animation a 4 6 Lise sou a ee dure o 5 3 4 Exportations y a see en Eee ds 5 3 5 Chargement Texture MD2 5 8 6 Incorporation dans la sc ne FASDO as e os o ne LS ta A Sl DADAS ts od aa els ts cdo tal desa es 5 42 Incorporation dans le code 2 2 4 4 4 cons pa at 5 5 Moteur Physique a de a AA 5 5 1 D placement a A A AR NN 5 5 2 Collision Bounding Box 2148 aii entoure 5 5 3 Projectile lo ed O pd O ENn A A TER LA Dai Lee 5 6 1 Biblioth que iaa 5 02 cOLTUCEULE 422 te Heat e e 5 6 3 Chargement et Lecture 2 202 0 2 6 MANUEL DE JEU 7 BILAN 7 1 R capitulatif des fonctionnalit es 7 2 Probl me rencontr s She Lune brest 7 3 Apports Personnels ad AR ae pts De a Table des figures Aa ND Diagramme de S quence Usas latas a E R
35. tion d un moteur physique 2 1 4 Personnages Notre avatar sera repr sent par un Jedi Il aura donc tous les pouvoirs et accessoires qui incombent un Jedi savoir qu il poss dera un sabre laser dont il pourra se servir pour les attaques rapproch es ainsi que des coups de Force qui jecteront les ennemis en arri re Il pourra aussi donner des coups de pieds Bien s r notre personnage tant libre dans la sc ne il pourra se d placer sur les axes X et Y pour les d placements et les sauts Le Jedi sera accompagn de robot alli sur l ar ne R2D2 Ce personnage ne sera pas jouable et sera contr l par une intelligence artificielle IA Il a une faible capacit d attaque Son unique r le est de cr er une difficult suppl mentaire Sur notre ar ne seront galement pr sents des ennemis Il en existera de deux sortes Les premiers dot s d une IA relativement basique permettant de lancer des attaques distance ainsi que de porter des coups directement notre avatar pour les attaques au corps corps Les robots pourront gale ment se d placer de mani re horizontale sur un plan et de mani re verticale pour changer d tage Leur IA leur permettra de fuir notre Jedi lorsqu ils seront en mauvaise posture Le deuxi me type d ennemis pr sent dans la sc ne sera un maitre Sith Il n y en a qu un et il poss de une IA l g rement plus pouss e Il sera comme notre avatar et poss dera tout comme lui les
36. tion de ce logiciel simple et gratuit 11 4 ARCHITECTURE ET STRUCTURE DU PROJET 4 1 UML 4 1 1 DSS Nous avons r alis ce diagramme de s quence pour bien identifier les in teractions des objets entre eux glWidget Projectile testCollision intersect ALT vrai collision FIGURE 1 Diagramme de S quence 4 1 2 Use Case Voici les Use Case que nous avons r alis 12 FIGURE 2 Use Case 1 Parcourir la liste des robots Utiliser la Force FIGURE 3 Use Case 2 13 4 1 3 Diagramme de Classe Le diagramme de classe de notre projet JediSmash se trouve sur la page suivante page 15 4 2 Design Pattern Utilis es 4 2 1 Singleton Le programme doit assurer l unicit de l instance qui va lancer le jeu en effet on doit interdire de pouvoir instancier plusieurs fois l objet responsable du lancement du jeu On utilisera donc dans la classe Application cpp une instance Application qui ne sera accessible qu partir d une m thode static getApplication Cette fonction servira g rer l acc s au constructeur qui ne doit pas tre accessible de l ext rieur Notre id e de d part tait de rendre unique l avatar contr l par le joueur mais anticipant l ajout d un deuxi me joueur nous avons pr f r laisser cette id e de c t 4 2 2 Strat gie Zoe 7 classe Robot La partie sur IA explique que l on va envoyer chaque bot de
Download Pdf Manuals
Related Search
Related Contents
BOLETIN DE SERVICIO DE ALERTA IBM NWAYS 712 User's Manual BAR913 - Oregon Scientific 期末試験の出題範囲 試験上の注意 Panoramic Dome Network Camera Hardware User Manual Maytag C3 User's Manual Brennenstuhl BN-PD331 DAC-9013 User Manual Fisher-Price R6069 Instruction Sheet Copyright © All rights reserved.
Failed to retrieve file