Faire une pause dans un timer

Artaga Messages postés 2 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 29 novembre 2009 - 24 nov. 2009 à 14:36
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 29 nov. 2009 à 12:03
(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
A voir également:

4 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
28 nov. 2009 à 20:55
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.
0
Artaga Messages postés 2 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 29 novembre 2009
29 nov. 2009 à 03:12
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.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
29 nov. 2009 à 12:01
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;
}
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
29 nov. 2009 à 12:03
Salut,
Regarde parmi mes sources. Tu trouveras un chronomètre OSD qui implémente les fonctionnalités Pause et Reprise.
0
Rejoignez-nous