Guess


  1. Introduction

Je vous laisse découvrir en image la fabuleuse histoire du programme GUESS.

Soyez attentif aux noms des variables.


Ainsi, après la lecture de la vidéo, vous devriez être capable de décrire votre algorithme (en pseudo-code). 

Il nous resterait donc à réaliser la partie implémentation en JS.

Mais, revenons une minute au code écrit en Python. Au passage, je vous rappelle que Python est un langage de haut niveau.

  1. Code python

Python dispose d'une condition de type :

while (condition)

else:


Cette condition est très utile dans notre jeu, elle nous permet en effet de coder simplement la sortie du while : 

while (guessCount < guessLimit):

 .

else:

    print ("You failed !")   ..


Regardons les possibilités d'écriture offertes en JS.


  1. Javascript

JS ne dispose pas d'une condition de type 

while (condition)

else:

Rappels

Continue

🧠 Pourquoi continue est utile

  1. evites un if...else inutile

  2. le flux de traitement clair

  3. plusieurs filtres peuvent s'enchaîner avec plusieurs continue


  1. async function processLines(lines) {

  2.     for await (const line of lines) {

  3.         if (line.startsWith('#')) continue; // ignore les commentaires

  4.         console.log(`Traitement : ${line}`);

  5.     }

  6. }

  7. const lines = [

  8.     '# Ceci est un commentaire',

  9.     'Ligne 1',

  10.     'Ligne 2',

  11.     '# Autre commentaire',

  12.     'Ligne 3'

  13. ];


  14. processLines(lines);


Cas du Break 

  1. async function* getLines() {

  2.   const data = [

  3.     "# Commentaire ignoré",

  4.     "Ligne utile 1",

  5.     "Ligne utile 2",

  6.     "# Autre commentaire",

  7.     "STOP",

  8.     "Ligne après STOP",

  9.   ];


  10.   for (const line of data) {

  11.     await new Promise((resolve) => setTimeout(resolve, 100)); // simule un délai

  12.     yield line;

  13.   }

  14. }


  15. async function processUntilStop(lines) {

  16.   for await (const line of lines) {

  17.     if (line === "STOP") break;

  18.     if (line.startsWith("#")) continue;

  19.     console.log(`Traitement : ${line}`);

  20.   }

  21.   console.log("🔚 Fin du traitement.");

  22. }


  23. processUntilStop(getLines());



Améliorez le code suivant

  1. const guess_limit = 3;

  2. const secret_number = 3;


  3. let guess_count = 0;

  4. let guess = 1; // valeur initiale


  5. while (guess_count < guess_limit) {

  6.     guess++; // simule un nouveau choix

  7.     guess_count++;


  8.     console.log(`Essai ${guess_count} : guess = ${guess}`);


  9.     if (guess === secret_number) {

  10.         console.log(`✅ You WIN in ${guess_count} guesses!`);

  11.         break; // quitte la boucle immédiatement

  12.     }

  13. }


  14. // Ce bloc s'exécute uniquement si la boucle n'a pas été interrompue par un break

  15. if (guess_count === guess_limit && guess !== secret_number) {

  16.     console.log("❌ GAME OVER");

  17. }


Attention ligne 20 : trop long. 



index.html

  1. <!DOCTYPE html>

  2. <html lang="en">


  3. <head>

  4.   <meta charset="UTF-8">

  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">

  6.   <title>Document</title>

  7.   <script type="module" src="guess.mjs"></script>

  8. </head>

  9. <body>

  10. </body>

  11. </html>

guess.mjs

  1. const secretNumber = Math.floor(Math.random() * 10) + 1;

  2. let attempts = 3;


  3. while (attempts > 0) {

  4.   const guess = parseInt(

  5.     prompt(

  6.       `Guess a number between 1 and 10. You have ${attempts} attempt(s) left:`

  7.     ),

  8.     10

  9.   );


  10.   if (guess === secretNumber) {

  11.     alert("🎉 Correct! You guessed the number!");

  12.     break;

  13.   } else if (guess < secretNumber) {

  14.     alert("Too low!");

  15.   } else if (guess > secretNumber) {

  16.     alert("Too high!");

  17.   } else {

  18.     alert("Invalid input. Please enter a number.");

  19.   }


  20.   attempts--;

  21. } //while


  22. if (attempts === 0) {

  23.   alert(`😢 Game over! The number was ${secretNumber}.`);

  24. }