Jeux Libres

Envie de créer un jeu vidéo ?   Le site qui vous accompagne de A à Z.


» Les Forums » A propos de la création de jeux vidéo » Jeux 3D libres


Aller à la page : 1.

Jeux 3D libres
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 27 Sept 2008, 15:43             Message non corrigé

Bah je sais pas si on va pouvoir faire des jeux de se style là, mais si j'en serai capable, je serai déjà bien content.  
C'est un jeux gratuit aux quel je jouais sur internet, à part que sur mon PC il lag à mort, je trouves que il est bien fait, il est en pleine évolution.
Evidement, curieux comme je suis, j'ai regarder un peu le code source que je ne comprends pas.
Alors je vous mets juste une partie du main :

#include "pch.h"
#include "engine.h"

void cleanup()
{
   cleanupserver();
   SDL_ShowCursor(1);
   freeocta(worldroot);
   extern void clear_command(); clear_command();
   extern void clear_console(); clear_console();
   extern void clear_mdls();    clear_mdls();
   extern void clear_sound();   clear_sound();
   SDL_Quit();
}

void quit()                     // normal exit
{
   extern void writeinitcfg();
   writeinitcfg();
   writeservercfg();
   abortconnect();
   disconnect(1);
   writecfg();
   cleanup();
   exit(EXIT_SUCCESS);
}

void fatal(const char *s, ...)    // failure exit
{
   static int errors = 0;
   errors++;

   if(errors <= 2) // print up to one extra recursive error
   {
       s_sprintfdlv(msg,s,s);
       puts(msg);

       if(errors <= 1) // avoid recursion
       {
           SDL_ShowCursor(1);
           #ifdef WIN32
               MessageBox(NULL, msg, "sauerbraten fatal error", MB_OK|MB_SYSTEMMODAL);
           #endif
           SDL_Quit();
       }
   }

   exit(EXIT_FAILURE);
}

SDL_Surface *screen = NULL;

int curtime;
int totalmillis = 0, lastmillis = 0;

dynent *player = NULL;

static int initing = NOT_INITING;
static bool restoredinits = false;

bool initwarning(const char *desc, int level, int type)
{
   if(initing < level)
   {
       addchange(desc, type);
       return true;
   }
   return false;
}

VARF(scr_w, 320, 1024, 10000, initwarning("screen resolution"));
VARF(scr_h, 200, 768, 10000, initwarning("screen resolution"));
VARF(colorbits, 0, 0, 32, initwarning("color depth"));
VARF(depthbits, 0, 0, 32, initwarning("depth-buffer precision"));
VARF(stencilbits, 0, 1, 32, initwarning("stencil-buffer precision"));
VARF(fsaa, -1, -1, 16, initwarning("anti-aliasing"));
VARF(vsync, -1, -1, 1, initwarning("vertical sync"));

void writeinitcfg()
{
   if(!restoredinits) return;
   FILE *f = openfile("init.cfg", "w");
   if(!f) return;
   fprintf(f, "// automatically written on exit, DO NOT MODIFY\n// modify settings in game\n");
   extern int fullscreen;
   fprintf(f, "fullscreen %d\n", fullscreen);
   fprintf(f, "scr_w %d\n", scr_w);
   fprintf(f, "scr_h %d\n", scr_h);
   fprintf(f, "colorbits %d\n", colorbits);
   fprintf(f, "depthbits %d\n", depthbits);
   fprintf(f, "stencilbits %d\n", stencilbits);
   fprintf(f, "fsaa %d\n", fsaa);
   fprintf(f, "vsync %d\n", vsync);
   extern int useshaders, shaderprecision;
   fprintf(f, "shaders %d\n", useshaders);
   fprintf(f, "shaderprecision %d\n", shaderprecision);
   extern int soundchans, soundfreq, soundbufferlen;
   fprintf(f, "soundchans %d\n", soundchans);
   fprintf(f, "soundfreq %d\n", soundfreq);
   fprintf(f, "soundbufferlen %d\n", soundbufferlen);
   fclose(f);
}

