Faire une pause dans un timer

Signaler
Messages postés
2
Date d'inscription
mardi 24 novembre 2009
Statut
Membre
Dernière intervention
29 novembre 2009
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
(En langage C)
Bonjour à tous,
je suis en train de programmer un jeu à questions, et j'aurais besoin d'un timer qui puisse s'arrêter lorsque l'on appui sur 'entrée' (ou sur une autre touche) et qui repart au bout d'un petit temps de pause.
Merci d'avance

4 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

On peut avoir des précisions supplémentaires ?
Appli console ou fenêtrée ?
Quel système d'exploitation ?
Qu'appelles-tu un timer ? Un numéro qui s'incrémente avec le temps ? Une action régulière ?

Pour du windows, tu peux jeter un oeil là dessus.
Messages postés
2
Date d'inscription
mardi 24 novembre 2009
Statut
Membre
Dernière intervention
29 novembre 2009

Je programme sur Codeblocks (Windows), et je tente de faire un Questions pour un Champion. Je voudrais donc utiliser une minuterie qui puisse s'arrêter lorsqu'on appuie sur une touche (pour écrire la réponse) et reprendre au bout d'un certain temps, si la réponse n'est pas inscrite à temps.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Oki !

Les fonctions console standards sont un peu légère pour faire ce genre de truc... Je te propose donc de travailler avec conio.h, qui est simple d'utilisation et relativement répandu.

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>

#define ROUND_TIME 10
#define RESPONSE_TIME 3
#define QUESTION "Java, c'est ?"
#define RESPONSE "lent"

BOOL GetResponse()
{
  char lpResponse[200];
  int nTime;
  int nTyped;
  BOOL bEnd;
  BOOL bResult;
  int nI;
  int nJ;

  bResult = FALSE;

  puts("Entre la réponse :");

  nJ = 0;
  nTime = 0;
  bEnd = FALSE;
  while (nTime < RESPONSE_TIME)
  {
    for (nI = 0; nI < 100; nI++)
    {
      if (kbhit())
      {
        nTyped =  getch();
        if (nTyped != 0x0d)
        {
          /* Faut faire l'echo */
          putchar(nTyped);

          /* Accumulation de la réponse */
          lpResponse[nJ] = (char)nTyped;
          nJ++;
        }
        else
        {
          putchar('\n');

          /* Ajout du zéro terminal pour la comparaison */
          bEnd = TRUE;
          lpResponse[nJ] = 0;

          /* Si la réponse est bonne */
          if (! strcmp(lpResponse, RESPONSE))
            bResult = TRUE;
          else
            puts("Bin non. Same player play again.");
        }
      }
      Sleep(10);
    }
    if (bEnd) break;
    nTime++;
  }

  if (! bEnd)
    puts("\nDes problèmes de clavier ?");

  return bResult;
}

int main()
{
  int nTime;
  BOOL bFound;
  int nI;

  puts(QUESTION);

  bFound = FALSE;
  nTime = 0;
  while (nTime < ROUND_TIME)
  {
    /* On va tester la pression tous les dixièmes de secondes */
    for (nI = 0; nI < 100; nI++)
    {
      /* On ne prend en compte que les pressions de Entréee */
      if (kbhit() && (getch() == 0x0d))
      {
        bFound = GetResponse();
        if (bFound) break;
      }
      Sleep(10);
    }
    if (bFound) break;
    nTime++;
    printf("%d\n", nTime);
  }

  if (bFound)
    puts("Félicitations !");
  else
    puts("Tu n'as pas trouvé la réponse à temps, n00b.");

  return 0;
}
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Regarde parmi mes sources. Tu trouveras un chronomètre OSD qui implémente les fonctionnalités Pause et Reprise.