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 :

ligne code lue qu'une fois dans boucle


Sujet :

C

  1. #1
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut ligne code lue qu'une fois dans boucle
    Bonsoir,

    afin de minimiser mon code, je cherche à savoir s'il y a possibilité dans une boucle de ne lire qu'une fois une ligne de code ? (la fonction est appellée dans une boucle)

    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
    void DeplacerBille(bille *uneBille)
    {
        double signe = 1;
     
        if(uneBille->position.x > LARGEUR_ECRAN)
        {
            uneBille->position.x = LARGEUR_ECRAN - uneBille->image->w;
            signe = -signe;
     
        }else if(uneBille->position.x < 0)
        {
            uneBille->position.x = 0;
            signe = -signe;
        }
     
        uneBille->position.x += 5 * signe;
        //printf("%f\n", signe);
     
    }
    Ca m'éviterait de mettre un if et d'incrémenter une variable locale à la fonction, ou encore d'ajouter un paramètre qui contiendrait un pointeur qui aura été initialisé en amont de la fonction. Bref ça m'économiserait 3 lignes de code

  2. #2
    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
    Je ne comprend pas entierement.

    La ligne que tu ne veux appeler qu'une fois, c'est quoi ? la fonction que tu nous presente ?

    Si tu veux n'executer qu'une fois la ligne, pourqoui la mettre dans une boucle ?

    Si tu execute cette ligne en fonction de l'indice de la boucle, un simple if devrait suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (indice == valeurParticuliere)
        executerLigne();

  3. #3
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    J'ai trouvé une solution toute bête, pour que la variable ne soit initialisée qu'une fois avant la fonction présente dans la boucle, j'ai créé une sous-variable de ma structure :

    bille.h :

    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
    #ifndef BILLE_H_INCLUDED
    #define BILLE_H_INCLUDED
    
    #include <SDL/SDL.h>
    #include "constantes.h"
    
    typedef struct bille bille;
    struct bille
    {
        SDL_Surface *image;
        SDL_Rect position;
        double acceleration;
        double vitesseX;
        double signeVitesseX;
        double vitesseY;
        double signeVitesseY;
        double vitesseMax;
    };
    
    void CreationBille (bille *uneBille, int posInitX, int posInitY);
    void DestructionBille (bille *uneBille);
    void DeplacerBille(bille *uneBille);
    
    #endif // BILLE_H_INCLUDED
    bille.c :

    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
    void DeplacerBille(bille *uneBille)
    {
    
        if(uneBille->position.x > LARGEUR_ECRAN)
        {
            uneBille->position.x = LARGEUR_ECRAN - uneBille->image->w;
            uneBille->signeVitesseX = -uneBille->signeVitesseX;
            //printf("%f\n", uneBille->signeVitesseX);
    
        }else if(uneBille->position.x <= 0)
        {
            uneBille->position.x = 0;
            uneBille->signeVitesseX = -uneBille->signeVitesseX;
        }
    
        if(uneBille->position.y > HAUTEUR_ECRAN)
        {
            uneBille->position.y = HAUTEUR_ECRAN - uneBille->image->h;
            uneBille->signeVitesseY = -uneBille->signeVitesseY;
            //printf("%f\n", uneBille->signeVitesseX);
    
        }else if(uneBille->position.y <= 0)
        {
            uneBille->position.y = 0;
            uneBille->signeVitesseY = -uneBille->signeVitesseY;
        }
    
        uneBille->position.x += 10 * uneBille->signeVitesseX;
        uneBille->position.y += 10 * uneBille->signeVitesseY;
    }
    Mais encore plus simple, si ça existe est d'initialiser une variable locale dans ma fonction sans qu'elle soit réinitialisée à chaque boucle, vu que signeVitesseX et signeVitesseY ne me servent que dans cette fonction.

  4. #4
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Je ne comprend pas entierement.

    La ligne que tu ne veux appeler qu'une fois, c'est quoi ? la fonction que tu nous presente ?

    Si tu veux n'executer qu'une fois la ligne, pourqoui la mettre dans une boucle ?

    Si tu execute cette ligne en fonction de l'indice de la boucle, un simple if devrait suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (indice == valeurParticuliere)
        executerLigne();
    La ligne que je veux lire une fois est l'initialisation d'un variable de type int, locale à la fonction qui est appellée dans une boucle (timer)

Discussions similaires

  1. Comment empêcher un passage à la ligne (au milieu d'une phrase) dans le code source ?
    Par martha20 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 07/01/2011, 18h30
  2. [MySQL] Comment insérer 6 lignes en une fois dans une base mysql avec du PHP ?
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/02/2008, 14h39
  3. Pour qu'une anim ne soit lue qu'une fois ??
    Par jivago13 dans le forum Flash
    Réponses: 15
    Dernier message: 09/06/2006, 21h09
  4. Réponses: 7
    Dernier message: 15/05/2006, 13h36
  5. Récuperation du code binaire d'une image dans une chaîne
    Par Nomely dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 27/01/2006, 19h01

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