Partage
  • Partager sur Facebook
  • Partager sur Twitter

jeu d'avion

    24 octobre 2008 à 16:19:20

    bonjour à tous les Zéros,
    je programme en ce moment un pti programme du genre de icopter pour ce qui connaisse mais me voilà confronté à un problème :
    je voudrais pouvoir faire un nombre infini de niveau qui contiendrait 100 barres chacun.
    Mais voilà, je ne sais pas comment faire, j'avais une vaste idée : mettre un do..while mais cela ne marche pas :(
    voici mon code, il marche donc pas besoin de vous pencher dessus pour les erreurs :D c'est juste pour me guider :
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <time.h>
    
    #include <SDL.h>
    #include <SDL_image.h>
    #include <SDL_ttf/SDL_ttf.h>
    
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *texte[10] = {NULL}, *avion = NULL, *explosion = NULL, *barre[100] = {NULL};
        SDL_Rect positionAvion, positionExplosion, positionTexte[10] = {0}, positionBarre[100] = {0};
        SDL_Event event;
    	TTF_Font *police = NULL;
    	SDL_Color couleurJaune = {230, 230, 0};
    	
        int continuer = 1, i = 0, v= 0, time_1 = 0, time_2 = 0 ,time_3 = 0, time_4 = 0, time_5 = 0, time_6 = 0, jeu = 1, points = 0;
    	char chaine[20] = "", score[20] = "";
    	
        SDL_Init(SDL_INIT_VIDEO);
    	TTF_Init();
    	police = TTF_OpenFont("/Users/guillaumeuettwiller/Desktop/copter/visitor.ttf", 30);
    	
        ecran = SDL_SetVideoMode(700, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); /* Double Buffering */
        SDL_WM_SetCaption("iPlane", NULL);
    	SDL_WM_SetIcon(IMG_Load("/Users/guillaumeuettwiller/Desktop/copter/icone.png"), NULL); // L'icÙne doit Ítre chargÈe avant SDL_SetVideoMode
    		
    	avion = IMG_Load("/Users/guillaumeuettwiller/Desktop/copter/avion.png");
        SDL_SetColorKey(avion, SDL_SRCCOLORKEY, SDL_MapRGB(avion->format, 0, 0, 0));
    	positionAvion.x = 100;
        positionAvion.y = 200;
    	
    	explosion = IMG_Load("/Users/guillaumeuettwiller/Desktop/copter/explosion.png");
    	SDL_SetColorKey(explosion, SDL_SRCCOLORKEY, SDL_MapRGB(explosion->format, 0, 0, 0));
    	positionExplosion.x = 100;
    	positionExplosion.y = 300;
    	
    	i = 0;
    	while (i < 100)
    	{
    		barre[i]=IMG_Load("/Users/guillaumeuettwiller/Desktop/copter/barre.jpeg");
    		SDL_SetColorKey(barre[i], SDL_SRCCOLORKEY, SDL_MapRGB(barre[i]->format, 0, 0, 0));
    		i++;
    	}
    	
        SDL_EnableKeyRepeat(20, 20); 
    	SDL_ShowCursor(SDL_DISABLE);
    	
        while (continuer)
        {
    		
    		if(event.key.keysym.sym == SDLK_f )	
    			ecran = SDL_SetVideoMode(700, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
    		if(event.key.keysym.sym == SDLK_p )	
    		{ 
    			while(event.key.keysym.sym != SDLK_l )	
    			{SDL_WaitEvent(&event);
    			}
    		}
    		
    		sprintf(score,"Score %ld",points);
    		texte[1] = TTF_RenderText_Solid(police, score, couleurJaune);
    		positionTexte[1].x = 700 - (texte[1]->w + 5);
            positionTexte[1].y = 1;
    		
    		
    		time_1 = SDL_GetTicks();
    		if (time_1 - time_2 > 20) 
    		{
    			if(positionAvion.y < 340 && positionAvion.y > 2 && jeu == 1)
    				positionAvion.y += 7;
    			
    			time_2 = time_1;
    			
    		}
    		
    		time_3 = SDL_GetTicks();
    		
    		if(time_3 - time_4 > 750)
    		{
    			time_4 = time_3;
    			
    			points++;
    			
    		}
    		
    		time_5 = SDL_GetTicks();
    		if (time_5 - time_6 > 1000)
    		{
    			time_6 = time_5;
    			positionBarre[v].x = 600;
    			positionBarre[v].y = (rand()%(300-10+1))+10;
    			v++;
    		}
    		
    		
    		i = 0;
    		
    		
    		while (i < v)
    		{
    			positionBarre[i].x -=10;
    			if (positionBarre[i].x< 5)
    				SDL_SetAlpha(barre[i], SDL_SRCALPHA, 0);
    			SDL_BlitSurface(barre[i],NULL,ecran,&positionBarre[i]);
    			i++;
    			
    		}
    		
    		i = 0;
    		while (i < 100) 
    		{
    			if ((positionAvion.y + avion->h) >= positionBarre[i].y 
    				&& positionAvion.y <= (positionBarre[i].y + barre[i]->h)
    				&& (positionAvion.x) == positionBarre[i].x ) 
    			{
    				
    				positionExplosion.y = positionAvion.y;
    				SDL_SetAlpha(avion, SDL_SRCALPHA, 0);
    				SDL_BlitSurface(explosion, NULL, ecran, &positionExplosion);
    				continuer = 0;
    			}
    			i++;
    		}
    		
    		
    		if ( positionAvion.y > 339 ||  positionAvion.y < 2 )
    		{
    			positionExplosion.y = positionAvion.y;
    			
    			SDL_SetAlpha(avion, SDL_SRCALPHA, 0);
    			SDL_BlitSurface(explosion, NULL, ecran, &positionExplosion);
    			
    			texte[0] = TTF_RenderText_Blended(police,"GAME OVER",couleurJaune);
    			positionTexte[0].x = 265;
    			positionTexte[0].y  = 200;
    			SDL_BlitSurface(texte[0], NULL, ecran, &positionTexte[0]);
    			
    			jeu = 0;
    			
    			SDL_WaitEvent(&event);
    			if(event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)
    				continuer = 0;
    		}
    		
    		
    		SDL_Flip(ecran);
    		
    		
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
    			{
    				case SDLK_ESCAPE:
    					continuer = 0;
    					break;
    				case SDLK_SPACE:
    					if (jeu == 0)
    						break;
    					positionAvion.y -= 8;
    					break;
    			}
                    break;
            }
    		
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(avion, NULL, ecran, &positionAvion);
    		SDL_BlitSurface(texte[1], NULL, ecran, &positionTexte[1]);
    		
        }
    	
    	while (event.key.keysym.sym != SDLK_ESCAPE )
    	{
    		
    		texte[0] = TTF_RenderText_Blended(police,"GAME OVER",couleurJaune);
    		positionTexte[0].x = 265;
    		positionTexte[0].y  = 200;
    		SDL_BlitSurface(texte[0], NULL, ecran, &positionTexte[0]);
    		SDL_Flip(ecran);
    		SDL_WaitEvent(&event);
    	}
    	
        SDL_FreeSurface(avion);
    	SDL_FreeSurface(explosion);
    	SDL_Quit();
    	TTF_CloseFont(police);
    	TTF_Quit();
    	
    	
        return EXIT_SUCCESS;
    }
    


    merci beaucoup !!!
    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2008 à 16:26:27

      Je ne sais pas trop si ce que je vais dire est juste mais(j'me lance sa m'aideras a testé mes connissances)pourquoi ne ferais tu pas une boucles infinies?
      • Partager sur Facebook
      • Partager sur Twitter
        24 octobre 2008 à 16:28:19

        Deja decoupe ton code en fonctions plus simples, tu verra mieux la structure generale se dessiner... car la ton code est illisible
        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2008 à 16:31:50

          je sais qu'il est moche mais je pars en vac et j'avais prévu de le faire là bas.
          mais comment faire pour faire des niveaux infinis ???
          une boucle infinis je sais pas si c'est possible sinon je pourrais jamais perdre ?
          • Partager sur Facebook
          • Partager sur Twitter
            24 octobre 2008 à 16:36:41

            Peut etre(faut dire que moi je suis pas super en programmation au contraire :-° )
            que tu peut faire quelque chose pour que quand tu touches quelque chose qui doit te faire perdre la boucle s'arrete?(bon je vous laisse @+
            • Partager sur Facebook
            • Partager sur Twitter
              24 octobre 2008 à 16:40:33

              cela est deja fait mais le probleme c'est que au bout de 100 murs, le jeu se stoppe, alors comment faire ?
              • Partager sur Facebook
              • Partager sur Twitter
                24 octobre 2008 à 16:49:08

                barre n'a que 100 elements initialisés...
                • Partager sur Facebook
                • Partager sur Twitter
                  24 octobre 2008 à 16:55:06

                  je sais mais je vais pas non plus en initialisé 2000 !! alors il doit bien y avoir une technique..
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 octobre 2008 à 16:59:21

                    En initialiser un de plus a chaque nouveau niveau...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    jeu d'avion

                    × 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