Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Een Raadspel-Console-App Bouwen | Consoletoepassingen Bouwen met Node.js
Backendontwikkeling met Node.js en Express.js

bookEen Raadspel-Console-App Bouwen

In dit hoofdstuk maak je je klaar om je vaardigheden in het bouwen van console-applicaties te verbeteren terwijl we samen een spannende 🎮 Raad het Getal 🔢 game-app ontwikkelen. Dit interactieve spel daagt spelers uit hun intuïtie te gebruiken door een willekeurig gegenereerd getal binnen een vooraf bepaald bereik te raden. Onderweg ontrafelen we de basisprincipes zoals:

  • 🎲 Willekeurige getalgeneratie;
  • ✅ Invoercontrole;
  • 🤝 Gebruikersinteractie;
  • 💾 Zelfs het opslaan van spelresultaten in een bestand.

🏆 Uitdaging in het Vooruitzicht

Stel je voor dat je je verdiept in een app die spanning en mysterie belooft. Spelers worden uitgenodigd om een geheimzinnig gekozen getal binnen een vooraf bepaald bereik te raden. De app geeft direct feedback op elke gok en houdt nauwkeurig het aantal pogingen bij.

Dit praktijkvoorbeeld biedt de kans om vaardigheden in het bouwen van CLI-apps te verfijnen en laat zien hoe interactieve programma's worden ontwikkeld.

🚀 Resultaat App

Bekijk de magie in actie! Hieronder staat een GIF die de spannende Raad het Getal-game-app toont die je gaat bouwen:

Een Raadspel Console App Bouwen

Je staat voor twee paden. De eerste optie nodigt je uit om zelfstandig aan de slag te gaan, terwijl de tweede een behulpzame gids biedt om je succes te verzekeren. Of je nu moedig begint of de gestructureerde handleiding volgt, je staat een boeiende ervaring te wachten die resulteert in een functionele en aantrekkelijke console-app.

Masterplan

  • 👉 Stap 1: Setup en Initialisaties;
  • 👉 Stap 2: Spelparameters Definiëren;
  • 👉 Stap 3: Hulpfuncties Definiëren;
  • 👉 Stap 4: Spellogica;
  • 👉 Stap 5: Spelresultaat Opslaan;
  • 👉 Stap 6: Het Spel Starten;
  • 🎉 Conclusie;
  • 🏁 Volledige App Code.

Stap 1: Setup en Initialisaties

Bereid het canvas voor door een nieuwe map en een bestand genaamd app.js aan te maken. In dit bestand importeren we de benodigde modules:

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

Maak een Readline-interface aan:

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

Uitleg: De benodigde modules worden geïmporteerd: readline voor gebruikersinteractie en fs.promises voor bestandsbewerkingen. Vervolgens wordt een Readline-interface met de naam rl aangemaakt om invoer en uitvoer te verwerken.

Stap 2: Spelparameters definiëren

Stel het minimum- en maximumgetal in:

const minNumber = 1;
const maxNumber = 100;

Genereer het geheime getal:

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

Initialiseer de pogingen teller:

let attempts = 0;

Uitleg: We definiëren het bereik van getallen (minNumber en maxNumber) waarbinnen het geheime getal wordt gegenereerd. Het geheime getal wordt willekeurig gegenereerd met Math.random() en toegewezen aan secretNumber. De variabele attempts wordt geïnitialiseerd om het aantal pogingen van de gebruiker bij te houden.

Stap 3: Definieer hulpfuncties

Voorzie van een hulpfunctie voor foutloze validatie:

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

Uitleg: De functie isValidGuess controleert of de gok van de gebruiker een geldig getal is binnen het opgegeven bereik (minNumber tot maxNumber).

Stap 4: Spel Logica

De kernmechanica van het spel via de functie 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();
    }
  });
}

Uitleg: De functie playGame vormt de kern van de spel lus. Het gebruikt rl.question om de gebruiker om een gok te vragen. Als de gok geldig is, controleert de functie of de gok overeenkomt met het geheime getal. Zo niet, dan geeft het feedback aan de gebruiker en gaat de spel lus recursief verder.

Stap 5: Spelresultaat opslaan

Implementeer de logica voor het opslaan van de spelprestaties van de gebruiker in het bestand 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.');
  }
}

Toelichting: De functie saveGameResult gebruikt fs.promises om het spelresultaat toe te voegen aan een bestand met de naam game_results.txt. Er wordt feedback gegeven over het slagen of falen van het opslaan van het resultaat.

Stap 6: Start het spel

Maak het welkomstbericht en start het spel:

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

Uitleg: We tonen een welkomstbericht en starten de spel-lus door de functie playGame aan te roepen.

🎉 Conclusie: Overwinningsronde

Door het ontwikkelen van de Raad het Getal Spel App heb je waardevolle ervaring opgedaan in het ontwerpen van interactieve en boeiende consoletoepassingen. Dit voorbeeld toont de combinatie van gebruikersinvoer, willekeurige getalgeneratie, validatie en bestandsmanipulatie, wat resulteert in een meeslepende game-ervaring.

