Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellung Einer Zahlenratespiel-Konsolenanwendung | Erstellung von Konsolenanwendungen mit Node.js
Quizzes & Challenges
Quizzes
Challenges
/
Backend-Entwicklung mit Node.js und Express.js

bookErstellung Einer Zahlenratespiel-Konsolenanwendung

In diesem Kapitel werden die Fähigkeiten zur Entwicklung von Konsolenanwendungen erweitert, indem wir eine spannende Zahlenratespiel-App erstellen. Dieses interaktive Spiel fordert die Spieler heraus, ihre Intuition zu nutzen, um eine zufällig generierte Zahl innerhalb eines vorgegebenen Bereichs zu erraten. Dabei werden grundlegende Konzepte wie

  • Zufallszahlengenerierung;
  • Eingabevalidierung;
  • Benutzerinteraktion;
  • sowie das Speichern der Spielergebnisse in einer Datei behandelt.

Herausforderung

Stellen Sie sich vor, Sie tauchen in eine App ein, die Spannung und Faszination verspricht. Die Spieler sind eingeladen, eine geheimnisvoll ausgewählte Zahl innerhalb eines festgelegten Bereichs zu erraten. Die App gibt sofortiges Feedback zu jedem Versuch und führt eine genaue Zählung der abgegebenen Versuche.

Dieses praxisnahe Beispiel bietet die Möglichkeit, die Fähigkeiten im Bau von CLI-Apps zu verfeinern und demonstriert die Kunst, interaktive Programme zu gestalten.

Ergebnis-App

Sehen Sie die Anwendung in Aktion! Unten ist ein GIF, das die spannende Zahlenratespiel-App zeigt, die Sie entwickeln werden:

Entwicklung einer Zahlenratespiel-Konsolenanwendung

Es stehen zwei Wege zur Auswahl. Die erste Möglichkeit lädt dazu ein, die Aufgabe ohne Unterstützung anzugehen, während die zweite einen hilfreichen Leitfaden bietet, um den Erfolg zu sichern. Unabhängig davon, ob Sie mutig voranschreiten oder der strukturierten Anleitung folgen, erwartet Sie ein faszinierendes Erlebnis, das mit einer funktionalen und ansprechenden Konsolenanwendung endet.

Masterplan

  • Schritt 1: Einrichtung und Initialisierung;
  • Schritt 2: Definition der Spielparameter;
  • Schritt 3: Definition von Hilfsfunktionen;
  • Schritt 4: Spiellogik;
  • Schritt 5: Spielergebnis speichern;
  • Schritt 6: Spiel starten;
  • Fazit;
  • Vollständiger App-Code.

Schritt 1: Einrichtung und Initialisierungen

Vorbereitung der Arbeitsumgebung durch Erstellen eines neuen Verzeichnisses und einer Datei mit dem Namen app.js. In dieser Datei werden die erforderlichen Module eingebunden:

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

Erstellen einer Readline-Schnittstelle:

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

Erläuterung: Die notwendigen Module werden importiert: readline für die Interaktion mit dem Benutzer und fs.promises für Dateioperationen. Anschließend wird eine Readline-Schnittstelle mit dem Namen rl erstellt, um Ein- und Ausgaben zu verarbeiten.

Schritt 2: Spielparameter festlegen

Festlegung der minimalen und maximalen Zahlen:

const minNumber = 1;
const maxNumber = 100;

Generierung der geheimen Zahl:

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

Initialisierung des Versuchszählers:

let attempts = 0;

Erläuterung: Der Zahlenbereich (minNumber und maxNumber), in dem die geheime Zahl generiert wird, wird definiert. Die geheime Zahl wird zufällig mit Math.random() erzeugt und der Variablen secretNumber zugewiesen. Die Variable attempts wird initialisiert, um die Anzahl der Versuche des Benutzers zu verfolgen.

Schritt 3: Hilfsfunktionen definieren

Ausstattung mit einer Hilfsfunktion für eine einwandfreie Validierung:

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

Erläuterung: Die Funktion isValidGuess prüft, ob die Benutzereingabe eine gültige Zahl im angegebenen Bereich (minNumber bis maxNumber) ist.

Schritt 4: Spiellogik

Die Kernmechanik des Spiels über die Funktion 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();
    }
  });
}

Erläuterung: Die Funktion playGame bildet die zentrale Spielschleife. Sie verwendet rl.question, um den Benutzer nach einer Zahl zu fragen. Ist die Eingabe gültig, prüft die Funktion, ob die geratene Zahl der geheimen Zahl entspricht. Falls nicht, erhält der Benutzer eine Rückmeldung und die Spielschleife wird rekursiv fortgesetzt.

Schritt 5: Spielergebnis speichern

Implementierung der Logik zum Speichern der Spielerfolge des Benutzers in der Datei 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.');
  }
}

Erläuterung: Die Funktion saveGameResult verwendet fs.promises, um das Spielergebnis an eine Datei namens game_results.txt anzuhängen. Sie gibt eine Rückmeldung über den Erfolg oder Misserfolg beim Speichern des Ergebnisses.

Schritt 6: Spiel starten

Begrüßungsnachricht erstellen und das Spiel starten:

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

Erläuterung: Es wird eine Begrüßungsnachricht angezeigt und die Spielschleife durch Aufruf der Funktion playGame gestartet.

