Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Création d'une Application Console de Jeu de Devinettes | Création d'Applications Console avec Node.js
Développement Backend avec Node.js et Express.js

bookCréation d'une Application Console de Jeu de Devinettes

Dans ce chapitre, préparez-vous à perfectionner vos compétences en développement d'applications console en créant une application de jeu captivante 🎮 Devine le Nombre 🔢. Ce jeu interactif mettra les joueurs au défi d'exercer leur intuition en devinant un nombre généré aléatoirement dans une plage prédéfinie. Au fil du chapitre, nous explorerons des concepts fondamentaux tels que :

  • 🎲 Génération de nombres aléatoires ;
  • ✅ Validation des entrées ;
  • 🤝 Interaction avec l'utilisateur ;
  • 💾 Enregistrement des résultats du jeu dans un fichier.

🏆 Un défi vous attend

Imaginez-vous plonger dans une application qui promet excitation et mystère. Les joueurs sont invités à deviner un nombre choisi de manière mystérieuse dans une plage prédéfinie. L'application fournit un retour instantané à chaque tentative et tient un compte précis des essais effectués.

Cet exemple pratique est l'occasion d'affiner vos compétences dans la création d'applications CLI et de mettre en avant l'art de concevoir des programmes interactifs.

🚀 Application finale

Découvrez la magie en action ! Ci-dessous, un GIF illustre l'application palpitante Devine le Nombre que vous allez réaliser :

Création d'une application console de jeu de devinettes

Deux chemins s'offrent à vous. La première option vous invite à vous lancer sans aide, tandis que la seconde propose un guide utile pour assurer votre réussite. Que vous plongiez avec audace ou suiviez le guide structuré, une expérience fascinante vous attend, au terme de laquelle vous disposerez d'une application console fonctionnelle et captivante.

Plan directeur

  • 👉 Étape 1 : Configuration et initialisations ;
  • 👉 Étape 2 : Définition des paramètres du jeu ;
  • 👉 Étape 3 : Définition des fonctions utilitaires ;
  • 👉 Étape 4 : Logique du jeu ;
  • 👉 Étape 5 : Sauvegarde du résultat du jeu ;
  • 👉 Étape 6 : Lancement du jeu ;
  • 🎉 Conclusion ;
  • 🏁 Code complet de l'application.

Étape 1 : Configuration et initialisations

Préparer le canevas en créant un nouveau répertoire et un fichier nommé app.js. Dans ce fichier, nous invoquons les modules nécessaires :

const readline = require('readline');
const fs = require('fs').promises;

Créer une interface Readline :

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

Explication : Importation des modules nécessaires : readline pour l'interaction avec l'utilisateur et fs.promises pour les opérations sur les fichiers. Création ensuite d'une interface Readline nommée rl pour gérer les entrées et sorties.

Étape 2 : Définir les paramètres du jeu

Définition des nombres minimum et maximum :

const minNumber = 1;
const maxNumber = 100;

Génération du nombre secret :

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;

Initialiser le compteur de tentatives :

let attempts = 0;

Explication : Nous définissons l'intervalle de nombres (minNumber et maxNumber) dans lequel le nombre secret sera généré. Le nombre secret est généré aléatoirement à l'aide de Math.random() et assigné à secretNumber. La variable attempts est initialisée pour suivre le nombre de tentatives de l'utilisateur.

Étape 3 : Définir les fonctions utilitaires

Fournir une fonction utilitaire pour une validation irréprochable :

function isValidGuess(guess) {
  return !isNaN(guess)
    && guess >= minNumber
    && guess <= maxNumber;
}

Explication : La fonction isValidGuess vérifie si la proposition de l'utilisateur est un nombre valide compris dans la plage spécifiée (minNumber à maxNumber).

Étape 4 : Logique du jeu

Les mécanismes principaux du jeu via la fonction playGame :

function playGame() {
  rl.question(`Guess a number between ${minNumber} and ${maxNumber}: `, guess => {
    if (isValidGuess(guess)) {
      attempts++;
      const guessNumber = parseInt(guess);

      if (guessNumber === secretNumber) {
        console.log(`Congratulations! You guessed the number in ${attempts} attempts.`);
        saveGameResult(`Player won in ${attempts} attempts.`);
        rl.close();
      } else if (guessNumber < secretNumber) {
        console.log('Try higher.');
        playGame();
      } else {
        console.log('Try lower.');
        playGame();
      }
    } else {
      console.log('Please enter a valid number within the specified range.');
      playGame();
    }
  });
}

Explication : La fonction playGame constitue la boucle principale du jeu. Elle utilise rl.question pour demander une proposition à l'utilisateur. Si la proposition est valide, la fonction vérifie si elle correspond au nombre secret. Sinon, elle fournit un retour à l'utilisateur et poursuit la boucle du jeu de manière récursive.

Étape 5 : Enregistrer le résultat du jeu

