Capitolo 5: Progetto – Creare un’App da riga di comando con Dart
In questo capitolo, svilupperemo un’applicazione da riga di comando utilizzando il linguaggio di programmazione Dart.
Il progetto consisterà nel creare il gioco “Carta, Forbice, Sasso”, noto anche come “Rock, Paper & Scissors” in inglese.
Questo esercizio pratico ci permetterà di applicare le conoscenze acquisite nei capitoli precedenti e di familiarizzare con lo sviluppo di applicazioni console in Dart.
Installazione del Dart SDK
Per iniziare, è necessario installare il Dart SDK (Software Development Kit) sul proprio sistema.
Il Dart SDK fornisce gli strumenti essenziali per sviluppare applicazioni in Dart.
1. Scaricare il Dart SDK: Visita il sito ufficiale di Dart all’indirizzo https://dart.dev/get-dart e scarica la versione appropriata per il tuo sistema operativo.
2. Installare il Dart SDK:
• Windows: Esegui l’installer scaricato e segui le istruzioni sullo schermo.
• macOS: Estrai il contenuto dell’archivio .zip e aggiungi Dart al tuo PATH.
• Linux: Utilizza il gestore di pacchetti del tuo sistema per installare Dart, seguendo le istruzioni fornite sul sito ufficiale.
3. Verificare l’installazione: Apri il terminale e digita dart --version. Dovresti vedere la versione installata di Dart.
Installazione e configurazione di Visual Studio Code
Visual Studio Code (VS Code) è un editor di codice sorgente leggero ma potente, ideale per lo sviluppo in Dart.
1. Scaricare VS Code: Visita https://code.visualstudio.com/ e scarica l’installer per il tuo sistema operativo.
2. Installare VS Code: Segui le istruzioni fornite per il tuo sistema operativo.
3. Installare l’estensione Dart:
• Apri VS Code.
• Vai alla sezione delle estensioni cliccando sull’icona delle estensioni nella barra laterale o premendo Ctrl+Shift+X.
• Cerca “Dart” e installa l’estensione ufficiale.
Descrizione del progetto: Carta, Forbice, Sasso
Il gioco “Carta, Forbice, Sasso” è un semplice gioco per due giocatori in cui ciascuno sceglie simultaneamente una delle tre opzioni: carta, forbice o sasso.
Le regole per determinare il vincitore sono:
• Carta batte Sasso.
• Sasso batte Forbice.
• Forbice batte Carta.
Se entrambi i giocatori scelgono la stessa opzione, il gioco è pari.
Creazione di un’applicazione da riga di comando
Per creare un’applicazione da riga di comando in Dart:
1. Creare un nuovo progetto:
• Apri il terminale.
• Naviga nella directory in cui desideri creare il progetto.
• Esegui il comando: dart create nome_progetto.
2. Navigare nella directory del progetto:
• cd nome_progetto.
3. Esaminare la struttura del progetto:
• Il file bin/nome_progetto.dart conterrà il punto di ingresso dell’applicazione.
Pseudocodice per la logica del gioco
Prima di implementare il gioco, è utile scrivere un pseudocodice che descriva la logica:
1. Mostra le opzioni al giocatore.
2. Ottieni la scelta del giocatore.
3. Genera una scelta casuale per il computer.
4. Confronta le scelte e determina il vincitore.
5. Mostra il risultato.
6. Chiedi al giocatore se vuole giocare di nuovo.
7. Ripeti o termina il gioco in base alla risposta.
Ottenere l’Input dell’utente con stdin da dart:io
Per leggere l’input dell’utente dalla riga di comando, utilizziamo la libreria dart:io:
import 'dart:io';
void main() {
print('Inserisci il tuo nome:');
String? nome = stdin.readLineSync();
print('Ciao, $nome!');
}
Implementazione del Ciclo di Gioco
Il ciclo di gioco continua finché il giocatore decide di giocare:
bool continua = true;
while (continua) {
// Logica del gioco
print('Vuoi giocare di nuovo? (s/n)');
String? risposta = stdin.readLineSync();
if (risposta?.toLowerCase() != 's') {
continua = false;
}
}
Implementazione della logica del gioco
Ecco un’implementazione completa del gioco:
import 'dart:io';
import 'dart:math';
void main() {
bool continua = true;
var random = Random();
while (continua) {
print('Scegli: (1) Sasso, (2) Carta, (3) Forbice');
String? sceltaUtente = stdin.readLineSync();
int sceltaGiocatore = int.tryParse(sceltaUtente ?? '') ?? 0;
if (sceltaGiocatore < 1 || sceltaGiocatore > 3) {
print('Scelta non valida. Riprova.');
continue;
}
int sceltaComputer = random.nextInt(3) + 1;
print('Hai scelto: ${convertiScelta(sceltaGiocatore)}');
print('Il computer ha scelto: ${convertiScelta(sceltaComputer)}');
String risultato = determinaVincitore(sceltaGiocatore, sceltaComputer);
print(risultato);
print('Vuoi giocare di nuovo? (s/n)');
String? risposta = stdin.readLineSync();
if (risposta?.toLowerCase() != 's') {
continua = false;
}
}
}
String convertiScelta(int scelta) {
switch (scelta) {
case 1:
return 'Sasso';
case 2:
return 'Carta';
case 3:
return 'Forbice';
default:
return 'Scelta non valida';
}
}
String determinaVincitore(int giocatore, int computer) {
if (giocatore == computer) {
return 'È un pareggio!';
} else if ((giocatore == 1 && computer == 3) ||
(giocatore == 2 && computer == 1) ||
(giocatore == 3 && computer == 2)) {
return 'Hai vinto!';
} else {
return 'Hai perso!';
}
}
Conclusione
Sviluppare un’applicazione da riga di comando in Dart, come il gioco “Carta, Forbice, Sasso”, offre un’opportunità pratica per applicare concetti fondamentali della programmazione. Questo progetto ci ha permesso di:
• Installare e configurare l’ambiente di sviluppo: Abbiamo imparato come installare il Dart SDK e configurare Visual Studio Code per lo sviluppo in Dart.
• Progettare la logica del gioco: Attraverso la scrittura di pseudocodice, abbiamo delineato i passaggi necessari per implementare il gioco, facilitando la successiva fase di codifica.
• Gestire l’input dell’utente: Abbiamo utilizzato la libreria dart:io per leggere l’input dell’utente dalla riga di comando, una competenza essenziale nello sviluppo di applicazioni console.
• Implementare strutture di controllo: L’uso di cicli while, istruzioni if/else e la gestione di enumerazioni ci ha permesso di controllare il flusso dell’applicazione in modo efficace.
• Integrare elementi casuali: Abbiamo incorporato la generazione di numeri casuali per simulare le scelte del computer, aggiungendo imprevedibilità al gioco.
Questo progetto non solo ha consolidato le nostre competenze in Dart, ma ha anche fornito una base solida per sviluppare applicazioni più complesse in futuro.
La comprensione e l’implementazione di questi concetti sono fondamentali per chiunque desideri approfondire lo sviluppo software utilizzando Dart.
Qualora volessi consolidare lo sviluppo degli argomenti trattati in questo capitolo ti connsiglio di eseguire i seguenti esercizi, e poi proseguire con il capitolo successivo:
Se hai completato tutti gli esercizi sei pronto per proseguire con il 6° Capitolo.
Se hai invece riscontrato dubbi, non esitare a contattarmi.
1. Calcolatrice avanzata:
• Descrizione: Crea una calcolatrice che supporti operazioni matematiche avanzate come potenze, radici quadrate e funzioni trigonometriche.
• Obiettivi:
• Gestire l’input dell’utente per selezionare l’operazione desiderata.
• Implementare funzioni per ciascuna operazione avanzata.
• Utilizzare la libreria dart:math per le operazioni complesse.
2. Gestore di To-Do List:
• Descrizione: Sviluppa un’applicazione che permetta agli utenti di creare, visualizzare, aggiornare e cancellare attività da una lista di cose da fare.
• Obiettivi:
• Implementare un menu per navigare tra le diverse funzionalità.
• Utilizzare strutture dati appropriate per memorizzare le attività.
• Gestire l’input dell’utente per manipolare la lista delle attività.
3. Gioco dell’Indovina numero:
• Descrizione: Crea un gioco in cui il computer genera un numero casuale e l’utente deve indovinarlo entro un certo numero di tentativi.
• Obiettivi:
• Generare numeri casuali utilizzando la classe Random.
• Fornire feedback all’utente se il numero inserito è troppo alto o troppo basso.
• Contare il numero di tentativi effettuati.
4. Convertitore di valute:
• Descrizione: Sviluppa un programma che converta un importo da una valuta all’altra utilizzando tassi di cambio predefiniti.
• Obiettivi:
• Creare un menu per selezionare le valute di origine e destinazione.
• Applicare i tassi di cambio per calcolare l’importo convertito.
• Gestire l’input dell’utente per l’importo da convertire.
5. Analizzatore di testo:
• Descrizione: Crea un’applicazione che analizzi un testo fornito dall’utente e fornisca statistiche come numero di parole, frasi e frequenza delle parole.
• Obiettivi:
• Leggere e analizzare l’input dell’utente.
• Utilizzare strutture dati come mappe per contare la frequenza delle parole.
• Gestire correttamente la punteggiatura e le maiuscole/minuscole.
6. Gestore di rubrica:
• Descrizione: Sviluppa un programma che permetta di aggiungere, visualizzare, cercare e cancellare contatti da una rubrica.
• Obiettivi:
• Implementare un menu per le diverse operazioni.
• Utilizzare una lista o una mappa per memorizzare i contatti.
• Gestire l’input dell’utente per manipolare i dati della rubrica.
7. Simulatore di lancio di dadi:
• Descrizione: Crea un programma che simuli il lancio di uno o più dadi e mostri i risultati all’utente.
• Obiettivi:
• Generare numeri casuali per simulare il lancio dei dadi.
• Permettere all’utente di scegliere il numero di dadi da lanciare.
• Visualizzare i risultati di ciascun lancio e la somma totale.
8. Calcolatore di BMI (Indice di Massa Corporea):
• Descrizione: Sviluppa un’applicazione che calcoli l’Indice di Massa Corporea dell’utente in base al peso e all’altezza forniti.
• Obiettivi:
• Richiedere all’utente il peso e l’altezza.
• Calcolare il BMI utilizzando la formula appropriata.
• Fornire un feedback all’utente sulla categoria di BMI in cui rientra (sottopeso, normopeso, sovrappeso, obesità).
9. Generatore di password casuali:
• Descrizione: Crea un programma che generi password casuali in base ai criteri specificati dall’utente (lunghezza, inclusione di numeri, simboli, lettere maiuscole/minuscole).
• Obiettivi:
• Permettere all’utente di specificare i criteri per la password.
• Generare una password che soddisfi i criteri specificati.
• Assicurarsi che la password generata sia sufficientemente sicura.
10. Convertitore di temperature:
• Descrizione: Sviluppa un’applicazione che converta una temperatura fornita dall’utente tra Celsius, Fahrenheit e Kelvin.
• Obiettivi:
• Richiedere all’utente la temperatura e l’unità di misura iniziale.
• Convertire la temperatura nelle altre due unità di misura.
• Visualizzare i risultati delle conversioni.
Se hai completato tutti gli esercizi sei pronto per proseguire con il 6° Capitolo.