1 Projet Informatique (CSC 3502) Développement dun jeu de combat 2D de type arcade Étudiants :...
-
Upload
simonette-potier -
Category
Documents
-
view
103 -
download
0
Transcript of 1 Projet Informatique (CSC 3502) Développement dun jeu de combat 2D de type arcade Étudiants :...
1
Projet Informatique (CSC 3502)
Développement d’un jeu de combat 2D de type arcade
Étudiants :
Valérie BRANCHE
Jacqueline TAN
Tian Sheng TAN
Muqiu ZHENG
Lundi 02 Juin 2008
Encadrant : Sébastien LERICHEdu département informatique
2
Plan de présentation
1. Présentation du sujet
2.1 Le site web : Son contenu et son codage2.2 Le site web : Aperçu
3. Installation et appréhension de la SDL
4. Principe du chargement d’image
5. Gestion du temps
6. Règles d’animations et de mouvements
3
Plan de présentation
7. Boucle locale
8. Algorithme général
9. Esthétique du jeu
10. Critiques du résultat
11. Propositions d’évolution
12. Conclusion
4
1. Présentation du sujet
Concevoir un jeu de combat 2D de type arcade dans l’esprit d’un Street Fighter
2 joueurs contrôlent chacun un personnage par l’intermédiaire du clavier et de l’écran
Le programme doit respecter des règles d’animations et de mouvements bien définies
5
1. Présentation du sujet
Contraintes de réalisations- Jeu portable sur tout système d’exploitation- Langage C- Code sous licence GNU/GPL
Exigences de qualité requises- Documentation- Cycle en V- Site Web
6
2.1 Le site Web : son contenu et son codage
Contient les documents relatifs au projet (planning, cahier des charges, …), les comptes-rendus des réunions, les codes sources, une présentation de l’équipe.
Codage manuel en utilisant le langage HTML
Utilisation de frames pour un menu fixe sur la gauche
http://site.voila.fr/piarcade/index.html
6
7
2.2 Le site web : Aperçu
7
8
3. Installation et apprentissage de la SDL
Nécessité d’installer un compilateur (Microsoft Visual C++ 2008 Express Edition)
Téléchargement de la bibliothèque sur un site consacré à la SDL www.libsdl.org
Apprentissage de la SDL grâce aux tutoriaux sur le site du zéro :
- Ouvrir une fenêtre- Manipuler des surfaces- Charger une image- …
9
4. Principe de chargement d’une image
SDL_Surface *ecran = NULL, *imageDeFond = NULL;
SDL_Rect positionFond;
positionFond.x = 0; // pour positionner notre image
positionFond.y = 0;
SDL_Init(SDL_INIT_VIDEO); // Chargement du système vidéo
/* Ouverture d’une fenêtre en mémoire vidéo */
ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
/* Chargement d'une image dans une surface */
imageDeFond = IMG_Load("image.png");
10
4. Principe de chargement d’une image
/* On copie par-dessus l'écran */ SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
/* Mise à jour de l’écran */SDL_Flip(ecran);
/* Libération de la surface */SDL_FreeSurface(imageDeFond);
Utilisation de ce principe sur nos sprites avec des tableaux d’images et des compteurs d’images
11
5. Gestion du temps
SDL_Delay (40) : permet d’attendre 40 millisecondes avant de renvoyer l’image.
On obtient alors 25 images par secondes
SDL_GetTicks ( ) : permet d’obtenir le nombre de millisecondes depuis le début du jeu
Utile pour définir une durée maximale de partie à 100 sec au moyen de timers
timeStart = SDL_GetTicks ()
timeGoing = (SDL_GetTicks () – timeStart)/1000
12
6. Règles d’animations et de mouvements
Importance de définir les propriétés et règles sur : les coups de pied/poing, les sauts, l’accroupissement, la défense…
Exemples
- 3 niveaux de coups de pied/poing
- Un mouvement est intégralement exécuté avant de pouvoir en exécuter un nouveau
- Impossibilité de se déplacer en position accroupie
13
7. Boucle locale
Forme initiale
while( ) { switch ( ) case( touche “ ” enfoncée ) for ( ) // on parcourt les sprites affichage
SDL_Flip( ) ; SDL_Delay( ) ;
}
Problème : nécessite d’étudier tous les sous-cas en fonction des combinaisons de touches
14
7. Boucle locale
Solution apportée
- Définir une variable « état du personnage » au sein
de la structure de donnée associée au personnagetypedef enum {STILL, JUMPING, CROUCH, MIDKICK…} states
- Définir une variable « état du clavier »keystate = SDL_GetKeyState( NULL );
15
7. Boucle locale
while ( ) { /* Obtenir l’état courant du clavier */ SDL_GetKeyState ( )
/* Calcul du nouvel état du personnage */ stateChangeCharacter ( ) /* Mise à jour de l’état du personnage */
updateCharacter (personnage & clavier) … /* Mise à jour de l’affichage écran */ refreshScreen ( )}
16
8. Algorithme général
1. Vérifier l’état du clavier
2. Calculs du nouvel état du personnage
3. Mise à jour du nouvel état du personnage
4. Application des règles d’arbitrage
5. Quelques cas particuliers
6. Chargement des sprites après mises à jour
7. Mise à jour de l’écran ou reprise/fin de jeu
getkeystate
stateChangePlayerOnestateChangePlayerTwo
updateCharacter
result
updateCharacterCombat
printCharacter
refreshScreenrestartGame
if 0
if 1if 0
17
9. Esthétique du jeu
Page d’accueil
- Demande au personnage s’il veut commencer ou quitter le programme
- Demande de rentrer les nom des personnages
Module : welcome.h, welcome.c Fonction : int welcomePage ()
18
9. Esthétique du jeu
Fin de partie
- Vainqueur euphorique et perdant à terre
- Demande aux joueurs de continuer ou quitter le jeu
Module : restart.h, restart.c Fonction : int restartGame ( )
19
10. Critiques du résultat
Les sautsPrise en compte prévue de la pesanteur
Implémentation non aboutie Solution proposée : sauts linéaires
Les rebondsGestion prévue des rebonds
Implémentation compliquée Uniquement gestion des collisions
entre personnages
20
10. Critiques du résultat
Programme non portable
SDL_enableKeyRepeat ne fonctionne pas sous Windows une de nos règles initiales d’animation n’a pas pu être appliquée
Quelques problèmes d’arbitrage notamment dans le cas des sauts
Jeu basique mais possibilités de l’améliorer pour le rendre plus attractif et ludique
21
11. Propositions d’évolutions
Rendre le jeu portable
Ajout de personnages supplémentaires afin de laisser le choix du personnage aux joueurs
Définir des règles de jeu plus évoluées comme des parties en plusieurs tours, dans des univers différents
Implémenter des « coups spéciaux » pour donner un aspect encore plus fun au jeu
Définir une conception dynamique des règles d’arbitrage
22
12. Conclusion
Développement :
- Application du C avec une nouvelle bibliothèque
- Familiarisation avec la manière d’écrire les codes pour faire des jeux vidéos
- Partie conception détaillée essentielle dans notre projet, autant dans sa définition que dans son implémentation.
23
12. Conclusion
Gestion de projet :
[--] Problème de communication au sein de l’équipe pendant le première moitié du projet : communication indirecte via MSN ou par mails
[--] Incompatibilité d’exécution du programme sur nos différents ordinateurs : nécessité de déplacer des sous-dossiers, bugs de l’exécutable…
24
12. Conclusion
[++] Bonne répartition des tâches selon nos aptitudes
(site web, gestion de projet, programmation)
[++] Respect du planning, efficacité dans la détection de problèmes et la recherche de solutions
Bon avancement du projet : pas de retard pénalisant, objectifs initiaux généralement atteints
et obtention d’un programme fonctionnel