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

Autres IDE Pascal Discussion :

Faire intéragir deux boucles


Sujet :

Autres IDE Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 10
    Points
    10
    Par défaut Faire intéragir deux boucles
    Bonjour à tous,

    J'aimerai savoir si c'était possible de faire intéragir deux boucles en même temps? Qu'elles fonctionnent en même temps. Car j'aurai besoin qu'une boucle qui chronomètre fonctionne en même temps qu'une boucle (celle-ci pour les déplacement).

    Merci d'avance.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    A priori (vu le peu de renseignements que tu donnes), tu devrais regarder du côté du multithreading.

    Si tu en as besoin, il existe plusieurs tutoriels sur ce sujet. Par exemple celui-ci : http://lberne.developpez.com/delphi/Proc-Thread/

    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    J'ai lu la documentation et je comprends bien le principe. Mais comment rendre ça en Pascal? Auriez vous un exemple de code source?

  4. #4
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Il y a justement un exemple de classe TThreadTimer, dont tu pourrais t'inspirer, dans le tutoriel d'Adrien Reboisson :

    http://reisubar.developpez.com/threadevents/#LV
    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    ça me parait bien complexe pour moi qui débute.

    Voici mon code source:

    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
    Program F1_1;
    Uses crt, dos;
    Var x, y, tour: byte;
        mv: char;
     
    Procedure Time;
    Var sec, min, heu: byte;
    Begin
     sec:=0; min:=0; heu:=0;
     While (sec<=59) AND (min<=59) do
        Begin
           If (sec<59) then sec:=sec+1
           Else If (min<59) then
              Begin
                 sec:=0;
                 min:=min+1;
              End
           Else If (heu>0) then
              Begin
                 sec:=0;
                 min:=0;
                 heu:=heu+1;
              End;
           delay(800);
           If (min=0) AND (heu=0) then WriteLn (sec)
           Else If (min>0) AND (heu=0) then   WriteLn (min,':',sec)
           Else If (heu>0) then WriteLn (heu,':',min,':',sec);
        End;
     
    End;
     
    Procedure Circuit;
     Begin
       GotoXY (6,1); Write ('--------------------'); GotoXY (11,5); Write ('----------------'); GotoXY (23,2); Write ('   |');
       GotoXY (5,2); Write ('|   '); GotoXY (23,3); Write ('   |'); GotoXY (5,3); Write ('|    ');
       GotoXY (23,4); Write ('   |'); GotoXY (5,4); Write ('|    '); GotoXY (23,5); Write ('   |'); GotoXY (5,5); Write ('|    ');
       GotoXY (23,6); Write ('|   '); GotoXY (5,6); Write ('|    |'); GotoXY (23,7); Write ('|   '); GotoXY (5,7); Write ('|    |');
       GotoXY (23,8); Write ('|   '); GotoXY (5,8); Write ('|    |'); GotoXY (27,6); Write ('----------------'); GotoXY (5,9); Write ('|    |');
       GotoXY (24,9); Write ('----------------'); GotoXY (5,10); WriteLn ('|    |'); GotoXY (38,7);  Write ('     |'); GotoXY (5,11); Write ('|    |');
       GotoXY (38,8);  Write ('     |'); GotoXY (5,12); Write ('|    |'); GotoXY (38,9);  Write ('     |'); GotoXY (5,13); Write ('|    |');
       GotoXY (38,10); Write ('|    |'); GotoXY (5,14); Write ('|    |'); GotoXY (38,11); Write ('|    |'); GotoXY (5,15); Write ('|    |');
       GotoXY (38,12); Write ('|    |'); GotoXY (5,16); Write ('|    |'); GotoXY (38,13); Write ('|    |'); GotoXY (5,17); Write ('|    |');
       GotoXY (38,14); Write ('|    |'); GotoXY (5,18); Write ('|    |'); GotoXY (38,15); Write ('|    |'); GotoXY (5,19); Write ('|    |');
       GotoXY (38,16); Write ('|    |'); GotoXY (5,20); Write ('|    |'); GotoXY (38,17); Write ('|     '); GotoXY (5,21); Write ('|     ');
       GotoXY (38,18); Write ('|     '); GotoXY (5,22); Write ('|     '); GotoXY (38,19); Write ('|     '); GotoXY (5,23); Write ('|     ');
       GotoXY (11,21); Write ('---------------------------------------------------------------'); GotoXY (6,24); Write ('------------------------------------------------------------------------');
       GotoXY (73,23); Write ('     |'); GotoXY (73,22); Write ('     |'); GotoXY (73,21); Write ('     |'); GotoXY (73,20); Write ('|    |');
       GotoXY (73,19); Write ('|    |'); GotoXY (73,18); Write ('|    |'); GotoXY (73,17); Write ('|    |'); GotoXY (73,16); Write ('|    |');
       GotoXY (73,15); Write ('|    |'); GotoXY (73,14); Write ('|    |'); GotoXY (73,13); Write ('|    |');
       GotoXY (73,12); Write ('|    |'); GotoXY (73,11); Write ('|    |'); GotoXY (73,10); Write ('     |'); GotoXY (73,11); Write ('     |');
       GotoXY (73,12); Write ('     |'); GotoXY (57,12); Write ('----------------'); GotoXY (62,9); Write ('----------------');
       GotoXY (56,9); Write ('|'); GotoXY (56,10); Write ('|'); GotoXY (56,11); Write ('|'); GotoXY (56,8); Write ('|    |');
       GotoXY (56,7); Write ('|    |'); GotoXY (56,6); Write ('|    |'); GotoXY (56,5); Write ('|    |'); GotoXY (56,4); Write ('     |');
       GotoXY (56,3); Write ('     |'); GotoXY (56,2); Write ('     |'); GotoXY (47,1); Write ('--------------'); GotoXY (52,4); Write ('----');
       GotoXY (46,2); Write ('|'); GotoXY (46,3); Write ('|'); GotoXY (46,4); Write ('|'); GotoXY (46,5); Write ('|    |');
       GotoXY (46,6); Write ('|    |'); GotoXY (46,7); Write ('|    |'); GotoXY (46,8); Write ('|    |'); GotoXY (46,9); Write ('|    |');
       GotoXY (46,10); Write ('|    |'); GotoXY (46,11); Write ('|    |'); GotoXY (46,12); Write ('|    |'); GotoXY (46,13); Write ('|    |');
       GotoXY (46,14); Write ('|    |'); GotoXY (46,15); Write ('|    |'); GotoXY (46,16); Write ('|    |'); GotoXY (46,17); Write ('     |');
       GotoXY (46,18); Write ('     |'); GotoXY (46,19); Write ('     |'); GotoXY (44,17); Write ('--'); GotoXY (39,20); Write ('------------');
       GotoXY (41,23); Write ('|'); GotoXY (41,22); Write ('|'); GotoXY(39,23); Write ('|'); GotoXY(39, 22); Write ('|');
       textcolor (4); GotoXY (31,3); Write ('F1 *******');
       GotoXY (65,2); Write('Tour: ',tour,' ');
       GotoXY (65,4); Write('Temps:'); GotoXY (72,4);
     End;
     
    Begin
     
     tour:=3;
     mv:='d';
     cursoroff;
     x:=40;
     y:=23;
     GotoXY (x,y); textcolor (4); WriteLn ('>');
     
     While not(keypressed) AND (mv<>#13) AND (tour>0) do
        Begin
          textcolor (8); Circuit;
          If (x=39) AND ((y=23) OR (y=22)) AND (mv='d')  then tour:=tour-1;   (*Diminue le tour de 1 à chaque passage par la ligne d'arrivée *)
          If (x=39) AND ((y=23) OR (y=22)) AND (mv='q') then x:=x+1;  (*Empêche de passer la ligne à l'envers*)
          GotoXY (x,y);
          textcolor (4);
          Case mv of
             'q' : WriteLn ('<');
             'd' : WriteLn ('>');
             'z' : WriteLn ('^');
             's' : WriteLn ('v');
            End;
          mv:=readkey;                          (*Limite circuit extremite + déplacement*)
     
          Case mv of
             'q' : If (x>6)  then x:=x-1;
             'd' : If (x<77) then x:=x+1;
             'z' : If (y>2)  then y:=y-1;
             's' : If (y<23) then y:=y+1;
            End;
                                                         (*Limites circuit entier*)
               If ((y=20) AND (x>38) AND (x<51)) OR ((y=12) AND (x>56) AND (x<74)) OR ((y=4) AND (x>50) AND (x<57)) OR ((y=9) AND (x>20) AND (x<39)) OR ((y=5) AND (x>9) AND (x<24)) then y:=y-1
          Else If ((y=21) AND (x>9) AND (x<74)) OR ((y=9) AND (x>60) AND (x<78)) OR ((y=17) AND (x>42) AND (x<47)) OR ((y=6) AND (x>25) AND (x<43)) then y:=y+1
          Else If ((x=10) AND (y>5) AND (y<22)) OR ((x=26) AND (y>1) AND (y<6)) OR ((x=43) AND (y>6) AND (y<17)) OR ((x=51) AND (y>4) AND (y<20)) OR ((x=61) AND (y>1) AND (y<9)) then x:=x-1
          Else If ((x=23) AND (y>5) AND (y<10)) OR ((x=38) AND (y>8) AND (y<20)) OR ((x=46) AND (y>1) AND (y<18)) OR ((x=56) AND (y>4) AND (y<12)) OR ((x=73) AND (y>11) AND (y<21)) then x:=x+1;
          clrscr;
       End;
     textcolor (8);Circuit;
     GotoXY (x,y); textcolor (4); WriteLn ('>');
     GotoXY(34,13); WriteLn ('La partie est terminee');
     ReadLn;
    End.
    Docn j'aimerai que Time agissent en même temps que le déplacement de la flèche. Comment pourrais je procéder?
    Merci de vos aides en tout cas.

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Pour faire du multithreading, je crois qu'il faut connaitre un peu sur les objets puisque ça fait intervenir les classes. Sinon, le mettre en oeuvres ne devrait pas etre trop compliquer.

    Comme alternative, pourquoi n'utilises tus pas l'heure du systeme pour ton timer? comme ça, ça eviterait les delay(800) que tu fais dans le programmes.

    sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    While not(keypressed) AND (mv<>#13) AND (tour>0) do
    or dans ton code, tu fais appel à readkey, ce qui veut dire qu'on s'attend à ce que l'on appuie sur une touche. Ta boucle s'arretera avec un peu de chance dès l'utilisateur appuiera sur une touche.
    Aussi,
    faire appel à readkey fait souvent un bloquage dans le programme, je te conseille de faire comme suit, mais il faut biensur modifier les condition de ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     if (keyPressed) then
      mv:=readkey;
    Aussi, pourquoi ne pas faire
    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
     
    if keyPressed then
     begin
      mv:=readkey;
      Case mv of
             'q' :begin
                     WriteLn ('<');
                     If (x>6)  then
                       x:=x-1;
                  end;
             'd' : begin
                    WriteLn ('>');
                     If (x<77) then x:=x+1;
                   end;
             'z' : begin
                    WriteLn ('^');
                    If (y>2)  then y:=y-1;
                   end;
             's' : begin
                    WriteLn ('v');
                    If (y<23) then y:=y+1;
                   end;
        End;
    end;
    ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Comme alternative, pourquoi n'utilises tus pas l'heure du systeme pour ton timer? comme ça, ça eviterait les delay(800) que tu fais dans le programmes.
    ?
    Parce que je veux que le chrono commence à 0.

    Citation Envoyé par darrylsite Voir le message
    faire appel à readkey fait souvent un bloquage dans le programme, je te conseille de faire comme suit, mais il faut biensur modifier les condition de ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     if (keyPressed) then
      mv:=readkey;
    ?
    Si je fais ça, le circuit la page s'actualise sans cesse. Et on ne peut donc pas faire de mouvement.

    Citation Envoyé par darrylsite Voir le message
    Aussi, pourquoi ne pas faire
    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
     
    if keyPressed then
     begin
      mv:=readkey;
      Case mv of
             'q' :begin
                     WriteLn ('<');
                     If (x>6)  then
                       x:=x-1;
                  end;
             'd' : begin
                    WriteLn ('>');
                     If (x<77) then x:=x+1;
                   end;
             'z' : begin
                    WriteLn ('^');
                    If (y>2)  then y:=y-1;
                   end;
             's' : begin
                    WriteLn ('v');
                    If (y<23) then y:=y+1;
                   end;
        End;
    end;
    ?
    Même problème, ça s'actualise. Du moins à cause du keyPressed. Pour le reste j'ai tout mis sous un seul case of.

  8. #8
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Salut,
    j'avais mal evalué ton code la derniere fois
    J'y ai jeter un oeil hier et apporté quelques modifications dans le code. J'ai utilisé l'horloge du systeme pour contourner le probleme de multithreading, et eviter de faire une boucle dans la fonction time.
    Je ne dispose pas de devpascal, mais j'ai testé le code sous lazarus avec freepascal 2.2.

    Tu peux voir le timer en haut à gauche .
    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
     
    program Project1;
     
    uses
      crt, dos;
      type Heure = record
                    ss, s, m, h : word;
                  end;
     
      Var x, y, tour: byte;
           mv: char;
         temps : Heure;
     
    procedure initTimer(var tm : Heure);
    begin
     gettime(tm.h,tm.m,tm.s,tm.ss);
    end;
     
    procedure diff(t1, t2 : heure; var t: heure) ;
     var l : longint;
    begin
     l:=t1.s+t1.m*60+t1.h*3600-(t2.s+t2.m*60+t2.h*3600);
     t.h:=l div 3600;
     l:=l mod 3600;
     t.m:=l div 60;
     t.s:=l mod 60;
    end;
     
    Procedure Time;
    Var ss,sec, min, heu: byte;
        t, t2 : Heure;
    begin
     gettime(t.h, t.m,t.s,t.ss);
     diff(t, temps, t2);
     
     sec:=t2.s; min:=t2.m; heu:=t2.h;
     
           If (sec<59) then sec:=sec+1
           Else If (min<59) then
              Begin
                 sec:=0;
                 min:=min+1;
              End
           Else If (heu>0) then
              Begin
                 sec:=0;
                 min:=0;
                 heu:=heu+1;
              End;
           If (min=0) AND (heu=0) then WriteLn (sec)
           Else If (min>0) AND (heu=0) then   WriteLn (min,':',sec)
           Else If (heu>0) then WriteLn (heu,':',min,':',sec);
     
     
    End;
     
     
     
    Procedure Circuit;
     Begin
       GotoXY (6,1); Write ('--------------------'); GotoXY (11,5); Write ('----------------'); GotoXY (23,2); Write ('   |');
       GotoXY (5,2); Write ('|   '); GotoXY (23,3); Write ('   |'); GotoXY (5,3); Write ('|    ');
       GotoXY (23,4); Write ('   |'); GotoXY (5,4); Write ('|    '); GotoXY (23,5); Write ('   |'); GotoXY (5,5); Write ('|    ');
       GotoXY (23,6); Write ('|   '); GotoXY (5,6); Write ('|    |'); GotoXY (23,7); Write ('|   '); GotoXY (5,7); Write ('|    |');
       GotoXY (23,8); Write ('|   '); GotoXY (5,8); Write ('|    |'); GotoXY (27,6); Write ('----------------'); GotoXY (5,9); Write ('|    |');
       GotoXY (24,9); Write ('----------------'); GotoXY (5,10); WriteLn ('|    |'); GotoXY (38,7);  Write ('     |'); GotoXY (5,11); Write ('|    |');
       GotoXY (38,8);  Write ('     |'); GotoXY (5,12); Write ('|    |'); GotoXY (38,9);  Write ('     |'); GotoXY (5,13); Write ('|    |');
       GotoXY (38,10); Write ('|    |'); GotoXY (5,14); Write ('|    |'); GotoXY (38,11); Write ('|    |'); GotoXY (5,15); Write ('|    |');
       GotoXY (38,12); Write ('|    |'); GotoXY (5,16); Write ('|    |'); GotoXY (38,13); Write ('|    |'); GotoXY (5,17); Write ('|    |');
       GotoXY (38,14); Write ('|    |'); GotoXY (5,18); Write ('|    |'); GotoXY (38,15); Write ('|    |'); GotoXY (5,19); Write ('|    |');
       GotoXY (38,16); Write ('|    |'); GotoXY (5,20); Write ('|    |'); GotoXY (38,17); Write ('|     '); GotoXY (5,21); Write ('|     ');
       GotoXY (38,18); Write ('|     '); GotoXY (5,22); Write ('|     '); GotoXY (38,19); Write ('|     '); GotoXY (5,23); Write ('|     ');
       GotoXY (11,21); Write ('---------------------------------------------------------------'); GotoXY (6,24); Write ('------------------------------------------------------------------------');
       GotoXY (73,23); Write ('     |'); GotoXY (73,22); Write ('     |'); GotoXY (73,21); Write ('     |'); GotoXY (73,20); Write ('|    |');
       GotoXY (73,19); Write ('|    |'); GotoXY (73,18); Write ('|    |'); GotoXY (73,17); Write ('|    |'); GotoXY (73,16); Write ('|    |');
       GotoXY (73,15); Write ('|    |'); GotoXY (73,14); Write ('|    |'); GotoXY (73,13); Write ('|    |');
       GotoXY (73,12); Write ('|    |'); GotoXY (73,11); Write ('|    |'); GotoXY (73,10); Write ('     |'); GotoXY (73,11); Write ('     |');
       GotoXY (73,12); Write ('     |'); GotoXY (57,12); Write ('----------------'); GotoXY (62,9); Write ('----------------');
       GotoXY (56,9); Write ('|'); GotoXY (56,10); Write ('|'); GotoXY (56,11); Write ('|'); GotoXY (56,8); Write ('|    |');
       GotoXY (56,7); Write ('|    |'); GotoXY (56,6); Write ('|    |'); GotoXY (56,5); Write ('|    |'); GotoXY (56,4); Write ('     |');
       GotoXY (56,3); Write ('     |'); GotoXY (56,2); Write ('     |'); GotoXY (47,1); Write ('--------------'); GotoXY (52,4); Write ('----');
       GotoXY (46,2); Write ('|'); GotoXY (46,3); Write ('|'); GotoXY (46,4); Write ('|'); GotoXY (46,5); Write ('|    |');
       GotoXY (46,6); Write ('|    |'); GotoXY (46,7); Write ('|    |'); GotoXY (46,8); Write ('|    |'); GotoXY (46,9); Write ('|    |');
       GotoXY (46,10); Write ('|    |'); GotoXY (46,11); Write ('|    |'); GotoXY (46,12); Write ('|    |'); GotoXY (46,13); Write ('|    |');
       GotoXY (46,14); Write ('|    |'); GotoXY (46,15); Write ('|    |'); GotoXY (46,16); Write ('|    |'); GotoXY (46,17); Write ('     |');
       GotoXY (46,18); Write ('     |'); GotoXY (46,19); Write ('     |'); GotoXY (44,17); Write ('--'); GotoXY (39,20); Write ('------------');
       GotoXY (41,23); Write ('|'); GotoXY (41,22); Write ('|'); GotoXY(39,23); Write ('|'); GotoXY(39, 22); Write ('|');
       textcolor (4); GotoXY (31,3); Write ('F1 *******');
       GotoXY (65,2); Write('Tour: ',tour,' ');
       GotoXY (65,4); Write('Temps:'); GotoXY (72,4);
     End;
     
    Begin
     initTimer(temps);
     tour:=3;
     mv:='d';
     cursoroff;
     x:=40;
     y:=23;
     GotoXY (x,y); textcolor (4); WriteLn ('>');
     
     While (mv<>#13) AND (tour>0) do
        Begin
          clrscr;
          time();
          textcolor (8); Circuit;
          If (x=39) AND ((y=23) OR (y=22)) AND (mv='d')  then tour:=tour-1;   (*Diminue le tour de 1 à chaque passage par la ligne d'arrivée *)
          If (x=39) AND ((y=23) OR (y=22)) AND (mv='q') then x:=x+1;  (*Empêche de passer la ligne à l'envers*)
          GotoXY (x,y);
          textcolor (4);
           Case mv of
             'q' : WriteLn ('<');
             'd' : WriteLn ('>');
             'z' : WriteLn ('^');
             's' : WriteLn ('v');
            End;
     
          if keyPressed then
          begin
           mv:=readkey;
           while keyPressed() do //on vide le buffer du clavier
             readkey;
     
          Case mv of
             'q' : If (x>6)  then x:=x-1;
             'd' : If (x<77) then x:=x+1;
             'z' : If (y>2)  then y:=y-1;
             's' : If (y<23) then y:=y+1;
            End;
     
         end;
     
                                   (*Limite circuit extremite + déplacement*)
     
                                                         (*Limites circuit entier*)
          If ((y=20) AND (x>38) AND (x<51)) OR ((y=12) AND (x>56) AND (x<74)) OR ((y=4) AND (x>50) AND (x<57)) OR ((y=9) AND (x>20) AND (x<39)) OR ((y=5) AND (x>9) AND (x<24)) then y:=y-1
          Else If ((y=21) AND (x>9) AND (x<74)) OR ((y=9) AND (x>60) AND (x<78)) OR ((y=17) AND (x>42) AND (x<47)) OR ((y=6) AND (x>25) AND (x<43)) then y:=y+1
          Else If ((x=10) AND (y>5) AND (y<22)) OR ((x=26) AND (y>1) AND (y<6)) OR ((x=43) AND (y>6) AND (y<17)) OR ((x=51) AND (y>4) AND (y<20)) OR ((x=61) AND (y>1) AND (y<9)) then x:=x-1
          Else If ((x=23) AND (y>5) AND (y<10)) OR ((x=38) AND (y>8) AND (y<20)) OR ((x=46) AND (y>1) AND (y<18)) OR ((x=56) AND (y>4) AND (y<12)) OR ((x=73) AND (y>11) AND (y<21)) then x:=x+1;
        delay(500);
       End;
     
     textcolor (8);Circuit;
     GotoXY (x,y); textcolor (4); WriteLn ('>');
     GotoXY(34,13); WriteLn ('La partie est terminee');
     ReadLn;
    End.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Tout d'abord merci de ton aide.

    Mais avec ta manière, je trouve que la maniabilité de la "voiture" est mauvaise. Avec un delay(500) c'est beaucoup trop lent et si je mets un delay moins élevé, le temps de réaction de la voiture est lent.
    Par exemple, si je reste appuyer sur "d" et que je lâche la touche, la voiture continue d'avance sur une certaine distance ou si je change de direction (de "d" à "z" par exemple), la voiture tiens un court moment sans mouvement.

    Sinon pour le temps c'est super. Merci.

  10. #10
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Salut,
    C'est plutot pour le temps que j'ai ecrit ce code. Pour ce qui est du delay, j 'ai choisi une frequence à tout hazard qui provoque moins de scintillement de l'ecran. J'ai aussi, mis un bout de code pour vider le buffer du clavier pour eviter que l'appuie d'une touche prolongée ne penalise le deplacement de la voiture.
    Mas c'est toi qui connait ton code et ce que le programme est sensé faire, je ne t'apporte que des idées.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Une dernière question.

    Pour éviter le scintillement, est-il possible de faire un clrscr sur tout sauf le circuit afin que celui ci ne scintille pas ?

  12. #12
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    ça dépend, de ce que tu veux faire. Si tu veux effacer la voiture, il y a peut être un moyen. Puisque tu connais la position de la voiture à l'instant t, à t+dt, tu dessine des espaces à la position à l'instant t, puis redessine la voiture avec les nouvelle coordonnées à t+dt. On peut aussi faire pareil pour le timer.

    Mais pour un grand nombre de point, cette solution sera surement inadaptée.

Discussions similaires

  1. [XL-2010] Faire intéragir deux classeurs
    Par Ju 54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/05/2015, 14h53
  2. Faire intéragir les variables de deux programmes
    Par MeTaLxDuBz dans le forum C
    Réponses: 5
    Dernier message: 27/12/2014, 16h42
  3. [Batch] faire deux boucles imbriques
    Par fk04 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/03/2010, 12h32
  4. comment faire communiquer deux form MDI?
    Par eponette dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2005, 12h20
  5. [Technologie][Stratégie] Faire communiquer deux applis
    Par KitsuneSama dans le forum Général Java
    Réponses: 13
    Dernier message: 21/06/2004, 17h25

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