Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de fonction

Sujet résolu
    13 octobre 2006 à 22:46:07

    Bonjour.
    J’ai fais un petit programme qui copie un morceau d’image lorsque l’on clique avec le bouton droit de la sourie (Il faut cliquer en haut de l’image : 40 sur 640) et qui la colle sur l’écran avec un clic bouton gauche.
    Le problème :
    J’aimerai passer plusieurs extraits de mon code dans une fonction .Je n’y arrive pas.
    Je vous met un exemple de ce que je voudrai faire passer par une fonction puis, je met le code complet.
    Merci pour votre aide.

    exemple :

        for(i=0;i<max;i++)
        {
        posF[i].x=0;
        posF[i].y=200;
        posF[i].w=40;
        posF[i].h=40;
        copieF[i].x=0;
        copieF[i].y=200;
        copieF[i].w=40;
        copieF[i].h=40;
        }


    le code complet du programme:
    1)main.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include "constante.h"
    #include "autorise.h"
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL,*imageDeFond = NULL;
        SDL_Event event;
        long max = COPIE_MAX;
        int continuer = 1;
        int i = 0,a=0,u=0;
        int autorise[max+1];
        SDL_Rect positionFond;
        SDL_Rect posF[max+1];
        SDL_Rect copieF[max+1];


        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF|SDL_RESIZABLE);
        SDL_WM_SetCaption("GESTION DES EVENEMENT EN SDL", NULL);
        imageDeFond = SDL_LoadBMP("image.bmp");

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

        for(i=0;i<max;i++)
        {
        posF[i].x=0;
        posF[i].y=200;
        posF[i].w=40;
        posF[i].h=40;
        copieF[i].x=0;
        copieF[i].y=200;
        copieF[i].w=40;
        copieF[i].h=40;
        }

        fonction_autorise(autorise,max);
        i=-1;
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_MOUSEBUTTONUP:
                    if (event.button.button == SDL_BUTTON_RIGHT)
                     {
                        if(event.button.y < 40)
                        {
                            u=(event.button.x/40);
                        }

                    }
                    else if(event.button.button == SDL_BUTTON_LEFT)
                    {
                        if(event.button.y > 40)
                        {
                        if(i<max)
                            {
                            i++;
                            posF[i].x=40*u;
                            posF[i].y=0;
                            copieF[i].x=(event.button.x/40)*40;
                            copieF[i].y=(event.button.y/40)*40;
                            autorise[i] = 1;
                            }
                        }
                    }
                    break;
                case SDL_VIDEORESIZE:/*resize renvoie les nouvelles largeur et hauteur de la fenêtre*/
                    ecran = SDL_SetVideoMode(event.resize.w, event.resize.h, 32, SDL_HWSURFACE| SDL_DOUBLEBUF|SDL_RESIZABLE);
                break;
            }
            SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
            for(a=0;a<max;a++)
            {
                if(autorise[a]==1)
                {
                    SDL_BlitSurface(imageDeFond, &posF[a], ecran, &copieF[a]);
                }
            }
            SDL_Flip(ecran);

        }
        SDL_FreeSurface(imageDeFond);
        SDL_Quit();

        return EXIT_SUCCESS;
    }


    2)autorise.c
    void fonction_autorise(int autorise[],long max)
    {
    int i =0;
    for(i=0;i<max;i++)
        {
        autorise[i] = 0;
        }
    }


    3)autorise.h
    #ifndef AUTORISE
    #define AUTORISE
    void fonction_autorise(int autorise[],long max);
    #endif


    4)constante.h
    #ifndef CONSTANTE
    #define CONSTANTE
    #define COPIE_MAX 200
    #endif
    • 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