Timer scrabble

Résolu
camille - Modifié le 1 déc. 2020 à 15:56
 Camille - 1 déc. 2020 à 20:41
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
A voir également:

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
1 déc. 2020 à 16:01
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:
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 11
1 déc. 2020 à 20:36
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()
.
0
Merci beaucoup je vais essayer
0
Rejoignez-nous