PROJET DE LANGAGE C PACMAN 2008

 
CONTINUER À LIRE
PROJET DE LANGAGE C PACMAN 2008
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
PROJET DE LANGAGE C PACMAN 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
PROJET DE LANGAGE C PACMAN 2008
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
PROJET DE LANGAGE C PACMAN 2008
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
PROJET DE LANGAGE C PACMAN 2008
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
PROJET DE LANGAGE C PACMAN 2008
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
PROJET DE LANGAGE C PACMAN 2008
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