Tentative d'un jeu en c++

Projet 18

Caractéristiques

Description

Pour ce projet, j'ai voulu revoir le langage c++ et l'appronfondir, avec tout les connaissances que j'ai pu accumuler jusqu'ici. Mon but était juste de tester un concept de jeu en utilisant la librairie sdl, une librairie que j'avais déjà pû expérimenter au club RPG au semetre 1 à l'IUT. Pour ce projet, j'ai testé certaines techniques que je n'ai jamais mis en place dans mes anciens projets. Je n'ai pas directement lié les collisions aux tuiles, j'obtenais de meilleurs performances et je pouvais avoir des collisions qui ne sont pas forcément rectangulaires. Ma première étape du projet était de créer tout la base pour coder efficacement et rapidement. Comme pour chaque projet : créer d'un gestionnaire de fenetre, fenetre abstraire, surcharger les objets fournie par sdl, pour faire des textures, des animations, des regroupements d'animation. Au niveau des animations, j'ai rajouté quelque chose d'intéressant, la notion de point chaud. Une notion qui permet de faire des animations cohérentes tout en ayant des frames de tailles différentes.

Après avoir mis ces aspects là en place, j'ai codé la base d'un personnage. Ensuite une caméra, qui est tout le temps centrée sur le joueur mais qui s'adapte également à la position de la souris. En effet, le but est de faire attaquer le joueur vers la direction de la souris quand il clique. Pour le sytème de collision de map, je l'ai segmenté en tableau de carré d'une taille N, qui indique quelles boites de collisions (pas forcément rectangulaire) est à tester si le joueur est dans ce carré. C'est justement une façon optimisée au niveau de la rapidité du jeu, et non pas de la mémoire utilisée, de faire des collisions polygonales sans à avoir à tester toutes les collisions avec tout ce qu'il se trouve sur la map. Ensuite j'ai créé des boites de collisions plus complexes que des simples rectangles comme dse rectangles rotatés, puisque la boîte de collision de l'épée du joueur tourne autour de ce dernier quand il attaque. Elle dépent donc de la position de la souris. Cela m'a pris un peu de temps mais au final le résultat était très plaisant et fonctionnait très bien.

En plus sur ce projet, j'ai créé quelques ennemis, et le fonctionnement de tout un système d'inventaire, avec trois emplacements d'armures et deux emplacement d'armes. J'ai rencontré quelques problèmes que doivent sans doute rencontrer ceux qui codent en c++. Un problème de dépendance circulaire mais où une partie du cycle passe par l'héritage entre classes. J'ai résolu difficilement ce bug en adoptant une façon de concevoir l'architecture qui ne me plaisais pas. Ensuite j'ai eu un problème de mémoire, sans doute de pointeur fou, que je n'ai pas su régler. A chaque lancement du programme, c'est une partie du code au hasard qui adoptait un comportement imprévisible. La plupart du temps, le comportement était le crash du programme, mais j'ai obtenu des comportements plus exotiques comme la barre de vie du personnage qui prenait la valeur de vitesse du personnage. Bref, un bug plus que génant.

Pour résumer, avec ce projet, j'ai vu que c'est assez plaisant de coder en c++. C'est un langage qui permet beaucoup de chose, c'est un langage très optimisé mais un langage dont il est fastidieux de débuger les programmes.

Visuels - (cliquer pour ouvrir en grand)

Accueil du jeu. Écran de jeu. Curseur par dessus un ennemi.

Hey test test