Creazione di un'App Console per il Gioco dell'Indovinello
In questo capitolo, preparati a migliorare le tue competenze nello sviluppo di applicazioni console mentre ci immergiamo nella creazione di un'entusiasmante app Indovina il Numero. Questo gioco interattivo metterà alla prova l'intuizione dei giocatori, invitandoli a indovinare un numero generato casualmente all'interno di un intervallo predefinito. Durante il percorso, esploreremo concetti fondamentali come:
- Generazione di numeri casuali;
- Validazione dell'input;
- Interazione con l'utente;
- Salvataggio dei risultati di gioco su un file.
Sfida
Immagina di immergerti in un'app che promette emozione e mistero. I giocatori sono invitati a indovinare un numero scelto misteriosamente all'interno di un intervallo predefinito. L'app fornisce un feedback immediato su ogni tentativo e tiene un conteggio accurato delle prove effettuate.
Questo esempio pratico è l'occasione perfetta per affinare le tue competenze nella creazione di app CLI e mostrare l'arte di realizzare programmi interattivi.
App Finale
Guarda la magia in azione! Di seguito trovi una GIF che illustra l'entusiasmante app Indovina il Numero che andrai a realizzare:
Costruire un'app console di indovinelli
Ti vengono presentati due percorsi. La prima opzione ti invita a intraprendere il viaggio senza assistenza, mentre la seconda offre una guida utile per assicurare il tuo successo. Che tu scelga di procedere in autonomia o di seguire la guida strutturata, vivrai un'esperienza affascinante che ti porterà a realizzare un'app console funzionale e coinvolgente.
Piano principale
- Passo 1: Configurazione e inizializzazioni;
- Passo 2: Definizione dei parametri di gioco;
- Passo 3: Definizione delle funzioni di utilità;
- Passo 4: Logica di gioco;
- Passo 5: Salvataggio del risultato di gioco;
- Passo 6: Avvio del gioco;
- Conclusione;
- Codice completo dell'app.
Passo 1: Configurazione e Inizializzazioni
Preparare l'ambiente creando una nuova directory e un file denominato app.js. All'interno di questo file, includere i moduli necessari:
const readline = require('readline');
const fs = require('fs').promises;
Creare un'interfaccia Readline:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Spiegazione: Si importano i moduli necessari: readline per l'interazione con l'utente e fs.promises per le operazioni sui file. Successivamente, si crea un'interfaccia Readline denominata rl per gestire input e output.
Passaggio 2: Definizione dei parametri di gioco
Impostare i numeri minimo e massimo:
const minNumber = 1;
const maxNumber = 100;
Generare il numero segreto:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Inizializzare il contatore dei tentativi:
let attempts = 0;
Spiegazione: Definiamo l'intervallo di numeri (minNumber e maxNumber) all'interno del quale verrà generato il numero segreto. Il numero segreto viene generato casualmente utilizzando Math.random() e assegnato a secretNumber. La variabile attempts viene inizializzata per tenere traccia dei tentativi dell'utente.
Passaggio 3: Definire le Funzioni di Utilità
Dotarsi di una funzione di utilità per una validazione impeccabile:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Spiegazione: La funzione isValidGuess verifica se il tentativo dell'utente è un numero valido compreso nell'intervallo specificato (minNumber a maxNumber).
Passaggio 4: Logica di Gioco
Le meccaniche principali del gioco tramite la funzione 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();
}
});
}
Spiegazione: La funzione playGame costituisce il ciclo principale del gioco. Utilizza rl.question per richiedere all'utente di inserire un tentativo. Se il tentativo è valido, la funzione verifica se il numero inserito corrisponde al numero segreto. In caso contrario, fornisce un feedback all'utente e continua ricorsivamente il ciclo di gioco.
Passaggio 5: Salvataggio del Risultato di Gioco
Implementazione della logica per salvare i risultati ottenuti dall'utente nel file 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.');
}
}
Spiegazione: La funzione saveGameResult utilizza fs.promises per aggiungere il risultato della partita a un file chiamato game_results.txt. Fornisce un feedback sul successo o il fallimento del salvataggio del risultato.
Passaggio 6: Avvia il Gioco
Crea il messaggio di benvenuto e avvia il gioco:
console.log('Welcome to the Guess the Number game!');
playGame();
Spiegazione: Viene visualizzato un messaggio di benvenuto e si avvia il ciclo di gioco chiamando la funzione playGame.
Codice Completo dell'Applicazione
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();
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 2.56
Creazione di un'App Console per il Gioco dell'Indovinello
Scorri per mostrare il menu
In questo capitolo, preparati a migliorare le tue competenze nello sviluppo di applicazioni console mentre ci immergiamo nella creazione di un'entusiasmante app Indovina il Numero. Questo gioco interattivo metterà alla prova l'intuizione dei giocatori, invitandoli a indovinare un numero generato casualmente all'interno di un intervallo predefinito. Durante il percorso, esploreremo concetti fondamentali come:
- Generazione di numeri casuali;
- Validazione dell'input;
- Interazione con l'utente;
- Salvataggio dei risultati di gioco su un file.
Sfida
Immagina di immergerti in un'app che promette emozione e mistero. I giocatori sono invitati a indovinare un numero scelto misteriosamente all'interno di un intervallo predefinito. L'app fornisce un feedback immediato su ogni tentativo e tiene un conteggio accurato delle prove effettuate.
Questo esempio pratico è l'occasione perfetta per affinare le tue competenze nella creazione di app CLI e mostrare l'arte di realizzare programmi interattivi.
App Finale
Guarda la magia in azione! Di seguito trovi una GIF che illustra l'entusiasmante app Indovina il Numero che andrai a realizzare:
Costruire un'app console di indovinelli
Ti vengono presentati due percorsi. La prima opzione ti invita a intraprendere il viaggio senza assistenza, mentre la seconda offre una guida utile per assicurare il tuo successo. Che tu scelga di procedere in autonomia o di seguire la guida strutturata, vivrai un'esperienza affascinante che ti porterà a realizzare un'app console funzionale e coinvolgente.
Piano principale
- Passo 1: Configurazione e inizializzazioni;
- Passo 2: Definizione dei parametri di gioco;
- Passo 3: Definizione delle funzioni di utilità;
- Passo 4: Logica di gioco;
- Passo 5: Salvataggio del risultato di gioco;
- Passo 6: Avvio del gioco;
- Conclusione;
- Codice completo dell'app.
Passo 1: Configurazione e Inizializzazioni
Preparare l'ambiente creando una nuova directory e un file denominato app.js. All'interno di questo file, includere i moduli necessari:
const readline = require('readline');
const fs = require('fs').promises;
Creare un'interfaccia Readline:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Spiegazione: Si importano i moduli necessari: readline per l'interazione con l'utente e fs.promises per le operazioni sui file. Successivamente, si crea un'interfaccia Readline denominata rl per gestire input e output.
Passaggio 2: Definizione dei parametri di gioco
Impostare i numeri minimo e massimo:
const minNumber = 1;
const maxNumber = 100;
Generare il numero segreto:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Inizializzare il contatore dei tentativi:
let attempts = 0;
Spiegazione: Definiamo l'intervallo di numeri (minNumber e maxNumber) all'interno del quale verrà generato il numero segreto. Il numero segreto viene generato casualmente utilizzando Math.random() e assegnato a secretNumber. La variabile attempts viene inizializzata per tenere traccia dei tentativi dell'utente.
Passaggio 3: Definire le Funzioni di Utilità
Dotarsi di una funzione di utilità per una validazione impeccabile:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Spiegazione: La funzione isValidGuess verifica se il tentativo dell'utente è un numero valido compreso nell'intervallo specificato (minNumber a maxNumber).
Passaggio 4: Logica di Gioco
Le meccaniche principali del gioco tramite la funzione 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();
}
});
}
Spiegazione: La funzione playGame costituisce il ciclo principale del gioco. Utilizza rl.question per richiedere all'utente di inserire un tentativo. Se il tentativo è valido, la funzione verifica se il numero inserito corrisponde al numero segreto. In caso contrario, fornisce un feedback all'utente e continua ricorsivamente il ciclo di gioco.
Passaggio 5: Salvataggio del Risultato di Gioco
Implementazione della logica per salvare i risultati ottenuti dall'utente nel file 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.');
}
}
Spiegazione: La funzione saveGameResult utilizza fs.promises per aggiungere il risultato della partita a un file chiamato game_results.txt. Fornisce un feedback sul successo o il fallimento del salvataggio del risultato.
Passaggio 6: Avvia il Gioco
Crea il messaggio di benvenuto e avvia il gioco:
console.log('Welcome to the Guess the Number game!');
playGame();
Spiegazione: Viene visualizzato un messaggio di benvenuto e si avvia il ciclo di gioco chiamando la funzione playGame.
Codice Completo dell'Applicazione
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();
Grazie per i tuoi commenti!