Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de fonction

Sujet résolu
    8 juin 2006 à 0:09:51

    Bonjour, voilà j'ai un petit problème j'essaye de faire un jeu avec un petit vaisseau se déplacant au bas de l'écran à l'horizontale et capable de tirer sur un vaisseau en haut de l'écran (jeu ultra connu).
    Le problème c'est que en théorie quand on fait ESPACE ca renvoi sur la fonction tir que j'ai créée dans un fichier tir.c à part, et qu'on atteint depuis la fonction jouer.c, elle aussi dans un fichier à part.

    Le problème vient du fait que à la compilation il ne reconnait pas ma fonction tir en tant que fonction :( et me met le message d'erreur: "error : called object is not a function".

    Voici le code source qui vous parlera peut-etre mieux que moi:
    jouer.c :


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h> /* Inclusion du header de SDL_image */
    #include "constantes.h"
    #include "jeu.h"



    void jouer(SDL_Surface *ecran)
    {
    SDL_Surface *cle = NULL, *tir = NULL, *ennemi = NULL, *fond = NULL;
    SDL_Rect position, positionJoueur, positionEnnemi, positionDepart, positionFond;
    SDL_Event event;

    int continuer = 1;

    cle = IMG_Load("Cle.BMP");
    ennemi = IMG_Load("ennemi.BMP");
    tir = IMG_Load("tir.GIF");
    fond = IMG_Load("fond.JPG");

    positionDepart.x = 425;
    positionDepart.y = 580;

    SDL_SetColorKey(ennemi, SDL_SRCCOLORKEY, SDL_MapRGB(ennemi->format, 255, 255, 255));

    SDL_SetColorKey(cle, SDL_SRCCOLORKEY, SDL_MapRGB(cle->format, 255, 255, 255));


    SDL_BlitSurface(cle, NULL, ecran, &positionDepart);

    positionJoueur.x = positionDepart.x;
    positionJoueur.y = positionDepart.y;

    positionEnnemi.x = 425 - (85 / 2 );
    positionEnnemi.y = 0;

    positionFond.x = 0;
    positionFond.y = 0;



    SDL_EnableKeyRepeat(10, 10);


     while (continuer)
        {
            SDL_WaitEvent(&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_RIGHT: // Flèche droite
                            positionJoueur.x = positionJoueur.x + 5;
                            break;
                        case SDLK_LEFT: // Flèche gauche
                            positionJoueur.x = positionJoueur.x - 5;
                            break;
                        case SDLK_BACKSPACE:
                            tir(ecran, positionJoueur);
                            break;

                    }
                    break;
            }

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
            SDL_BlitSurface(fond, NULL, ecran, &positionFond);
            SDL_BlitSurface(cle, NULL, ecran, &positionJoueur); /* On place cle à sa nouvelle position */




    SDL_BlitSurface (ennemi, NULL, ecran, &positionEnnemi);
    SDL_Flip(ecran);
    }

    // Désactivation de la répétition des touches (remise à 0)
    SDL_EnableKeyRepeat(0, 0);

    // Libération des surfaces chargées
    SDL_FreeSurface(cle);
    SDL_FreeSurface(ennemi);

    }


    tir.c :


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h> /* Inclusion du header de SDL_image */
    #include "constantes.h"

    void tir(SDL_Surface *ecran, SDL_Rect positionJoueur);

    void tir(SDL_Surface *ecran, SDL_Rect positionJoueur)
    {
        int continuer = 1;
        int tempsPrecedent = 0, tempsActuel = 0;

        SDL_Surface *tir = NULL;
        SDL_Rect positionDeDepart;
        SDL_Event event;

        tir = IMG_Load("tir.GIF");

    positionDeDepart.x = positionJoueur.x;
    positionDeDepart.y = positionJoueur.y;

    while (continuer)
        {
            SDL_PollEvent(&event); /* On utilise PollEvent et non WaitEvent pour ne pas bloquer le programme */

            tempsActuel = SDL_GetTicks();
            if (tempsActuel - tempsPrecedent > 30) /* Si 30 ms se sont écoulées depuis le dernier tour de boucle */
            {
                positionDeDepart.y--; /* On bouge Zozor */
                tempsPrecedent = tempsActuel; /* Le temps "actuel" devient le temps "precedent" pour nos futurs calculs */
            }
            else /* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
    {
        SDL_Delay(30 - (tempsActuel - tempsPrecedent));
    }

    }
    }


    P.S: cle signifie chasseur léger dans le code ca correspond au vaisseaux du joueur qui doit tirer.

    Merci d'avance de votre aide

    EDIT: c'est bon j'ai trouver. Juste au moment ou j'ai poster le message j'a eu un flash. C'est parce que j'avais déja défini "tir" comme une surface au début.
    Par contre le tir ne part pas mais bon ca m'aurait étonner que ca marche du premier coups :p
    Désolé pour le topic qui sert à rien :lol:
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 0:19:07

      Met le en résolu alors ;)
      • Partager sur Facebook
      • Partager sur Twitter

      problème de fonction

      × 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