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++Builder Discussion :

appeler une fonction définit par l'utilisateur


Sujet :

C++Builder

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut appeler une fonction définit par l'utilisateur
    Bonjour à tous,
    Je dois programmé un petit jeux pour mes études. c'est un canon qui tire des boulet sur des parachutistes et tout ca en Builder. J'ai des problème avec les fonctions que j'appelle:
    CanonDessiner(angle segmentLongueur);

    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
    void TFormJeux::CanonDessiner(angle segmentLongueur)
     {
     
          ImageGraphe->Canvas->Pen->Color = clWhite;
          ImageGraphe->Canvas->Pen->Width = 5;
          ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
          ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     
          segmentFinX = segmentDebutX + segmentLongueur * cos(angle);
          segmentFinY = segmentDebutY + segmentLongueur * sin(angle);
          ImageGraphe->Canvas->Pen->Color = clRed;
          ImageGraphe->Canvas->Pen->Width = 5;
          ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
          ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     
     }
    En fait j'aimerais que le programme envoie l'angle du canon et la longueur du segment
    mais cela ne marche pas. Est ce que je peux envoyer plusieurs données à ma fonction si oui comment l'écrit on?

  2. #2
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    Salut, dans ton .h tu dois déclarer ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void CanonDessiner(double angle, double segmentLongueur);
    puis dans ton .cpp, pour inserer ton code :
    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
     
    void TFormJeux::CanonDessiner(double angle, double segmentLongueur)
    {
     
    ImageGraphe->Canvas->Pen->Color = clWhite;
    ImageGraphe->Canvas->Pen->Width = 5;
    ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
    ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     
    segmentFinX = segmentDebutX + segmentLongueur * cos(angle);
    segmentFinY = segmentDebutY + segmentLongueur * sin(angle);
    ImageGraphe->Canvas->Pen->Color = clRed;
    ImageGraphe->Canvas->Pen->Width = 5;
    ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
    ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     
    }
    Let there be light, sound, drums, guitar ... Let there be rock !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ah niquel, je vous remercie!!!
    Maintenant j'ai un autre souci je dois faire avancer un cercle lorsque j'appuie sur Espace dans la trajectoire definit par le canon.
    Je ne comprend pas bien le On timer. Pouvez m'éclairer?

    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
     
    void __fastcall TFormJeux::TimerbouleTimer(TObject *Sender)
    {
     
    if(Espace==true)
    RondDessiner(angle);
     
     
    void TFormJeux::RondDessiner(float angle)
    {
     
     
    int compteur = 0;
     
     
    if ( compteur == 0)
    {
    rondRayon = 10;
    rondHautGaucheX = segmentFinX - rondRayon ;
    rondHautGaucheY = segmentFinY + rondRayon;
    rondBasDroiteX = segmentFinX + rondRayon;
    rondBasDroiteY = segmentFinY - rondRayon;
    compteur++;
    }
    else
    {
    rondHautGaucheX =rondHautGaucheX + 15*cos(angle);
    rondHautGaucheY = rondHautGaucheY + 15*sin(angle);
    rondBasDroiteX = rondBasDroiteX+ 15*cos(angle);
    rondBasDroiteY = rondBasDroiteY+ 15*sin(angle);
    }
    PanelAngle2->Caption = compteur;
     
    ImageGraphe->Canvas->Pen->Color = clBlack;
    ImageGraphe->Canvas->Pen->Width = 1;
    ImageGraphe->Canvas->Ellipse(rondHautGaucheX, rondHautGaucheY, rondBasDroiteX, rondBasDroiteY );
    }

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Citation Envoyé par paumi
    Je ne comprend pas bien le On timer. Pouvez m'éclairer?
    Le Timer permet d'effectuer un traitement toutes les X millisecondes. Afin de mieux comprendre son fonctionnement, fais F1 sur le composant Timer.

    J'espère que ça te servira...

    PS: Petit conseil, afin de rendre ton code plus lisible sur le forum, tu peux utiliser la balise [CODE]

    Bon courage

  5. #5
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    Si j'ai bien compris a chaque fois que la barre espace est pressée, il y a une action de faite, soit le deplacement du cercle. Si j'ai bien compris pour le moment tu as dans le .h :
    et à chaque fois que la barre espace est pressee tu mets puis le timer vient scanner ce booleen voir si la barre a ete pressee ou non ? pas vrai ? Si c'est le cas dans la Form il y a OnKeyPress() qui permet de savoir quelle touche est pressee, donc tu peut tester la touche qui est entree et mettre ton code du timer dans cette methode .....
    Let there be light, sound, drums, guitar ... Let there be rock !

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Yé je vous remercie !!!
    Le programme fonctionne pour les boulets
    Maintenant je dois utiliser un rand pour afficher un triangle qui descend à différents endroits. Seulement je n'ai pas encore réussi à l'utiliser. Il faudrait qu'il me renvoie des valeurs entre 0 et 400 car c'est la taille de ma fenetre!
    Merci pour votre aide

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    __fastcall TFormJeux::TFormJeux(TComponent* Owner)
       : TForm(Owner)
    {
    // l'origine des coordonnées est en haut à gauche
    // les abscisses (x) vont vers la droite
    // les ordonnées (y) vont vers le bas
       rondCentreX = 0;
       rondCentreY = 0;
       rondRayon = 0;
       segmentLongueur = ImageGraphe->Height/10;
       pas = 5.0*M_PI/180.0;
       segmentDebutX = ImageGraphe->Width/2;            // milieu de l'image
       segmentDebutY = ImageGraphe->Height;             // milieu de l'image
       segmentFinX = segmentDebutX;                     // le segment est vertical
       segmentFinY = segmentDebutY - segmentLongueur;   // doit etre soustrait
       angle = -M_PI/2.0;                               // angle négatif à cause des coordonnées X et Y
       anglememo = -M_PI/2.0;                           // mémorisation de l'angle du canon lors du dernier tir
       compteur2 = 0;                                   // activé lorsque la boule est tiré
       compteur = 0;                                    // réinitialise la position du boulet
       TriangleDebutX = rand()%400;
       TriangleDebutY= 0;
     
       ImageGraphe->Canvas->Pen->Color = clRed;             // Le trait sera rouge
       ImageGraphe->Canvas->Pen->Width = 5;                 // Largeur du trait = 5
       // Déplacer (plume levée) au départ du segment
       ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
       // Déplacer (plume baissée) à la fin du segment
       ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     
     
    }
    //---------------------------------------------------------------------------
     
     
     
     
     
    void __fastcall TFormJeux::FormKeyPress(TObject *Sender, char &Key)
    {
     
       if(compteur2 == 0)
          Espace = false;
     
     
       if (((Key == 'K')||(Key == 'k'))&(-angle*180/M_PI < 175 ))
       {
          angle = angle - pas;
          CanonDessiner(angle);
     
       }
     
       if (((Key == 'L')||(Key == 'l'))&(-angle*180/M_PI > 5 ))
       {
          angle = angle + pas;
          CanonDessiner(angle);
       }
     
       if((Key == ' ')&& (compteur2 == 0))
       {
          Espace = true;
          if (compteur2 == 0)
             anglememo = angle;
     
     
     
     
     
       }
     
     
       PanelAngle->Caption = FloatToStrF(-angle*180/M_PI,ffFixed,7,2);
     
     
    }
    //---------------------------------------------------------------------------
     
     void TFormJeux::RondDessiner(float angle)
     {
          ImageGraphe->Canvas->Brush->Color = clWhite;
          ImageGraphe->Canvas->FloodFill(rondBasDroiteX-rondHautGaucheX,rondBasDroiteY-rondHautGaucheY,clWhite, fsSurface);
          ImageGraphe->Canvas->Pen->Color = clWhite;
          ImageGraphe->Canvas->Pen->Width = 1;
          ImageGraphe->Canvas->Ellipse(rondHautGaucheX, rondHautGaucheY, rondBasDroiteX, rondBasDroiteY );
     
     
          if ( compteur == 0)
          {
             rondRayon = 10;
             rondHautGaucheX = segmentFinX - rondRayon ;
             rondHautGaucheY = segmentFinY + rondRayon;
             rondBasDroiteX = segmentFinX + rondRayon;
             rondBasDroiteY = segmentFinY - rondRayon;
             compteur++;
     
          }
     
          if(((rondBasDroiteX <= 380) && (rondBasDroiteX >=0))&& (rondHautGaucheY >= 0) )
          {
             rondHautGaucheX = rondHautGaucheX + 15*cos(-angle);
             rondHautGaucheY = rondHautGaucheY - 15*sin(-angle);
             rondBasDroiteX = rondBasDroiteX+ 15*cos(-angle);
             rondBasDroiteY = rondBasDroiteY - 15*sin(-angle);
          }
     
          else
          {
             Espace = false;
             compteur = 0;
          }
     
          ImageGraphe->Canvas->Brush->Color = clGray;
          ImageGraphe->Canvas->FloodFill(rondBasDroiteX-rondHautGaucheX,rondBasDroiteY-rondHautGaucheY,clBlack, fsSurface);
          ImageGraphe->Canvas->Pen->Color = clBlack;
          ImageGraphe->Canvas->Pen->Width = 1;
          ImageGraphe->Canvas->Ellipse(rondHautGaucheX, rondHautGaucheY, rondBasDroiteX, rondBasDroiteY );
     
     
     
     }
     
     
     void TFormJeux::CanonDessiner(float angle)
     {
          ImageGraphe->Canvas->Pen->Color = clWhite;
          ImageGraphe->Canvas->Pen->Width = 5;
          ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
          ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     
          segmentFinX = segmentDebutX + segmentLongueur * cos(angle);
          segmentFinY = segmentDebutY + segmentLongueur * sin(angle);
          ImageGraphe->Canvas->Pen->Color = clRed;
          ImageGraphe->Canvas->Pen->Width = 5;
          ImageGraphe->Canvas->MoveTo(segmentDebutX, segmentDebutY);
          ImageGraphe->Canvas->LineTo(segmentFinX, segmentFinY);
     }
     
     void TFormJeux::ParachuteDessiner()
     {
          ImageGraphe->Canvas->Pen->Color = clWhite;
          ImageGraphe->Canvas->Pen->Width = 3;
          ImageGraphe->Canvas->MoveTo(TriangleDebutX , TriangleDebutY );
          ImageGraphe->Canvas->LineTo(Triangle1X, Triangle1Y);
          ImageGraphe->Canvas->LineTo(Triangle2X, Triangle2Y);
          ImageGraphe->Canvas->LineTo(TriangleDebutX, TriangleDebutY);
     
          TriangleDebutY = TriangleDebutY + 4;
          Triangle1X = TriangleDebutX -4;
          Triangle1Y = TriangleDebutY + 7;
          Triangle2X = Triangle1X + 8;
          Triangle2Y = Triangle1Y;
     
          ImageGraphe->Canvas->Pen->Color = clBlue;
          ImageGraphe->Canvas->Pen->Width = 2;
          ImageGraphe->Canvas->MoveTo(TriangleDebutX , TriangleDebutY );
          ImageGraphe->Canvas->LineTo(Triangle1X, Triangle1Y);
          ImageGraphe->Canvas->LineTo(Triangle2X, Triangle2Y);
          ImageGraphe->Canvas->LineTo(TriangleDebutX, TriangleDebutY);
     }
     
    void __fastcall TFormJeux::TimerbouleTimer(TObject *Sender)
    {
       if (Triangle2Y < 295)
       ParachuteDessiner();
     
     
       if(Espace==true )
       {
          compteur2++;
          RondDessiner(anglememo);
     
       }
       else
          compteur2 = 0;
    }

Discussions similaires

  1. [2005] Invoquer une fonction définie par l'utilisateur dans un ordre SQL
    Par Pozzo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2014, 10h08
  2. SQL dynamique dans une fonction définie par l'utilisateur
    Par messalux dans le forum Développement
    Réponses: 7
    Dernier message: 11/11/2010, 09h25
  3. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  4. Réponses: 6
    Dernier message: 07/06/2007, 14h27
  5. Réponses: 3
    Dernier message: 21/12/2005, 11h55

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