Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Bygge en Gjettelek-Konsollapp | Bygge Konsollapplikasjoner med Node.js
Backend-Utvikling med Node.js og Express.js

bookBygge en Gjettelek-Konsollapp

I dette kapittelet får du muligheten til å forbedre ferdighetene dine med konsollapplikasjoner når vi går i gang med å lage et spennende 🎮 Gjett tallet 🔢-spill. Dette interaktive spillet utfordrer spillere til å bruke intuisjonen sin ved å gjette et tilfeldig generert tall innenfor et forhåndsdefinert område. Underveis vil vi utforske grunnleggende konsepter som

  • 🎲 Generering av tilfeldige tall;
  • ✅ Validering av brukerinput;
  • 🤝 Brukerinteraksjon;
  • 💾 Til og med lagring av spillresultater til en fil.

🏆 Utfordringen venter

Se for deg å utforske en app som lover spenning og nysgjerrighet. Spillere inviteres til å gjette et mystisk valgt tall innenfor et forhåndsdefinert område. Appen gir umiddelbar tilbakemelding på hvert forsøk og holder nøye oversikt over antall gjetninger.

Dette praktiske eksempelet gir deg muligheten til å finpusse ferdighetene dine i å bygge CLI-apper og demonstrerer kunsten å lage interaktive programmer.

🚀 Resultatapp

Se magien i praksis! Nedenfor ser du en GIF som illustrerer det spennende "Gjett tallet"-spillet du skal lage:

Bygge en konsollapplikasjon for gjettelek

Du står overfor to veier. Det første alternativet inviterer deg til å starte reisen uten hjelp, mens det andre tilbyr en nyttig veiledning for å sikre suksess. Enten du kaster deg ut i det eller følger den strukturerte veiledningen, venter en fascinerende opplevelse som gir deg en funksjonell og engasjerende konsollapplikasjon.

Hovedplan

  • 👉 Steg 1: Oppsett og initialisering;
  • 👉 Steg 2: Definer spillparametere;
  • 👉 Steg 3: Definer hjelpefunksjoner;
  • 👉 Steg 4: Spilllogikk;
  • 👉 Steg 5: Lagre spillresultat;
  • 👉 Steg 6: Start spillet;
  • 🎉 Konklusjon;
  • 🏁 Fullstendig appkode.

Steg 1: Oppsett og initialisering

Forbered grunnlaget ved å opprette en ny katalog og en fil kalt app.js. I denne filen importerer vi nødvendige moduler:

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

Opprett et Readline-grensesnitt:

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

Forklaring: Vi importerer de nødvendige modulene: readline for brukerinteraksjon og fs.promises for filoperasjoner. Deretter oppretter vi et Readline-grensesnitt kalt rl for å håndtere inn- og utdata.

Steg 2: Definer spillparametere

Angi minimums- og maksimumstall:

const minNumber = 1;
const maxNumber = 100;

Generer det hemmelige tallet:

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

Initialiser forsøkstelleren:

let attempts = 0;

Forklaring: Vi definerer området for tallene (minNumber og maxNumber) som det hemmelige tallet skal genereres innenfor. Det hemmelige tallet genereres tilfeldig ved hjelp av Math.random() og tildeles secretNumber. Variabelen attempts initialiseres for å holde oversikt over brukerens forsøk.

Steg 3: Definer hjelpefunksjoner

Utstyr med en hjelpefunksjon for feilfri validering:

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

Forklaring: Funksjonen isValidGuess kontrollerer om brukerens gjetning er et gyldig tall innenfor det angitte området (minNumber til maxNumber).

Steg 4: Spilllogikk

Spillets kjernefunksjonalitet gjennom playGame-funksjonen:

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: Funksjonen playGame utgjør hovedspill-løkken. Den bruker rl.question for å be brukeren om en gjetning. Hvis gjetningen er gyldig, sjekker funksjonen om gjetningen samsvarer med det hemmelige tallet. Hvis ikke, gis tilbakemelding til brukeren og spill-løkken fortsetter rekursivt.

Steg 5: Lagre spillresultat

Implementer logikken for å lagre brukerens spillprestasjoner 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: Funksjonen saveGameResult bruker fs.promises for å legge til spillresultatet i en fil kalt game_results.txt. Den gir tilbakemelding om lagringen av resultatet var vellykket eller mislykket.

Steg 6: Start spillet

Opprett velkomstmelding og start spillet:

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

Forklaring: Vi viser en velkomstmelding og starter spill-løkken ved å kalle funksjonen playGame.

🎉 Konklusjon: Seiersrunde

Ved å utvikle Gjett Tallet-spillet, har du fått verdifull erfaring med å designe interaktive og engasjerende konsollapplikasjoner. Dette eksempelet viser samspillet mellom brukerinput, generering av tilfeldige tall, validering og filhåndtering, noe som resulterer i en engasjerende spillopplevelse.

