In questo post viene proposta una implementazione dell’applicazione Trova il tesoro utilizzando la piattaforma App Inventor. Abbiamo implementato questo gioco nella sezione riguardante lo studio dei vettori. Anche attraverso la piattaforma App Inventor possiamo implementare l’equivalente dei vettori attraverso la struttura List. Il gioco da implementare è il seguente:
Il giardino del re nasconde magnifici tesori! Dovrai essere in grado di trovarli tutti!
Il giardino si divide in 10 aiuole. In due di queste sono contenuti dei tesori che l’utente deve trovare. Se l’utente scopre le posizioni dei tesori vince la sfida. In tutto un utente può fare tre tentativi. (Gioco trova il tesoro)
La scomposizione che viene proposta consiste in tre sottoprogrammi:
- caricaTesori: funzione che ha lo scopo di caricare i due tesori nella aiuole. Le posizioni devono essere scelte casualmente e non devono coincidere
- partita: funzione che dovrà gestire l’interazione con l’utente. In questa funzione il computer farà la domanda all’utente sulle posizioni che contengono i tesori e questo risponderà. La funzione dovrà restituire un valore true o falsa a seconda che la posizione contenga un tesoro
- gioco: la funzione gestisce la dinamica di gioco cioè permette all’utente di svolgere le partite (al massimo tre).
Design Interfaccia
L’interfaccia proposta per lo sviluppo del gioco è la seguente:
I due campi di testo ci permettono di prendere in input i valori delle posizioni nelle quali l’utente crede siano contenuti i tesori. Ad esempio l’utente potrebbe inserire nei campi 1, 5 se crede che i tesori siano contenuti nelle caselle 1 e 5.
Implementazione blocks
Strutture dati
Per l’applicazione prevediamo l’utilizzo di tre variabili globali. Una rappresenta la prima posizione nella quale si trova il tesoro mentre l’altra la seconda posizione che contiene il tesoro. La terza variabile è il nostro vettore delle aiuole rappresentata da una lista. Attraverso il blocco “Create empty list” creiamo una lista vuota.
Secondo il metodo top-down abbiamo proposto una scomposizione del gioco in funzioni.
caricaTesori
Iniziamo l’implementazione della prima procedura che permette di caricare i tesori all’inizio della partita. Per prima cosa questa funzione si occupa di inserire in tutte le posizioni della lista il valore 0. Ricordiamo che 0 significa che nella posizione non è contenuto alcun tesoro mentre 1 che nella posizione c’è un tesoro. Facciamo questo con un ciclo for che dalla posizione 1 alla posizione 6 mette il valore 0:
In seguito mettiamo in posizione1 e posizione2 due valori random che rappresentano le posizioni che contengono un tesoro. Per generare un numero random attingiamo dai blocchi Math:
A questo punto dobbiamo assicurarci che posizione1 e posizione2 differiscano fra loro. Non desideriamo infatti che casualmente vengano messi i tesori nelle stesse posizioni! Per fare ciò stabiliamo un ciclo: fin tanto che posizione1 e posizione2 sono uguali, rigenera un nuovo valore per posizione2.
Infine possiamo assegnare alle posizioni generate il valore 1 che corrisponde ai tesori 😉
btnProva
Quando viene effettuato un click sul bottone di prova il programma deve effettuare un test per verificare se l’utente ha inserito nei campi di testo le posizioni corrette.
Per prima cosa al click del bottone è necessario effettuare un controllo per verificare che l’utente abbia inserito nei valori possibili nei campi di testo. Sicuramente non sarebbe possibile trovare un tesoro in posizione 12!!! Gestiamo questo controllo con una selezione e se le posizioni non sono rispettate lanciamo un messaggio attraverso un notifier.
A questo punto è necessario prendere il valore della casella della lista indicata dall’utente e controllare che contenga il valore 1. Se ciò si verifica vuol dire che in quella casella è presente un tesoro:
Ecco l’algoritmo completo 😉