Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Opbygning af et Gætteleg-Konsolprogram | Opbygning af Konsolapplikationer med Node.js
Quizzes & Challenges
Quizzes
Challenges
/
Backend-Udvikling med Node.js og Express.js

bookOpbygning af et Gætteleg-Konsolprogram

I dette kapitel får du mulighed for at styrke dine færdigheder i at udvikle konsolapplikationer, når vi dykker ned i opbygningen af et spændende Gæt et Tal-spil. Dette interaktive spil udfordrer spillere til at bruge deres intuition ved at gætte et tilfældigt genereret tal inden for et foruddefineret interval. Undervejs gennemgår vi grundlæggende begreber såsom

  • Tilfældig talgenerering;
  • Validering af input;
  • Brugerinteraktion;
  • Endda lagring af spilresultater i en fil.

Udfordring

Forestil dig at udforske en app, der lover spænding og mystik. Spillere inviteres til at gætte et hemmeligt valgt tal inden for et foruddefineret interval. Appen giver øjeblikkelig feedback på hvert gæt og holder nøje styr på antallet af forsøg.

Dette praktiske eksempel er din mulighed for at forfine dine færdigheder i at bygge CLI-apps og demonstrerer kunsten at skabe interaktive programmer.

Resultat App

Se magien udfolde sig! Nedenfor ses en GIF, der illustrerer det spændende Gæt et Tal-spil, som du skal udvikle:

Opbygning af et Gæt et Tal-konsolspil

Du præsenteres for to veje. Den første mulighed opfordrer dig til at påbegynde rejsen uden hjælp, mens den anden tilbyder en nyttig guide, der sikrer din succes. Uanset om du kaster dig ud i det eller følger den strukturerede vejledning, venter der dig en fascinerende oplevelse, der efterlader dig med en funktionel og fængende konsolapplikation.

Masterplan

  • Trin 1: Opsætning og initialisering;
  • Trin 2: Definer spilparametre;
  • Trin 3: Definer hjælpefunktioner;
  • Trin 4: Spillets logik;
  • Trin 5: Gem spilresultat;
  • Trin 6: Start spillet;
  • Konklusion;
  • Fuld app-kode.

Trin 1: Opsætning og initialiseringer

Forbered grundlaget ved at oprette et nyt bibliotek og en fil med navnet app.js. I denne fil importeres de nødvendige moduler:

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

Opret et Readline-interface:

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

Forklaring: De nødvendige moduler importeres: readline til brugerinteraktion og fs.promises til filoperationer. Derefter oprettes et Readline-interface med navnet rl til håndtering af input og output.

Trin 2: Definer spilparametre

Angiv minimums- og maksimumstal:

const minNumber = 1;
const maxNumber = 100;

Generér det hemmelige tal:

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

Initialisér tælleren for forsøg:

let attempts = 0;

Forklaring: Vi definerer intervallet af tal (minNumber og maxNumber), inden for hvilket det hemmelige tal genereres. Det hemmelige tal genereres tilfældigt ved hjælp af Math.random() og tildeles til secretNumber. Variablen attempts initialiseres for at holde styr på brugerens forsøg.

Trin 3: Definer hjælpefunktioner

Udstyres med en hjælpefunktion til fejlfri validering:

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

Forklaring: Funktionen isValidGuess kontrollerer, om brugerens gæt er et gyldigt tal inden for det angivne interval (minNumber til maxNumber).

Trin 4: Spillets logik

Spillets kernefunktionalitet gennem playGame-funktionen:

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

Forklaring: playGame-funktionen udgør spillets centrale løkke. Den anvender rl.question til at bede brugeren om et gæt. Hvis gættet er gyldigt, kontrollerer funktionen, om gættet matcher det hemmelige tal. Hvis ikke, gives der feedback til brugeren, og spillet fortsætter rekursivt.

Trin 5: Gem spilresultat

Implementering af logikken for at gemme brugerens spilpræstationer i filen 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.');
  }
}

Forklaring: Funktionen saveGameResult bruger fs.promises til at tilføje spilresultatet til en fil med navnet game_results.txt. Den giver feedback om, hvorvidt resultatet blev gemt succesfuldt eller ej.

Trin 6: Start spillet

Opret velkomstbeskeden og start spillet:

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

Forklaring: Vi viser en velkomstbesked og starter spil-loopet ved at kalde funktionen playGame.

