Kursinhalt
Backend-Entwicklung mit Node.js und Express.js
Backend-Entwicklung mit Node.js und Express.js
Konsolenanwendung: Ratespiel
In diesem Kapitel machen Sie sich bereit, Ihre Fähigkeiten in der Konsolenanwendung zu verbessern, während wir in die Erstellung eines aufregenden 🎮 Zahlenraten 🔢 Spiel-Apps eintauchen. Dieses interaktive Spiel wird die Spieler herausfordern, ihre Intuition zu nutzen, indem sie eine zufällig generierte Zahl innerhalb eines vordefinierten Bereichs erraten. Unterwegs werden wir die Geheimnisse grundlegender Konzepte wie
- 🎲 Zufallszahlengenerierung;
- ✅ Eingabevalidierung;
- 🤝 Benutzerinteraktion;
- 💾 Sogar das Speichern von Spielergebnissen in einer Datei.
🏆 Herausforderung erwartet
Stellen Sie sich vor, Sie tauchen in eine App ein, die Spannung und Intrigen verspricht. Die Spieler sind eingeladen, eine geheimnisvoll ausgewählte Zahl innerhalb eines vordefinierten Bereichs zu erraten. Die App bietet sofortiges Feedback zu jedem Versuch und eine sorgfältige Aufzeichnung der gemachten Versuche.
Dieses praktische Beispiel ist Ihre Chance, Ihre Fähigkeiten im Erstellen von CLI-Apps zu verfeinern und zeigt die Kunst des Erstellens interaktiver Programme.
🚀 Ergebnis-App
Sehen Sie die Magie in Aktion! Unten ist ein GIF, das die aufregende Zahlenraten-Spiel-App zeigt, die Sie erstellen werden:
Erstellen einer Konsolen-App für ein Ratespiel
Sie haben zwei Wege vor sich. Die erste Option lädt Sie ein, die Reise ohne Hilfe zu beginnen, während die zweite eine hilfreiche Anleitung bietet, um Ihren Erfolg zu gewährleisten. Ob Sie mutig eintauchen oder der strukturierten Anleitung folgen, Sie erwartet ein faszinierendes Erlebnis, das Ihnen eine funktionale und fesselnde Konsolen-App hinterlässt.
Masterplan
- 👉 Schritt 1: Einrichtung und Initialisierungen;
- 👉 Schritt 2: Spielparameter definieren;
- 👉 Schritt 3: Hilfsfunktionen definieren;
- 👉 Schritt 4: Spiel-Logik;
- 👉 Schritt 5: Spielergebnis speichern;
- 👉 Schritt 6: Spiel starten;
- 🎉 Fazit;
- 🏁 Vollständiger App-Code.
Schritt 1: Einrichtung und Initialisierungen
Bereiten Sie die Leinwand vor, indem Sie ein neues Verzeichnis und eine Datei namens app.js
erstellen. In dieser Datei beschwören wir die notwendigen Module:
const readline = require('readline');
const fs = require('fs').promises;
Erstellen Sie eine Readline-Schnittstelle:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Erklärung: Wir importieren die notwendigen Module: readline
für die Benutzerinteraktion und fs.promises
für Dateioperationen. Dann erstellen wir ein Readline
-Interface namens rl
, um Eingaben und Ausgaben zu bearbeiten.
Schritt 2: Spielparameter definieren
Legen Sie die minimalen und maximalen Zahlen fest:
const minNumber = 1;
const maxNumber = 100;
Generiere die geheime Zahl:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Initialisiere den Versuchs-Zähler:
let attempts = 0;
Erklärung: Wir definieren den Zahlenbereich (minNumber
und maxNumber
), innerhalb dessen die Geheimzahl generiert wird. Die Geheimzahl wird zufällig mit Math.random()
generiert und secretNumber
zugewiesen. Die Variable attempts
wird initialisiert, um die Versuche des Benutzers zu verfolgen.
Schritt 3: Dienstprogramme definieren
Rüsten Sie sich mit einer Dienstfunktion für tadellose Validierung aus:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Erklärung: Die Funktion isValidGuess
überprüft, ob die Vermutung des Benutzers eine gültige Zahl innerhalb des angegebenen Bereichs (minNumber
bis maxNumber
) ist.
Schritt 4: Spiel-Logik
Die Kernmechanik des Spiels durch die playGame
-Funktion:
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();
}
});
}
Erklärung: Die playGame
-Funktion bildet die Kernspielschleife. Sie verwendet rl.question
, um den Benutzer nach einer Vermutung zu fragen. Wenn die Vermutung gültig ist, überprüft die Funktion, ob die Vermutung mit der geheimen Zahl übereinstimmt. Wenn nicht, gibt sie dem Benutzer Feedback und setzt die Spielschleife rekursiv fort.
Schritt 5: Spielergebnis speichern
Implementieren Sie die Logik zum Speichern der Spielergebnisse 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.');
}
}
Erklärung: Die Funktion saveGameResult
verwendet fs.promises
, um das Spielergebnis an eine Datei namens game_results.txt
anzuhängen. Sie gibt Rückmeldung über den Erfolg oder Misserfolg des Speicherns des Ergebnisses.
Schritt 6: Starten Sie das Spiel
Erstellen Sie die Willkommensnachricht und starten Sie das Spiel:
console.log('Welcome to the Guess the Number game!');
playGame();
Erklärung: Wir zeigen eine Willkommensnachricht an und starten die Spielschleife, indem wir die playGame
-Funktion aufrufen.
🎉 Fazit: Siegesrunde
Durch die Entwicklung der Guess the Number Game App haben Sie wertvolle Erfahrungen im Design interaktiver und ansprechender Konsolenanwendungen gesammelt. Dieses Beispiel zeigt die Verbindung von Benutzereingaben, Zufallszahlengenerierung, Validierung und Dateimanipulation, was zu einem fesselnden Spielerlebnis führt.
👨💻 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!