👨‍💻 Volledige App Code

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();

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 8

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.56

bookEen Raadspel-Console-App Bouwen

Veeg om het menu te tonen

In dit hoofdstuk maak je je klaar om je vaardigheden in het bouwen van console-applicaties te verbeteren terwijl we samen een spannende 🎮 Raad het Getal 🔢 game-app ontwikkelen. Dit interactieve spel daagt spelers uit hun intuïtie te gebruiken door een willekeurig gegenereerd getal binnen een vooraf bepaald bereik te raden. Onderweg ontrafelen we de basisprincipes zoals:

  • 🎲 Willekeurige getalgeneratie;
  • ✅ Invoercontrole;
  • 🤝 Gebruikersinteractie;
  • 💾 Zelfs het opslaan van spelresultaten in een bestand.

🏆 Uitdaging in het Vooruitzicht

Stel je voor dat je je verdiept in een app die spanning en mysterie belooft. Spelers worden uitgenodigd om een geheimzinnig gekozen getal binnen een vooraf bepaald bereik te raden. De app geeft direct feedback op elke gok en houdt nauwkeurig het aantal pogingen bij.

Dit praktijkvoorbeeld biedt de kans om vaardigheden in het bouwen van CLI-apps te verfijnen en laat zien hoe interactieve programma's worden ontwikkeld.

🚀 Resultaat App

Bekijk de magie in actie! Hieronder staat een GIF die de spannende Raad het Getal-game-app toont die je gaat bouwen:

Een Raadspel Console App Bouwen

Je staat voor twee paden. De eerste optie nodigt je uit om zelfstandig aan de slag te gaan, terwijl de tweede een behulpzame gids biedt om je succes te verzekeren. Of je nu moedig begint of de gestructureerde handleiding volgt, je staat een boeiende ervaring te wachten die resulteert in een functionele en aantrekkelijke console-app.

Masterplan

  • 👉 Stap 1: Setup en Initialisaties;
  • 👉 Stap 2: Spelparameters Definiëren;
  • 👉 Stap 3: Hulpfuncties Definiëren;
  • 👉 Stap 4: Spellogica;
  • 👉 Stap 5: Spelresultaat Opslaan;
  • 👉 Stap 6: Het Spel Starten;
  • 🎉 Conclusie;
  • 🏁 Volledige App Code.

Stap 1: Setup en Initialisaties

Bereid het canvas voor door een nieuwe map en een bestand genaamd app.js aan te maken. In dit bestand importeren we de benodigde modules:

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

Maak een Readline-interface aan:

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

Uitleg: De benodigde modules worden geïmporteerd: readline voor gebruikersinteractie en fs.promises voor bestandsbewerkingen. Vervolgens wordt een Readline-interface met de naam rl aangemaakt om invoer en uitvoer te verwerken.

Stap 2: Spelparameters definiëren

Stel het minimum- en maximumgetal in:

const minNumber = 1;
const maxNumber = 100;

Genereer het geheime getal:

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

Initialiseer de pogingen teller:

let attempts = 0;

Uitleg: We definiëren het bereik van getallen (minNumber en maxNumber) waarbinnen het geheime getal wordt gegenereerd. Het geheime getal wordt willekeurig gegenereerd met Math.random() en toegewezen aan secretNumber. De variabele attempts wordt geïnitialiseerd om het aantal pogingen van de gebruiker bij te houden.

Stap 3: Definieer hulpfuncties

Voorzie van een hulpfunctie voor foutloze validatie:

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

Uitleg: De functie isValidGuess controleert of de gok van de gebruiker een geldig getal is binnen het opgegeven bereik (minNumber tot maxNumber).

Stap 4: Spel Logica

De kernmechanica van het spel via de functie 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();
    }
  });
}

Uitleg: De functie playGame vormt de kern van de spel lus. Het gebruikt rl.question om de gebruiker om een gok te vragen. Als de gok geldig is, controleert de functie of de gok overeenkomt met het geheime getal. Zo niet, dan geeft het feedback aan de gebruiker en gaat de spel lus recursief verder.

Stap 5: Spelresultaat opslaan

Implementeer de logica voor het opslaan van de spelprestaties van de gebruiker in het bestand 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.');
  }
}

Toelichting: De functie saveGameResult gebruikt fs.promises om het spelresultaat toe te voegen aan een bestand met de naam game_results.txt. Er wordt feedback gegeven over het slagen of falen van het opslaan van het resultaat.

Stap 6: Start het spel

Maak het welkomstbericht en start het spel:

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

Uitleg: We tonen een welkomstbericht en starten de spel-lus door de functie playGame aan te roepen.

🎉 Conclusie: Overwinningsronde

Door het ontwikkelen van de Raad het Getal Spel App heb je waardevolle ervaring opgedaan in het ontwerpen van interactieve en boeiende consoletoepassingen. Dit voorbeeld toont de combinatie van gebruikersinvoer, willekeurige getalgeneratie, validatie en bestandsmanipulatie, wat resulteert in een meeslepende game-ervaring.

👨‍💻 Volledige App Code

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();

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 8
some-alt