Fuld app-kode

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();
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 8

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

bookOpbygning af et Gætteleg-Konsolprogram

Stryg for at vise menuen

I dette kapitel får du mulighed for at styrke dine færdigheder i at udvikle konsolapplikationer, når vi dykker ned i opbygningen af et spændende Gæt et Tal-spil. Dette interaktive spil udfordrer spillere til at bruge deres intuition ved at gætte et tilfældigt genereret tal inden for et foruddefineret interval. Undervejs gennemgår vi grundlæggende begreber såsom

  • Tilfældig talgenerering;
  • Validering af input;
  • Brugerinteraktion;
  • Endda lagring af spilresultater i en fil.

Udfordring

Forestil dig at udforske en app, der lover spænding og mystik. Spillere inviteres til at gætte et hemmeligt valgt tal inden for et foruddefineret interval. Appen giver øjeblikkelig feedback på hvert gæt og holder nøje styr på antallet af forsøg.

Dette praktiske eksempel er din mulighed for at forfine dine færdigheder i at bygge CLI-apps og demonstrerer kunsten at skabe interaktive programmer.

Resultat App

Se magien udfolde sig! Nedenfor ses en GIF, der illustrerer det spændende Gæt et Tal-spil, som du skal udvikle:

Opbygning af et Gæt et Tal-konsolspil

Du præsenteres for to veje. Den første mulighed opfordrer dig til at påbegynde rejsen uden hjælp, mens den anden tilbyder en nyttig guide, der sikrer din succes. Uanset om du kaster dig ud i det eller følger den strukturerede vejledning, venter der dig en fascinerende oplevelse, der efterlader dig med en funktionel og fængende konsolapplikation.

Masterplan

  • Trin 1: Opsætning og initialisering;
  • Trin 2: Definer spilparametre;
  • Trin 3: Definer hjælpefunktioner;
  • Trin 4: Spillets logik;
  • Trin 5: Gem spilresultat;
  • Trin 6: Start spillet;
  • Konklusion;
  • Fuld app-kode.

Trin 1: Opsætning og initialiseringer

Forbered grundlaget ved at oprette et nyt bibliotek og en fil med navnet app.js. I denne fil importeres de nødvendige moduler:

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

Opret et Readline-interface:

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

Forklaring: De nødvendige moduler importeres: readline til brugerinteraktion og fs.promises til filoperationer. Derefter oprettes et Readline-interface med navnet rl til håndtering af input og output.

Trin 2: Definer spilparametre

Angiv minimums- og maksimumstal:

const minNumber = 1;
const maxNumber = 100;

Generér det hemmelige tal:

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

Initialisér tælleren for forsøg:

let attempts = 0;

Forklaring: Vi definerer intervallet af tal (minNumber og maxNumber), inden for hvilket det hemmelige tal genereres. Det hemmelige tal genereres tilfældigt ved hjælp af Math.random() og tildeles til secretNumber. Variablen attempts initialiseres for at holde styr på brugerens forsøg.

Trin 3: Definer hjælpefunktioner

Udstyres med en hjælpefunktion til fejlfri validering:

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

Forklaring: Funktionen isValidGuess kontrollerer, om brugerens gæt er et gyldigt tal inden for det angivne interval (minNumber til maxNumber).

Trin 4: Spillets logik

Spillets kernefunktionalitet gennem playGame-funktionen:

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

Forklaring: playGame-funktionen udgør spillets centrale løkke. Den anvender rl.question til at bede brugeren om et gæt. Hvis gættet er gyldigt, kontrollerer funktionen, om gættet matcher det hemmelige tal. Hvis ikke, gives der feedback til brugeren, og spillet fortsætter rekursivt.

Trin 5: Gem spilresultat

Implementering af logikken for at gemme brugerens spilpræstationer i filen 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.');
  }
}

Forklaring: Funktionen saveGameResult bruger fs.promises til at tilføje spilresultatet til en fil med navnet game_results.txt. Den giver feedback om, hvorvidt resultatet blev gemt succesfuldt eller ej.

Trin 6: Start spillet

Opret velkomstbeskeden og start spillet:

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

Forklaring: Vi viser en velkomstbesked og starter spil-loopet ved at kalde funktionen playGame.

Fuld app-kode

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();
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 8
some-alt