afficher un message qui disparait au bout de 10 seconde

afficher un message qui disparait au bout de 10 seconde - C - Programmation

Marsh Posté le 23-01-2009 à 17:26:53    

Bonjour,  
je suis en train de créer mon petit jeux video en 2d sdl et je voudrais que si le personnage et sur la même case qu'un objetif sa affiche un message et au bout de 10 secondes sa change de niveau . j'ai essayé et sa ne m'affiche pas de message et sa ne change pas de niveau au bout de 10 secondes :  
ce sont ces lignes les plus importantes:  

Code :
  1. if(carte[positionJoueur.x][positionJoueur.y] == OBJECTIF)
  2.   {
  3.   positiontexte.x = 60;
  4.             positiontexte.y = 370;
  5.   police = TTF_OpenFont("angelina.ttf", 65);
  6.   texte = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);
  7.             SDL_BlitSurface(texte, NULL, ecran, &positiontexte); /* Blit du texte par-dessus */
  8.             tempsPrecedent = tempsActuel;
  9.             tempsActuel = SDL_GetTicks();
  10.             if (tempsActuel - tempsPrecedent > 10000) /* Si 30 ms se sont écoulées depuis le dernier tour de boucle */
  11.             {
  12.             modesimple(ecran);
  13.             }   
  14.   }


