Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Bygga en Gissningsspel-Konsolapplikation | Bygga Konsolapplikationer med Node.js
Backendutveckling med Node.js och Express.js

bookBygga en Gissningsspel-Konsolapplikation

I detta kapitel får du möjlighet att utveckla dina färdigheter i att bygga konsolapplikationer när vi fördjupar oss i skapandet av det spännande 🎮 Gissa numret 🔢 spelappen. Detta interaktiva spel utmanar spelare att använda sin intuition genom att gissa ett slumpmässigt genererat nummer inom ett fördefinierat intervall. Under resans gång kommer vi att utforska grundläggande koncept såsom

  • 🎲 Slumpmässig talgenerering;
  • ✅ Inmatningsvalidering;
  • 🤝 Användarinteraktion;
  • 💾 Även spara spelresultat till en fil.

🏆 Utmaning väntar

Föreställ dig att fördjupa dig i en app som lovar spänning och nyfikenhet. Spelare bjuds in att gissa ett mystiskt valt nummer inom ett fördefinierat intervall. Appen ger omedelbar återkoppling på varje gissning och håller noggrant räkning på antalet försök.

Detta praktiska exempel är din chans att finslipa dina färdigheter i att bygga CLI-appar och visar konsten att skapa interaktiva program.

🚀 Resultatande app

Se magin i praktiken! Nedan visas en GIF som illustrerar den spännande Gissa numret-spelappen som du kommer att skapa:

Bygga en gissningsspel-konsolapp

Du står inför två vägar. Det första alternativet lockar dig att påbörja resan utan hjälp, medan det andra erbjuder en hjälpsam guide för att säkerställa din framgång. Oavsett om du kastar dig in modigt eller följer den strukturerade guiden, väntar en fascinerande upplevelse som lämnar dig med en funktionell och engagerande konsolapplikation.

Huvudplan

  • 👉 Steg 1: Installation och initiering;
  • 👉 Steg 2: Definiera spelparametrar;
  • 👉 Steg 3: Definiera hjälpfunktioner;
  • 👉 Steg 4: Spellogik;
  • 👉 Steg 5: Spara spelresultat;
  • 👉 Steg 6: Starta spelet;
  • 🎉 Slutsats;
  • 🏁 Komplett appkod.

Steg 1: Installation och initiering

Förbered arbetsytan genom att skapa en ny katalog och en fil med namnet app.js. I denna fil importerar vi de nödvändiga modulerna:

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

Skapa ett Readline-gränssnitt:

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

Förklaring: Nödvändiga moduler importeras: readline för användarinteraktion och fs.promises för filoperationer. Därefter skapas ett Readline-gränssnitt med namnet rl för att hantera in- och utmatning.

Steg 2: Definiera spelparametrar

Ange minsta och största tal:

const minNumber = 1;
const maxNumber = 100;

Generera det hemliga talet:

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

Initiera räknaren för försök:

let attempts = 0;

Förklaring: Intervallet för siffror (minNumber och maxNumber) definieras, inom vilket det hemliga numret genereras. Det hemliga numret genereras slumpmässigt med hjälp av Math.random() och tilldelas secretNumber. Variabeln attempts initieras för att hålla reda på användarens försök.

Steg 3: Definiera hjälpfunktioner

Utrusta med en hjälpfunktion för felfri validering:

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

Förklaring: Funktionen isValidGuess kontrollerar om användarens gissning är ett giltigt tal inom det angivna intervallet (minNumber till maxNumber).

Steg 4: Spellogik

Spelets kärnmekanik via funktionen playGame:

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

Förklaring: Funktionen playGame utgör spelets centrala spel-loop. Den använder rl.question för att be användaren om en gissning. Om gissningen är giltig kontrollerar funktionen om gissningen matchar det hemliga talet. Om inte, ges återkoppling till användaren och spel-loopen fortsätter rekursivt.

Steg 5: Spara spelresultat

Implementera logiken för att spara användarens spelprestationer 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.');
  }
}

Förklaring: Funktionen saveGameResult använder fs.promises för att lägga till spelresultatet i en fil med namnet game_results.txt. Den ger återkoppling om resultatet sparades eller om det misslyckades.

Steg 6: Starta spelet

Skapa välkomstmeddelandet och starta spelet:

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

Förklaring: Vi visar ett välkomstmeddelande och startar spel-loopen genom att anropa funktionen playGame.

🎉 Slutsats: Segervarv

Genom att utveckla Gissa numret-spelet har du fått värdefull erfarenhet av att utforma interaktiva och engagerande konsolapplikationer. Detta exempel visar på sammansmältningen av användarinmatning, slumptalsgenerering, validering och filhantering, vilket resulterar i en övertygande spelupplevelse.

