Bygge 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();
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Fantastisk!
Completion rate forbedret til 2.56
Bygge 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();
Takk for tilbakemeldingene dine!