Correctif calcul de score

Résolu

Bonjour,

Je suis en train de faire un affichage de score en fonction de du temps qui passe...

Le chrono s'enclenche en cliquant sur un bouton. Il fonctionne, mais pas l'affichage du score... 

Comment puis-je le corriger svp ?

Merci beaucoup

$('#chronometre').on('click', function() {
$secondes = 120; // définit le nombre de secondes

				$('#countdown_sec').text($secondes); //affiche 120 dans le chrono
				timerManager.start($secondes); 
			


				if ($secondes <= 120 && $secondes >= 91) {
$('#scoreencours').text('+6');
} 
else if ($secondes <= 90 && $secondes >= 61) {
$('#scoreencours').text('+4');
} 
else if ($secondes <= 60 && $secondes >= 31) {
	$('#scoreencours').text('+2');
} 
else if ($secondes <= 30 && $secondes >= 0) {
$('#scoreencours').text('+1');
};

});
			
timerManager = {
				start: function ($secondes) {
								$secondes = $secondes - 1; // provoque le décompte
								if ($secondes >= 0) { // tant que le chrono est supérieur à zéro
												timer = setTimeout(function () { // éxécute le code toutes les 1000 millisecondes
																$('#countdown_sec').text($secondes); // affiche le temps restant
																timerManager.start($secondes); // rappelle la fonction
												}, 1000);
								} else {
												timerManager.stop(); // arrête le chrono
								}
				},
				stop: function () { // to be called when you want to stop the timer
								clearTimeout(timer);
								$('#countdown_sec').text('0');
				}

};



});


Windows / Edge 103.0.1264.62

