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 basisconcepten zoals:

  • Willekeurige getalgeneratie;
  • Invoercontrole;
  • Gebruikersinteractie;
  • Zelfs het opslaan van spelresultaten in een bestand.

Uitdaging

Stel je voor dat je een app verkent 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 poging en houdt nauwkeurig het aantal pogingen bij.

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

Resultaat App

Zie 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 krijgt twee opties aangeboden. 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 zelfstandig 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
});

Toelichting: 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: Definieer spelparameters

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 behulp van Math.random() en toegewezen aan secretNumber. De variabele attempts wordt geïnitialiseerd om het aantal pogingen van de gebruiker bij te houden.

Stap 3: Hulpfuncties definiëren

Voorzie van een hulpfunctie voor nauwkeurige 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 playGame functie:

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 playGame functie 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.');
  }
}

Uitleg: De functie saveGameResult gebruikt fs.promises om het spelresultaat toe te voegen aan een bestand genaamd game_results.txt. Er wordt feedback gegeven over het succes of falen van het opslaan van het resultaat.

Stap 6: Start het spel

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

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.

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 basisconcepten zoals:

  • Willekeurige getalgeneratie;
  • Invoercontrole;
  • Gebruikersinteractie;
  • Zelfs het opslaan van spelresultaten in een bestand.

Uitdaging

Stel je voor dat je een app verkent 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 poging en houdt nauwkeurig het aantal pogingen bij.

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

Resultaat App

Zie 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 krijgt twee opties aangeboden. 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 zelfstandig 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
});

Toelichting: 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: Definieer spelparameters

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 behulp van Math.random() en toegewezen aan secretNumber. De variabele attempts wordt geïnitialiseerd om het aantal pogingen van de gebruiker bij te houden.

Stap 3: Hulpfuncties definiëren

Voorzie van een hulpfunctie voor nauwkeurige 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 playGame functie:

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 playGame functie 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.');
  }
}

Uitleg: De functie saveGameResult gebruikt fs.promises om het spelresultaat toe te voegen aan een bestand genaamd game_results.txt. Er wordt feedback gegeven over het succes of falen van het opslaan van het resultaat.

Stap 6: Start het spel

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

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