IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

debutant SDL une aide pour comprendre


Sujet :

C

  1. #21
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par diogene Voir le message
    @SofEvans :
    break ne peut être utilisé que dans le cadre d'un switch ou d'une boucle, pas d'un if.
    Oui, je le savais. Je me suis mal exprimer. Je voulais dire que le fait de mettre break dans le if plutot que de faire un else porterai a confusion dans le sens ou quelqu'un de non averti (et par manque de commentaire) penserai que le break fait sortir du if et non du case.

    D'ailleurs, je ne comprend pas pourquoi fil de fer fait un break plutot qu'un else, d'où ma remarque.

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    pour le break ok pourvu que je ne refait plus cette erreur
    pour la boucle si je l'enlève mon image ne va que de droit a gauche et c'est la que je ne comprend pas ,pourquoi mon tableau de la variable direction ne s'incrémente qua la position direction[1]=3 puis l'image ce fige ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    void animation(SDL_Surface *ecran)
    {
        SDL_Surface *robot=NULL;
        robot=SDL_LoadBMP("robot aspi.bmp");
        SDL_Rect position ;/*position de l'image robot */
        position.x=0;
        position.y=0;
        int continu=1;
        int direction[4]={2,3,1,0};/*quatre direction droit,gauche,bas,haut*/
        int tab[4]={0};
        int taille=4;
        int *contacteZone=&tab[0];
        int i=0,j=0;
        int carte[NB_BLOC_LARGEUR][NB_BLOC_LONGEUR]={0};/*carte pour l'editeur*/
        SDL_Event event;
        if (!chargerNiveau(carte))
        {
            exit(EXIT_FAILURE);
        }
     
        while (continu)
        {
            deplacerROBOT(direction[j],&position,tab);/*fonction pour l'animation*/
            for (i=0;i<taille;i++)
            {
                if (tab[i]==1)/*condition pour incrémenter une direction*/
                {
                    tab[i]=0;/*remet la valeur  tableau[position] a zero*/
     
                    j++;
                }
            }
            SDL_PollEvent(&event);
            switch (event.type)
            {
            case SDL_QUIT:
                continu=0;
                break;
            }
            SDL_FillRect(ecran,NULL,SDL_MapRGB((*ecran).format,255,255,255));
            SDL_BlitSurface(robot,NULL,ecran,&position);
            SDL_Flip(ecran);
        }
        SDL_FreeSurface(robot);
     
    }
     
     
     
    void deplacerROBOT(int direction,SDL_Rect *position,int *contacteZone)
    {
     
     
     
            switch (direction)
            {
            case HAUT:
                if ((*position).y<0)/*condition pour ce déplacer en haut*/
                {
                    contacteZone[0]=1;
     
                }
                (*position).y--;
                break;
            case BAS:
                if ((*position).y+50>=LARGEUR_FENETRE)
                {
                    contacteZone[1]=1;
     
                }
                (*position).y++;
                break;
            case DROIT:
                if  ((*position).x+50>=LONGEUR_FENETRE )
                {
                    contacteZone[2]=1;
                }
                (*position).x++;
                break;
            case GAUCHE:
                if ((*position).x<0)
                {
                    contacteZone[3]=1;
     
                }
                (*position).x--;
                break;
            }
        }

    le meme code avec un obstacle pour l'animation + une image jpg pour vous donner un idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    void animation(SDL_Surface *ecran)
    {
        SDL_Surface *robot=NULL,*mur=NULL;
        robot=SDL_LoadBMP("robot aspi.bmp");
        mur=SDL_LoadBMP("rocher.bmp");
        SDL_Rect position ,position2;
        position.x=0;
        position.y=0;
        int continu=1;
        int direction[4]={2,3,1,0};
        int tab[4]={0};
        int taille=4;
        int *contacteZone=&tab[0];
        int i=0,j=0,m,n;
        int carte[NB_BLOC_LARGEUR][NB_BLOC_LONGEUR]={0};
        SDL_Event event;
        if (!chargerNiveau(carte))
        {
            exit(EXIT_FAILURE);
        }
     
        while (continu)
        {
            deplacerROBOT(direction[j],&position,&position2,tab);
            for (i=0;i<taille;i++)
            {
                if (tab[i]==1)
                {
                    tab[i]=0;
     
                    j++;
                }
            }
            SDL_PollEvent(&event);
            switch (event.type)
            {
            case SDL_QUIT:
                continu=0;
                break;
            }
            SDL_FillRect(ecran,NULL,SDL_MapRGB((*ecran).format,255,255,255));
            SDL_BlitSurface(robot,NULL,ecran,&position);
            for (m=0;m<NB_BLOC_LARGEUR;m++)
            {
                for (n=0;n<NB_BLOC_LONGEUR;n++)
                {
                    position2.x=m * TAILLE_BLOC;
                    position2.y=n * TAILLE_BLOC;
                    switch (carte[m][n])
                    {
                    case ROCHER:
                        SDL_BlitSurface(mur,NULL,ecran,&position2);
                        break;
                    }
                }
            }
            SDL_Flip(ecran);
        }
        SDL_FreeSurface(robot);
        SDL_FreeSurface(mur);
    }
     
     
     
    void deplacerROBOT(int direction,SDL_Rect *position,SDL_Rect *position2,int *contacteZone)
    {
     
     
     
            switch (direction)
            {
            case HAUT:
                if ((*position).y<0)
                {
                    contacteZone[0]=1;
     
                }
                (*position).y--;
                break;
            case BAS:
                if ((*position).y+50>=LARGEUR_FENETRE)
                {
                    contacteZone[1]=1;
     
                }
                (*position).y++;
                break;
            case DROIT:
                if  ((*position).x+50>=LONGEUR_FENETRE )
                {
                    contacteZone[2]=1;
                }
                (*position).x++;
                break;
            case GAUCHE:
                if ((*position).x<0)
                {
                    contacteZone[3]=1;
     
                }
                (*position).x--;
                break;
            }
        }
    Images attachées Images attachées  

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    salut

    Si je garde la boucle on peux voir l'objet ce déplacer , si j'utilise ta méthode qui fonctionne , on ne vois pas l'image ce déplacé
    donc cette boucle sert a faire varier la vitesse de l'animation
    mais pourquoi si je m'est ma boucle i<1 je n'est qu'une parti de l'animation?
    sinon l'image ne ce déplace pas a droit avec un obstacle il va directement a gauche la je vois pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case DROIT:
     
                if  ((*position).x+50 >= LONGEUR_FENETRE ||  (*position2).x )
                {
                contacteZone[2] = 1;
                }
                else (*position).x++;
                break;

  4. #24
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Le test est incorrect : le if est satisfait si (*position2).x !=0

    Peut être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if  (position->x+50 >= LONGEUR_FENETRE ||  position2->x >=  LONGEUR_FENETRE)
    ...
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    salut


    j'ai regarder un peux partout sur les collisions mais j'arrive pas a comprendre les classes,square?
    quand j'applique le code que tu a écris l'image traverse l'obstacle

    quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  (position->x+50 >= LONGEUR_FENETRE ||  position2->x >=  LONGEUR_FENETRE)
    la position de l'image "(*position2).x ou position2->x"qui fait obstacle est toujours inférieur a LONGEUR_FENETRE
    Cet image "l'obstacle" est fixe et est positionner avec l'éditeur

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/01/2007, 23h28
  2. [Free Pascal] Aide pour comprendre une erreur de compilation
    Par SimoBenz dans le forum Free Pascal
    Réponses: 7
    Dernier message: 05/12/2006, 18h43
  3. Réponses: 4
    Dernier message: 18/11/2006, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo