PROJET DE LANGAGE C PACMAN 2008
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
INSA RENNES Dept. EII PROJET DE LANGAGE C PACMAN 2008 Enseignant responsable : Melle PRESSIGOUT Muriel Frederick MOLLIE, David PILLET, Pierre HOFFMANN, Manuel COUTAND, Guillaume HELLEUX Mai 2008
Sommaire I - Cahier des charges ..................................................................................................... 3 A - Principes de base du jeu ................................................................................... 3 B - Cahier des charges ............................................................................................. 3 II - Le noyau du Pacman...................................................................... 4 A - Les structures ....................................................................................................... 4 B - L'intelligence artificielle ..................................................................................... 4 III - L'interface graphique : GTK ................................................................................ 5 A - Editeur de maps ................................................................................................... 6 B - Gestion de l'affichage ......................................................................................... 7 Conclusion ............................................................................................................................ 8 2
I - Le Cahier des charges A - Principes de base du jeu Pacman est un jeu où le joueur incarne un personnage du nom de Pacman dans un labyrinthe. Sa mission consiste à manger toutes les pastilles qui se trouvent sur le sol. Pour l’en empêcher, quatre fantômes ont pour mission de le manger. A chaque fois qu’ils réussissent, ils ôtent une vie à Pacman. Pour aider le joueur dans sa tâche, différents bonus à effets variants sont présents. Cependant, après trois essais infructueux, la mission de Pacman sera considérée définitivement comme un échec. B - Cahier des charges Afin d’innover par rapport à la version historique du jeu, différentes options ont été ajoutées. Vous pourrez revivre à travers ce remake : - Le jeu de base du mythique « Mange tout » - Un mode multijoueurs pour s’affronter entre amis - Un éditeur de maps pour réaliser vos cartes les plus folles - Trois niveaux au choix de difficultés des monstres - Une sauvegarde et chargement pour vos parties en cours ou vos meilleurs moments Jouer en mode solo Jouer en mode multijoueurs Accès à l’éditeur de maps Choisir la difficulté des monstres 3
II - Le noyau de Pacman Vous avez découvert les règles et les principes fondamentaux du jeu. Dans l’absolu tout est très clair, mais comment peut-on réaliser tout ça à partir de « int » et de « boucles for » ? A – Les structures La base du projet est fondée sur les structures. Elles permettent de décrire les différents éléments concepteurs de Pacman. Elles sont au nombre de 8 : B – L’intelligence artificielle Le second point d’évolution du projet, et fondamental, est celui de l’intelligence artificielle des monstres. Comment faire avancer les ennemis de façon la plus stratégique possible pour empêcher le pacman d’arriver à ses fins... 4
Les niveaux d’intelligences Trois niveaux d’intelligences ont été conçu correspondant à une amélioration ou un ralentissement du niveau intermédiaire, le niveau normal : - Le niveau 1, Easy : Il s’agit du niveau 1 d’intelligence avec un déplacement aléatoire une fois sur 4. - Le niveau 2, Normal : Intelligence de base, tous les déplacements sont analysés, le demi tour est interdit hormis si une grosse pastille vient d’être mangée. - Le niveau 3, Nightmare : Il s’agit du niveau 3 d’intelligence avec autorisation de faire demi-tour une fois sur 4. Cela permet d’éviter les « appels contre appels » d’un joueur futé qui chercherait à piéger un méchant... Principes de l’intelligence La base de l’intelligence de ces monstres est basée sur les priorités de déplacement. Arrivé à une intersection, si un méchant à plusieurs choix qui se proposent à lui (par exemple gauche, droite et bas), il va analyser lequel de celui-ci lui permettra de se rapprocher au plus près du joueur. Si plusieurs choix sont encore possibles (par exemple gauche et bas), c’est sa priorité qui prend le dessus. Chaque ennemi à un ordre de priorité différent utilisé lorsque plusieurs choix intéressants sont possibles. Voilà le secret de l’intelligence des monstres brisé. Connaissant leur principe de pensée, à vous d’essayer d’en profitez pour exploiter leur faiblesse. Mais sachez que même nous, leurs pères spirituels, n’avons toujours pas réussi à les piéger... III – L’interface graphique : GTK+ Afin de nous permettre de réaliser une interface et de gérer toute la partie graphique de notre Pacman version 2008, nous avons recherché différentes bibliothèques graphiques existantes et en open source. Après avoir étudié les différentes offres disponibles nous avons opté pour la bibliothèque GTK+. Nous avons choisi cette bibliothèque pour plusieurs avantages qu’elle possède. GTK+ est en effet un ensemble de bibliothèques logicielles, c'est- à-dire un ensemble de fonctions informatiques, développées originellement pour les besoins du logiciel de traitement d'images The GIMP. Elle possède donc de très bons outils graphiques, comme la création d’onglets, de barres d’outils et de boutons qui peuvent être très maniables pour les intégrer selon nos besoins et contraintes. De plus GTK+ est également sur les différents systèmes d’exploitation que nous pouvons trouver sur le marché. L’univers GTK+ est composé de multiples exemples d’applications et de tutoriels pour son apprentissage. C’est donc à travers ces tutoriels que nous avons pu développer notre Pacman. Une autre bibliothèque graphique répondait en partie à nos besoin : la bibliothèque SDL, mais malheureusement elle n’est pas du tout adaptée à la création de menu, chose indispensable pour notre projet. 5
A – L’éditeur de maps L'éditeur de map permet de créer de nouvelles maps. Pour jouer avec les maps créées dans l'éditeur, il suffit de les charger durant une partie en mode solo. Menu déroulant : Permet le choix entre les différents types de mur, les deux types de pastilles, le vide et pacman. Le nom du menu change en fonction de l'élément qui a été cliqué dans le Grille de menu déroulant: menu déroulant. Sauvegarder : Si les conditions de validations sont correctes la map est sauvegardée dans un fichier .pcm Conditions de validations de la carte Suite à l’édition des cartes, il faut vérifier la validité de celles-ci. C'est-à-dire qu’il faut vérifier certains paramètres de manière à ce que l’on puisse jouer sur celles-ci. La validation des cartes se fait sur plusieurs points : - La carte doit contenir un Pacman et au moins une pastille, - Pacman doit pouvoir manger toutes les pastilles, - La carte ne peut pas comporter de chemin sans issue, - Pacman ne peut pas etre situé dans une grande zone vide. Une fenêtre pop-up invite l’utilisateur à modifier sa carte si toutes ces conditions ne sont pas respectées. Fonctions Chargement/Sauvegarde Lors d’une partie en mode solitaire, il est possible de sauvegarder sa partie en cours. En cliquant sur « Fichier » puis « Enregistrer ». Cette fonction récupère toutes les informations contenues dans la structure Jeu (le score, le nombre de vie, la carte, etc) et les insère dans un fichier de sauvegarde .pcm qui sera enregistrer dans le dossier d'où l'application a été lancée. Pour effectuer un chargement, il faut cliquer sur l'onglet chargement du menu situé en haut à gauche de la fenêtre. On ouvre alors une fenêtre de navigation à partir de laquelle on peut accéder au fichier de sauvegarde. Une fois le fichier sélectionné, un clic sur le bouton open (ou un double clic sur le fichier), on lance une fonction qui lit alors les informations contenues dans le fichier et remplit au fur et à mesure la structure Jeu. 6
B - La gestion de l’affichage Affichage de la map Pour réaliser le tracé de la map, il fallait créer une aire de dessin dans laquelle il serait possible de « dessiner ». Cependant nous avons remarqué très rapidement que lorsque le dessin se faisait directement sur l’air de dessin et qu’une autre fenêtre passait au- dessus le dessin disparaissait et ne se réaffichait plus, au bout d’un certain nombre de fenêtres lancées, l’UC du PC était à 100%. C’est pourquoi nous avons du créer un Pixmap qui n’est en fait rien d’autre qu’un buffer image de notre aire de dessin. Ce buffer est ensuite relié à l’aide d’événements à notre aire de dessin pour pouvoir rafraîchir l’image sur notre aire. Le tracé de la map repose sur le fait de charger des images existantes sur le disque dur dans notre buffer (pixmap). Tout ceci, la fonction affichage s’en charge avec joie. Le principe est le suivant : la fonction affichage va scruter dans le tableau les éléments (joueur, murs etc…) et va charger les images correspondantes. Une fois le buffer rempli, il est superposé à notre aire de dessin, en fait cette aire de dessin peut s’apparenter à une toile de peinture blanche sur laquelle nous allons dessiner. Rafraîchissement de la map et exécution des commandes Afin de pouvoir gérer le clavier ainsi que le temps depuis notre programme, nous avons fait appel aux interruptions que GTK pouvaient nous offrir. L’interruption concernant la lecture du clavier est relativement simple. Ainsi, lorsqu’une touche est appuyée, le programme principal se stoppe immédiatement et lance la fonction : gestion_clavier(GtkWidget *window, GdkEventKey* event, gpointer data) Cette dernière regarde avec précision quelle touche fut pressée puis mets à jour les variables que notre programme utilisera par la suite. Une fois cette fonction de lecture du clavier achevée, le programme principal reprend la main et continue là où il s’était arrêté. Nous utilisons une seconde interruption pour pouvoir gérer la temporisation. Elle est initialisée comme suit : gtk_timeout_add (100, tempo, NULL) Grâce à cette dernière, la fonction tempo est appelée toutes les 100ms. Libre à nous de choisir ce que l’on veut y faire…. Cette fonction nous permettra de lancer les différents événements... Elle permet de lancer le rafraîchissement de la carte. De plus, tous les 3 appels de la fonction, les monstres et les pacmans pourront se déplacer... Elle gérera aussi les temporisations des différents bonus (Stop monstre, Stop Pacman). Cette fonction permet de cadencer le programme et ainsi d'appeler les bonnes fonctions au bon moment. 7
Conclusion La réalisation de ce projet nous a tout d’abord permis de nous replonger dans notre enfance et ces souvenirs du « mange tout ». Une motivation qui nous aura permis de passer un temps bien supérieur à celui que l’on supposait au départ. Ce projet a approfondi également nos différents acquis en langage C ainsi que fait découvert différents axes qui étaient pour nous inconnus. La compréhension et l’utilisation de GTK+ nous ont demandé beaucoup de temps mais ont permis un résultat satisfaisant. L’ensemble du cahier des charges à donc finalement été pleinement réalisé, et ceci, malgré une prévision pessimiste en milieu de projet qui avait vu supprimer la réalisation du côté multijoueurs, fonction qui est aujourd’hui opérationnelle. Nous tenons également à remercier Muriel Pressigout, pour sa patience et ses conseils durant toute la durée du projet. Nous espérons donc qu’elle passe d’agréables soirées, tout comme nous, à terrasser ses fantômes et amis en mode multijoueurs. 8
Vous pouvez aussi lire