void screenshot(char *filename)
{
   SDL_Surface *image = SDL_CreateRGBSurface(SDL_SWSURFACE, screen->w, screen->h, 24, 0x0000FF, 0x00FF00, 0xFF0000, 0);
   if(!image) return;
   uchar *tmp = new uchar[screen->w*screen->h*3];
   glPixelStorei(GL_PACK_ALIGNMENT, 1);
   glReadPixels(0, 0, screen->w, screen->h, GL_RGB, GL_UNSIGNED_BYTE, tmp);
   uchar *dst = (uchar *)image->pixels;
   loopi(screen->h)
   {
       memcpy(dst, &tmp[3*screen->w*(screen->h-i-1)], 3*screen->w);
       endianswap(dst, 3, screen->w);
       dst += image->pitch;
   }
   delete[] tmp;
   if(!filename[0])
   {
       static string buf;
       s_sprintf(buf)("screenshot_%d.bmp", lastmillis);
       filename = buf;
   }
   else path(filename);
   SDL_SaveBMP(image, findfile(filename, "wb"));
   SDL_FreeSurface(image);
}

COMMAND(screenshot, "s");
COMMAND(quit, "");

static void getcomputescreenres(int &w, int &h)
{
   float wk = 1, hk = 1;
   if(w < 1024) wk = 1024.0f/w;
   if(h < 768) hk = 768.0f/h;
   wk = hk = max(wk, hk);
   w = int(ceil(w*wk));
   h = int(ceil(h*hk));
}