Vollständiger 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();
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

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?

bookErstellung Einer Zahlenratespiel-Konsolenanwendung

Swipe um das Menü anzuzeigen

In diesem Kapitel werden die Fähigkeiten zur Entwicklung von Konsolenanwendungen erweitert, indem wir eine spannende Zahlenratespiel-App erstellen. Dieses interaktive Spiel fordert die Spieler heraus, ihre Intuition zu nutzen, um eine zufällig generierte Zahl innerhalb eines vorgegebenen Bereichs zu erraten. Dabei werden grundlegende Konzepte wie

  • Zufallszahlengenerierung;
  • Eingabevalidierung;
  • Benutzerinteraktion;
  • sowie das Speichern der Spielergebnisse in einer Datei behandelt.

Herausforderung

Stellen Sie sich vor, Sie tauchen in eine App ein, die Spannung und Faszination verspricht. Die Spieler sind eingeladen, eine geheimnisvoll ausgewählte Zahl innerhalb eines festgelegten Bereichs zu erraten. Die App gibt sofortiges Feedback zu jedem Versuch und führt eine genaue Zählung der abgegebenen Versuche.

Dieses praxisnahe Beispiel bietet die Möglichkeit, die Fähigkeiten im Bau von CLI-Apps zu verfeinern und demonstriert die Kunst, interaktive Programme zu gestalten.

Ergebnis-App

Sehen Sie die Anwendung in Aktion! Unten ist ein GIF, das die spannende Zahlenratespiel-App zeigt, die Sie entwickeln werden:

Entwicklung einer Zahlenratespiel-Konsolenanwendung

Es stehen zwei Wege zur Auswahl. Die erste Möglichkeit lädt dazu ein, die Aufgabe ohne Unterstützung anzugehen, während die zweite einen hilfreichen Leitfaden bietet, um den Erfolg zu sichern. Unabhängig davon, ob Sie mutig voranschreiten oder der strukturierten Anleitung folgen, erwartet Sie ein faszinierendes Erlebnis, das mit einer funktionalen und ansprechenden Konsolenanwendung endet.

Masterplan

  • Schritt 1: Einrichtung und Initialisierung;
  • Schritt 2: Definition der Spielparameter;
  • Schritt 3: Definition von Hilfsfunktionen;
  • Schritt 4: Spiellogik;
  • Schritt 5: Spielergebnis speichern;
  • Schritt 6: Spiel starten;
  • Fazit;
  • Vollständiger App-Code.

Schritt 1: Einrichtung und Initialisierungen

Vorbereitung der Arbeitsumgebung durch Erstellen eines neuen Verzeichnisses und einer Datei mit dem Namen app.js. In dieser Datei werden die erforderlichen Module eingebunden:

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

Erstellen einer Readline-Schnittstelle:

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

Erläuterung: Die notwendigen Module werden importiert: readline für die Interaktion mit dem Benutzer und fs.promises für Dateioperationen. Anschließend wird eine Readline-Schnittstelle mit dem Namen rl erstellt, um Ein- und Ausgaben zu verarbeiten.

Schritt 2: Spielparameter festlegen

Festlegung der minimalen und maximalen Zahlen:

const minNumber = 1;
const maxNumber = 100;

Generierung der geheimen Zahl:

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

Initialisierung des Versuchszählers:

let attempts = 0;

Erläuterung: Der Zahlenbereich (minNumber und maxNumber), in dem die geheime Zahl generiert wird, wird definiert. Die geheime Zahl wird zufällig mit Math.random() erzeugt und der Variablen secretNumber zugewiesen. Die Variable attempts wird initialisiert, um die Anzahl der Versuche des Benutzers zu verfolgen.

Schritt 3: Hilfsfunktionen definieren

Ausstattung mit einer Hilfsfunktion für eine einwandfreie Validierung:

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

Erläuterung: Die Funktion isValidGuess prüft, ob die Benutzereingabe eine gültige Zahl im angegebenen Bereich (minNumber bis maxNumber) ist.

Schritt 4: Spiellogik

Die Kernmechanik des Spiels über die Funktion 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();
    }
  });
}

Erläuterung: Die Funktion playGame bildet die zentrale Spielschleife. Sie verwendet rl.question, um den Benutzer nach einer Zahl zu fragen. Ist die Eingabe gültig, prüft die Funktion, ob die geratene Zahl der geheimen Zahl entspricht. Falls nicht, erhält der Benutzer eine Rückmeldung und die Spielschleife wird rekursiv fortgesetzt.

Schritt 5: Spielergebnis speichern

Implementierung der Logik zum Speichern der Spielerfolge des Benutzers in der Datei 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.');
  }
}

Erläuterung: Die Funktion saveGameResult verwendet fs.promises, um das Spielergebnis an eine Datei namens game_results.txt anzuhängen. Sie gibt eine Rückmeldung über den Erfolg oder Misserfolg beim Speichern des Ergebnisses.

Schritt 6: Spiel starten

Begrüßungsnachricht erstellen und das Spiel starten:

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

Erläuterung: Es wird eine Begrüßungsnachricht angezeigt und die Spielschleife durch Aufruf der Funktion playGame gestartet.

Vollständiger 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();
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8
some-alt