Implémenter la logique d'enregistrement des performances de l'utilisateur dans le fichier game_results.txt.

async function saveGameResult(result) {
  try {
    await fs.appendFile('game_results.txt', `${result}\n`);
    console.log('Game result saved.');
  } catch (err) {
    console.log('Failed to save game result.');
  }
}

Explication : La fonction saveGameResult utilise fs.promises pour ajouter le résultat du jeu à un fichier nommé game_results.txt. Elle fournit un retour sur le succès ou l'échec de l'enregistrement du résultat.

Étape 6 : Démarrer le jeu

Créer le message de bienvenue et lancer le jeu :

console.log('Welcome to the Guess the Number game!');
playGame();

Explication : Un message de bienvenue est affiché et la boucle du jeu commence en appelant la fonction playGame.

🎉 Conclusion : Tour d'honneur

En développant l'application Devine le nombre, vous avez acquis une expérience précieuse dans la conception d'applications console interactives et engageantes. Cet exemple met en avant la combinaison de la saisie utilisateur, de la génération de nombres aléatoires, de la validation et de la manipulation de fichiers, aboutissant à une expérience de jeu captivante.

👨‍💻 Code complet de l'application

const readline = require("readline");
const fs = require("fs").promises;

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const minNumber = 1;
const maxNumber = 100;

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
let attempts = 0;

function isValidGuess(guess) {
  return !isNaN(guess) && guess >= minNumber && guess <= maxNumber;
}

function playGame() {
  rl.question(
    `Guess a number between ${minNumber} and ${maxNumber}: `,
    (guess) => {
      if (isValidGuess(guess)) {
        attempts++;
        const guessNumber = parseInt(guess);

        if (guessNumber === secretNumber) {
          console.log(
            `Congratulations! You guessed the number in ${attempts} attempts.`
          );
          saveGameResult(`Player won in ${attempts} attempts.`);
          rl.close();
        } else if (guessNumber < secretNumber) {
          console.log("Try higher.");
          playGame();
        } else {
          console.log("Try lower.");
          playGame();
        }
      } else {
        console.log("Please enter a valid number within the specified range.");
        playGame();
      }
    }
  );
}

async function saveGameResult(result) {
  try {
    await fs.appendFile("game_results.txt", `${result}\n`);
    console.log("Game result saved.");
  } catch (err) {
    console.log("Failed to save game result.");
  }
}

console.log("Welcome to the Guess the Number game!");
playGame();

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 8

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain how the recursive game loop works in the playGame function?

What happens if the user enters an invalid input?

How does the game save the results to the file?

Awesome!

Completion rate improved to 2.56

bookCréation d'une Application Console de Jeu de Devinettes

Glissez pour afficher le menu

Dans ce chapitre, préparez-vous à perfectionner vos compétences en développement d'applications console en créant une application de jeu captivante 🎮 Devine le Nombre 🔢. Ce jeu interactif mettra les joueurs au défi d'exercer leur intuition en devinant un nombre généré aléatoirement dans une plage prédéfinie. Au fil du chapitre, nous explorerons des concepts fondamentaux tels que :

  • 🎲 Génération de nombres aléatoires ;
  • ✅ Validation des entrées ;
  • 🤝 Interaction avec l'utilisateur ;
  • 💾 Enregistrement des résultats du jeu dans un fichier.

🏆 Un défi vous attend

Imaginez-vous plonger dans une application qui promet excitation et mystère. Les joueurs sont invités à deviner un nombre choisi de manière mystérieuse dans une plage prédéfinie. L'application fournit un retour instantané à chaque tentative et tient un compte précis des essais effectués.

Cet exemple pratique est l'occasion d'affiner vos compétences dans la création d'applications CLI et de mettre en avant l'art de concevoir des programmes interactifs.

🚀 Application finale

Découvrez la magie en action ! Ci-dessous, un GIF illustre l'application palpitante Devine le Nombre que vous allez réaliser :

Création d'une application console de jeu de devinettes

Deux chemins s'offrent à vous. La première option vous invite à vous lancer sans aide, tandis que la seconde propose un guide utile pour assurer votre réussite. Que vous plongiez avec audace ou suiviez le guide structuré, une expérience fascinante vous attend, au terme de laquelle vous disposerez d'une application console fonctionnelle et captivante.

Plan directeur

  • 👉 Étape 1 : Configuration et initialisations ;
  • 👉 Étape 2 : Définition des paramètres du jeu ;
  • 👉 Étape 3 : Définition des fonctions utilitaires ;
  • 👉 Étape 4 : Logique du jeu ;
  • 👉 Étape 5 : Sauvegarde du résultat du jeu ;
  • 👉 Étape 6 : Lancement du jeu ;
  • 🎉 Conclusion ;
  • 🏁 Code complet de l'application.

Étape 1 : Configuration et initialisations

Préparer le canevas en créant un nouveau répertoire et un fichier nommé app.js. Dans ce fichier, nous invoquons les modules nécessaires :

const readline = require('readline');
const fs = require('fs').promises;

Créer une interface Readline :

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

Explication : Importation des modules nécessaires : readline pour l'interaction avec l'utilisateur et fs.promises pour les opérations sur les fichiers. Création ensuite d'une interface Readline nommée rl pour gérer les entrées et sorties.

Étape 2 : Définir les paramètres du jeu

Définition des nombres minimum et maximum :

const minNumber = 1;
const maxNumber = 100;

Génération du nombre secret :

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;

Initialiser le compteur de tentatives :

let attempts = 0;

Explication : Nous définissons l'intervalle de nombres (minNumber et maxNumber) dans lequel le nombre secret sera généré. Le nombre secret est généré aléatoirement à l'aide de Math.random() et assigné à secretNumber. La variable attempts est initialisée pour suivre le nombre de tentatives de l'utilisateur.

Étape 3 : Définir les fonctions utilitaires

Fournir une fonction utilitaire pour une validation irréprochable :

function isValidGuess(guess) {
  return !isNaN(guess)
    && guess >= minNumber
    && guess <= maxNumber;
}

Explication : La fonction isValidGuess vérifie si la proposition de l'utilisateur est un nombre valide compris dans la plage spécifiée (minNumber à maxNumber).

Étape 4 : Logique du jeu

Les mécanismes principaux du jeu via la fonction playGame :

function playGame() {
  rl.question(`Guess a number between ${minNumber} and ${maxNumber}: `, guess => {
    if (isValidGuess(guess)) {
      attempts++;
      const guessNumber = parseInt(guess);

      if (guessNumber === secretNumber) {
        console.log(`Congratulations! You guessed the number in ${attempts} attempts.`);
        saveGameResult(`Player won in ${attempts} attempts.`);
        rl.close();
      } else if (guessNumber < secretNumber) {
        console.log('Try higher.');
        playGame();
      } else {
        console.log('Try lower.');
        playGame();
      }
    } else {
      console.log('Please enter a valid number within the specified range.');
      playGame();
    }
  });
}

Explication : La fonction playGame constitue la boucle principale du jeu. Elle utilise rl.question pour demander une proposition à l'utilisateur. Si la proposition est valide, la fonction vérifie si elle correspond au nombre secret. Sinon, elle fournit un retour à l'utilisateur et poursuit la boucle du jeu de manière récursive.

Étape 5 : Enregistrer le résultat du jeu

Implémenter la logique d'enregistrement des performances de l'utilisateur dans le fichier game_results.txt.

async function saveGameResult(result) {
  try {
    await fs.appendFile('game_results.txt', `${result}\n`);
    console.log('Game result saved.');
  } catch (err) {
    console.log('Failed to save game result.');
  }
}

Explication : La fonction saveGameResult utilise fs.promises pour ajouter le résultat du jeu à un fichier nommé game_results.txt. Elle fournit un retour sur le succès ou l'échec de l'enregistrement du résultat.

Étape 6 : Démarrer le jeu

Créer le message de bienvenue et lancer le jeu :

console.log('Welcome to the Guess the Number game!');
playGame();

Explication : Un message de bienvenue est affiché et la boucle du jeu commence en appelant la fonction playGame.

🎉 Conclusion : Tour d'honneur

En développant l'application Devine le nombre, vous avez acquis une expérience précieuse dans la conception d'applications console interactives et engageantes. Cet exemple met en avant la combinaison de la saisie utilisateur, de la génération de nombres aléatoires, de la validation et de la manipulation de fichiers, aboutissant à une expérience de jeu captivante.

👨‍💻 Code complet de l'application

const readline = require("readline");
const fs = require("fs").promises;

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const minNumber = 1;
const maxNumber = 100;

const secretNumber =
  Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
let attempts = 0;

function isValidGuess(guess) {
  return !isNaN(guess) && guess >= minNumber && guess <= maxNumber;
}

function playGame() {
  rl.question(
    `Guess a number between ${minNumber} and ${maxNumber}: `,
    (guess) => {
      if (isValidGuess(guess)) {
        attempts++;
        const guessNumber = parseInt(guess);

        if (guessNumber === secretNumber) {
          console.log(
            `Congratulations! You guessed the number in ${attempts} attempts.`
          );
          saveGameResult(`Player won in ${attempts} attempts.`);
          rl.close();
        } else if (guessNumber < secretNumber) {
          console.log("Try higher.");
          playGame();
        } else {
          console.log("Try lower.");
          playGame();
        }
      } else {
        console.log("Please enter a valid number within the specified range.");
        playGame();
      }
    }
  );
}

async function saveGameResult(result) {
  try {
    await fs.appendFile("game_results.txt", `${result}\n`);
    console.log("Game result saved.");
  } catch (err) {
    console.log("Failed to save game result.");
  }
}

console.log("Welcome to the Guess the Number game!");
playGame();

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 8
some-alt