Snake 3d opengl dev c++

Soyez le premier à donner votre avis sur cette source.

Vue 21 258 fois - Téléchargée 2 903 fois

Description

C'est la mode des jeux de serpent on dirait...
pourtant le mien a qq plus je crois: il est en 3D (y en a déjà un), mais donne pas mal niveau graphismes, on peut déplacer la caméra sur une boule imaginaire, le jeu propose un menu, de l'aide, des écrans de fin: ce que bcp de dvpeurs n'ont pas fait, pourtant sans ça un jeu n'est pas un jeu n'est-ce pas ? ^^

sur le screenshot vous pouvez voir le design rouge, mais en mettant comme texture nommée sol.bmp par exemple la texture de verre on obtient un joli bleu (testez!) ou encore un désert, une sorte de mauve spécial: en fait comme j'étire la texture de 64*64 sur une grande surface, les couleurs donnent une impression de relief et c'est joli ^^

je n'ai pas mis de musique, quoique j'aie déjà utilisé fmod.

question textures, j'utilise (Ô idiot!) glaux.dll (que vous devrez d'ailleurs mettre dans windows\system32 ou encore ds le dossier du projet. le fichier glaux.h est dans le zip ainsi que glaux.dll. vous devrez peut-être mettre le .h dans le dossier include de votre compilo). Malheureusement, cette sale bête refuse les textures au delà de 64*64 pixels, ou bien je m'y suis mal pris. résultat: les images du menu d'accueil ou des panneaux de fin sont étirées... bcp trop ! j'utiliserais bien une autre routine (pas glaux) pr les charger qui me permette d'utiliser des autres textures (si possible pas carrées mais j'en doute) et par pitié: au moins 256*256, sgnif

les améliorations à apporter: un panneau d'options! pvr changer la vitesse du serpent (et en conséquence les points accordés), un panneau des meilleurs scores, pvr changer In-Game l'aspect du jeu (thème rouge, bleu, mauve, sable ...). ttes des choses loin d'être très dures mais que je ferai... une autre fois (ça s'annonce long)

c'est mon tout premier jeu, toutes catégories confondues, et j'ai bataillé ferme avec mon compilo. mais je m'en suis sorti après avoir réussi à tourner tout mon code vers une solution des plus OO qui soit. C++ blows my life ! ;-) et merci à Funto, tout particulièrement.

quoi d'autre à dire... le tout est très commenté (pr mon confort personnel), si vous le compilez en mode Console (dans les options du projet sous Dev C++), vous verrez la console en fond qui ma permis de débugger pas mal de choses, faut s'habituer (ça défile pas mal :-P) mais c'est une aide précieuse que je conseille à tous (plus pratique que de créer une alerte MessageBox() (limitée aux char* en plus!).

la classe principale est la classe Jeu. elle possède en propriété des occurrences des classes serpent, pomme, camera ... et comme méthodes toutes les fonctions de textures, de gestion clavier etc. le jeu intègre un timer (c'est d'ailleurs dans le fichier jeu.h que vous pouvez changer DELAI pr modifier la vitesse du serpent).

le jeu repose essentiellement sur la classe Cube, qui ... dessine les cubes. le serpent est constitué d'un tableau de cubes, la pomme d'un cube (oui désolé :-P), et les positions des cubes sont gérées par la classe Point dont chaque cube intègre une occurrence. l'opérateur == (ainsi que !=) ont été surchargés pr la classe Point pr pvr vérifier si les coord. de la tête du serpent correspond avec les coord. de la pomme par exemple.

