| The Time Machine |

 



Benvenuti nel mio blog, domanda a bruciapelo, ma vi piacciono i contenuti che propongo? Avete richieste , suggerimenti, consigli? Fatemelo sapere nei commenti e vi ricordo che potete interagire anche su Facebook e Instagram , se vi fa piacere seguitemi 👍 

Bene dopo questa breve intro auto pubblicitaria passiamo alle cose serie. Anche questa volta lo spunto per questo tutorial viene direttamente da una vostra richiesta, non andremo a costruire una macchina del tempo ma useremo il componente clock che possiamo trovare tra i sensori disponibili. Un componente molto potente ma allo stesso tempo un po' ostico almeno per i primi approcci. Oggi useremo Kodular , che mi sembra molto ricco e promettente, per creare un codice che ci permetta di fornire un tot di "tiri" giornalieri al nostro utente, finiti i quali bloccheremo le azioni da noi scelte per attivarle il giorno dopo.

Nel caso specifico andremo a fornire al nostro utente 20 interazioni giornaliere con un button che scoprirete presto cosa attiva 😂  Let's go!

Dopo il disorientamento iniziale per la nuova interfaccia sarete subito inebriati dalla miriade di componenti che sono stati aggiunti, a seguito della fusione tra AppyBuilder e Makeroid che ha dato vita a Kodular, e subito avrete voglia di sperimentare come i bimbi, proprio come ho fatto io 🙈

La parte grafica è solo a scopo didattico e lascio a voi la personalizzazione in base alle esigenze, nel nostro caso ho aggiunto un button , una label con un omino stilizzato, un distanziatore ( eh si non dobbiamo usare le label invisibili) e una label per tenere il conto. Ad ogni click del pulsante il nostro omino salterà e in alto avremo il conteggio delle evoluzioni , raggiunto il valore 20 una notifica ci avviserà che abbiamo finito i salti disponibili e di tornare il giorno seguente per altri 20 jump!

Per tenere traccia dei tentativi effettuati e anche dell'utente useremo firebase ma va bene qualsiasi db on line, vi ricordo che database come tinyDb essendo salvati su memoria interna possono essere facilmente cancellati svuotando i dati dell'app rendendo vano il nostro obiettivo di limitare l'utilizzo a 20 tentativi al giorno.

Alcuni passaggi verranno saltati per concentrarci sul problema principale ma lascerò il file .aia per vedere con calma tutto ed eventualmente vi rimando sempre ai messaggi. Iniziamo con creare le variabili che andremo ad usare, global date inizializzato testo e dove salveremo la data da verificare, global jump come numero e partiamo da zero, global user sempre testo e salverà il nome dell'utente. Per rendere la cosa più carina e per fare qualche verifica in più ho introdotto una specie di login senza password, molto semplice, when sceen1 initialize all'inizio del nostro progetto andiamo ad attivare una notifica contenente una textbox con cui possiamo impostare il nostro username. Una volta introdotto il nome verrà attivato il blocco when notifier1 After Text Input dove riceveremo l'input appena scritto e lo andremo a salvare nella variabile user, l'input ci viene fornito da response. Adesso che conosciamo il nome del nostro utente andiamo ad interpellare il nostro database chiedendo il valore salvato sotto il tag user per poi mostrarlo a video con messaggio di benvenuto tramite la label sottostante. Qui iniziamo ad entrare nel vivo perché nel caso di tag vuoto o inesistente firebase ci permette di impostare un valore da visualizzare e quindi evitare anche spiacevoli errori nella gestione di elementi vuoti. Nell'ipotesi di tag assente ho impostato il valore da salvare come una lista di due elementi contenente il giorno e lo zero, il primo è banale il secondo è il numero di tentativi effettuati che nel caso di nuovo utente sarà proprio zero. Quindi la struttura dei nostri dati sarà una lista con giorno e numero tentativi, un make a list ci permetterà di comporre la lista inserendo come primo elemento il blocco call clock1 Format Date che inserito un istante nel tempo ritorna la sua scrittura in formato MMM d, yyyy , cioè mese giorno anno all'americana, l'istante di nostro interesse è call clock1 Now .Il blocco Now in realtà fornisce molte più info (che potete visionare con do it sul blocco) ma grazie al blocco precedente andiamo a filtrare solo quello che ci serve estrapolando es. gennaio 1, 2021.

