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

Lazarus Pascal Discussion :

Questions diverses pour un projet informatique


Sujet :

Lazarus Pascal

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 64
    Par défaut
    A mon avis (encore ;p) tu devrait partir sur un array à longueur fixe vu que tu utilise les planètes du système solaire.

    Par contre ton Objet CPlanetes devrait avoir diverses propriétés pour pouvoir être n'importe quelle planete (Cplanetes.Nom, CPlanetes.Checked, etc...)

    dans le constructeur create tu crée toutes tes planètes mais tu définis la propriété Checked de chaque planete à False par exemple.

    Quelque chose du genre:

    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
     
    TabEspace: array[0..9] of Cplanetes; 
     
     
    // définir 
    constructor create...
    var i:integer;
    begin
     
    for i := 0 to 9 do
    begin
     
    TabEspace[i] := Cplanetes.Create;
    TabEspace[i].Checked := False;
    // définir soleil
    if i = 0 then
    begin
    TabEspace[i].Nom := 'Soleil'; // string
    TabEspace[i].Taille := 100; // integer
    TabEspace[i].PositionX := 0; // integer
    TabEspace[i].PositionY := 0; // integer
    end
    // autre planète
    else if i = 1 then
    begin
    ...
    end
    // etc...
     
    end;
     
    end;
     
    // ajouter 1 planete
    procedure ajouter(NomPlanete:String)...
    var i: integer;
    begin
     
    for i := 0 to 9 do
    begin
     
    if TabEspace[i].Nom = NomPlanete then
    begin
    TabEspace[i].Checked := True;
    Break; // on stoppe la boucle plus besoin de continuer
    end;
     
    end;
     
     
    end;
    En gros tu te contente d'activer ce que tu veux comme planete.
    Une procedure "dessiner" avec une boucle comme montré avant te permettrait de savoir quelles planètes sont à dessiner.

    L'avantage d'un tableau à longueur fixe c'est que tu n'as pas besoin de le redimensionner avec des SetLength(TonTableau,LongueurTableau).

    Attention les exemples de code sont à adapter à ton cas.

  2. #22
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Je laisse tomber...

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Par défaut
    Ok, c'est bon, ça marche!!
    En fait, le problème venait du fait qu'il fallait que je déclare mon E comme une variable globale, et non locale...
    Et aussi un problème dans la boucle de remplissage de mon tableau qui n'est pas répétée un nombre précis de fois (selon le nombre de planètes à rajouter).

    Sinon, j'ai une autre question (j'ai pas trouvé sur Google):
    maintenant, j'aimerais tracer la trajectoire d'un missile, et on m'a dit qu'il était possible d'avoir quelque chose comme une variable de temps, qui pourrait être placée dans une formule dans mon programme, et qu'à chaque intervalle de temps identique, il me refait le calcul (pour simuler la vitesse en fait).
    Quelle est cette variable? Existe-t-elle, ou est-ce quelque chose que je dois créer?

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 64
    Par défaut
    Un simple TTimer (onglet "System" dans l'EDI) ne te suffit pas pour recalculer à intervales réguliers la position de ton missile ?

    tu peux aussi l'ajouter à un de tes objets en le codant

    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
     
    ...
    var
    mon_timer: TTimer;
    ...
     
    constructor create...
    begin
    ...
    mon_timer := TTimer.Create(Self);
    mon_timer.Enabled := True;
    mon_timer.Interval := 100; 
    mon_timer.OnTimer := @mon_timerOnTimer;
    ...
    end;
     
    procedure mon_timerOnTimer(Sender: TObject);
    begin
    ...
    // calcul missile
    ...
    end;

  5. #25
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Voe,
    Citation Envoyé par chrysbi Voir le message
    En fait, le problème venait du fait qu'il fallait que je déclare mon E comme une variable globale, et non locale...
    Mauvais point, les variables globales sont à proscrire.

    Une procédure doit recevoir en paramètre tout ce dont elle a besoin (saus ses variables locales, bien entendu).

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Par défaut
    @droggo> Pour l'instant, mon programme marche comme ça. Sans, il bug, donc je vais laisser comme ça pour l'instant

    @yann.m> Je sais pas ce qu'est le Timer... du coup, je comprends pas ton code...


    Par contre, ce que j'ai essayé de faire en fait, c'était d'intégrer ma formule, mais au final, y'a un problème, car ma force elle-même est dépendante du temps...

    En fait, je calcule ma force au point initial, puis je la décompose en 2 composantes Xf et Yf. Ensuite, j'ai voulu intégrer avec la formule du principe fondamental de la dynamique pour avoir l'accélération, puis intégrer pour obtenir ma les formules pour calculer les coordoonées x et y en fonction du temps. Mais comme ma force est dépendante du temps (vu que mon missile se déplace et qu'il ne subit pas constamment la même force), en réalité, je ne pouvais pas l'intégrer du tout...
    Quelqu'un aurait une idée du comment faire? (je sais que c'est plus trop de l'info là )


    Ah oui, une autre question: pour les fonctions cos et sin, la valeur qu'on rentre est-ce-qu'il le traite en tant que radian ou degré?

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 64
    Par défaut
    un TTimer execute une procedure à intervale régulier (n'as-tu pas besoin de calculer la position de ton missile toutes les x millisec ?).

    - la procedure à executer est définie dans la proprieté TTimer.OnTimer
    - l'intervale est défini dans la propriété TTimer.Interval (1000 = 1sec)
    - pour plus d'infos/tuto Google est aussi ton ami

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Par défaut
    Salut,

    j'ai re un problème: je voudrais prendre uniquement la partie entière d'un réelle (car il semblerait que pour dessiner sur un TImage, Lazarus n'accepte que des entiers pour les coordonnées), et lorsque j'essaie avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X:=trunc(X+Fxtotal);
    Y:=trunc(Y+Fytotal);
    et bien, ça ne marche pas, j'ai un message d'erreur SIGFPE. Je suis certaine que le problème vient de ces 2 lignes, puisque lorsque je les enlève, tout marche!
    Alors à moins que trunc soit juste, je ne sais pas d'où vient l'erreur...

  9. #29
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 64
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    mon_entier := Round(10.35); // arrondir à l'entier le plus proche

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2010
    Messages : 41
    Par défaut
    Merci!!

    Par contre, comment dessine-t-on un point? (pas un segment, juste un point là où se trouve le curseur)

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 64
    Par défaut
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      bmp: TBitmap;
      couleur: TColor;
    begin
        bmp := TBitmap.Create;
        Image1.Picture.Bitmap.Assign(bmp);
        bmp.Free;
        Image1.Picture.Bitmap.SetSize(100,100);
        // définition de la couleur
        couleur := clRed;
        // attribution de cette couleur pour le pixel aux coordonnées X Y 
        Image1.Picture.Bitmap.Canvas.Pixels[10,10] := couleur;
        // ou directement
        Image1.Picture.Bitmap.Canvas.Pixels[10,10] := clRed;
    end;

Discussions similaires

  1. Ajax et php pour un projet informatique
    Par aspiker dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2012, 13h51
  2. Réponses: 8
    Dernier message: 27/12/2009, 00h38
  3. Questions diverses pour stage
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/01/2009, 13h47
  4. Quelques questions pour petit projet
    Par lapos dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 21/12/2007, 17h22
  5. [MySQL] Pour un projet php/mysql : questions sur le langage et l'environnement
    Par 3wicha dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/07/2007, 18h21

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