👨‍💻 Fullständig programkod

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 allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 8

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookBygga en Gissningsspel-Konsolapplikation

Svep för att visa menyn

I detta kapitel får du möjlighet att utveckla dina färdigheter i att bygga konsolapplikationer när vi fördjupar oss i skapandet av det spännande 🎮 Gissa numret 🔢 spelappen. Detta interaktiva spel utmanar spelare att använda sin intuition genom att gissa ett slumpmässigt genererat nummer inom ett fördefinierat intervall. Under resans gång kommer vi att utforska grundläggande koncept såsom

  • 🎲 Slumpmässig talgenerering;
  • ✅ Inmatningsvalidering;
  • 🤝 Användarinteraktion;
  • 💾 Även spara spelresultat till en fil.

🏆 Utmaning väntar

Föreställ dig att fördjupa dig i en app som lovar spänning och nyfikenhet. Spelare bjuds in att gissa ett mystiskt valt nummer inom ett fördefinierat intervall. Appen ger omedelbar återkoppling på varje gissning och håller noggrant räkning på antalet försök.

Detta praktiska exempel är din chans att finslipa dina färdigheter i att bygga CLI-appar och visar konsten att skapa interaktiva program.

🚀 Resultatande app

Se magin i praktiken! Nedan visas en GIF som illustrerar den spännande Gissa numret-spelappen som du kommer att skapa:

Bygga en gissningsspel-konsolapp

Du står inför två vägar. Det första alternativet lockar dig att påbörja resan utan hjälp, medan det andra erbjuder en hjälpsam guide för att säkerställa din framgång. Oavsett om du kastar dig in modigt eller följer den strukturerade guiden, väntar en fascinerande upplevelse som lämnar dig med en funktionell och engagerande konsolapplikation.

Huvudplan

  • 👉 Steg 1: Installation och initiering;
  • 👉 Steg 2: Definiera spelparametrar;
  • 👉 Steg 3: Definiera hjälpfunktioner;
  • 👉 Steg 4: Spellogik;
  • 👉 Steg 5: Spara spelresultat;
  • 👉 Steg 6: Starta spelet;
  • 🎉 Slutsats;
  • 🏁 Komplett appkod.

Steg 1: Installation och initiering

Förbered arbetsytan genom att skapa en ny katalog och en fil med namnet app.js. I denna fil importerar vi de nödvändiga modulerna:

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

Skapa ett Readline-gränssnitt:

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

Förklaring: Nödvändiga moduler importeras: readline för användarinteraktion och fs.promises för filoperationer. Därefter skapas ett Readline-gränssnitt med namnet rl för att hantera in- och utmatning.

Steg 2: Definiera spelparametrar

Ange minsta och största tal:

const minNumber = 1;
const maxNumber = 100;

Generera det hemliga talet:

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

Initiera räknaren för försök:

let attempts = 0;

Förklaring: Intervallet för siffror (minNumber och maxNumber) definieras, inom vilket det hemliga numret genereras. Det hemliga numret genereras slumpmässigt med hjälp av Math.random() och tilldelas secretNumber. Variabeln attempts initieras för att hålla reda på användarens försök.

Steg 3: Definiera hjälpfunktioner

Utrusta med en hjälpfunktion för felfri validering:

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

Förklaring: Funktionen isValidGuess kontrollerar om användarens gissning är ett giltigt tal inom det angivna intervallet (minNumber till maxNumber).

Steg 4: Spellogik

Spelets kärnmekanik via funktionen playGame:

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

Förklaring: Funktionen playGame utgör spelets centrala spel-loop. Den använder rl.question för att be användaren om en gissning. Om gissningen är giltig kontrollerar funktionen om gissningen matchar det hemliga talet. Om inte, ges återkoppling till användaren och spel-loopen fortsätter rekursivt.

Steg 5: Spara spelresultat

Implementera logiken för att spara användarens spelprestationer 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.');
  }
}

Förklaring: Funktionen saveGameResult använder fs.promises för att lägga till spelresultatet i en fil med namnet game_results.txt. Den ger återkoppling om resultatet sparades eller om det misslyckades.

Steg 6: Starta spelet

Skapa välkomstmeddelandet och starta spelet:

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

Förklaring: Vi visar ett välkomstmeddelande och startar spel-loopen genom att anropa funktionen playGame.

🎉 Slutsats: Segervarv

Genom att utveckla Gissa numret-spelet har du fått värdefull erfarenhet av att utforma interaktiva och engagerande konsolapplikationer. Detta exempel visar på sammansmältningen av användarinmatning, slumptalsgenerering, validering och filhantering, vilket resulterar i en övertygande spelupplevelse.

👨‍💻 Fullständig programkod

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 allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 8
some-alt