Snake 3d opengl dev c++

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

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.