15 réponses

  1. Purée, j'ai même pas vu tes messages de 11.07 !!! C'est bon, cela fonctionne correctement.

    MERCIIIIIIIIIIIii

    1. log ne m'indique rien de particulier.... j'essaie de 2ème option

      1. encore raté

      2. Modérateur

        C'est-à-dire ?

        Qu'as-tu écris exactement où l'as-tu placée et qu'est-ce que ça t'affiche précisément ?

    2. if ($secondes >= 0) { // tant que le chrono est supérieur à zéro
      		if ($secondes >= 91) {
        $('#scoreencours').text('+6');
      } else if ($secondes >= 61) {
        $('#scoreencours').text('+4');
      } else if ( $secondes >= 31) {
        $('#scoreencours').text('+2');
      } else if ( $secondes >= 1) {
        $('#scoreencours').text('+1');
      } else  {
        $('#scoreencours').text('+0');
      }

      A sec=1 score =0... pas bon...

      1. Modérateur

        Ce n'est pas possible

        Fais un console.log de ta variable..

        A noter que tes tests se trouvent après la decrementation.. donc si a l'écran tu vois 1.. au niveau des if tu es déjà à 0...

        Au pire, augmente de 1 chaque valeur dans tes if

      2. Modérateur
        @jordane45

        Ou deplace ta ligne 

        $secondes = $secondes - 1; 

        Apres tes tests..

      3. Modérateur
        @jordane45

        Ligne que tu peux d'ailleurs remplacer par

        $secondes--;

    3.  if ($secondes >= 0) { // tant que le chrono est supérieur à zéro
            if ($secondes >= 120 ) {
              $('#scoreencours').text('+6');
            } else if ($secondes >= 91 ) {
              $('#scoreencours').text('+4');
            } else if ($secondes >= 61 ) {
              $('#scoreencours').text('+2');
            } else if ($secondes >= 31 ) {
              $('#scoreencours').text('+1');
      	  } else  {
              $('#scoreencours').text('+0');
            };
      

      Maintenant à 120 sec il m'affiche +4 ;'(

      1. Modérateur
        if ($secondes >= 91) {
          $('#scoreencours').text('+6');
        } else if ($secondes >= 61) {
          $('#scoreencours').text('+4');
        } else if ( $secondes >= 31) {
          $('#scoreencours').text('+2');
        } else if ( $secondes >= 1) {
          $('#scoreencours').text('+1');
        } else {
          $('#scoreencours').text('+0');
        }
    4. timerManager = {
        start: function ($secondes) {
          $secondes = $secondes - 1; // provoque le décompte
          if ($secondes >= 0) { // tant que le chrono est supérieur à zéro
            if ($secondes >= 120 ) {
              $('#scoreencours').text('+6');
            } else if ($secondes >= 91 ) {
              $('#scoreencours').text('+4');
            } else if ($secondes >= 61 ) {
              $('#scoreencours').text('+2');
            } else if ($secondes >= 31 ) {
              $('#scoreencours').text('+1');
      	  } else ($secondes == 0 ) { // { souligné
              $('#scoreencours').text('+0');
            };
      
            timer = setTimeout(function () { // éxécute le code toutes les 1000 millisecondes
              $('#countdown_sec').text($secondes); // affiche le temps restant
              timerManager.start($secondes); // rappelle la fonction
            }, 1000);
          } else {
            timerManager.stop(); // arrête le chrono
          }
        },
        stop: function () { // to be called when you want to stop the timer
          clearTimeout(timer);
          $('#countdown_sec').text('0');
        }
      
      };
      

      Comme ça ? mais il m'indique une erreur...

      1. Modérateur

        Avec le else il n'y a pas de test à mettre

    5. Salutations

      Le code fonctionne très bien. Je souhaite juste ajouter que quand le chrono est supérieur ou égal à 1, le score s'affiche +1 et quand le chrono égal 0, le score affiche 0: 0 secondes = 0 pt

       Après des tas d'essais, je trouve pas la bonne combi... soit la score m'affiche 0 à chrono=1, soit rien n'est modifié, cela reste à +1 quand chrono=0...

      if ($secondes >= 0) { // tant que le chrono est supérieur à zéro
            if ($secondes <= 120 && $secondes >= 91) {
              $('#scoreencours').text('+6');
            } else if ($secondes <= 90 && $secondes >= 61) {
              $('#scoreencours').text('+4');
            } else if ($secondes <= 60 && $secondes >= 31) {
              $('#scoreencours').text('+2');
            } else if ($secondes <= 30 && $secondes >= 1) {
              $('#scoreencours').text('+1');
      	  } else if ($secondes = 0 ) {
              $('#scoreencours').text('+0');
            };

      Quelle is the erreur svp ?

      Merci.

      N

      1. Modérateur

        La comparaison se fait toujours avec deux symboles par exemple ==0

        Mais vu que ton test précédent vérifie que tu es supérieur à 1 tu n'as donc pas besoin, pour le zéro, de faire un elseif..  un else tout court suffirait.

        D'ailleurs tu n'as pas besoin à chaque fois de tester le supérieur et le inférieur... 

        Par exemple 

        ($secondes <= 120 && $secondes >= 91) {

        Juste le supérieur est suffisant

        ($secondes >= 91) {

    6. Certes... Je ne veux pas raconter ma vie, mais j'ai que des tôles en ce moment....

      Bref, le code fonctionne, je le décortiquerai demain matin.

      Bonne soirée

      1. J'avoue que je n'ai pas été tendre ... Excuse-moi... 

        Le code fonctionne  à merveille, merci beaucoup :)

        Sans rancune?

        1. Modérateur

          Pas de soucis.

          Mais à l'avenir soit plus cool avec les gens qui te repondent.. ce sont des bénévoles.. on ne gagne rien à le faire..

      2. Modérateur

        Enfin bon.. je ne vois pas en quoi ma réponse initiale n'était pas claire ....

        Papa... je verse de l'eau dans le bidon d'essence ... mais la voiture ne démarre pas ..

        - C'est normal... Ce n'est pas dans le bidon qu'il faut mettre l'essence .. mais dans le réservoir de la voiture ...

        - Ah... je pensais que c'était un réservoir wifi .... 

        Bref...  après cette petite touche d'humour à ta sauce .. voici donc à quoi pourrait ressembler ton code et qui ( je ne l'ai pas testé.. ) devrait mieux fonctionner

        $('#chronometre').on('click', function() {
          $secondes = 120; // définit le nombre de secondes
          $('#countdown_sec').text($secondes); //affiche 120 dans le chrono
          timerManager.start($secondes); 
        });
        			
        timerManager = {
          start: function ($secondes) {
            $secondes = $secondes - 1; // provoque le décompte
            if ($secondes >= 0) { // tant que le chrono est supérieur à zéro
              if ($secondes <= 120 && $secondes >= 91) {
                $('#scoreencours').text('+6');
              } else if ($secondes <= 90 && $secondes >= 61) {
                $('#scoreencours').text('+4');
              } else if ($secondes <= 60 && $secondes >= 31) {
                $('#scoreencours').text('+2');
              } else if ($secondes <= 30 && $secondes >= 0) {
                $('#scoreencours').text('+1');
              };
        
              timer = setTimeout(function () { // éxécute le code toutes les 1000 millisecondes
                $('#countdown_sec').text($secondes); // affiche le temps restant
                timerManager.start($secondes); // rappelle la fonction
              }, 1000);
            } else {
              timerManager.stop(); // arrête le chrono
            }
          },
          stop: function () { // to be called when you want to stop the timer
            clearTimeout(timer);
            $('#countdown_sec').text('0');
          }
        
        };
        

        Alors bon.. je ne sais pas si je te prend pour une bille ...  mais ...comme qui dirait .. tu donnes le baton pour te faire battre....

        J'espère ne pas avoir fait d'erreur dans le code que je t'ai donné;

        Si c'est le cas, reviens nous voir en indiquant quel(s) éventuel(s) message(s) d'erreur tu aurais dans la console de ton navigateur et en expliquant précisément en quoi ça ne ferait pas ce que tu en attends.

        Bonne soirée.


        1. Sauf que ce n'est pas la première fois que tu me prends pour une bille, mais bon...

          Bonnes vacances tout de même

          1. Modérateur

            Désolé mais je suis à la plage... Et je réponds avec mon tel..

            Je t'ai indiqué que tes tests se trouvent EN DEHORS de ton timerManager et par conséquent que c'était normal que ça ne marche pas...

            Si tu ne comprends pas ma réponse... Dis le gentiment au lieu de t'exiter comme un boulet...

            Résultat.. maintenant tu te debrouilleras tout seul comme un c#!;

            Tchao...


            1. Quelle explication.... Je suis très avancé....

              Merci pour cette "aide"...

              1. Whouah!  c'est de l'explication...

                "Papa, j'ai trouvé 276, mais la calculette affiche 286...

                - C'est normal...

                - Ah bon, pourquoi ?

                - Parce que... Débrouille-toi ! "

                Top, merci pour votre "aide" ! Je suis très avancé !

                Ce doit être difficile de prendre le temps d'expliquer les choses... 

                C'est beau l'humanité... Très beau... 'Un pour moi et tous pour personne...'

                1. Le compte à rebours fonctionne, c'est l'affichage du score qui bloque...

                  1. Modérateur

                    Oui oui.. j'avais bien compris...

                2. Modérateur

                  Bonjour,

                  Tes tests sur les secondes se trouvent en dehors de ton timerManager ..

                  Donc il ne se passe rien... normal...