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