Erstellung 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();
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
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?
Awesome!
Completion rate improved to 2.56
Erstellung 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();
Danke für Ihr Feedback!