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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    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 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    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 très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    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 très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    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