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

Turbo Pascal Discussion :

[TP] Champs d'etoiles : régler la vitesse


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut [TP] Champs d'etoiles : régler la vitesse
    salut je voudrias juste savoir cmt faire pour que mon programme ait l'air un peu plus vrai et cmt faire pour bien definir la vitesse des differentes etoiles merci voiçi le 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
    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
     
    uses crt,graph,dos;
    type T_etoile = record
           x,y:integer;
                    end;
    const max=26;
    var a,b:integer;
        G_Etoile, M_Etoile, P_Etoile,TP_Etoile:array[1..100] of T_etoile;
        I,J:Integer;
        x,y,color:integer;
        heure,minu,sec,cent,plus,versus,encor:word;
    {   Procedure pour dessiner les petites,moyenes,et grandes etoiles  }
     
    Procedure Petit_Etoile(x,y,color:LongInt);
    begin
        for i:=0 to 2 do
        begin
            putpixel(x,y+i,color);
            putpixel(x+i-1,y+1,color)
        end
    end;
     
    Procedure Moyen_Etoile(x,y,color:LongInt);
    begin
        for i:=0 to 4 do
        begin
           PutPixel(x,y+i,color);
           PutPixel(x+i-2,y+2,color)
        end
    end;
     
    Procedure Grand_Etoile(x,y,color:LongInt);
    Begin
        for i:=0 to 8 do
        begin
            PutPixel(x,y+i-1,color);
            PutPixel(x+i-4,y+3,color)
        end;
        PutPixel(x-1,y+2,color);
        PutPixel(x+1,y+2,color);
        PutPixel(x-1,y+4,color);
        PutPixel(x+1,y+4,color)
    end;
    {  Programme principal  }
    Begin
      a:=detect;
      Initgraph(a,b,'c:\tp\bgi');
      setbkcolor(0);
      randomize;
      { Initialiser les differentes positions du champ d'etoiles }
      for j:=1 to max do
      begin
          G_Etoile[j].x:=random(630)+5;
          G_Etoile[j].y:=random(460)+5;
          M_Etoile[j].x:=random(630)+5;
          M_Etoile[j].y:=random(460)+5;
          P_Etoile[j].x:=random(630)+5;
          P_Etoile[j].y:=random(460)+5;
          TP_Etoile[j].x:=random(630)+5;
          TP_Etoile[j].y:=random(460)+5;
      end;
     
    { Afficher le champ d'etoile  }
        for j:=1 to max do
        begin
           Grand_etoile( G_Etoile[j].x, G_Etoile[j].y,white);
           Moyen_Etoile( M_Etoile[j].x, M_Etoile[j].y,white);
           Petit_Etoile( P_Etoile[j].x, P_Etoile[j].y,white);
           PutPixel(TP_Etoile[j].x, TP_Etoile[j].y,white);
        end;
    {  Tout ce qui suit permet le deplacement du champ d'etoile  }
       repeat
           gettime(heure,minu,sec,cent);
           if versus<> sec then
           begin
               for j:=1 to max do
               begin
                   { Effacer l'etoile concern‚}
                   PutPixel( TP_Etoile[j].x, TP_Etoile[j].y,0);
                   Inc(TP_Etoile[j].x,2);
                    { afficher l'etoile concern‚}
                   PutPixel( TP_Etoile[j].x, TP_Etoile[j].y,white);
                   if TP_Etoile[j].x>648 then
                   begin
                      TP_Etoile[j].x:=1;
                      TP_Etoile[j].y:=random(460)+5;
                   end;
               end;
          end;
          if plus<> cent then
          begin
              for j:=1 to max do
              begin
               { Effacer l'etoile concern‚}
                  Grand_etoile( G_Etoile[j].x, G_Etoile[j].y,0);
                  Inc(G_Etoile[j].x);
                   {afficher l'etoile concern‚}
                  Grand_etoile( G_Etoile[j].x, G_Etoile[j].y,white);
                  if G_Etoile[j].x=650 then
                  begin
                      G_Etoile[j].x:=1;
                      G_Etoile[j].y:=random(460)+5;
                  end;
              end;
          end;
          if versus<>plus then
          begin
            for j:=1 to max do
            begin
             { Effacer l'etoile concern‚}
               Moyen_etoile( M_Etoile[j].x, M_Etoile[j].y,0);
               Inc(M_Etoile[j].x);
                {afficher l'etoile concern‚}
               Moyen_etoile( M_Etoile[j].x, M_Etoile[j].y,white);
               if M_Etoile[j].x=650 then
               begin
                   M_Etoile[j].x:=1;
                   M_Etoile[j].y:=random(460)+5;
               end;
            end;
          end;
          if encor<> plus then
          begin
            for j:=1 to max do
            begin
             { Effacer l'etoile concern‚}
               Petit_Etoile( P_Etoile[j].x, P_Etoile[j].y,0);
               Inc(P_Etoile[j].x);
                {afficher l'etoile concern‚}
               Petit_Etoile( P_Etoile[j].x, P_Etoile[j].y,white);
               if P_Etoile[j].x=650 then
               begin
                  P_Etoile[j].x:=1;
                  P_Etoile[j].y:=random(460)+5;
               end;
            end;
          end;
          versus:=sec;
          plus:=cent;
       until keypressed;
     
      Closegraph;
    END.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Je trouve cela déjà très réussi !
    Pour la vitesse des étoiles, je trouve ça bon. Par contre, personnellement, je mettrais beaucoup plus de minuscules étoiles immobiles dans le fond.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    merci, je voudrais savoir si on peut obtenir une vitesse plus lente que le centieme et la seconde en utilisant gettime(excepté l'heure et la minute)

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par krachik
    merci, je voudrais savoir si on peut obtenir une vitesse plus lente que le centieme et la seconde en utilisant gettime(excepté l'heure et la minute)
    Une vitesse plus lente ?!? Tu peux tout convertir en centièmes de secondes et travailler à la vitesse que tu veux.
    Je sens que je n'ai pas compris le sens de ta question...
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    merci pr la reponse mais ce que je veux dire c'est que est ce qu'il est possible d'utiliser par example une temporisation de 200ms ou 500ms par exemple avec gettime

  6. #6
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Par défaut
    Salut,

    Pour obtenir une vitesse plus lente, tu peux utiliser des nombres flottant et n'ajouter que des petites valeurs chaque pas de temps ( qu'il soit fixe ou non ) et seulement arrondir pour l'affichage. Sinon ça rend bien. Avec GetTime, il me semble que tu ne descendra pas en dessous du centième de seconde ( mais pour 200 ms ou 500 ms c'est bon non ? ). Biens sûr le calcul et l'affichage prennent un peu de temps et tu ne peux pas aller plus vite que l'ordinateur.

  7. #7
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    merci mais je ne te suis pas trop,tu veux bien t'expliquer un peu plus?

  8. #8
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Par défaut
    Salut,


    D'après ce que j'ai compris la ligne 'TP_Etoile[j].y:=random(460)+5' permet de déplacer une étoile vers la gauche, mais tu peux très bien diminuer le nombre de pixel de décalage ( 5 > 1 ) et si pour d'autres il faut que ce soit plus petit encore tu peux augmenter par une valeur plus petite que 1 ( mais là il faut passer en réels ). Si tu utiliser des réels, tu ne peux pas directement les transmettre à PutPixel, il faut que tu fasses un arrondi ( Round par exemple ). Pour ce qui est d'une précision de l'ordre de 500 millisecondes, le paramètre que tu appeles cent donne les centièmes de secondes, ce qui fait qu'en multiplant par 10 tu obtients bien des milllisecondes.

  9. #9
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    merci la je suis un peu plus eclairé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38
  2. [VB6] [Datareport] définir un champ
    Par ckankonvahou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/10/2002, 11h16
  3. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08
  4. Taille des champs proportionnelle...
    Par Depteam1 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2002, 11h48
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

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