👨‍💻 Full 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();

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 8

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

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

bookBygge en Gjettelek-Konsollapp

Sveip for å vise menyen

I dette kapittelet får du muligheten til å forbedre ferdighetene dine med konsollapplikasjoner når vi går i gang med å lage et spennende 🎮 Gjett tallet 🔢-spill. Dette interaktive spillet utfordrer spillere til å bruke intuisjonen sin ved å gjette et tilfeldig generert tall innenfor et forhåndsdefinert område. Underveis vil vi utforske grunnleggende konsepter som

  • 🎲 Generering av tilfeldige tall;
  • ✅ Validering av brukerinput;
  • 🤝 Brukerinteraksjon;
  • 💾 Til og med lagring av spillresultater til en fil.

🏆 Utfordringen venter

Se for deg å utforske en app som lover spenning og nysgjerrighet. Spillere inviteres til å gjette et mystisk valgt tall innenfor et forhåndsdefinert område. Appen gir umiddelbar tilbakemelding på hvert forsøk og holder nøye oversikt over antall gjetninger.

Dette praktiske eksempelet gir deg muligheten til å finpusse ferdighetene dine i å bygge CLI-apper og demonstrerer kunsten å lage interaktive programmer.

🚀 Resultatapp

Se magien i praksis! Nedenfor ser du en GIF som illustrerer det spennende "Gjett tallet"-spillet du skal lage:

Bygge en konsollapplikasjon for gjettelek

Du står overfor to veier. Det første alternativet inviterer deg til å starte reisen uten hjelp, mens det andre tilbyr en nyttig veiledning for å sikre suksess. Enten du kaster deg ut i det eller følger den strukturerte veiledningen, venter en fascinerende opplevelse som gir deg en funksjonell og engasjerende konsollapplikasjon.

Hovedplan

  • 👉 Steg 1: Oppsett og initialisering;
  • 👉 Steg 2: Definer spillparametere;
  • 👉 Steg 3: Definer hjelpefunksjoner;
  • 👉 Steg 4: Spilllogikk;
  • 👉 Steg 5: Lagre spillresultat;
  • 👉 Steg 6: Start spillet;
  • 🎉 Konklusjon;
  • 🏁 Fullstendig appkode.

Steg 1: Oppsett og initialisering

Forbered grunnlaget ved å opprette en ny katalog og en fil kalt app.js. I denne filen importerer vi nødvendige moduler:

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

Opprett et Readline-grensesnitt:

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

Forklaring: Vi importerer de nødvendige modulene: readline for brukerinteraksjon og fs.promises for filoperasjoner. Deretter oppretter vi et Readline-grensesnitt kalt rl for å håndtere inn- og utdata.

Steg 2: Definer spillparametere

Angi minimums- og maksimumstall:

const minNumber = 1;
const maxNumber = 100;

Generer det hemmelige tallet:

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

Initialiser forsøkstelleren:

let attempts = 0;

Forklaring: Vi definerer området for tallene (minNumber og maxNumber) som det hemmelige tallet skal genereres innenfor. Det hemmelige tallet genereres tilfeldig ved hjelp av Math.random() og tildeles secretNumber. Variabelen attempts initialiseres for å holde oversikt over brukerens forsøk.

Steg 3: Definer hjelpefunksjoner

Utstyr med en hjelpefunksjon for feilfri validering:

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

Forklaring: Funksjonen isValidGuess kontrollerer om brukerens gjetning er et gyldig tall innenfor det angitte området (minNumber til maxNumber).

Steg 4: Spilllogikk

Spillets kjernefunksjonalitet gjennom playGame-funksjonen:

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: Funksjonen playGame utgjør hovedspill-løkken. Den bruker rl.question for å be brukeren om en gjetning. Hvis gjetningen er gyldig, sjekker funksjonen om gjetningen samsvarer med det hemmelige tallet. Hvis ikke, gis tilbakemelding til brukeren og spill-løkken fortsetter rekursivt.

Steg 5: Lagre spillresultat

Implementer logikken for å lagre brukerens spillprestasjoner 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: Funksjonen saveGameResult bruker fs.promises for å legge til spillresultatet i en fil kalt game_results.txt. Den gir tilbakemelding om lagringen av resultatet var vellykket eller mislykket.

Steg 6: Start spillet

Opprett velkomstmelding og start spillet:

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

Forklaring: Vi viser en velkomstmelding og starter spill-løkken ved å kalle funksjonen playGame.

🎉 Konklusjon: Seiersrunde

Ved å utvikle Gjett Tallet-spillet, har du fått verdifull erfaring med å designe interaktive og engasjerende konsollapplikasjoner. Dette eksempelet viser samspillet mellom brukerinput, generering av tilfeldige tall, validering og filhåndtering, noe som resulterer i en engasjerende spillopplevelse.

👨‍💻 Full 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();

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 8
some-alt