Le rapport - Blazin` Fight Website
Transcription
Le rapport - Blazin` Fight Website
BLAZIN’ FIGHT Kévin GAST “SlyTink” (gast_k) Fabrice CHENG “BiToLarve” (cheng_f ) Vincent LE-BIHAN “Vince” (le-bi_v) Laurent KHAUV “Tensai_Sendo” (khauv_l) 1 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Introduction La Team Beer Land arrive enfin au terme de son projet en cette fin d’année. Nous sommes heureux et fiers de vous présenter notre dernier rapport de soutenance, point final de notre jeu intitulé Blazin’ Fight. Le projet de cette année consistait en la programmation d’un jeu vidéo de boxe, dont le fonctionnement ainsi que la réalisation seront énoncés plus tard. Nous avons ainsi pu comprendre et apprendre de nombreuses choses liés à la conception d’un produit fini, au travail d’équipe, aux exigences d’un cahier des charges et au respect de délais définis. Dans ce rapport, nous allons présenter les membres du groupe, reprendre notre cahier des charges élaboré en début d’année et tenter d’expliquer les différents domaines que nous avons du développer. 2 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Table des matières 1 2 Présentation des membres du groupe 1.1 Kévin . . . . . . . . . . . . . . . . 1.2 Fabrice . . . . . . . . . . . . . . . 1.3 Vincent . . . . . . . . . . . . . . . 1.4 Laurent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 7 Reprise du Cahier des Charges 2.1 Cahier des Charges ? Pourquoi faire ? . 2.2 Origines du Jeu . . . . . . . . . . . . . 2.3 Nature du Jeu . . . . . . . . . . . . . . 2.4 Objet de l’Etude . . . . . . . . . . . . . 2.5 Organisation du Travail . . . . . . . . 2.5.1 Moteur Graphique . . . . . . . 2.5.2 Moteur Physique . . . . . . . . 2.5.3 Réseau . . . . . . . . . . . . . . 2.5.4 Intelligence Artificielle . . . . . 2.5.5 Divers . . . . . . . . . . . . . . 2.6 Répartition des tâches . . . . . . . . . 2.6.1 Première soutenance . . . . . . 2.6.2 Deuxième soutenance . . . . . 2.6.3 Troisième soutenance . . . . . 2.6.4 Soutenance finale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 9 9 10 10 10 10 10 11 12 12 12 13 13 . . . . . . . . 3 Nos débuts en programmation 14 4 Moteur Graphique 4.1 Environnement du jeu . . . . . . . . . . . . . . . . . . . . . 4.2 Texturing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Implémentation d’Objets 3D . . . . . . . . . . . . . . . . . . 4.4 Système de barre de vie et autres animations en tout genre . . . . 15 15 16 17 19 Moteur Physique 5.1 Gestion des mouvements - Collisions Cube-Skybox . . . . . 5.2 Collisions entre cubes . . . . . . . . . . . . . . . . . . . . . . . 5.3 Collisions entre Personnages . . . . . . . . . . . . . . . . . . 20 20 20 21 5 3 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 6 Intelligence Artificielle 6.1 Gestion des touches de clavier et début d’I.A. . . . . . . . . . 6.2 l’I.A, maîtresse du Jeu . . . . . . . . . . . . . . . . . . . . . . 23 23 23 7 Réseau 7.1 Première Partie - Le Chat . . . . . . . . . . 7.1.1 Chat client-serveur basique . . . . 7.1.2 Gestion de plusieurs clients . . . . 7.1.3 Chat avec gestion des utilisateurs 7.2 Seconde Partie - Parser . . . . . . . . . . . 7.3 Troisième Partie - l’implémentation . . . . . . . . . . 24 24 24 26 28 29 30 . . . . . . 31 31 31 32 32 33 34 Site Internet 9.1 Site Internet - Les Débuts . . . . . . . . . . . . . . . . . . . . . 9.2 Site Internet - Améliorations . . . . . . . . . . . . . . . . . . . 9.3 Site Internet - Evolution finale . . . . . . . . . . . . . . . . . . 35 35 37 38 10 Divers 10.1 Son . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Jaquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 40 40 11 Outils et Moyens mis en oeuvre 11.0.1 Logiciels utilisés . . . . . . . . . . . . . . . . . . . . . 11.0.2 Matériels utilisés . . . . . . . . . . . . . . . . . . . . . 41 41 41 12 Bibliographie 43 13 Annexes 13.1 Moteur Graphique . . . . . . . . . . . . . . . . . . . . . . . . 13.1.1 Environnement du jeu . . . . . . . . . . . . . . . . . . 44 44 44 8 9 Menu 8.1 Play ! . . . . 8.2 Multijoueurs 8.3 Options . . . 8.4 VS COM . . 8.5 Quitter . . . 8.6 Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Blazin’ Fight Team Beer Land 13.2 13.3 13.4 13.5 13.6 INFO-SUP A1 Epita 2011 13.1.2 Texturing . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.3 Implémentation d’Objets 3D . . . . . . . . . . . . . . 13.1.4 Système de barre de vie et autres animations en tout genre . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moteur Physique . . . . . . . . . . . . . . . . . . . . . . . . . Intelligence Artificielle . . . . . . . . . . . . . . . . . . . . . . Réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4.1 Chat client-serveur basique . . . . . . . . . . . . . . . 13.4.2 Chat - Gestion de plusieurs clients . . . . . . . . . . . 13.4.3 Chat - Gestion d’utilisateurs . . . . . . . . . . . . . . . Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Site Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.6.1 Les débuts . . . . . . . . . . . . . . . . . . . . . . . . . 13.6.2 Améliorations . . . . . . . . . . . . . . . . . . . . . . . 5 45 47 49 51 52 53 53 54 54 55 55 55 57 Blazin’ Fight Team Beer Land 1 INFO-SUP A1 Epita 2011 Présentation des membres du groupe La Team Beer Land est un groupe formé de quatres élèves de l’INFOSUP A1 Promo 2011 : Kévin, Fabrice, Vincent et Laurent. La constitution du groupe s’est faite de façon naturelle à partir du moment où tous les quatre voulions travailler ensemble et réaliser un jeu qui nous intéressait. Notre principal souci était de trouver un bon nom de groupe et de projet, et même si ces noms pourraient sembler de moindre importance, ils ne le sont pas tant que cela. En effet, tout d’abord par rapport au jury qui nous jugera, c’est par le nom de groupe que nous serons connus, et notre jeu sera de toute façon vu et revu par les promos suivantes. Kévin sera notre chef de projet, puisque il semblait le plus apte et le plus intéressé. Il s’occupera de la communication entre la Team Beer Land et les professeurs. Il veillera également au bon déroulement du projet et du respect du planning. 1.1 Kévin K ÉVIN GAST(chef de projet) : Ancien mappeur sur le Premier Freeshard Français du mmoRPG DAoC, boxeur pendant plus de trois ans, fan d’Hajime No Ippo et passionné d’informatique, Kévin n’a aucune connaissance particulière dans ce domaine. Cependant, il “vient” du monde du jeu vidéo et maîtrise le sujet du "noble art" qu’est la boxe. Il est normal que son intérêt pour ce projet soit décuplé car il lui permet de fusionner ses deux passions. Désireux de se spécialiser en SSR, Kévin a absolument voulu s’occuper du réseau afin d’avoir un avant-goût de ce qui l’attend et de savoir s’il est réellement intéressé par ce sujet. 1.2 Fabrice FABRICE CHENG : Passionné de l’informatique en général et des jeux vidéos, l’aventure de Fabrice à EPITA n’est donc pas une coïncidence. De plus, son inscription a été vivement encouragée par des proches qui en sont sortis diplômés. Le voici ainsi dans ce groupe de Projet : la “Team Beer Land” en compagnie de Laurent, Kévin et Vincent. Partageant les même goûts que ses autres compagnons de route, à savoir Hajime no Ippo mais également des “Oldies” de jeux de boxe, son intégration et son désir de réaliser ce jeu est venu naturellement. Dans ce projet, son rôle s’orientera 6 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 essentiellement autour du moteur 3D et de l’IA. Il sera donc responsable de la texture du jeu et de son “esthétique”. 1.3 Vincent V INCENT LE-BIHAN : Vincent vient tout juste d’avoir 18 ans et comme tous ses camarades, il demeure un passionné d’informatique et de jeux vidéos (domaine dans lequel il excelle) . Bien qu’ayant peu de connaissances sur le sujet, il espère que ce projet va lui apporter une motivation supplémentaire et lui permettre ainsi de combler les carences qu’il a accumulé en informatique depuis le début de l’année, afin de percer les secrets du codage et surtout de Caml qui n’est vraiment pas son ami. Pour cela, il va s’occuper du Moteur Physique et de l’Intelligence Artificielle, il sera donc ainsi responsable entre autre de la gestion des collisions, donnée très importante lorsqu’il s’agit de jeux de combats. 1.4 Laurent L AURENT KHAUV : Laurent était habitué au codage de petits programmes et à la conception de sites internets avant d’arriver à EPITA. Depuis, bien des choses se sont passées, et désormais habitué au langage fonctionnel et impératif (CAML et DELPHI) et ayant déjà réalisé un projet annuel, il tentera de mettre à profit son expérience au groupe. Passioné par l’informatique, il va pouvoir concevoir, une fois encore, un jeu. Ce qui va lui permettre de s’aguerrir au Delphi et aux différents moteurs qui se rapporteront au jeu. Il augmentera ainsi son expérience d’un travail sur le long terme (une année scolaire), qui nécessite rigueur, travail aussi bien individuel que collectif, rapprochement entre les membres de ce groupe, et le respect de délais et d’objectifs bien définis. 7 Blazin’ Fight Team Beer Land 2 2.1 INFO-SUP A1 Epita 2011 Reprise du Cahier des Charges Cahier des Charges ? Pourquoi faire ? Ce cahier des charges tentera de vous expliquer le déroulement de notre projet tout au long de l’année. Notre but était de trouver un jeu aussi bien intéressant qu’original et qui convenait à tous les membres du groupe. Après de nombreuses recherches et propositions, nous sommes tombés d’accord sur un jeu de combat. Notre second souci était ensuite de savoir quel type de jeu nous voulions réaliser. Finalement, nous avons décidé de concevoir un jeu de boxe principalement tourné en mode “un contre un”. Ce cahier des charges nous servira de base dans notre projet pour respecter au mieux notre planning et pour ne pas nous y perdre. 2.2 Origines du Jeu Rapidement constitué de trois membres (Kévin, Fabrice, Laurent) désireux de réaliser un bon jeu et fort motivés, le principal était de trouver un dernier compagnon pour la route ! C’est ainsi que Vincent fut intégré au groupe avec une joie fidèle à lui-même. Tous fans d’un manga célèbre quoiqu’assez récent traitant sur la boxe, intitulé Hajime No Ippo, l’idée d’un jeu de boxe fut proposée. De plus, nous avions tous déjà joué à de multiples jeux “oldies” de boxe. Nous ne voulions pas faire un jeu quelconque mais bien un jeu original, amusant et qui n’a pas déjà été réalisé. Ainsi, cette suggestion fut conservée puisque pour nous, il correspondait bien aux critères cités précèdemment et tous commençaient à montrer leur intérêt pour ce projet. La forme du jeu fut assez naturellement choisie bien que l’idée d’un Beat Them All avec vue à la première personne nous ait traversé l’esprit. Au final, nous avons opté pour un mode plus naturel : celui du “un contre un”. Le nom du projet a mis quelque temps à se dessiner contrairement au nom du groupe qui s’était presque établi naturellement. Blazin’ Fight correspond, pour nous, à l’expression la plus appropriée pour caractériser le jeu auquel nous pensons. Ces termes semblent suffisamment accrocheurs pour intéresser de potentiels consommateurs du jeu. 8 Blazin’ Fight Team Beer Land 2.3 INFO-SUP A1 Epita 2011 Nature du Jeu Blazin’ Fight est un jeu de boxe principalement axé sur le mode du “un contre un”. Le but du jeu est de battre son adversaire. Le joueur dispose d’un choix entre deux personnages, et une fois selectionné, ce combattant devra battre son adversaire guidé par un autre joueur ou une Intelligence Artificielle sur un ring de boxe. 2.4 Objet de l’Etude Ce projet va nous permettre d’acquérir une expérience tant au niveau du travail en équipe que dans le respect d’un planning scrupuleux. L’organisation interne au sein du groupe sera l’une des choses les plus importantes et cela nous permettra également d’en apprendre plus sur le développement d’un jeu. Il nous faudra trouver une bonne répartition des tâches visant au respect des souhaits de chacun, et de ce même fait, de leurs progressions respectives. Il faudra également éviter qu’un des membres du groupe soit plus sollicité que les autres. Sur le plan individuel, ayant pour obligation de respecter un certain laps de temps afin de préparer chacune de nos soutenances, nous aurons la possibilité d’organiser notre propre travail sur la durée. De plus, le fait de travailler sur des connaissances importantes et non étudiées jusqu’ici, nous obtiendrons ainsi une certaine souplesse quant à de futures demandes sur des projets inconnus. De ce fait, les recherches seront importantes dans les différents domaines que nous devrons aborder. En effet, le moteur graphique sera largement utilisé afin de gérer des objets en 3D, mais aussi le moteur physique, l’Intelligence Artificielle, la conception d’un menu, l’implémentation du son au jeu et le réseau. 9 Blazin’ Fight Team Beer Land 2.5 INFO-SUP A1 Epita 2011 Organisation du Travail Le projet se divise en plusieurs parties indispensables à la conception du jeu, toutes aussi capitales les unes que le s autres. 2.5.1 Moteur Graphique Le moteur Graphique constituera une grande partie du projet. La 3D prendra son importance au niveau de l’interface graphique, dans la conception des personnages ainsi que des scènes de combats (ring de boxe et skybox elle-même). Le menu du jeu sera quant à lui développé en 2D.ssssssssss 2.5.2 Moteur Physique Le moteur Physique va nous permettre de gérer les collisions entre les personnages et entre les personnages et le décor, mais aussi leurs déplacements ainsi que les effets produits directement ou indirectement par le personnage contrôlé par le joueur. Il devra aussi s’occuper des points de vie de chaque combattant et en ce sens, de la fin d’un combat (dès que l’un des deux combattants voit sa barre de vie descendre à zéro). 2.5.3 Réseau La partie Réseau inclura, en premier lieu, un chat, afin que nous nous familiarisions avec la gestion d’envois de fichiers (ici, textes pour le chat) entre un serveur et un client. Il est fort possible que nous poussions plus loin cette partie, mais cela dépendra de notre avancée dans le projet (surtout en matière d’Intelligence Artificielle), ainsi que du temps qu’il nous restera. 2.5.4 Intelligence Artificielle Comme dit précédemment, l’Intelligence Artificielle et le Réseau sont quelque peu dépendants. En effet, nous ne voulons favoriser ni l’un ni l’autre, nous tenterons alors de mettre en place une intelligence artifielle qui fera réagir le combattant adverse à la place d’un joueur. Ainsi, nous devrons la gérer telle qu’elle puisse se battre contre un joueur dans les règles de la boxe (c’est-à-dire utiliser des coups réglementaires tels que les 10 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 coups de poings, les crochets, les uppercuts . . .), se déplacer, prendre des décisions (attaque ou défense) en fonction du contexte. 2.5.5 Divers Le jeu disposera de son site Internet destiné à informer les curieux de l’avancement du projet. Il se devra d’être soigné et propre, et présentera les caractéristiques du projet. Il inclura entre autre des parties indispensables telles que Téléchargements (qui regroupera le cahier des charges, les rapports de soutenances et les dernières versions du jeu notamment), mais aussi une page Liens (qui réunira les différents liens utiles et efficaces en vue de bien avancer dans la conception du jeu). L’interface graphique concerne le menu du jeu ainsi que l’écran du jeu. Le menu servira de base de lancement du jeu. Outre l’option Play !, une section Option (où l’on pourra choisir la taille de son écran, l’activation du son) et une section Réseau seront présentes. Dans le cas où nous verrions l’utilité d’autres sections, il est évident que nous les inclurions. Lors d’un combat, nous pourrons voir deux personnages se battre, leurs points de vie respectifs, et un texte déclarant le vainqueur lors de la fin d’un combat. Si nos prévisions sont bien respectées voire dépassées, nous pourrons essayer d’ajouter des menus plus complexes et plus détaillés en rapport avec la boxe (plusieurs rounds, comptage des points). Nous implémenterons du son dans le menu, il sera également présent durant le jeu. Nous tenterons de trouver des musiques d’ambiance pour le menu et d’autres en accord avec l’intensité d’un combat. Il est fort probable que certaines musiques proviendront d’ “Hajime no Ippo” qui fait correspondre à chaque instant une musique adaptée. Comme tout jeu qui se respecte, d’autres utilités seront présentes. Un installeur/désinstalleur efficace et simple d’utilisation afin que tous puissent jouer à Blazin’ Fight. Une jaquette, un manuel d’utilisation ainsi qu’un boitier de jeu seront présents et rendus à la fin de notre dernière soutenance. 11 Blazin’ Fight Team Beer Land 2.6 INFO-SUP A1 Epita 2011 Répartition des tâches Kévin Moteur Graphique Moteur Physique Intelligence Artificielle Réseau Divers Fabrice * * * Vincent * * * * * Kévin 0 - Fabrice 0 - Vincent 0 - Laurent 0 0 - Kévin 0 Fabrice 0 + 0 Vincent + 0 Laurent 0 0 0 * * * * Laurent * Légende pour les tableaux de soutenances : – débuté : 0 – achevé : + – ne participe pas : 2.6.1 Première soutenance Moteur Graphique Moteur Physique Intelligence Artificielle Réseau Divers 2.6.2 Deuxième soutenance Moteur Graphique Moteur Physique Intelligence Artificielle Réseau Divers 12 Blazin’ Fight Team Beer Land 2.6.3 Troisième soutenance Moteur Graphique Moteur Physique Intelligence Artificielle Réseau Divers 2.6.4 INFO-SUP A1 Epita 2011 Kévin 0 0 Fabrice 0 0 0 Vincent 0 0 Laurent 0 0 0 0 Kévin + + + Fabrice + + + Vincent + Laurent + + + + Soutenance finale Moteur Graphique Moteur Physique Intelligence Artificielle Réseau Divers En fin de soutenance finale, toutes nos parties doivent être terminées et notre projet jouable. Il inclura également une jaquette, un manuel d’utilisation, une installation/désinstallation, un boîtier et un CD contenant le jeu ainsi que ses sources . . . Enfin, le rapport de la soutenance finale rassemblera l’ensemble de nos connaissances acquises au cours de l’année, grâce à la conception de ce jeu. 13 Blazin’ Fight Team Beer Land 3 INFO-SUP A1 Epita 2011 Nos débuts en programmation Avant de commencer toute programmation, il était indispensable de savoir comment aborder le jeu. Après de nombreuses recherches diverses, il nous a fallu choisir entre différentes bibliothèques : notre choix fut relativement rapide et nous avons opté pour OpenGL et la librairie graphique GLFW. En premier, nous devions initialiser OpenGL et GLFW dans notre code, puis ensuite ouvrir une fenêtre sous GLFW et ”l’obliger“ à rester ouverte. Une fois l’initialisation réalisée, nous pouvions enfin commencer à nous répartir dans nos parties respectives. 14 Blazin’ Fight Team Beer Land 4 4.1 INFO-SUP A1 Epita 2011 Moteur Graphique Environnement du jeu L’un des premiers objectifs au niveau graphique était de modéliser l’environnement du jeu sous forme cubique. Il fallait par conséquent tout d’abord apprendre à concevoir un cube sous OpenGL à l’aide de ”glBegin(GL_QUADS)“. On a donc directement commencé par la skybox. La skybox est un cube qui va représenter noter paysage, notre décor de jeu. Il fallait par la suite placer notre caméra à l’intérieur de cette skybox à l’aide de la commande ”gluLookAt“ ; assimiler les coordonnées dans l’espace, ainsi que le fonctionnement de cette commande nous a posé quelques soucis. Pour y remédier, l’utilisation des divers couleurs pour chaque côté de la skybox s’est révélé très utile. Il était nécessaire de déterminer des coordonnées optimales pour avoir une vision de jeu souhaitée. Au fur et à mesure des essais, on s’est finalement rendu compte que l’axe des abscisses était totalement inversée, chose à laquelle on a du remédier en faisant une translation de cette axe dans le sens inverse. Par la suite, on a modélisé le ring - sensé être notre map de jeu - à l’intérieur de la skybox. Notre ring, tout comme notre skybox, est représenté par un cube que l’on place à une position judicieuse par rapport à notre caméra. Le principal problème rencontré était encore une fois celui des coordonnées dans l’espace, de se représenter le plan, de savoir où était l’origine. Une fois le problème bien maîtrisé, il suffisait de découper le ring en plusieurs parties : le tapis, les coins, les cordes et de modéliser chaque partie séparément en ajustant les coordonnées. Pour compléter l’environnement du jeu, nous avons modélisé le personnage : le boxeur, sous forme de cube. Sa tête est simplement un autre cube placé sur le cube formant son corps. On l’a conçu directement sur le ring afin qu’il puisse se déplacer horizontalement par rapport a notre ring et ainsi pouvoir commencer les collisions avec les cordes et les coins. Nous avons poursuivi en ajoutant des éléments importants dans le décor. La conception des poteaux du ring, et des cordes fut une tâche plus aisée, et le seul problème fut encore une fois au niveau des coordonnées. Nous 15 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 avons également implanté un mouvement à notre cube via les touches directionnelles du clavier. A l’aide des fonctionnalités de GLFW ”glfwEnable(GLFW_STICKY_KEYS)“ et ”glfwGetKey“, nous avons modifié la position du cube par rapport à la caméra. Notre personnage peut ainsi librement se déplacer dans notre environnement. Problèmes Rencontrés : Dans cette partie graphique, les problèmes n’ont pas été majeurs. Bien qu’au début, nous ne savions comment débuter, notre avancée fut rapide. A l’aide de nombreux tutoriaux français et anglais, nous avons compris comment réaliser notre jeu. Nous avons préféré utiliser le frame pour conserver notre fenêtre ouverte, plutôt que des outils tels que SetupGL ou encore le sleep. Ensuite, tant au niveau du déplacement du cube, que de la création dudit cube-personnage, ou de celle du décor (skybox et ring, cordes, poteaux), le principal problème était la gestion des coordonnées. 4.2 Texturing Le second objectif était d’implémenter des textures de part et d’autre de la scène de jeu afin de rendre le visuel plus agréable et surtout plus virtuel. Pour débuter, il a fallu choisir entre les nombreuses librairies de chargement de textures. J’ai finalement choisi la librairie DEviL, l’une des librairies les plus utilisées dans ce domaine. Ce choix s’explique par la simplicité d’implémenter des textures mais également parce qu’on y trouve de nombreuses sources d’aides. L’implémentation des textures s’effectue alors en trois étapes : – Activation des textures avec “glEnable(GL_TEXTURE_2D)” ; – Chargement des textures avec “ilutGLLoadImage (’image’)” ; – Attachement de la texture aux surfaces souhaitées à l’aide de “glBindTexture(GL_TEXTURE_2D, texture)” ; Ainsi, la première partie du temps fut consacré à l’étude de l’implémentation des textures. J’ai donc tout d’abord créé un simple carré sur lequel j’ai appliqué une texture. 16 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 La seconde partie de mon temps était destinée à la recherche de textures adéquates avec l’esthétique du jeu souhaitée. J’ai tout d’abord procédé par la quête d’une texture applicable au mur de l’enceinte de la salle. C’est ainsi qu’est apparu le premier problème. Lorsque l’on appliquait une texture au mur gauche de ma Skybox, l’ensemble de la scène devenait terriblement sombre. La solution à ce problème était de rattacher (glBindTexture) aux endroits sombres une texture blanche créée au préalable sur Paint par exemple. Le problème résolu, il s’agissait maintenant d’étudier la méthode pour pouvoir appliquer plusieurs textures à une seule face. L’idée de recréer plusieurs faces plus restreintes sur cette même face devint la solution. On appliquait ainsi sur ces faces plus restreintes les textures souhaitées. Pour rendre le visuel plus agréable, nous avons créé certains objets pour rendre la scène plus réaliste tel qu’un distributeur de canette, une porte, un interrupteur, une bouche d’aération. On appliqua les textures de manière récurrente sur toutes les surfaces de notre jeu : les murs, le ring, les tableaux, la porte etc... Finalement, l’application des textures a permis de rendre le jeu plus proche de son aboutissement final. Un pas qui sera d’autant plus grand avec l’implémentation de modèles 3D. La facilité d’implémentation des textures nous a permis de créer facilement d’autres thèmes esthétiques pour apporter une diversité de la scène. Ainsi, d’autres stages ont été créés avec pour chacun un thème de design spécifique. 4.3 Implémentation d’Objets 3D Le dernier objectif était d’implémenter nos acteurs du jeu, plus précisément des objets 3D. Ainsi la première partie du temps fut consacré à la recherche de modèles 3DS pouvant correspondre à nos fameux boxeurs. Cette recherche a été bien plus longue que prévue du fait de la pauvreté de modèle de boxeurs gratuit disponible. En effet, le seul modèle trouvé était doté de l’extension .Mb qui ne peut s’ouvrir qu’avec l’aide de Maya, un logiciel de modélisation et d’animation 3D. Il a fallu ainsi l’exporter en .Obj pour nous per- 17 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 mettre de l’ouvrir avec 3DS Max, un autre logiciel de modélisation 3D et finalement l’exporter en .3DS, l’extension souhaitée. La prochaine étape fut celle de l’étude du loader, de l’implémentation du modèle dans notre code. Elle se déroule en trois étapes : – Création du Modèle – Chargement du Modèle à partir de .3D – Drawing du Modèle Lors du traçage du modèle, on s’est aperçu qu’il n’apparaissait pas à l’écran. Il est nécessaire de faire une translation du modèle (glTranslatef) pour le placer à l’endroit désiré. Le second problème fut que l e traçage du modèle désactivait les textures 2D, ainsi pour y remédier, il fallait les réactiver après chaque traçage à l’aide de glEnable(TEXTURE_2D) ; La dernière étape fut l’animation des personnages. Etant un jeu de boxe, il a fallu créer l’animation des coups de poings des deux boxeurs. Cette animation s’effectue à l’aide de 3DS Max. On effectue ainsi l’animation des pieds lors d’un mouvement et l’animation des deux poings lors des coups. L’implémentation de cette animation dans notre code fut bien plus compliquée. Pour cela, je crée un tableau de modèle dans lequel j’enregistre les modèles à différents instants correspondant à différentes positions du personnage composant l’animation. Ainsi, lorsque l’on effectue un déplacement, les modèles correspondant à l’animation des jambes sont tracés et permet ainsi de voir apparaître ce déplacement dans notre jeu. On procède de la même manière avec les poings. Ainsi en résultat, on a donc inséré les deux boxeurs constituants nos personnages principaux du jeu. Ces deux boxeurs peuvent dès à présent mettre des crochets du droit, des crochets du gauche et se déplacer avec des mouvements aux jambes. 18 Blazin’ Fight Team Beer Land 4.4 INFO-SUP A1 Epita 2011 Système de barre de vie et autres animations en tout genre La partie esthétique ainsi que l’implémentation d’objet 3D dans le jeu étant terminé, il restait à définir le système de barre de vie afin de finaliser le jeu. Ainsi, chaque boxeur possède une barre de vie pleine au commencement du jeu. Puis lorsqu’un boxeur reçoit un coup de poing de la part de l’adversaire, sa barre de vie diminue. Le premier qui ne possède plus de vie se retrouve K.O. D’autres animations du personnage ont été créés tel que la position “K.O” , la position “Victoire”, ou encore la position “protection” qui permet au boxeur de ne pas perdre de vie lorsqu’il subit un coup de poing adverse. Le système de barre de vie n’est autre qu’un rectangle dessiné à l’aide de “glBegin(GLQ U ADS)00 aveccommeabscissedesvariables( xminetxmaxdlimitantlerectangle)quidimin Lorsquexminetxmaxsontgales, c0 est − − direquelabarredevieestnulle, leboxeurestK.O, onchargealor 19 Blazin’ Fight Team Beer Land 5 5.1 INFO-SUP A1 Epita 2011 Moteur Physique Gestion des mouvements - Collisions Cube-Skybox La partie physique a simplement été débuté, comme il l’est écrit dans notre cahier des charges. Cela avait pour but de nous familiariser tous avec le Delphi, et nous consacrer à la partie graphique et à celle du réseau bien plus longues. De plus, il était nécessaire d’avoir un certain rendu graphique pour pouvoir réellement commencé la physique. Ceci fait, nous avons géré en premier lieu la collision des objets. A l’aide de simples coordonnées, nous avons fait en sorte que le personnage ne puisse pas dépasser une certaine limite. En l’empêchant de dépasser certaines positions, le personnage ne peut donc pas traverser les cordes. De plus, le cubepersonnages, ses déplacements, la skybox, et le ring ont été fait de telle façon qu’ils ne puissent se traverser. De cette façon, nous n’avons pas de bugs, tels que le personnage traverserait le ring ou la skybox, ou bien un ring plus grand que la skybox, ou encore une sortie de skybox dû à des déplacements. Problèmes rencontrés :N’ayant pas beaucoup développé cette partie, nous návons pas rencontré de problèmes importants. Mais toutefois, nous pensons avoir developpé cette partie de telle sorte que notre partie physique soit une application de notre partie graphique. 5.2 Collisions entre cubes En premier lieu, on a commencé d’abord par modéliser un second cube qui allait par la suite me permettre de gérer les collisions, phénomène essentiel du moteur physique. Après avoir réaliser mes deux cubes, le premier objectif que l’on se fixait, était de faire bouger ces cubes dans le ring sans qu’ils puissent sortir de celui-ci. Le premier problème rencontré fut de gérer les mouvements de mon second cube car lorsqu’on lui assignait des touches pour bouger, il se déplaçait en même temps que le premier. J’ai donc du séparer, grâce au code, les mouvements des deux cubes à l’aide des fonctions “GLPushMatrix” et “GLPopMatrix”. Une fois le problème des déplacements réglé, on a décidé de mettre en place un système de rebonds. Le procédé fut simple : j’assignais une coordonnée limite à chaque cube à ne pas franchir et tant que cette coordonnée 20 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 n’était pas dépassée, le cube pouvait continuer à se déplacer dans la direction choisie. Et lorsque cette limite est atteinte, il suffisait juste de lui retrancher ou de lui ajouter une valeur assez élevée pour que le rebond soit plus ou moins “marqué”. Après avoir régler ces petits détails , nous avons commencé les choses sérieuses, c’est-à-dire la gestion des collisions entre les deux cubes en déplacement. Très vite, nous nous sommes aperçus que cette gestion était beaucoup plus complexe. Nous n’arrivions pas à limiter les collisions à une simple distance, c’était soit l’axe des abscisses, soit l’axe des ordonnées qui faisait barrière. On devait donc par la suite ajouter des conditions mêlant les deux axes pour parvenir à mes fins . Une fois le premier cube géré, il me suffisait de réitérer ce procédé pour le second objet, afin d’obtenir deux cubes pouvant se déplacer indépendamment l’un de l’autre dans une surface fermée et ne pouvant pas se traverser mais seulement rentrer en collision. 5.3 Collisions entre Personnages Nous avons ensuite amélioré le système de collisions : – La première dans laquelle la modification des coordonnées des personnages est nécessaire car après chargement de modèles 3D, les anciennes coordonnées ne correspondaient plus, ce qui pouvait entrainer de grosses erreurs dans la gestion des collisions entre les deux personnages et celles entre les personnages et les cordes. Pour se faire, on a utilisé le même procédé qu’auparavant, ce qui fut somme toute assez simple. – La seconde dans laquelle, après le chargement et l’assignation d’une animation de coups à une touche du clavier (M pour le premier boxeur, V pour le second ), on gérait en quelque sorte la gestion des collisions entre les coups et les personnages de telle manière que ceux-ci ne les traversent pas (le procédé bien que peu précis demeure assez efficace) : il suffisait donc de fixer une certaine limite de distance entre les deux boxeurs. Si celle-ci est trop courte ou qu’il y a collision entre les deux boxeurs, le coup ne peut pas être effectué. Cependant, le problème majeur rencontré est que lorsque l’on démarre une fois le coup, celui-ci ne peut être arreté par une collision avec l’adversaire (d’ou la distance limite que l’on a fixé). 21 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 – Enfin la dernière partie dans laquelle on applique un mouvement de rotation aux boxeurs. Toutefois, on a rencontré un problème majeur : après application de la fonction “glRotate”, notre boxeur était systématiquement en apesanteur dans la Skybox ou encore il disparaissait sous le ring. En effet, l’origine de notre modèle ne correspondait pas au point (0,0,0) alors que la rotation (“glRotate”) s’appliquait à ce point calculé ici ; la rotation ne se faisait donc pas par rapport au centre du personnage (d’où l’étrange mouvement) empêchant ainsi toutes possibilité de pivot. Pour régler ce problème,on a du donc translaté notre personnage à l’aide de 3DS Max à la position (0,0,0). 22 Blazin’ Fight Team Beer Land 6 6.1 INFO-SUP A1 Epita 2011 Intelligence Artificielle Gestion des touches de clavier et début d’I.A. La gestion des touches du clavier afin de jouer avec deux boxeurs avait été rendu possible. Il nous fallait donc ensuite s’attarder sur l’implémentation d’une Intelligence Artificielle qui permettrait ainsi au joueur de s’entrainer et d’affronter seul l’ordinateur. Ainsi, la gestion des touches du clavier ne concernerait plus qu’un seul joueur. Dans ce cas présent, le code se base sur la gestion des touches du clavier. Effectivement, nous demandons à un boxeur que nous avons au préalablement chargé d’effectuer certains mouvements désirés. Nous assignons au boxeur numéro deux une position de telle sorte qu’il n’entre en collision ni avec l’autre boxeur ni avec les cordes et qu’il soit sur le ring. Ceci fait, nous lui demandons d’arriver à un certain lieu, tant que la position n’est pas atteinte, nous lui demandons de reculer (ou avancer selon le cas). Notre pas est petit de telle sorte que l’on voit bien que l’I.A avance, et de préférence la même que pour celle du boxeur numéro un, piloté par le joueur pour plus d’équité. Une fois qu’il atteint la position voulue, nous lui demandons de se diriger vers un autre point. Et ainsi de suite, nous avons ainsi utilisé la méthode de “Check-points” afin que notre I.A fasse ce qu’on lui demande. 6.2 l’I.A, maîtresse du Jeu LŠIntelligence Artificielle a été entièrement conçue. Elle sŠexécute grâce à lŠutilisation dŠune boucle dans laquelle sont exécutées aléatoirement, mais selon des fréquences prédéfinies, des actions comme les déplacements (que ce soit a gauche, a droite, en haut ou vers le bas), les coups ou la protection. 23 Blazin’ Fight Team Beer Land 7 INFO-SUP A1 Epita 2011 Réseau 7.1 Première Partie - Le Chat 7.1.1 Chat client-serveur basique La partie réseau fut plus complexe à mettre en oeuvre que ce qui était initialement prévu. Malgré de nombreuses recherches, aucun tutoriel intéressant sur l’utilisation des composants ICS n’a été trouvé. Nous avons du nous contenter de codes sources de chats existants qui, bien que commentés, furent assez compliqués à comprendre. Nous avons donc plusieurs fois buté, notamment lors de l’utilisation dans un code d’une constante qui à notre grand étonnement variait. Nous apprenions plus tard qu’il s’agissait d’une variable statique qui est une constante modifiable. Nous avons cependant réussi grâce à ces exemples à coder un chat où un serveur et un client peuvent s’envoyer des messages mais le nombre de clients connectés au serveur était limité au nombre de 1. Nous nous sommes rendus compte que l’exemple sur lequel nous nous basions pour recoder notre chat utilisati un TWClient comme serveur et ne pouvait donc établir qu’une seule connection. Après avoir réalisé ces premiers codes de réseau (un serveur et un réseau), nous avons recommencé un nouveau chat. Cette fois-ci, nous voulions créer une unique forme comprenant un choix, donc deux alternatives : l’utilisateur veut-il être client ou serveur ? Ainsi dans notre form, il peut choisir au moyen de boutons radios (RadioButtons). Ensuite, vient deux groupes de boites (GroupBox), l’un pour le serveur, l’autre pour le client. Dans notre première boite, le port est initialisé à 42 et nous pouvons lancer ou arrêter le serveur. Pour le cas du client, le port est également initialisé à 42, tandis que l’adresse indiquée est celle par défaut du réseau local (127.0.0.1). Deux boutons sont également disponibles pour se connecter ou se déconnecter. Une dernière GroupBox est créée servant à l’affichage du texte, ainsi qu’à son envoi par l’intermédiaire d’un Edit et d’un bouton ”envoyer“. Lors du lancement du serveur, un message est envoyé au serveur qui indique que la connection a bien été établie. Le serveur n’a ainsi plus qu’à attendre l’arrivée d’un client. Lorsque ce client arrive enfin, chez le serveur tout comme chez le client, il est indiqué que ce client est bien connecté, 24 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 ajoutons à cela la précision de l’addresse du serveur. Il faut également noter que si un client se connecte alors qu’aucun serveur n’a établi de connection, un message d’erreur est envoyé au client. Ensuite, lors d’envois de messages, on peut distinctement voir la différence de réception de messages. Que ce soit chez le client ou chez le serveur, on voit qui envoie les messages suivi ensuite du message lui-même. A tout moment, il est possible aussi bien du côté du serveur que celui du client d’arrêter la connection. Seuls les messages de déconnections diffèrent. Lors de l’arrêt du serveur, on indique bien que c’est le serveur qui s’est arrêté. D’ailleurs automatiquement, le client se déconnecte et doit attendre qu’un nouveau serveur soit établi pour qu’il puisse se connecter. Lors de la déconnection d’un client, il est bien indiqué que c’est le client qui s’est déconnecté. Et dans ce cas, le serveur ne s’arrête pas, il attend qu’un nouveau client se présente. Enfin, nous avons également mis en place un menu en haut du chat, afin que l’utilisateur puisse le fermer normalement. Nous avons également mis en place un menu ”About“ qui indique la version du chat utilisé. Problèmes rencontrés :Nous avons opté de manière relativement rapide à utiliser ICS, qui présente de nombreux exemples utiles. Après de nombreuses heures interminables de recherches et de tentatives de compréhensions de code, nous avons commencé par réaliser un chat en deux temps : un serveur et un client. Les difficultés ont commencé, par l’affichage des textes. Cela nous a permis de débuter dans le réseau, car si nous avions directement réalisé un chat avec choix entre serveur et client, nous aurions pu mal évaluer la situation et faire des envois de messages par le biais de simples Edit et Memo. Ainsi, nous avons pu voir la difficulté qui nous attendait, pour afficher les textes chez un client ou chez un serveur, il fallait utiliser les WSocket, qui servent à stocker en mémoire ce qui a été envoyé, afin qu’ensuite on puisse les afficher quelque part. Avant cela, il était nécessaire d’initialiser le serveur (Adresse, Proto, Port). C’est seulement après que l’utilisateur ait indiqué un port de serveur, ainsi qu’un port de client et une addresse de connection de serveur que la connection peut être établie. Nous avions rencontré un problème qui faisait que le texte écrit par le client n’était pas envoyé au serveur, alors que le texte écrit par le serveur était bien envoyé aussi bien chez le serveur que chez le client. Mais finalement, le problème a été réglé, le problème venant au début d’une mauvaise gestion des WSocket. 25 Blazin’ Fight Team Beer Land 7.1.2 INFO-SUP A1 Epita 2011 Gestion de plusieurs clients Après notre version du chat de la première soutenance entre un serveur et un client, il fallait pouvoir disposer d’un serveur qui puisse gérer plusieurs clients. Afin de comprendre de mieux en mieux le réseau et ses différentes possibilités, nous sommes retourné à la construction de deux formes : l’une pour le serveur et le second pour le client. Form Client : Tout d’abord un “MainMenu” afin d’avoir des onglets “Fichier” et “ ?”, avec possibilité de fermer proprement le client et un “A propos” sur la version de notre chat. Ensuite, tout ce qu’il a de plus basique : un TMemo qui affichera les chaînes de caractères que l’on voudra, un TEdit qui permettra d’écrire des messages et deux autres TEdit pour l’adresse IP du serveur et le port adequat. Trois boutons (Connection, Envoyer, Déconnection) sont également ajoutés, ainsi qu’une TCheckBox où l’on peut y inclure le son (ce dernier ajout n’étant que secondaire). On notera également la présence d’un TTimer et surtout du TWSocket du Client. L’adresse IP et le Port sont paramétrés par défaut à “127.0.0.1” et “1337”. Nous avons créé une procédure ConfigLocalParam qui s’occupe, comme son nom l’indique, de paramétrer par défaut en local. Et ainsi lorsque l’on clique sur le bouton de connection, cette procédure est lancée. Lors d’un click sur le bouton “Envoyer”, quelques petites options sont ajoutés (même si elles ne sont pas majeures, elles ajoutent de l’esthétisme). En effet, ceci fait, le bouton de connection n’est plus cliquable, contrairement aux boutons d’envoi et de déconnection. Ce genre d’esthétique est fait pour les autres boutons également (impossible de cliquer sur connection si on est déjà connecté, de même impossible de se déconnecter ou d’envoyer un message si on n’est pas connecté). Pour revenir au bouton d’envoi, le message écrit dans notre TEdit est envoyé au Socket du client. 26 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Le timer joue le rôle de gestionnaire de problèmes. Si la connection n’a pu avoir lieu, le client réessaye tout en n’oubliant pas de le préciser dans notre TMemo. Toujours pour parler des divers problèmes que l’on peut rencontrer, les déconnections du client sont gérées. Un message est envoyé au client pour l’en informer, et en appuyant sur le bouton de déconnection, le Socket du Client est directement fermé. On envoie également un message au serveur pour lui indiquer que le client a quitté le serveur. Enfin, en cliquant sur les TEdit du port, du message et sur le TMemo, on peut s’apercevoir que le contenu est effacé. Form Server : Pour le serveur, un design similaire avec possibilité de fermeture et un “A propos” à l’aide d’un TMainMenu. Ensuite trois labels : deux servent seulement à indiquer l’adresse IP du serveur et le port, tandis que le troisième change en fonction du client. Les deux premiers sont placés à côté de deux TEdit (comme cité précédemment pour l’adresse IP et le port). Le dernier label se transforme en “En ligne !” si un client se connecte, en “Hors Ligne” sinon. Par défaut, il est mis en “Statut du serveur”. Ensuite, nous avons deux TButtons, pour lancer le serveur et pour l’arrêter, et nous avons également la TCheckBox pour le son. Comme pour le client, l’adresse IP et le port sont mis par défaut. Si l’on est connecté, impossible de se reconnecter, de même pour l’arrêt du serveur. Chez le serveur, on inclut un TTimer, un WSocket Client et un TWServerSocket. Lors du lancement du serveur, un message de bienvenue est lancé. A la connection d’un premier client, un message est envoyé au TMemo, qui indique l’adresse IP, ainsi que le nombre de clients présents. Lorsque l’on lance le serveur, le statut est indiqué (“En ligne”), et le client peut se connecter. A l’arrêt du serveur, le label qui sert à montrer le statut du serveur se change en “Hors-Ligne”. Impossible pour le client par contre de se connecter si aucun serveur ne l’est au préalable. Nous avons également fait en sorte qu’à un simple click sur le TMemo ou sur le TEdit du port, le contenu soit effacé. Voici ce qui a constitué la première partie de mon travail et qui m’a pris un certain temps. Maintenant, il est temps de parler de la seconde partie. 27 Blazin’ Fight Team Beer Land 7.1.3 INFO-SUP A1 Epita 2011 Chat avec gestion des utilisateurs Après la gestion des clients, place désormais à un chat où l’on peut distinctement voir les utilisateurs présents. Notre chat commence de plus en plus à prendre forme (même si ce n’est pas une fin en soi, ca fait toujours plaisir de voir que sa réalisation aboutisse à quelque chose). Le design de cette forme du chat étant tiré de mon précédent et premier chat, il est inutile de re-décrire tous les composants, exceptés les nouveaux. Deux TGroupBox ont été ajoutées , la première inclut deux composants : un TLabel indiquant le “Nickname” et un TEdit où l’on peut mettre son pseudonyme. La seconde inclut une TListBox et deux TButtons, l’un pour rafraîchir la liste, le second servant à kicker un utilisateur. Nous avons également ajouté un bouton de Debug. Contrairement au précédent chat qui contenait deux TWSocket (pour le client et pour le serveur), pour celui-ci nous avons un TWSocket client et un TWServerSocket, évolution possible grâce au notre premier travail effectué avec la gestion de plusieurs clients. Ce que nous avons rajouté dans les envois de textes, c’est que ce soit un serveur ou un client, quand l’un des deux écrit un message, on peut voir le pseudo et l’heure à laquelle le message est envoyé. L’esthétique a été revue, comme pour le chat qui gérait plusieurs clients (certains boutons sont visibles ou non en fonction des circonstances). 28 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Lors de la connection d’un client à un serveur, un message est bien sur envoyé au client (ainsi qu’au serveur), nous avons ajouté à cela l’ajout de l’adresse IP dans la TListBox. Ainsi, nous voyons librement les utilisateurs connectés, et nous pouvons vérifier si on peut vraiment connecter plusieurs clients. Inutile de revenir sur les messages d’erreurs qui sont pris en compte. Ce qui a été rajouté, c’est lorsqu’un client a été déconnecté ou que le serveur est arrêté, la TListBox supprime le client qui a été déconnecté, ou tous les clients si le serveur a été arrêté. Pour ce qui est des nouveaux boutons : le bouton “Refresh” actualise la TListBox avant ensuite d’ajouter la liste des adresses IP des clients connectés. Ensuite, un message indique que l’action a été accomplie. Le bouton “Kick” supprime l’adresse IP d’un client de la TListBox. En plus d’être supprimé de la TListBox, le client est aussi déconnecté du serveur. 7.2 Seconde Partie - Parser Le réseau a encore une fois eu beaucoup de mal à évoluer car dépendant de l’avancement des autres parties du projet. Cependant, tout le principe de celui-ci a été conçu. L’équivalent d’une fonction “Explode” a été réalisé, celle-ci permettra grâce à un simple envoi de chaînes de caractères d’envoyer des informations comme les déplacements, les mouvements (différents coups, protections), le nombre de points de vie que ceux-ci font perdre (choisi aléatoirement en fonction de la difficulté du stage) et l’envoi de messages à son adversaire. Ces différentes informations et actions envoyées par la fonction “Sendstring” dans une simple chaîne de caractère sont découpées et récupérées par notre équivalent de la fonction “Explode” puis analysées grâce à un parseur qui reconnait celles-ci par associations à différents numéros. Par exemple, la chaîne 1/2 sera découpée en une action (numérotée 1) et en une information (numérotée 2) qui seront analysés par le parseur comme un déplacement (action associée au chiffre 1) vers le haut (information associée au chiffre 2). Le premier et principal problème fut rencontré lors de la conception de 29 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 l’équivalent de la fonction “Explode”. Les différentes informations qui sont récupérées dans la chaîne de caractères étant retranscrites dans un tableau statique, l’utilisation de tableau de taille fixe était dérangeante face aux aspects multiples des tableaux en fonction de l’information envoyée. En effet, un déplacement génèrera un vecteur de deux cases tandis qu’un coup génèrera un vecteur de quatre cases. L’utilisation d’un vecteur maximal a été envisagé mais perçue comme “moche”. De plus, le jeu n’étant pas fini, le nombre d’informations pouvait donc encore varier. Après avoir fait des recherches, l’utilisation de la fonction “Setlength” nous a permis de créer des tableaux de tailles différentes pour chaque type d’actions ou informations envoyés grâce au réseau. Nous n’avons cependant aucun rendu graphique car l’implémentation du réseau en tant que tel (liaison serveur-client) n’a pas pu être réalisée dans le jeu. Ce qui fait de cette étape notre objectif pour l’ultime soutenance au niveau du réseau. 7.3 Troisième Partie - l’implémentation Malgré nos espérances, le réseau nŠa pas pu être finalisé à temps. Cependant,le travail effectue sur celui-ci reste disponible dans le CD de notre jeu. 30 Blazin’ Fight Team Beer Land 8 INFO-SUP A1 Epita 2011 Menu Le Menu du jeu a été réalisé à l’aide d’une Form Delphi. Il inclut cinq parties : Play !, Multijoueurs, I.A, Options et Quitter. Chacune de ces parties est déclenchée grâce à la procédure “OnClick”. Il consiste en l’implémentation de plusieurs images constituant chacune des parties du menu. L’image principale est notre image centrale du jeu, nous pouvons la voir aussi bien sur chacun de nos rapports mais aussi sur le site. Il constitue l’image principale et significative de Blazin’ Fight. Ensuite chacune des parties cliquables sont autant d’images. Ces images ont été développées sur “PhotoFiltre Studio” plus simple et plus pratique que le trop banal PhotoShop. Nous avons ainsi pu ajouter au texte plusieurs effets de filtre sur fond noir (comme l’image principale). Lors du click d’une des parties, nous permettons le lancement d’une Application d’extension .exe, qui facilite un codage propre et non “tassé”. Ces applications en .exe sont bien sûr les applications de nos codes Delphi des différents domaines du jeu (le jeu, le réseau, les Options, l’IA et la possibilité de quitter le jeu). 8.1 Play ! Lorsque l’on décide de jouer (click sur “Play !”), le jeu nous demande choisir le stage que l’on désire (notre environnement de jeu). Une fois choisi, le jeu se lance à l’aide de : WinExec (PChar ('<nomdelexe>.exe'), SW_SHOWNORMAL); Ce choix est fait à l’aide d’une forme basique aux couleurs de notre jeu. Le(s) joueur(s)peuve(nt) ainsi commencer à s’amuser ! 8.2 Multijoueurs La partie “Multijoueurs” se décompose en deux parties : d’un côté, notre partie “Chat” où nos différents chats sont disponibles et de l’autre côté, la possibilité entre deux joueurs de s’affronter. Le choix peut se faire grâce à des “TRadioBox”. Lorsque l’on choisit un des trois chats, deux formes de chats sont lancés afin de pouvoir tester la connection (il faut donc un serveur et un client). Le bouton “Annuler” permet de fermer cette application. 31 Blazin’ Fight Team Beer Land 8.3 INFO-SUP A1 Epita 2011 Options Au niveau des options, une nouvelle forme s’ouvre, avec comme bannière la même que celle du site. Le thème de la forme s’inscrit d’ailleurs dans le style du jeu : notre mode “Grillage”. Nous pouvons résumer nos options en trois différents ListBox. Elles servent aux modifications de résolution, de plein écran ou non et de son. Nous pouvons permettre ainsi trois résolutions : 800x600, 1024x768, ou encore 1280x1024. Nous pouvons mettre le jeu en plein écran ou non et pouvons inclure du son ou l’éteindre. Le bouton “Appliquer” enregistre les informations et les retranscrit dans un fichier typé. Ainsi, lors du lancement du jeu, le fichier nommé “Config.txt” est lu, on regarde les données (quelle résolution, plein écran ou non, son allumé ou pas) et le jeu est lancé en fonction de ces réponses. Le bouton “Annuler” ferme l’application sans modification de données. Enfin, le dernier bouton “Défaut” envoie au joueur un message indiquant les options par défaut et les applique au jeu. 8.4 VS COM A l’instar du mode “Play !’, on nous demande le choix du stage avec le même type de form. Ensuite, nous pouvons affronter le boss local, imbattable jusqu’à ce jour (ou presque). Le joueur doit donc affronter l’IA en utilisant les touches du joueur 1. 32 Blazin’ Fight Team Beer Land 8.5 INFO-SUP A1 Epita 2011 Quitter Le menu du jeu se ferme lors du click sur l’image “Quitter”, comme n’importe quelle application : Application.Terminate; 8.6 Autres En plus de ces modes, nous avons fait en sorte qu’une fois que le joueur perd son joueur (mort du boxeur), une form s’ouvre automatiquement pour demander si l’on veut recommencer la partie ou non. Nous avons le choix entre rejouer et annuler (qui fermera l’application). Si l’on choisit de rejouer, la barre de vie du joueur décédé remontera au max, et le joueur pourra ainsi recommencer à se défouler. 33 Blazin’ Fight Team Beer Land 9 INFO-SUP A1 Epita 2011 Site Internet 9.1 Site Internet - Les Débuts Le site web de Blazin’ Fight contient sept pages destinées au public : – Une page “Team” dans laquelle est présentée chaque membre du groupe, auquel on indique un lien vers son courriel ainsi que la ou les partie(s) qu’il réalise(nt) pour pouvoir être joignable par les futurs InfoSup de la prochaine promotion cherchant une aide spécifique. – Une page “Projet” qui résume l’avancée du projet, l’histoire du déroulement de celui-ci, comment nous le vivons et le gérons. – Une page “Screenshots” dans laquelle sont mis en ligne des screenshots du jeu, permettant par un rendu visuel de tenir compte de l’évolution du projet en fonction de chaque soutenance. – Une page “Téléchargements” où sont mis à disposition nos rapports de soutenance, nos executables du jeu ou de modules complémentaires ( le chat par exemple ). – Une page “Liens” contenant les liens que nous avons utilisé pour chacune des parties. Ceux-ci regroupent essentiellement des tutoriels mais aussi des sources qui, nous l’espérons, pourront servir aux prochaines promotions et leur éviter des recherches fastidieuses. – Une page “Accueil” où sont affichés les cinq dernières “news” postées par les administrateurs. – Une page “Archives” dans laquelle toutes les news sont disponibles. Celles-ci sont regroupées dans un tableau ne contenant que leurs titres et leur dates de parution ainsi qu’un lien vers une page nous permettant de lire la "news" choisie. Du coté Administrateur nous avons accès à trois pages : – Une page permettant aux administrateurs de s’identifier par un pseudo ainsi qu’un mot de passe. – Une fois cette étape achevée, un lien vers une page “Admins” apparait sur toute les pages. Cette page contient un tableau de toutes les “news” classées par ordre de parution et permet de les supprimer ou de les modifier. – Cette même page met à disposition un lien vers une page permettant de poster une nouvelle “news”. 34 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Afin de réaliser ce site,il aura fallu tout d’abord apprendre les bases du language HTML, ce qui ne fut pas le problème majeur de sa conception. L’apprentissage des styles CSS a aussi été necessaire pour pouvoir, grâce à un fichier .css, regrouper tous les styles et effets appliqués aux différents éléments du site et lui donner un “design” grâce, entre autres, à l’utilisation des “class” et “id” particulièrement utiles pour les positionnements des <div>. Un des problèmes principaux a été dû à l’approche de la réalisation du site. Après deux tentatives, l’une purement graphique et l’autre uniquement basée sur le code, il s’est avéré que les deux parties devaient être développées simultanément car inter-dépendantes. En effet, créer des éléments pour le design du site sans tenir compte des contraintes apportées par le code ne servent à rien. De même coder sans s’occuper des éléments graphiques (images de boutons, d’en-tête, de menu, la taille de celles-ci...) n’aboutira qu’à une reprise du code pour replacer correctement tous ses éléments. L’initiation à un logiciel graphique tel que Photoshop a aussi été de rigueur afin de créer les différents éléments graphiques composant notre site. Une fois encore, de nombreux tutoriels furent trouvés sur internet, permettant pas à pas de créer notre propre kit graphique. Enfin, nous abordons le problème du dynamisme des pages : se connecter, rédiger des “news”, les afficher, permettre de les modifier ou de les supprimer. Le HTML a très vite montré ses limites, que le PHP a su combler. L’étude de ce langage a permis de réaliser toutes ces actions mais celles-ci sont aussi issus de l’utilisation d’une base de donnée. MySQL fut choisie car, reprise dans de nombreux tutoriels d’utilisation elle semblait être la plus instinctive pour des débutants. La conception de ce site web fut une masse de travail plus conséquente que prévue car demandant l’apprentissage de plusieurs langages ainsi que l’utilisation de différents “outils” comme les bases de données ou Adobe Photoshop. Mais grâce à une bonne gestion du temps de travail, qui fut étalé dans le temps et revue à la hausse, les délais ont su être respectés. Toutefois, le site continuera d’évoluer et de s’améliorer au cours des prochaines soutenances. 35 Blazin’ Fight Team Beer Land 9.2 INFO-SUP A1 Epita 2011 Site Internet - Améliorations Avant d’être mis à jour, le site internet de notre projet a entièrement été refait. Cette décision fut prise car l’aspect graphique du site (le premier que nous ayons jamais réalisé) était vraiment trop simpliste et désagréable à l’oeil. Le design a donc totalement été revu car les couleurs trop vives de l’ancienne version du site donnaient mal à la tête. Certains bugs d’affichage, notamment dans les news, ont été réglé. Après avoir posté des news un peu plus longues que celles rédigées lors des tests, nous nous somme rendus compte que celles-ci ne s’affichaient pas entièrement, ceci étant tout bêtement du à l’utilisation d’une taille maximale pour les “div” d’une news dont le contenu excédant cette taille était caché. Le problème du temps de chargement des pages a également été résolu. Celui-ci était probablement du au fait que chaque bouton utilisait sa propre image dont le format choisi n’était pas le mieux adapté et les rendaient trop “lourdes”. Notre site, qui est donc désormais beaucoup plus dans l’air du temps, propose comme il se doit la dernière version du jeu, le rapport de cette troisième soutenance et des screenshots marquants les évolutions majeures réalisées lors de cette celle-ci (ainsi que quelques corrections et changements mineurs sur les autres pages). 36 Blazin’ Fight Team Beer Land 9.3 INFO-SUP A1 Epita 2011 Site Internet - Evolution finale Pour cette dernière soutenance, le site Web a bien évidemment été mis à jour par lŠajout de news, la mise en ligne de nouveaux screenshots et la mise à disposition en téléchargement du Setup de la version commercialisable du jeu dans son intégralité (Jeu, manuel, jaquette, site internet, sources). Mais le site internet a également été retravaillé afin que celui-ci propose un affichage correct sous les différents navigateurs. PhP nous a permit la détection du navigateur, qui associé à lŠutilisation dŠun CSS dédié à chacun de ceux-ci, propose un rendu visuel unique malgré leur variation. Le site a également été soumis au référencement Google. Cette procédure étant des plus lente, le site nŠapparaît toujours pas lors de la recherche de ses mots-clefs. 37 Blazin’ Fight Team Beer Land 10 INFO-SUP A1 Epita 2011 Divers 10.1 Son L’implémentation nous a requis l’utilisation de la Bibliothèque “FMod”. Une fois les recherches effectuées (car même si le son ne nécessite pas beaucoup de lignes de code, il faut trouver les bonnes fonctions), nous avons pu commencer à l’implémenter. Nous avons créé une fiche qui appelle fmod qui comporte deux types de variables globales : les “PFSoundSample” et les “PFSoundStream”. Avant tout, il faut initialiser les différents sons que l’on veut utiliser par la suite. On crée une procédure qui va initialiser le son : Fsound_init(44100,4,0); Ensuite, pour chaque PFSoundSample on va charger une musique (cela ne marche que pour les sons et non les musiques, c’est-à-dire les musiques de petite taille) : bruitage1 := FSOUND_Sample_Load(1,'gong.mp3',FSOUND_STEREO,0,0); Pour les musiques de grosse taille, on utiliser les PFSoundStream, et au lieu de “Loader”, nous allons “Òpen’ comme ce qui suit : bruitage3 := FSOUND_Stream_Open(PChar('fond.wav'), FSOUND_NORMAL, 0, 0); Ceci fait, nous pouvons également gérer le volume de la musique. Après la procédure d’initialisation, nous créons plusieurs procédures pour chaque son émis, où l’on ne met qu’une seule ligne de code : celle qui fait jouer le son. Encore une fois, tout dépend du type de la musique. Voici les code pour un PFSoundSample et un PFSoundStream : FSOUND_PlaySound(1,bruitage1); FSOUND_Stream_Play(FSOUND_FREE,fond); Dans notre jeu, nous utilisons cette fiche pour appeler ces procédures d’appel pour lancer la musique que l’on souhaite après avoir lancé l’initialisation bien sûr. Nous avons ainsi pu mettre du son au lancement d’une partie (le gong sonne !) ou lorsque les coups sont portés. 38 Blazin’ Fight Team Beer Land 10.2 INFO-SUP A1 Epita 2011 Jaquette La jaquette réalisée sous “Photoshop” représente, sur la face avant, le logo Blazin’Fight, une indication sur l’âge minimum conseillé pour l’utilisation du jeu ainsi que la signature de l’équipe. La tranche,quant à elle, contient le titre du jeu ainsi qu’une indication rappelant qu’il sagit d’un jeu conçu pour ordinateur. Le verso de la jaquette présente un screenshot du menu et de chaque stage, une indication sur la langue du jeu et la configuration minimum requise, une mise en garde sur l’utilisation abusive ainsi qu’un code barre. 10.3 Manuel Le manuel comporte les éléments de base d’un jeu standard. En tout premier lieu, il faut bien sûr mentionner l’avertissement sur les risques d’épilepsie de la part des utilisateurs du produit et ainsi des précautions à prendre dans tous les cas. Elle inclut ensuite son mode d’installation, la présentation du jeu (à savoir une explication minutieuse du menu) et les commandes des touches dont les joueurs disposent. Nous y avons également inclus des explications sur l’interface de jeu et sur la possibilité de discuter en ligne sous trois formes de chats différents. 39 Blazin’ Fight Team Beer Land 11 INFO-SUP A1 Epita 2011 Outils et Moyens mis en oeuvre Dans cette partie, nous allons présenter les différents moyens utilisés afin de concevoir au mieux ce jeu. 11.0.1 Logiciels utilisés Pour le projet : – Microsoft Windows XP – Delphi Borland 7 – Librairie graphique OpenGL – 3D Studio Max – Fmod – install-us pour le site web : – Apache/PHP/MySQL – Adobe Photoshop pour les rapports : – MikTeX – WinEDT 11.0.2 Matériels utilisés Kévin : - Processeur : Intel Core Duo 1.8Ghz - Mémoire RAM : 2048Mo - HD : 240Go - Carte Graphique : Gforce Go 7600 Fabrice : - Processeur : Intel Pentium IV 3.2Ghz - Mémoire RAM : 2048Mo - HD : 180Go - Carte Graphique : ATI Radeon X600 40 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Vincent : - Processeur : Athlon XP 1800+ - Mémoire RAM : 512Mo - HD : 80Go - Carte Graphique : NVIDIA Gforce 4 Laurent : - Processeur : Intel Pentium IV 3.OGhz - Mémoire RAM : 1024Mo - HD : 100Go - Carte Graphique : ASUS P5GD2 Deluxe 41 Blazin’ Fight Team Beer Land 12 INFO-SUP A1 Epita 2011 Bibliographie Tout d’abord, afin d’aborder OpenGL, de comprendre son fonctionnement et son mode de langage : http ://delphipage.free.fr/opengl.html http ://membres.lycos.fr/microfirst/3d/opengl/OpenGLI.htm Un site contenant de nombreux exemples de sources qui permettent de comprendre des morceaux de codes importants et basiques. Il nous a servi pour le moteur graphique comme pour le moteur Physique : http ://www.sulaco.co.za/ Le site officiel d’ICS de F.Piette, indispensable à la conception de notre réseau : http ://www.overbyte.be/framei ndex.html/ Un site français qui regroupe des codes et sources delphi : http ://www.delphifr.com/ Site regroupant de nombreux tutoriels et qui nous a servi pour la conception du site internet : http ://www.siteduzero.com/index.php/ Le forum de la promo 2011 très utile en cas de problème pour pouvoir s’entraider : http ://www.epita2011.fr/ Pour comprendre le , deux liens indispensables : http ://www.grappa.univlille3.fr/FAQ-LaTeX/ http ://www.tuteurs.ens.fr/logiciels/latex/ Notre guide à tous, dans ce bas-monde : http ://www.google.fr/firefox/ 42 Blazin’ Fight Team Beer Land 13 INFO-SUP A1 Epita 2011 Annexes 13.1 Moteur Graphique 13.1.1 Environnement du jeu Vue extérieure de la skybox Vue intérieure de la skybox Modélisation du ring 43 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Modélisation de l’environnement du jeu 13.1.2 Texturing Problèmes de lumière 44 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Blazin’ Fight avant les textures Blazin’ Fight après les textures : Stage Club Blazin’ Fight : Stage Nature 45 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Blazin’ Fight : Stage Ghetto 13.1.3 Implémentation d’Objets 3D – Création du Modèle – Chargement du Modèle à partir de .3D – Drawing du Modèle Soutenance 3, problème de texture 46 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Blazin’ Fight avec ses deux boxeurs Blazin’ Fight - Crochet Droit 47 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Blazin’ Fight - Crochet Gauche 13.1.4 Système de barre de vie et autres animations en tout genre Blazing Fight - Life 48 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Blazing Fight - Fight ! Blazing Fight - K.O. - Winner is Green ! 49 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Blazing Fight - K.O. - Winner is Yellow ! 13.2 Moteur Physique Rebonds entre deux cubes Exemple de collision entre deux cubes qui ne se traversent pas 50 Blazin’ Fight Team Beer Land 13.3 INFO-SUP A1 Epita 2011 Intelligence Artificielle IA se déplaçant vers l’avant IA se déplaçant vers l’arrière 51 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 13.4 Réseau 13.4.1 Chat client-serveur basique Vue d’ensemble du mini-chat Serveur 52 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Client 13.4.2 Chat - Gestion de plusieurs clients Serveur avec plusieurs clients 13.4.3 Chat - Gestion d’utilisateurs nouveau chat avec liste d’utilisateurs et design évolué 53 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 chat avec la possibilité de kick 13.5 Menu Menu du Jeu 13.6 Site Internet 13.6.1 Les débuts Page “Screenshots” du site 54 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Page “Téléchargements” du site Page “Liens” du site Page “Accueil” du site 55 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Côté Administrateur du site 13.6.2 Améliorations Page d’accueil du site Page principale du site pour le client 56 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Page principale du site pour l’administrateur Page Admin Page “Team” 57 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Page “Projet” Page “Screenshots” 58 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Page “Screenshots” (suite) Page “Archives” 59 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Page “Liens” 60 Blazin’ Fight Team Beer Land INFO-SUP A1 Epita 2011 Conclusion Nous voici en fin de rapport de soutenance finale. Nous vous avons exposé nos objectifs, nos délais ainsi qu’un explicatif minutieux de notre jeu et des domaines étudiés. Nous espérons que vous avez pu apprécier l’évolution de notre projet. Nous pensons avoir accompli nos objectifs initialement fixés et pensons avoir un jeu fonctionnel et amusant. Le projet de cette année nous a beaucoup appris : entre autre à tenir des engagements, respecter des délais, travailler en équipe, savoir combiner travail collectif et travail individuel. Dans notre cas, nous avons également amélioré notre expérience de la gestion d’un projet et de la programmation d’un logiciel (ici un jeu). 61