Si vous voulez avoir tout le code source du jeux, bah le jeux à télécharger qui est bien se trouve à cette adresse, seul problème, le jeux est en Anglais (c'est un style à Quake II) ==>Cliquer ici

Fin je sais pas si ce code peut déjà donner une idée de ce que c'est la création de jeux vidéos, mais est-ce qu'on pourra vraiment créer des jeux de ce genre là ? (ou pas)
Pcq le code source me semble chaud.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
David



Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 29 Sept 2008, 20:47             Message non corrigé

Salut Lo !

C'est vers ce type de moteur de jeux que j'aimerais faire évoluer le tutorial.
Celui-ci utilise tout ce qu'il y a de plus classique dans le développement de jeux vidéo libre : la bibliothèque OpenGL mixé avec SDL pour le traitement des textures, des évenement, du son... Pour le réseau, ce jeu utilise winsock2.

Il réutilise aussi certaines classes dont je vous avais déjà parlé pour le chargement des models (MDL, MD2, MD3...) Il s'agit des models de Quake ! Et oui, il n'ont pas réinventé la roue ! Et je ne voudrais pas m'avancer mais je crois qu'ils ont fait leur propre moteur de collisions en 2005. Mais j'ai constaté encore quelques bugs. Tout ça pour dire qu'il est difficile de faire un projet comme celui-ci, partit de rien.

Je vous invite grandement à jeter un coup d'œil à ce projet.
Pour info, il se compile très bien avec Code::Blocks. (Je viens de tester) Si ça vous tente de développer une extension...

Et pour ceux qui se pose toujours des questions comme : "combien de temps ça prend pour créer un jeu ?" et bien d'après ce que j'ai cru comprendre, ce projet a commencé il y a 5 ans. Et le développeur principal s'est lancé quand il s'est senti prêt !

Je remercie Lo pour ce qu'il m'a fait découvrir. Dommage que le projet est difficilement lisible à cause du peu de commentaire. En tout cas il est intéressant.

________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  Profil Mail
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 30 Sept 2008, 19:42             Message non corrigé

Ha voilà, je comprends mieux encore maintenant vers quoi va se diriger le tutoriel.  
En effet, les screen shot du jeux me semblait fortement similaire à Quake 2.
En effet au niveau du code il est peu commenté et donc difficile à comprendre.
Je pensais que le jeux avait été fais en c++ mais non c'est que du c ce qui m'a étonné.
(Pour info, je m'entent mieux avec la programmation orientée objets, mais le procédural me va aussi)
Le seul soucis c'est que comme je suis plutôt dans la création de logiciel, et que j'ai fais mais premiers jeux en Java pcq je n'ai appris que ce langage à la base, le C ça fais un an que j'en fais, le c++ c'est seulement l'année prochaine, mais sinon le tuto de Matéo 21 est excellent, en plus j'ai pas eu de mal à comprendre la POO donc j'ai pu constater la différence entre les deux langage qui permettent tout les deux de faire des choses bien )
Je l'ai déjà dis, je suis impatient d'apprendre à programmer des jeux vidéos!

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
David



Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 30 Sept 2008, 19:47             Message non corrigé

Je pensais que le jeux avait été fais en c++ mais non c'est que du c ce qui m'a étonné.

Il est bien fait en C++   Mais les bibliothèques utilisées sont écrite en C.

________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  Profil Mail
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 30 Sept 2008, 20:26             Message non corrigé

Ha oké, en effet j'ai regarder le code vite fait donc...
C'est en fait pcq j'ai pas vu de fichier avec des classes et des variables membres private et méthodes publiques, mais il porte bien l'extension .c++

Mais bon je crois pas vois pas trop d'orienté objet dedans.
Sans doute parce que les bibliothèques ont été écrite en C.^^
Je vais un coup essayer de reconstituer un jeux que j'ai fais en java en c++ une fois, pour m'y habituer.
Une fois que j'aurai le temps pcq je suis chargé aussi.

Pcq faudra que je m'adapte pcq un jv ça se programme pas comme un logiciel, et ça met plus de temps aussi.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
David



Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 30 Sept 2008, 21:43             Message non corrigé

Le gros intérêt du C++, c'est de pouvoir représenter chaque objet physique par un objet. Ainsi, il est plus facile de faire appel à des méthodes de cette façon :

personnage->avancer();
personnage->tuer(montre);

Ici, la méthode avancer se chargerait de faire avancer le personnage en mettant à jour l'emplacement de ces membres (les triangles).

Regarde le fichier md2.h, il s'agit de la classe qui se charge de charger les models au format MD2 et de les animer. Si ça t'intéresse, il y a ce tuto qui est très bien expliqué sur la façon de charger et animé les model MD2 (personnages de Quake) : http://tfcduke.developpez.com/tutoriel/format/md2/

C'est grâce à ce tuto que j'avais fait la scène que je vous avais présenté l'autre coup.

________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  Profil Mail
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 01 Oct 2008, 15:43             Message non corrigé

Ha wi d'accord u_u, pcq moi j'ai lu le tuto de Matéo 21 sur le c++, ou il nous à montrer comment créer des fichier.h, avec les attributs (private) et méthode (public) comme quand je crée des programmes en Java, mais ici, je vois que c'est plutôt des structures qui sont utilisées. (un truc qui n'existe pas en Java, tout comme les pointeurs et que j'ai mis un moment avant de comprendre.)

C'est vrai que les pointeurs de structures sont plus simple à manipuler que les pointeurs sur les objets comme je l'ai lu dans le tuto de Matéo 21, je sais pas si tu vois ce que c'est, ou il nous à montrer comment lier par exemple une arme à un personnage.

Enfin soit, ça je choisirai bien moi-même la manière que j'utiliserai, enfin soit, je vais jeter un oeuil sur le tutoriel que tu as mis déjà pour les modèles md2.

Mmmh, voilà j'ai tout lu, en fait toutes les informations de bases sont stockées dans un fichier md2 (coordonnées initialses des textures, etc...), ensuite lues, et ensuite on affiche les déplacements des personnages à l'aide de openGL si j'ai bien compris.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
 


Aller à la page : 1.


Hébergeur du site : 1and1.fr



Site de création de Jeux Vidéo
Apprenez à créer vos propres Jeux Video

1389468 pages ont été consultées sur le site !
Dont 1484 pages pendant les 24 dernières heures.

Page générée en 0.302 secondes


Nos partenaires
- Otium Production : Aide aux débutants à créer leurs jeux
- Les bibliothèques de développement de jeux vidéo


  © 2005-2012 www.jeux-libres.com - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.