voila mon code en entiers:  

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL.h>
  4. #include <SDL_image.h>
  5. #include <SDL_ttf.h>
  6. #include "fichier.h"
  7. #include "jonnysolojouer.h"
  8. #include "fichiers.h"
  9. void jonnysolojouer(SDL_Surface* ecran)
  10. {
  11.     SDL_Surface *mario[4] = {NULL} , *texte = NULL ;// 4 surfaces pour chacune des directions de mario
  12.     SDL_Surface *mur = NULL, *objectif = NULL, *marioActuel = NULL;
  13.     SDL_Rect position, positionJoueur , objectifatteind , positiontexte ;
  14.     SDL_Event event;
  15.    TTF_Font *police = NULL;
  16.     SDL_Color couleurNoire = {0, 0, 0};
  17.     int tempsPrecedent = 0, tempsActuel = 0;
  18.     int continuer = 1, objectifsRestants = 0, i = 0, j = 0;
  19.     int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
  20.     // Chargement des sprites (décors, personnage...)
  21.     mur = IMG_Load("image/objet/mur.jpg" );
  22.     objectif = IMG_Load("image/objet/objectif.gif" );
  23.     mario[BAS] = IMG_Load("image/hero/DarkKnight-Front.gif" );
  24.     mario[GAUCHE] = IMG_Load("image/hero/DarkKnight-Left.gif" );
  25.     mario[HAUT] = IMG_Load("image/hero/DarkKnight-Back.gif" );
  26.     mario[DROITE] = IMG_Load("image/hero/darkknight gauche.GIF" );
  27.     marioActuel = mario[BAS]; // Mario sera dirigé vers le bas au départ
  28.     // Chargement du niveau
  29.     if (!chargerNiveau(carte))
  30.         exit(EXIT_FAILURE); // On arrête le jeu si on n'a pas pu charger le niveau
  31.     // Recherche de la position de Mario au départ
  32.     for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
  33.     {
  34.         for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
  35.         {
  36.             if (carte[i][j] == MARIO) // Si Mario se trouve à cette position sur la carte
  37.             {
  38.                 positionJoueur.x = i;
  39.                 positionJoueur.y = j;
  40.                 carte[i][j] = VIDE;
  41.             }
  42.         }
  43.     }
  44.     // Activation de la répétition des touches
  45.     SDL_EnableKeyRepeat(100, 100);
  46.     while (continuer)
  47.     {
  48.         SDL_WaitEvent(&event);
  49. switch(event.type)
  50. {
  51.     case SDL_QUIT:
  52.         continuer = 0;
  53.         break;
  54.     case SDL_KEYDOWN:
  55.         switch(event.key.keysym.sym)
  56.         {
  57.             case SDLK_UP:
  58.                 marioActuel = mario[HAUT];
  59.                 deplacerJoueur(carte, &positionJoueur, HAUT);
  60.                 break;
  61.             case SDLK_DOWN:
  62.                 marioActuel = mario[BAS];
  63.                 deplacerJoueur(carte, &positionJoueur, BAS);
  64.                 break;
  65.             case SDLK_RIGHT:
  66.                 marioActuel = mario[DROITE];
  67.                 deplacerJoueur(carte, &positionJoueur, DROITE);
  68.                 break;
  69.      case SDLK_r:
  70.                jonnysolojouer(ecran);
  71.                 break;
  72.             case SDLK_LEFT:
  73.                 marioActuel = mario[GAUCHE];
  74.                 deplacerJoueur(carte, &positionJoueur, GAUCHE);
  75.                 break;
  76.         }
  77.         break;
  78. }
  79.         // Effacement de l'écran
  80.         SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
  81.         // Placement des objets à l'écran
  82.         objectifsRestants = 0;
  83.         for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
  84.         {
  85.             for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
  86.             {
  87.                 position.x = i * TAILLE_BLOC;
  88.                 position.y = j * TAILLE_BLOC;
  89.                 switch(carte[i][j])
  90.                 {
  91.                     case MUR:
  92.                         SDL_BlitSurface(mur, NULL, ecran, &position);
  93.                         break;
  94.                    case OBJECTIF:
  95.                   SDL_BlitSurface(objectif, NULL, ecran, &position);
  96.                  objectifsRestants = 1;
  97.                  objectifatteind.x = position.x;
  98.                  objectifatteind.y = position.y;
  99.                         break;
  100.                 }
  101.             }
  102.         }
  103.         // Si on n'a trouvé aucun objectif sur la carte, c'est qu'on a gagné
  104.          if(carte[positionJoueur.x][positionJoueur.y] == OBJECTIF)
  105.   {
  106.   positiontexte.x = 60;
  107.             positiontexte.y = 370;
  108.   police = TTF_OpenFont("angelina.ttf", 65);
  109.   texte = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);
  110.             SDL_BlitSurface(texte, NULL, ecran, &positiontexte); /* Blit du texte par-dessus */
  111.             tempsPrecedent = tempsActuel;
  112.             tempsActuel = SDL_GetTicks();
  113.             if (tempsActuel - tempsPrecedent > 10000) /* Si 30 ms se sont écoulées depuis le dernier tour de boucle */
  114.             {
  115.             modesimple(ecran);
  116.             }   
  117.   }
  118.         // On place le joueur à la bonne position
  119.         position.x = positionJoueur.x * TAILLE_BLOC;
  120.         position.y = positionJoueur.y * TAILLE_BLOC;
  121.         SDL_BlitSurface(marioActuel, NULL, ecran, &position);
  122.      
  123.         SDL_Flip(ecran);
  124.     }
  125.     // Désactivation de la répétition des touches (remise à 0)
  126.     SDL_EnableKeyRepeat(0, 0);
  127.     SDL_FreeSurface(texte);
  128.     SDL_FreeSurface(mur);
  129.     SDL_FreeSurface(objectif);
  130.     for (i = 0 ; i < 4 ; i++)
  131.         SDL_FreeSurface(mario[i]);
  132.  
  133. }
  134. void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction)
  135. {
  136.     switch(direction)
  137.     {
  138.         case HAUT:
  139.             if (pos->y - 1 < 0) // Si le joueur dépasse l'écran, on arrête
  140.                 break;
  141.             if (carte[pos->x][pos->y - 1] == MUR) // S'il y a un mur, on arrête
  142.                 break;
  143.             // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde)
  144.             if ((carte[pos->x][pos->y - 1] == CAISSE || carte[pos->x][pos->y - 1] == CAISSE_OK) &&
  145.                 (pos->y - 2 < 0 || carte[pos->x][pos->y - 2] == MUR ||
  146.                 carte[pos->x][pos->y - 2] == CAISSE || carte[pos->x][pos->y - 2] == CAISSE_OK))
  147.                 break;
  148.             // Si on arrive là, c'est qu'on peut déplacer le joueur !
  149.             // On vérifie d'abord s'il y a une caisse à déplacer
  150.            
  151.             pos->y--; // On peut enfin faire monter le joueur (oufff !)
  152.             break;
  153.         case BAS:
  154.             if (pos->y + 1 >= NB_BLOCS_HAUTEUR)
  155.                 break;
  156.             if (carte[pos->x][pos->y + 1] == MUR)
  157.                 break;
  158.             if ((carte[pos->x][pos->y + 1] == CAISSE || carte[pos->x][pos->y + 1] == CAISSE_OK) &&
  159.                 (pos->y + 2 >= NB_BLOCS_HAUTEUR || carte[pos->x][pos->y + 2] == MUR ||
  160.                 carte[pos->x][pos->y + 2] == CAISSE || carte[pos->x][pos->y + 2] == CAISSE_OK))
  161.                 break;
  162.            
  163.             pos->y++;
  164.             break;
  165.         case GAUCHE:
  166.             if (pos->x - 1 < 0)
  167.                 break;
  168.             if (carte[pos->x - 1][pos->y] == MUR)
  169.                 break;
  170.             if ((carte[pos->x - 1][pos->y] == CAISSE || carte[pos->x - 1][pos->y] == CAISSE_OK) &&
  171.                 (pos->x - 2 < 0 || carte[pos->x - 2][pos->y] == MUR ||
  172.                 carte[pos->x - 2][pos->y] == CAISSE || carte[pos->x - 2][pos->y] == CAISSE_OK))
  173.                 break;
  174.            
  175.             pos->x--;
  176.             break;
  177.         case DROITE:
  178.             if (pos->x + 1 >= NB_BLOCS_LARGEUR)
  179.                 break;
  180.             if (carte[pos->x + 1][pos->y] == MUR)
  181.                 break;
  182.             if ((carte[pos->x + 1][pos->y] == CAISSE || carte[pos->x + 1][pos->y] == CAISSE_OK) &&
  183.                 (pos->x + 2 >= NB_BLOCS_LARGEUR || carte[pos->x + 2][pos->y] == MUR ||
  184.                 carte[pos->x + 2][pos->y] == CAISSE || carte[pos->x + 2][pos->y] == CAISSE_OK))
  185.                 break;
  186.          
  187.             pos->x++;
  188.             break;
  189.     }
  190. }


merci

Reply

Marsh Posté le 23-01-2009 à 17:26:53   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed