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 captivante de Jeu de Deviner le Nombre. Ce jeu interactif mettra les joueurs au défi de faire preuve d'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 utilisateur ;
  • Enregistrement des résultats du jeu dans un fichier.

Défi

Imaginez explorer 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é sur chaque proposition et tient un compte précis des tentatives effectuées.

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

Application Résultante

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

Création d'une Application Console de Jeu de Devinette

Deux chemins s'offrent à vous. La première option vous invite à vous lancer dans l'aventure sans assistance, tandis que la seconde propose un guide utile pour garantir votre réussite. Que vous plongiez avec audace ou suiviez le guide structuré, vous vivrez une expérience fascinante qui vous permettra de créer une application console fonctionnelle et captivante.

Plan Directeur

  • Étape 1 : Configuration et initialisations ;
  • Étape 2 : Définir les paramètres du jeu ;
  • Étape 3 : Définir les fonctions utilitaires ;
  • Étape 4 : Logique du jeu ;
  • Étape 5 : Sauvegarder le résultat du jeu ;
  • Étape 6 : Démarrer le jeu ;
  • Conclusion ;
  • Code complet de l'application.

Étape 1 : Configuration et initialisations

Préparation de l'environnement en créant un nouveau répertoire et un fichier nommé app.js. Dans ce fichier, importation des modules nécessaires :

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

Création d'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. Ensuite, création 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éfinir les nombres minimum et maximum :

const minNumber = 1;
const maxNumber = 100;

Générer le nombre secret :

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

Initialiser le compteur de tentatives :

let attempts = 0;

Explication : Nous définissons la plage de nombres (minNumber et maxNumber) dans laquelle 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 des 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 continue la boucle du jeu de manière récursive.

Étape 5 : Sauvegarder le résultat du jeu

Implémenter la logique de sauvegarde des réussites 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 de la partie dans 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

Afficher 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.

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

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 captivante de Jeu de Deviner le Nombre. Ce jeu interactif mettra les joueurs au défi de faire preuve d'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 utilisateur ;
  • Enregistrement des résultats du jeu dans un fichier.

Défi

Imaginez explorer 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é sur chaque proposition et tient un compte précis des tentatives effectuées.

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

Application Résultante

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

Création d'une Application Console de Jeu de Devinette

Deux chemins s'offrent à vous. La première option vous invite à vous lancer dans l'aventure sans assistance, tandis que la seconde propose un guide utile pour garantir votre réussite. Que vous plongiez avec audace ou suiviez le guide structuré, vous vivrez une expérience fascinante qui vous permettra de créer une application console fonctionnelle et captivante.

Plan Directeur

  • Étape 1 : Configuration et initialisations ;
  • Étape 2 : Définir les paramètres du jeu ;
  • Étape 3 : Définir les fonctions utilitaires ;
  • Étape 4 : Logique du jeu ;
  • Étape 5 : Sauvegarder le résultat du jeu ;
  • Étape 6 : Démarrer le jeu ;
  • Conclusion ;
  • Code complet de l'application.

Étape 1 : Configuration et initialisations

Préparation de l'environnement en créant un nouveau répertoire et un fichier nommé app.js. Dans ce fichier, importation des modules nécessaires :

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

Création d'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. Ensuite, création 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éfinir les nombres minimum et maximum :

const minNumber = 1;
const maxNumber = 100;

Générer le nombre secret :

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

Initialiser le compteur de tentatives :

let attempts = 0;

Explication : Nous définissons la plage de nombres (minNumber et maxNumber) dans laquelle 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 des 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 continue la boucle du jeu de manière récursive.

Étape 5 : Sauvegarder le résultat du jeu

Implémenter la logique de sauvegarde des réussites 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 de la partie dans 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

Afficher 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.

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