Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#]Chronomètre pour démineur

Sujet résolu
    8 mars 2011 à 13:08:41

    Bonjour ,

    J'aimerai savoir si vous connaissez un tutoriel sur la gestion du temps en C#.
    En effet , dans mon démineur , il faut que je calcule le temps que met un joueur à gagner afin de gérer les meilleurs temps .

    J'ai essayer en initialisant un timer comme ceci :

    private System.Timers.Timer timer1;
    


    Ensuite j'ai créer une variable DateLancement :

    private DateTime DateLancement;
    


    A DateLancement , je lui est attribuer la Date d'aujourd'hui et mis mon timer enabled :

    DateLancement = DateTime.Now;
    timer1.Enabled = true;
    


    Sauf que , après j'ai essayeé d'utiliser le code d'une autre personne mais je ne comprend pas le code ayant jamais utiliser la gestion du temps :



    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    		{
    			DateTime DateNow = DateTime.Now;
    			TimeSpan Difference = DateNow - DateLancement;
    
    			Chrono.Text = Difference.Hours.ToString("d2") + ":" + Difference.Minutes.ToString("d2") + ":";
    			Chrono.Text += Difference.Seconds.ToString("d2") + ":" + Difference.Milliseconds.ToString("d2");
    		}
    



    Pouvez-vous m'aider ?

    Merci d'avance .
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 mars 2011 à 16:45:47

      Ce code est pas très efficace.
      Plus court :
      private void timer1_Elapsed(object sender, ElapsedEventArgs e)
      {
          Chrono.Text = (DateTime.Now - DateLancement).ToString();
      }
      

      Ce que ton code fait actuellement, c'est ré-inventer la roue : ça définit le texte de Chrono comme étant le nombre d'heures de différence, suivi du nombre de minutes de différence, suivi du nombre de secondes de différence, suivi du nombre de millisecondes de différence....alors que c'est exactement ce que ToString() fait sur un TimeSpan.

      PS : N'oublie pas de définir l'intervalle du Timer.
      • Partager sur Facebook
      • Partager sur Twitter
        8 mars 2011 à 23:37:50

        Hum là je vois vraiment pas .
        Donc j'ai une textbox qui va me servir de chronomètre .
        En effet , quand l'utilisateur cliquera sur le bouton démarrer , le chronomètre se mettra en route .

        Je vois pas du tout comment je peux faire .
        Merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          9 mars 2011 à 16:32:56

          Tu crées un Timer dans ta Form, et un DateTime représentant la date de début
          private Timer timer = new Timer(1000);
          private DateTime dateLancement;
          

          (ici j'ai mis 1000 millisecondes comme intervalle, mets ce que tu veux)

          Dans ton constructeur, tu définis son Tick
          timer.Tick += Timer_Tick;
          


          Dans ta méthode qui commence le jeu, tu le mets en route, et tu définis la date de début
          timer.Start();
          dateLancement = DateTime.Now;
          


          Tu crées un évènement pour le Tick qui mets à jour le label (ou la textbox, mais si tu veux pas que ça soit modifiable utilise un label)
          private void timer1_Elapsed(object sender, ElapsedEventArgs e)
          {
              Chrono.Text = (DateTime.Now - dateLancement).ToString();
          }
          


          Ensuite dans ta méthode qui finit le jeu tu l'arrêtes
          timer.Stop();
          
          • Partager sur Facebook
          • Partager sur Twitter
            10 mars 2011 à 0:02:56

            Merci pour ta réponse . J'ai enfin réussis à mettre le chrono .

            J'ai une autre question : je voudrais savoir si il n'y a pas un genre de timer.Pause() car je souhaite que l'utilisateur puissent mettre en pause

            Merci
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              10 mars 2011 à 12:11:02

              Timer.Stop() puis Timer.Start(). Mais il te faut changer la manière dont le temps est affiché ; au lieu de créer un DateTime, fais-le plutôt avec un TimeSpan comme ça :
              //dans la Form
              private TimeSpan temps;
              
              private void timer1_Elapsed(object sender, ElapsedEventArgs e)
              {
                 temps += TimeSpan.FromMilliseconds(timer.Interval);
                 Chrono.Text = temps.ToString();
              }
              
              // dans la méthode qui commence le jeu
              temps = new TimeSpan();
              
              // dans la méthode qui pause le jeu
              timer.Stop();
              
              // dans la méthode qui reprend le jeu
              timer.Start();
              
              • Partager sur Facebook
              • Partager sur Twitter
                10 mars 2011 à 15:11:03

                Très bien merci .
                Sujet résolu :p
                • Partager sur Facebook
                • Partager sur Twitter

                [C#]Chronomètre pour démineur

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown