Snake 3d opengl dev c++

Soyez le premier à donner votre avis sur cette source.

Vue 21 330 fois - Téléchargée 2 945 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

Funto66
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Bin visiblement, le pb semble plus venir du fait qu'il ne compile pas l'implémentation d'une certaine classe Jeu...
Samersahih >> es-tu sûr d'avoir bien ajouté le fichier jeu.cpp au projet?
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

Wah ... Euh, le code date de la fête nationale française de 2003, alors ... :D Désolé, mais je ne saurais pas t'aider :). Ceci dit, si tu utilises VC++ et pas Dev-C++, tu dois définir toi-même les libraires avec lesquelles lier. L'erreur vient sans doute de là, tout simplement.
samersahih
Messages postés
2
Date d'inscription
mardi 11 décembre 2007
Statut
Membre
Dernière intervention
13 janvier 2008

j'essaye de compiler mais je pense qu'il ya un probleme de linkage avec l'erreur suivante :

main.obj : error LNK2001: unresolved external symbol "public: __thiscall Jeu::Jeu(void)" (??0Jeu@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall Jeu::ReSizeGLScene(int,int)" (?ReSizeGLScene@Jeu@@QAEXHH@Z)
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall Jeu::KillGLWindow(void)" (?KillGLWindow@Jeu@@QAEXXZ)
main.obj : error LNK2001:

c'est quoi cette erreur ??
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

C'est un fait.

Et ta question est?
souf_
Messages postés
7
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
1 octobre 2006

bonjour a tous
je débute avec la programmation sous dev c++ avec opengl j'ai compiler un programme mais j'ai les erreures suivantes

cannot find -lobjc
ld returned 1 exit status
C:\Dev-Cpp\temp\Makefile.win [Build Error] [Project1.exe] Error 1

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.