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
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

Awesome!

Completion rate improved to 2.56

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