In caso contrario, quindi tag esistente, si attiverà il blocco when Firebase....Got Value restituendo il nome del tag e il suo valore (lista con : data e n. tentativi) infatti subito andremo a salvare il primo elemento della lista value nella variabile date e il secondo elemento della lista nella variabile jump, poi non ci resta che introdurre nella label jump il valore dei tentativi effettuati . Il numero dei tentativi verrà aggiornato grazie al button inserito e nel nostro caso attiverà anche l'animazione che però non spiegheremo qui , vi lascerò però il progetto per vedere il suo funzionamento e magari si potrebbe creare un tutorial solo sulla parte delle animazioni.
Al click del nostro button dobbiamo suddividere i vari casi per poter gestire le rispettive azioni e lo faremo tramite un if then else che nella sua parte else riporta due casi differenti per un totale di tre casi possibili. Questa divisione si può effettuare in vari modi, qui ho optato per dividere il primo caso dagli altri due a solo scopo illustrativo , in questo modo avremo il primo controllo che si attiva solo nel caso in cui possiamo effettuare il nostro tentativo e gli altri due nel caso in cui i tentativi sono finiti oppure si sono aggiornati con altri 20 trascorso il giorno, vediamoli nello specifico.
La prima ipotesi porta due condizioni che devono essere rispettate contemporaneamente  quindi sono unite dall'operatore logico and ed agiscono la prima sulla data e la seconda sul numero di tentativi. Solo nel caso in cui la data attuale è uguale a quella salvata nel nostro db e il numero di tentativi è minore di 20 (solo minore mi raccomando, quindi 19 si e al click passerà a 20, se aggiungessimo anche l'opzione uguale capite bene che faremo effettuare 21 tentativi e non 20) allora il nostro utente potrà far saltare l'omino.
In global date abbiamo salvato la data in cui sono attivi i tentativi (perché sono giornalieri) e lo andiamo ad uguagliare con la data in quel momento con il blocco call clock1 Format Date che restituisce il valore dell'istante now nel formato scritto in pattern (i formati possono essere variati scegliendo tra vari standard). Quindi tutto quello che segue si attiverà solo nello stesso giorno in cui abbiamo iniziato i nostri tentativi e solo se ne abbiamo ancora a disposizione. 
Appena entriamo nel codice facciamo partire l'animazione di salto spostando la label dell'omino , salviamo il valore aggiornato dei tentativi aggiungendo un'unità a quelle presenti (global jump+1) e aggiorniamo la label JUMP per mostrare i tentativi fatti, utilizziamo un blocco join per unire la scritta JUMP: e il numero di tentativi (global jump)
Per rendere il nostro intendo valido adesso dobbiamo salvare tutti questi dati nel nostro db on line per cui utilizzeremo il blocco call Store Value per salvare sotto il tag user la lista con data e n. tentativi (global date e jump). Facile no? Adesso immaginiamo che abbiamo fatto tutti i 20 tentativi della giornata , quindi la data è ancora valida ma il n. di tentativi sono finiti, ecco il nostro secondo caso possibile. 
La nuova condizione sarà rispettata se (if) la data salvata (global date) è uguale a quella attuale (call clock1 Format Date --> now) e contemporaneamente (and) il numero di tentativi (global jump) è maggiore / uguale a 20 . In questo caso quindi non andremo ad effettuare il salto del nostro omino e non dovremo aggiornare nessun valore, per questo motivo ho aggiunto solo una notifica che avvisa di tornare il giorno seguente per altri 20 tentativi.
Ultimo caso possibile rimane quello in cui abbiamo aspettato il tempo previsto, quindi il giorno dopo, e dobbiamo riscuotere i nostri nuovi tentativi tradotto in codice la data salvata nel nostro db è diversa da quella attuale, il giorno è cambiato.
In questo caso dobbiamo salvare la nuova data nella variabile date e riportare jump a zero così da avere nuovamente tutto il giorno per effettuare i 20 tentativi, premendo il button adesso rientreremo nella prima condizione. 
Affinché tutto fili liscio dobbiamo salvare i nuovi dati nel db di firebase , aggiornare la label JUMP per far vedere che sono stati azzerati i tentativi e magari introdurre una notifica che avvisa dell'avvenuto cambiamento. Volendo questa notifica si può spostare anche in un altro codice che fa comparire il messaggio appena si apre l'app, voi come lo fareste ?
Compiti per casa 😂😂
Alla prossima, vi lascio il progetto da scaricare e vedere 👉 QUI 👈

 


 

Commenti

Ciao, spero ti piaccia il blog. Se ti fa piacere qui puoi offrirmi un caffè!

Post popolari in questo blog

GOOGLE SCRIPT & KODULAR READ, WRITE, UPDATE, DELETE

| Quiz | #1

App Inventor & Google Sheets