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
Quizzes & Challenges
Quizzes
Challenges
/
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 dybden på å 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 inndata;
  • Brukerinteraksjon;
  • Til og med lagring av spillresultater til en fil.

Utfordring

Se for deg å utforske en app som lover spenning og mystikk. 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 forsøk.

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

Ferdig App

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

Lage en konsollapp for gjettelek

Du står overfor to valg. Det første alternativet inviterer deg til å starte reisen uten hjelp, mens det andre gir deg en nyttig veiledning for å sikre suksess. Enten du kaster deg ut i det eller følger en strukturert guide, 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 initialiseringer

Forbered arbeidsområdet ved å opprette en ny katalog og en fil kalt app.js. I denne filen importeres 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: Nødvendige moduler importeres: readline for brukerinteraksjon og fs.promises for filoperasjoner. Deretter opprettes et Readline-grensesnitt kalt rl for å håndtere inn- og utdata.

Steg 2: Definer spillparametere

Angi minimums- og maksimumsverdier:

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 tallområdet (minNumber og maxNumber) hvor det hemmelige tallet skal genereres. 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 sjekker 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: playGame-funksjonen utgjør selve spill-løkken. Den bruker rl.question for å be brukeren om et gjett. Hvis gjettet er gyldig, sjekker funksjonen om gjettet samsvarer med det hemmelige tallet. Hvis ikke, gis det 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: saveGameResult-funksjonen bruker fs.promises for å legge til spillresultatet i en fil kalt game_results.txt. Den gir tilbakemelding om det lyktes eller mislyktes å lagre resultatet.

Steg 6: Start spillet

Vis 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 playGame-funksjonen.

Full 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();
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 result to the file?

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 dybden på å 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 inndata;
  • Brukerinteraksjon;
  • Til og med lagring av spillresultater til en fil.

Utfordring

Se for deg å utforske en app som lover spenning og mystikk. 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 forsøk.

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

Ferdig App

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

Lage en konsollapp for gjettelek

Du står overfor to valg. Det første alternativet inviterer deg til å starte reisen uten hjelp, mens det andre gir deg en nyttig veiledning for å sikre suksess. Enten du kaster deg ut i det eller følger en strukturert guide, 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 initialiseringer

Forbered arbeidsområdet ved å opprette en ny katalog og en fil kalt app.js. I denne filen importeres 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: Nødvendige moduler importeres: readline for brukerinteraksjon og fs.promises for filoperasjoner. Deretter opprettes et Readline-grensesnitt kalt rl for å håndtere inn- og utdata.

Steg 2: Definer spillparametere

Angi minimums- og maksimumsverdier:

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 tallområdet (minNumber og maxNumber) hvor det hemmelige tallet skal genereres. 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 sjekker 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: playGame-funksjonen utgjør selve spill-løkken. Den bruker rl.question for å be brukeren om et gjett. Hvis gjettet er gyldig, sjekker funksjonen om gjettet samsvarer med det hemmelige tallet. Hvis ikke, gis det 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: saveGameResult-funksjonen bruker fs.promises for å legge til spillresultatet i en fil kalt game_results.txt. Den gir tilbakemelding om det lyktes eller mislyktes å lagre resultatet.

Steg 6: Start spillet

Vis 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 playGame-funksjonen.

Full 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();
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 8
some-alt