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

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