Timer scrabble [Résolu]

Signaler
-
 Camille -
Bonjour,
je voudrais faire un minuteur (5minutes) pendant lequel le joueur joue sa partie et une fois les 5minutes écoulé ça passe au joueur suivant.
j'ai fais ce code la mais le temps s'écoule que lorsque le joueur a fini de jouer pouvez-vous m'aider?
    int dep=10;
    int t,t0;
    t0=clock();
    do
    {
        t=clock();
        dep--;
        gotoxy(8,0);
        printf("%d",dep);
        Sleep(1000);
    }
    while(dep>0);
    printf("\n temps ecoule... \n");

Merci d'avance
Camille

3 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Bonjour !

N'oublie pas les balises de code la prochaine fois ! Je te les aies ajouté.

Ton souci, ici, c'est que tu ne peux pas faire un timer, et exécuter ton code dans le même thread (fil d’exécution). Par défaut, tout se fait séquentiellement (à la suite). Or, le temps de ton chronomètre, doit s'éxecuter en paralèlle de ton autre action (ton jeu).
Deux solutions:
Messages postés
561
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
4 juin 2021
5
Bonjour,

Il existe une solution sans les thread peut-être utilisable ici. Il faut que tu gères dans la même boucle le joueur et l'attente. Ça nécessite des fonctions non standards (mais tu utilises
gotoxy()
qui n'est pas standard, donc ça ne semble pas t'arrêter, regarde
getch()
), ça donne:
bool  saisie_joueur_terminee = false;
for ( int dep=5000 ; dep>0 && !saisie_joueur_terminee ; dep-=10 )  {
    if ( le_joueur_a_tappe_quelque_chose() )
        saisie_joueur_terminee = completer_la_saisie_du_joueur_et_indiquer_si_termine();
    gotoxy(8,0);  printf( "%ds", dep/100 );
    Sleep( 10 );
}
if ( saisie_joueur_terminee )
    gerer_la_reponse_du_joueur();
else
    printf("\n temps ecoule... \n");

A completer ce que font les 2 fonctions
le_joueur_a_tappe_quelque_chose() 
et
completer_la_saisie_du_joueur_et_indiquer_si_termine()
.
Merci beaucoup je vais essayer