Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Je vous presente mon super jeu!

    16 avril 2006 à 13:31:41

    Salut tous le monde.

    Donc voila je vous montre ma superbe creation:half life 3! (nan c'est une blague :lol: )

    En fait j'ai fait un "mini mario" que vous pouvez télécharger là :
    <lien url="http://membres.lycos.fr/redfox5/"></lien>

    Et voici le code source:

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>



    int main(int argc, char *argv[])
    {   
        SDL_Surface *ecran = NULL, *perso1 =  NULL, *perso2 =  NULL, *perso3 =  NULL,
        *perso4 =  NULL, *perso5 =  NULL, *perso6 =  NULL, *perso7 =  NULL, *perso8 =  NULL,
        *block = NULL, *fond = NULL;
        FILE* fichier = NULL;
        fichier = fopen("niveau.txt", "r");
        SDL_Event event;
        int continuer;
        int alt;
        int saut = 0;
        int chute = 0;
        int right = 0;
        int left = 0;
        int anim = 1;
        int i,j;
        char x;
        char tab[12][16];
       
       
        SDL_Rect posFond;
        SDL_Rect pos;
        SDL_Rect posB;
       
        posFond.x = 0;
        posFond.y = 0;
        pos.x = 240;
        pos.y = 400;
        alt = pos.y;
       
        SDL_Init(SDL_INIT_VIDEO);
       
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
       
        block = SDL_CreateRGBSurface(SDL_HWSURFACE, 40, 40, 32, 0, 0, 0, 0);
        perso1 = SDL_LoadBMP("m1.bmp");  SDL_SetColorKey(perso1, SDL_SRCCOLORKEY, SDL_MapRGB(perso1->format, 255, 255, 255));
        perso2 = SDL_LoadBMP("m2.bmp");  SDL_SetColorKey(perso2, SDL_SRCCOLORKEY, SDL_MapRGB(perso2->format, 255, 255, 255));
        perso3 = SDL_LoadBMP("m3.bmp");  SDL_SetColorKey(perso3, SDL_SRCCOLORKEY, SDL_MapRGB(perso3->format, 255, 255, 255));
        perso4 = SDL_LoadBMP("m4.bmp");  SDL_SetColorKey(perso4, SDL_SRCCOLORKEY, SDL_MapRGB(perso4->format, 255, 255, 255));
        perso5 = SDL_LoadBMP("m5.bmp");  SDL_SetColorKey(perso5, SDL_SRCCOLORKEY, SDL_MapRGB(perso5->format, 255, 255, 255));
        perso6 = SDL_LoadBMP("m6.bmp");  SDL_SetColorKey(perso6, SDL_SRCCOLORKEY, SDL_MapRGB(perso6->format, 255, 255, 255));
        perso7 = SDL_LoadBMP("m7.bmp");  SDL_SetColorKey(perso7, SDL_SRCCOLORKEY, SDL_MapRGB(perso7->format, 255, 255, 255));
        perso8 = SDL_LoadBMP("m8.bmp");  SDL_SetColorKey(perso8, SDL_SRCCOLORKEY, SDL_MapRGB(perso8->format, 255, 255, 255));
        fond = SDL_LoadBMP("fond.bmp");

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
        SDL_BlitSurface(fond, NULL, ecran, &posFond);
     
     
    ///////////////////CHARGEMENT DU DECORE///////////////////////////////////
         int l=0,c=0;
         while(x != EOF){
          x = fgetc(fichier)
          if (x != '\n'){
           tab[l][c] = x;
           c++;}
          else {c=0;l++;}
         }
    //////////////////////////////////////////////////////////////////////////   
     
     
     
       
        while (continuer){
              SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                   
                case SDL_KEYDOWN:
                     switch (event.key.keysym.sym)
                     {
                       case SDLK_ESCAPE:
                       continuer = 0;
                       break;
                       
                       case SDLK_UP:
                       if(chute != 1)saut = 1;
                       break;
                       
                       case SDLK_LEFT:
                       if(right != 1)left = 1;
                       break;
                       
                       case SDLK_RIGHT:
                       if(left != 1)right = 1;
                       break;
                     }
                break;
               
                case SDL_KEYUP:
                     switch (event.key.keysym.sym)
                     {
                            case SDLK_UP:
                            chute = 1;
                            saut = 0;
                            break;
                           
                            case SDLK_LEFT:
                            left = 0;
                            anim = -1;
                            break;
                           
                            case SDLK_RIGHT:
                            right = 0;
                            anim = 1;
                            break;
                     }
                break;

            }
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
        SDL_BlitSurface(fond, NULL, ecran, &posFond);
       
       
       
         if(saut == 1){
                     int caseX,caseY;
                     caseX = pos.x/40;
                     caseY = pos.y/40;
                     if(tab[caseY-1][caseX] != 'x' || pos.y < (caseY-1)*40+40 )
                         if(pos.y >= alt-80)
                         pos.y--;
               
                else {
                     saut = 0;
                     chute = 1;
                     }
        }
       
        if(chute == 1){
                     int caseX,caseY;
                     caseX = pos.x/40;
                     caseY = pos.y/40;
                     if(tab[caseY+1][caseX] != 'x' || pos.y < (caseY+1)*40-40 ){
                          pos.y++;
                          alt=pos.y;
                     }
                 else chute = 0;
        }
       
        if(right == 1){
                     int caseX,caseY;
                     caseX = pos.x/40;
                     caseY = pos.y/40;
                     if(tab[caseY][caseX+1] != 'x' || pos.x < (caseX+1)*40-40 )
                          pos.x++;
                     if((tab[caseY+1][caseX] != 'x' || pos.y < (caseY+1)*40-40) && saut != 1 ){
                          chute = 1;
                     }
                          if (anim < 3)
                          anim++;
                          else anim = 1;
                  }
         
         if(left == 1){
                     int caseX,caseY;
                     caseX = pos.x/40;
                     caseY = pos.y/40;
                     if(tab[caseY][caseX-1] != 'x' || pos.x >(caseX-1)*40+40)
                          pos.x--;
                     if((tab[caseY+1][caseX] != 'x' || pos.y < (caseY+1)*40-40) && saut != 1 ){
                          chute = 1;
                     } 
                          if (anim > -3)
                          anim--;
                          else anim = -1;
         }       
       
        if(saut == 1 || chute == 1){
           if(anim > 0 ) SDL_BlitSurface(perso7, NULL, ecran, &pos);
           else SDL_BlitSurface(perso8, NULL, ecran, &pos);
        }
        else {
        if (anim == 1){
         SDL_BlitSurface(perso1, NULL, ecran, &pos);}
                 
        else if(anim == 2){
         SDL_BlitSurface(perso2, NULL, ecran, &pos);}
         
        else if(anim == 3){
         SDL_BlitSurface(perso3, NULL, ecran, &pos);}
         
        else if (anim == -1){
          SDL_BlitSurface(perso4, NULL, ecran, &pos);} 
             
        else if(anim == -2){
          SDL_BlitSurface(perso5, NULL, ecran, &pos);} 
         
        else if (anim == -3){
          SDL_BlitSurface(perso6, NULL, ecran, &pos);} 
          }     
       
       
        SDL_Flip(ecran);
        }
       
        SDL_FreeSurface(block);
        SDL_FreeSurface(fond);
        SDL_FreeSurface(perso1);
        SDL_FreeSurface(perso2);
        SDL_FreeSurface(perso3);
        SDL_FreeSurface(perso4);
        SDL_FreeSurface(perso6);
        SDL_FreeSurface(perso5);
        SDL_FreeSurface(perso7);
        SDL_FreeSurface(perso8);
        SDL_Quit();
        return EXIT_SUCCESS;
    }


    Vous l'avez sans doute remarqué c'est un peu programé à la barbare :-°
    C'est qu'une version pré-pré beta qui peu etre optimisée je pense^^ (en plus il y a des bugs)
    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2006 à 14:47:38

      J'ai pas reussi à attendre la plus haute plateforme ... bloqué à la seconde :'(
      Sinon c'est pas mal, meme plutot bien, mais tu pourrais mettre une image à la place du noir, genre les sprints de mur que m@teo propose dans son tp ;)
      ++
      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2006 à 15:04:18

        o_O moi non plus, impossible de monter sur la dernière plate forme ..

        ^^ mais bravo c'est plutot bien fait
        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2006 à 15:30:04

          hello !

          il est pas mal du tout

          par contre pour pas que ton mario fasse du 500km/h (enfin pas en rapidité mais a la vitesse à laquelle il bouge ses pieds :D ) il faudra utiliser le Timer :) (je compte sur matéo pour l'enseigner bien sur :-° )

          ha aussi le saut est un peu triangulaire mais j'ferais pas mieux jpense (Mouvements et Vitesses chapitre 4 de physique :p )
          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2006 à 19:56:57

            Je sais pas chez vous, mais chez moi le jeu est super lent.

            J'ai une petite config, mais je fais quand même tourner des logiciels bien plus important.

            Config :
            PIII 500mhz
            370mo de Ram
            Nvidia Riva TNT

            Quand on utilise la SDL faut faire gaffe à bien optimiser car les jeux en viennent rapidement à laguer sans qu'on s'en aperçoit.
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2006 à 20:37:42

              je vole ><. change la maniere de gere le saut. Prends par exemple un game state qui s'active lors de la pression de la touche saut et qui fait l'action en plusieurs fois plutot que ce que tu fait(j'ai pas regardé ton code).
              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2006 à 20:44:59

                Moi j'ai réussi a atteindre le dernier lvl en modifiant le fichier niveau.txt

                xoooooooooooooox
                xoooooooooooooox
                xoooooooooooooox
                xoooooooooooooox
                xoooooooooooooox
                xooooooxxxxoooox
                xoooooooooooooox
                xooooooooooxxxxx
                xxxoooooooooooox
                xoooooxxxxxx000x
                xoooooooooooooox
                xxxxxxxxxxxxxxxx

                D'ailleurs avec sa c'est super simple de faire un éditeur de lvl :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  17 avril 2006 à 11:37:44

                  Oui je sais mon jeu n'est pas parfait :p
                  C'était surtout pour me faire la main et voir comment ca fonctionnait un jeu de plateforme.

                  Pour ce qui est de la derniere plateforme c'est normal que l'on ne peut pas l'atteindre (c'est pas vraiment volontaire). Mais comme le dit Barjo faut juste modifier "niveau.txt" (et fond.bmp si on veut voir ou l'on met les pieds ^^ )

                  Les sauts "triangulaires" c'est fait expres. C'est des sauts à la mario ;) (en meme temps j'ai la fleme de gérer la physique :p )

                  Par contre niveau optimisation et problemes de lenteur je vois pas trop comment faire. Chez moi ca marche bien (Athlon XP 2,1GHz ,1go de ram et radeon 9600 (ca doit etre suffisant pour du 2d :lol: ))

                  Si vous avez des conseil pour l'optimisation je suis preneur.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [SDL] Je vous presente mon super jeu!

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown