Enseignement C++ avancé en Master Informatique

 
Références bibliographiques

 
The C++ programming language, Bjarne Stroustrup
The C++ primer, Stanley Lipmann

 
Projet de programmation

2020: Course au trésor dans un labyrinthe hanté

      Enoncé

 
Exemple de labyrinthe

Voila un exemple de labyrinthe.

Prototype pour Linux, MacOSX et Windows

Vous trouverez dans l'archive labh-proto-fltk.tgz encore une nouvelle version du prototype du jeu.
Cette version, une fois décompressée comporte les fichiers suivants:

	Chasseur.cc      Labyrinthe.cc   OpenGL-macosx.o   fltk-1.4-windows/  textures/
	Chasseur.h       Labyrinthe.h    OpenGL-windows.o  fmod/
	Environnement.h  Makefile-proto  Sound.h           labyrinthe.txt
	FireBall.h       Mover.h         fltk-1.4-linux/   modeles/
	Gardien.h        OpenGL-linux.o  fltk-1.4-macosx/  sons/
Les fichiers .cc et .h sont absolument identiques à ceux de la précédente version et donc la migration devrait se faire sans aucun problèmes!

Ajout 23/04/2020
La fonction globale
         void partie_terminee (bool)
permet de terminer la partie. Si le joueur a gagné on l'appelle avec true, sinon avec false. Dans les deux cas cela invalidera la possibilité de tir pour le chasseur et affichera le message «You Win» ou «You Lose» en gros sur la fenêtre.

Ajout 22/04/2020
Cette interface graphique inclut maintenant deux nouvelles possibilités:

Vous trouverez dans l'archive (à re-télécharger) l'exemple mis à jour dans le fichier Labyrinthe.cc et la nouvelle version de la classe Environnement dans le fichier Environnement.h.
Les nouveautés sont repérées par les commentaires:
	/* DEB - NOUVEAU */
	...	
	/* FIN - NOUVEAU */
Quelques nouvelles images pour les caisses et les marques au sol ont été ajoutées dans le répertoire textures.
Fin ajouts

Cette nouvelle version utilise la toolkit graphique FLTK (https://www.fltk.org) qui fonctionne sous les trois systèmes principaux. Une version pré-compilée est fournie dans les répertoires fltk-1.4-linux, fltk-1.4-macosx et fltk-1.4-windows.

La bibliothèque FMOD est utilisée pour le son sous Linux et MacOSX (elle est inutile sous Windows, qui possède les fonctionnalités de son de façon intégrée).

Le fichier Makefile-proto contient tout ce qu'il faut pour compiler le prototype avec g++ sous Linux et MacOSX et avec MinGW-w64 sous Windows, que vous pouvez obtenir à l'URL:

	https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download
ou bien récupérer directement l'installateur ici: mingw-w64-install.exe.

Vous aurez aussi besoin de la commande make que vous pourrez télécharger à l'URL:

	http://gnuwin32.sourceforge.net/packages/make.htm
Cliquez sur le lien Setup qui est à droite de "Complete package, except sources" (premier lien de Download) qui vous permettra de récupérer un installateur.

Vous pouvez plus simplement récupérer directement l'installateur ici: make-3.81.exe.

Une fois mingw et make installés, pensez à mettre à jour la variable d'environnement PATH pour qu'ils soient facilement retrouvés par le shell: (deux dernières lignes)

Pour compiler, quel que soit le système, il vous suffira de dire dans un terminal la commande:

	make -f Makefile-proto
Ce makefile détermine automatiquement le type de votre système. Vous obtiendrez l'exécutable labh sous Linux et MacOSX ou labh.exe sous Windows.

Si l'ancienne version fonctionne bien, vous pouvez bien sur la conserver, je rappelle que vos fichiers restent identiques, seuls l'interface (et le Makefile) sont différents!

Prototype pour Linux (32 et 64 bits) et MacOSX

Vous trouverez dans l'archive LabyrintheProto.tgz un nouvelle version du prototype du jeu incluant la fonction 'right_click' dans la classe Mover. Vous pouvez la surcharger dans la classe Chasseur pour augmenter les possibilités du jeu. Par défaut, dans la classe Chasseur, cette fonction fait tomber le premier gardien.
   Dans cette version, la fonction 'update' du chasseur (numéro 0 du tableau) est aussi appelée, mais ne fait rien par défaut.

Pour compiler l'exemple sous Linux 64 bits: make
Pour compiler l'exemple sous MacOSX: make maclabh

Si vous avez un Linux Debian / Ubuntu, et qu'il demande a ce que la bibliothèque libjpeg.a soit compilée avec -fPIC, vous pouvez en récupérer les sources dans cette archive jpeg.tgz, à dé-archiver APRÈS LabyrintheProto.tgz pour que le répertoire 'jpeg' soit remplacé par celui contenant les sources.

De même, vous aurez besoin de la version Debian / Ubuntu de l'interface: DebOpenGL.o

Cette version du prototype vous permet d'avoir des affiches avec des textures différentes, plusieurs personnages de gardiens en même temps.
Les sons, images et personnages sont regroupés dans des sous répertoires distincts.

Nouveauté: vous pouvez utiliser une nouvelle fonction de la classe Mover pour figer l'animation d'un gardien:

void se_figer ();

Elle est déclenchée par défaut quand on fait un Ctrl. Pour l'utiliser il vous faut récupérer une nouvelle version de OpenGL64.o et de Mover.h.

Voici la composition de l'archive standard:

  • Environnement.h, Mover.h, FireBall.h, Sound.h (à NE PAS modifier!)
  • Gardien.h, Chasseur.h, Chasseur.cpp, Labyrinthe.h et Labyrinthe.cpp qui sont des exemples et que vous devez réécrire en vous inspirant de ceux-là!
  • Les répertoires sons, textures et modèles contiennent respectivement les sons (fichiers .wav ou .mp3) les images des murs, affiches etc. (fichiers .jpg ou .gif), et les modèles de gardiens (fichiers .md2 et .jpg).

    Ces répertoires sont déjà pré-remplis avec des sons, images et personnages. Le code fourni en exemple ainsi que celui dont vous n'avez pas les sources (OpenGL64.o et MacOpenGL.o) cherchent ces fichiers dans ces répertoires.

  • Le fichier Makefile est un makefile pour compiler le prototype du programme avec 'g++' sous Linux et sous MacOSX
  • Le fichier OpenGL64.o contient l'interface graphique (dont les sources ne sont pas fournis)
  • Le répertoire fmod contient la bibliothèque pour le son.
  • Quelques fonctions utiles

  • void partie_terminee (bool)

    Appeler cette fonction avec 'true' si le joueur a gagne et 'false' s'il a perdu. Dans les deux cas cela invalidera la possibilité de tir pour le chasseur et cela affichera le message 'You Win!' ou 'You Lose!!' en gros sur la fenêtre.

  • void message (char* format, ...)

    permet d'afficher un message en haut à gauche de la fenêtre. Cette fonction est du type 'printf', à nombre variable d'arguments de types quelconques.

    message ("Nombre de gardiens restants: %d", nb_gardiens);
              // affiche le nombre de gardiens.
    ...
    message (""); // efface le message précédent.
    Le premier argument a la même syntaxe que pour la fonction 'printf' (faire un 'man printf' pour plus de précisions.

  • Le système sonore permet de contrôler le volume et la position stéréophonique d'un son. Pour cela la fonction Sound::play a deux arguments (optionnels):

    void Sound::play (float volume, float pan)

    'volume' est un nombre entre 0 et 1 (plus c'est grand, plus c'est sonore) 'pan' est nombre entre 0 (gauche) et 1 (droite).

  • Quelques modèles de personnages pour vos gardiens

  • Marvin: Marvin.md2 et Marvin.jpg
  • Potator: Potator.md2 et Potator.jpg
  • Droid: Droid.md2 et Droid.jpg
  • Squelette: Squelette.md2 et Squelette.jpg
  • drfreak: drfreak.md2 et drfreak.jpg
  • Blade: Blade.md2 et Blade.jpg
  • Lezard: Lezard.md2 et Lezard.jpg
  • Samourai: Samourai.md2 et Samourai.jpg
  • Serpent: Serpent.md2 et Serpent.jpg
  • Bon courage - Patrick Amar