Quelques réalisations personnelles pré-études


Galerie de présentation


Jeu 2hico'

Réalisation d'un jeu-vidéo 2D, inspiré de celui que l'on retrouve parfois sur les smartphones. En langage C et à l'aide des bibliothèques SDL et Fmod, j'ai ainsi pu réaliser un petit soft au gameplay correct, voyez plutôt: Le but du jeu est simple: faire monter l'hélicoptère avec une touche du clavier de façon à éviter les obstacles et les rebords de la carte. Il n'y a pas de fin temporelle au jeu (comme un Tetris d'ailleurs) mais plutôt un enregistrement de la distance parcourue, l'idée est donc de toujours réaliser/battre un record, son propre record bien souvent, qui s'affiche à la fin du jeu, à côté du dernier score.

D'un point de vue algorithmique, toute la difficulté réside dans la réalisation d'un générateur de map infini et aléatoire, ainsi que dans la représentation numérique et abstraite de la map, des obstacles et de la position de l'hélicoptère.

En réalité, on peut dire qu'il existe une myriade de possibilités, des plus simples aux plus complexes, en passant par les plus tordues. Cependant, il va de soi qu'il s'agit plutôt de déterminer la structure de représentation qui optimise au mieux les calculs. Je me suis donc tourné vers les classiques Types de Données Abstraites ou TDA, et me suis arrêté sur la file circulaire car elle est optimisée pour les calculs itératifs avec une logique FIFO (First In First Out).

En effet, cela correspond bien à la logique du "déroulement" d'une map 2D: Chaque "colonne-unité" de la map est identifiée par l'emplacement du chemin et de l'obstacle s'il y en a un. La structure ainsi formée se retrouve ainsi en quelque sorte enfilée tour à tour N fois, N étant la largeur de la map exprimée en nombre "d'unité-colonne" aussi appelé brique dans mon code. Cette largeur est définie dans mon code en tant que constante préprocesseur, de même que plusieurs autres variables paramétrables du jeu telles que la hauteur de la map, la hauteur du chemin, celle des obstacles, etc L'ensemble de ces paramètres m'a permis d'ajuster la configuration du jeu, pour finalement en compiler une version au gameplay correct.

Enfin, la gestion des collisions est réalisée au travers d'une fonction de CallBack qui réalise les tests nécessaires et modifie en direct le "chien de garde" du programme principal...

Le programme ainsi que les sources sont téléchargeables ci-dessous.

NB: Je n'ai pour cette fois pas commenté les sources, ce qui les rend parfois difficilement compréhensibles, je suis toutefois disponible pour répondre aux éventuelles questions sur mon code via la page de contact.


Réalisation d'une démo 3D



Programmer une application 3D n'est pas de tout repos, il faut trouver un moteur graphique qui corresponde aux besoins du produit, qui nous convienne (financièrement et technologiquement parlant) et il faut également s'adapter à la philosophie de l'outil. Cela demande bien souvent beaucoup d'investissements et une bonne compréhension des outils algébriques. Il y a toutefois quelques pépites comme Irrlicht ou Ogre. Ces derniers sont des moteurs graphiques gratuits, multi-plateformes et destinés à ceux qui ne cherchent pas la prise de tête. En effet, ces bibliothèques, qui se basent sur l'API graphique de notre choix (OpenGL, DirectX,...) savent nous séduire en masquant l'implémentation algébrique et hardware. Je vous propose donc ici un exemple d'application que j'ai réalisé avec le moteur graphique Irrlicht que j'ai découvert par curiosité, et étudié succintement. Il s'agit d'un moteur graphique écrit en C++, et qui offre un rendu de qualité plutôt correct pour un outil relativement facile à prendre en main, et cross-plateforme.

Plus précisément, afin de valider mes acquis et pour conforter une légère expérience dans l'utilisation de cette bibliothèque, j'ai décidé de réaliser une véritable application qui permettrait de déplacer un personnage dans un univers donné:

Non sans difficulté, j'ai élaboré une première mouture qui permettait juste d'observer mon personnage et l'environnement avec une caméra libre gérée par la bibliothèque. J'y ai ensuite amené diverses améliorations, par couches successives, pour obtenir le résultat final, c'est à dire une application qui permet de déplacer de façon fluide un personnage dans un environnement de type château. L'application gère ainsi le déplacement vers l'avant, l'arrière, le changement d'orientation du personnage vers la gauche ou la droite. Tout cela se contrôle à l'aide du clavier bien sûr (les flèches ou les touches zqsd). Mais ce n'est pas tout, la caméra est "liée" au déplacement du personnage et reste fixée derrière lui, même si l'on peut encore changer l'orientation de cette dernière à l'aide de la souris. En outre, le personnage peut sauter si l'on presse la touche "espace", j'ai ainsi voulu reproduire le gameplay d'un jeu de type FPS, même si la vue est de type TPS.;)

Toutefois, de par la qualité du moteur graphique, celle des modèles 3D employés (récupérés sur la toile) et celle de mon code, cette application est loin d'être parfaite, il subsiste ainsi de légers bugs dans le déplacement du modèle: quelques blocages du personnage dans les zones anguleuses, le saut du personnage semble par moment ne plus vouloir fonctionner, etc.

Je vous laisse vous faire votre propre opinion, vous pouvez télécharger l'application et les sources commentées à partir du lien ci-dessous.

Info: Pensez à exécuter le fichier dont la résolution se rapproche le plus de la votre sans altérer trop les performances