Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Creazione di un'App Console per il Gioco dell'Indovinello | Creazione di Applicazioni Console con Node.js
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Sviluppo Backend con Node.js ed Express.js

bookCreazione 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();
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 8

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

bookCreazione 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();
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 8
some-alt