A propos, vous verrez dans cette fonction que j'ai mis des floor(). j'avais un bug quand on avait perdu une partie et qu'on en recommançait directement une seconde, les coordonnées etaient très légèrement décalées (même pas un 10E-15 ème d'unité !!). je ne comprends pas pq, mais forcément ça me bousillait mon opération d'égalité. voilà pq. c'est gênant point de vue ressources... [note du 6/9/04: en fait, les float et les double ne permettent pas de garantir une précision sur tout leur domaine, ce qui engendre des arrondis et donc l'impossibilité d'utiliser les opérations d'égalité sans 'epsilon' (tolérance)]

Ce jeu n'est absolument pas portable... non seulement j'ai utilisé une fenêtre Win32, mais en plus j'ai utilise GetTickCount() pr le timer et même j'utilise des fonts générées par windows. j'en suis désolé, c'est un peu la voie de la facilité étant donné que j'avais pr la fenêtre et les fonts des tutoriaux (nehe).

autre chose, quand on mange une pomme, j'établis la liste des positions potentielles où je pourrais mettre la nouvelle pomme. pour ça je crée un tableau pur. une boucle passe les 16*16 cases possibles et vérifie chaque fois si la case n'est pas déjà oqp par le serpent. MAIS avec un serpent de 125 cases de long, ça revient à 96 000 opérations d'égalité (3 par comparaison de coord), c'est bcp trop !! il faudrait utiliser une liste chainée pour ajouter toutes les cases puis effacer celles du serpent (et encore, faudrait trouver un moyen intelligent parce que même comme ça ça risque de bouffer pas mal)

j'ai fait une longue dissert', j'en suis désolé. vous êtes au courant du projet maintenant ;-) je pense pr l'instant que c'en est un sans lendemain, c'est mon premier, il sert surtout de test finalement. laissez moi vos impressions et surtout des conseils d'amélioration [06/09/04: j'avais écrit improvation O_o]. (j'ai déjà pas mal d'idées pr rendre le gameplay plus excitant (des caisses qui tombent du ciel et d'autres choses), mais je ne les ai pas implémentées pr l'instant [et ça ne viendra jamais].

ah oui, j'y ai mis un mode nocturne, en fait ça désactive la lumière c tt ;-) utilisez la touche 'n'

Source / Exemple :


il est dans le zip, exe compris.
notez qu'avec un autre pc je l'avais compilé (exactement le même CS) et j'ai obtenu un exe de 35Ko (même compilo, fraichement installé), alors que sur ma machine j'en ai un de 145Ko. comprends pas. (et avant c t de 450 !!)

Conclusion :


pour changer le design du jeu, renommez les fichiers bmp nommés sol LETTRE.bmp en sol.bmp. essayez avec n'importe quelle image de 64*64, ça donne de belles choses parfois ^^

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Wett
Messages postés
104
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
12 juin 2005

Hey franchement il est super!!! Un poil trop rapide pour moi qui n'aie que des reflexes d'un vieux croulant de 150ans, mais génial ;) Je te met 10/10!
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

merci wett ;-) agréable commentaire. tu peux essayer de le recompiler avec un DELAI plus élevé (voir jeu.h en haut du fichier les #define). je devrais faire un menu d'options quand même. là un #define c vrmnt l'anti-facilité. puis aussi pr la résolution d'écran, moi j'aime autant être en mode fenêtré 1024*768, mais pr ici je l'ai mis en 800*600 (tlm n'a pas un écran 1280*1024 ;-)). faudrait aussi pvr le configurer en jeu. j'y penserai
Funto66
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Très bon jeu. Ce qui est surtout bien fait, c'est qu'il soit orienté objet, et ça, c'est rare sur CppFrance !
Pour le débugage, tu pourrais mettre un #define DEBUGUER et placer les printf() entre #ifdef DEBUGUER et #endif // DEBUGUER, comme ça lorsque tu compiles ton prog en version finale, tu n'as qu'à commenter #define DEBUGUER et plus de printf() dans ton code. Enfin, ce n'est qu'une idée...
Pour ton système de placement de pommes, moi sur mon snake (eh oui, comme tu dis c'est la mode sur CppFrance :) ), j'ai utilisé un algorithme plus bourrin : je donne à X une position au hasard comprise entre 0 et un nombre et à Y une position au hasard comprise entre 0 et un autre nombre, et après je teste si la place est déjà occupée par une des parties du serpent : si c le cas, je recommence, sinon, je la garde... Je sais pas quelle est la meilleure méthode.
Pour ce qui est de l'idée des caisses, ça a l'air pas mal, mais comme les pommes, il faut pas que ça tombe sur le serpent.
Une autre idée serait de remplacer la pomme par une souris qui bouge... :)
Enfin, j'ai juste mis un petit 10/10..... :)
cs_Wett
Messages postés
104
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
12 juin 2005

Lol le coup de l'aglorithme bourrin de hasard c'est aussi comme ca que j'aurai fait moi ;) mais c vrai que a partir d'un certain nombre de cases, il devient aussi tres lent.... la solution serai p-t de tenir une liste chainée ou tu tiens les positions du serpent, à chaque fois qu'il bouge, tu supprime le dernier maillon et tu en rajoute un, ainsi tu connais en permanence la position de ton serpent... Ou l'inverse, tu tiens toutes les positions libres dans une liste chainée puis tu enleve celle ou le serpent passe puis tu rajoute celle qu'il quitte (operation tres simple il me semble et rapide...) ! Apres juste 1 seul random pour trouver une case ou poser la pomme... Enfin si tu vois ce que je veux dire ;) En tout cas encore bravo :D
cs_AmK
Messages postés
368
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
27 janvier 2010

bravo kirua ,j'avais deja joué a ton snake , mais il etait encore en phase de devellopement , en tout cas c'est le seul snake 3d du site et qui marche bien ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.