Sei sulla pagina 1di 5

http://www.giordanicaserta.it/frapec/scratch/talpa.

htm

colpisci la talpa
una versione del gioco in cui una "talpa" compare in posizioni casuali dai tunnel che ha scavato in un prato, il giocatore, servendosi
di un martello, deve colpire la talpa.
Connettersi ad App Inventor ed avviare un nuovo progetto. Assegnargli il nome Talpa. Nel pannello delle propriet modificare la
propriet Title da Screen1 a "la Talpa". Aprire il Blocks Editor e connettere l'emulatore.
Scaricare l'immagine sul proprio computer. Oppure creare un'immagine di tipo png di dimensioni 36x42.
Durante il gioco la talpa compare ogni mezzo secondo. Se viene colpita si guadagna un punto e il telefono vibra. Premendo il
pulsante reset si azzera il punteggio.
Trascinare i seguenti componenti nell'area del progetto:

Una Canvas, disponibile nella tavolozza Drawing and Animation. Su questa verr disegnato il campo di gioco dove si
muove la talpa. Collocare la Canvas in alto, e fissare le propriet Width: 300 pixel e Height: 300 pixel. Nel
pannello Components, selezionare la Canvas e premere il pulsante Rename. Assegnare il nome Prato alla Canvas.
Una Label, disponibile nella tavolozza User Interface, che mostrer il punteggio, cio il numero di volte che la talpa stata
colpita. Impostare la propriet Text della label a "Punti: ---". Premere il pulsante Rename per assegnare il nome Punti alla
label.
Un Button, disponibile nella tavolozza User Interface. Impostare la propriet Text del pulsante a "Reset". Cambiare il
nome del pulsante a Reset.
Aggiungere un componente Sound, disponibile nel menu Media, e denominarlo Rumore. Questo componente non verr
usato per riprodurre un suono, ma per far vibrare il telefono quando si colpisce la talpa.

I componenti Timer e Clock


Durante il gioco, per far apparire periodicamente la talpa, serve un componente Clock. Questo componente possiede vari metodi, ad
esempio fornisce la data. In questo caso verr usato per segnalare che trascorso un intervallo di tempo. L'intervallo viene fissato
assegnando la durata alla propriet TimerInterval.

Trascinare il componente Clock dalla tavolozza User Interface all'area del progetto; Questo si posizioner nella zona dei
componenti non visibili. Premere il pulsante Rename e assegnargli il nome TalpaTimer. Modificare la
propriet TimeInterval a 500 millisecondi. Assicurarsi che la casella della propriet Enabled sia spuntata.

Aggiungere uno Sprite


Gli Sprite sono immagini che possono muoversi sulla Canvas. Ogni sprite ha le propriet Speed e Heading, oltre ad un Interval che
determina la frequenza dei passi. Gli Sprite possono anche riconoscere quando si verifica l'evento "Touched". In questo gioco la
Talpa ha velocit 0, nel senso che non si muove autonomamente. Per farla muovere si modificher la sua posizione ogni volta che
scade l'intervallo impostato nel timer.

Trascinare un componente ImageSprite dalla tavolozza Drawing and Animation all'area della Canvas. Premere il
pulsante Rename e assegnare il nome Talpa. Fissare le seguenti propriet dello Sprite:

Picture: Caricare l'immagine della talpa che stata precedentemente prelevata: mole.png.

Enabled: spuntato

Interval: 500 (non ha importanza l'interval, perch la velocit 0.)

Heading: 0 Anche in questo caso l'heading non ha importanza perch la velocit 0.

Speed: 0.0

Visible: spuntato

Width: Automatic

Height: Automatic

Le propriet x ed y posseggono gi un valore. Questi corrispondono alla posizione in cui stato rilasciato il componente quando
stato trascinato sulla Canvas. Si pu notare che queste coordinate cambiano mentre si trascina la talpa, Inoltre, se il telefono (o
l'emulatore) collegato si pu vedere che esso si sposta anche sullo schermo del telefono mentre viene spostato sulla Canvas. Nella
lista della struttura dei componenti, lo sprite incolonnato per evidenziare che contenuto nella Canvas.

Comportamento dei Componenti e gestori degli eventi


Un gestore di evento una procedura richiamata quando si verifica l'evento. In App Inventor una procedura potrebbe restituire un
valore.

Definizione delle Procedure

SpostaTalpa muove lo sprite in una nuova posizione sulla Canvas.

AggiornaPunti calcola e mostra il punteggio modificando la propriet Text della label Punti.

La procedura SpostaTalpa:
Nel menu Built-In, del Blocks Editor, trascinare un blocco Procedure then do e modificare il nome da "procedure" a "SpostaTalpa".
Nota: Ci sono due blocchi procedure molto simili: procedure then do e procedure then result, che una funzione. Usare procedure
then do.
Il blocco SpostaTalpa ha un incastro "do". In questo incastro si inseriranno le istruzioni della procedura. Servono due istruzioni:
una per modificare la posizione x della talpa e l'altra per modificare la posizione y. La posizione viene calcolata come una frazione
casuale, compresa tra 0 e 1, della differenza tra la dimensione della Canvas e la dimensione della Talpa. I blocchi che si devono usare
si trovano nella tavolozza Math.
Nel menu Built-In, fare clic su Talpa, che si trova sotto la voce Screen1->Prato, scorrere l'elenco dei blocchi e trascinare "set
(Talpa).X to" e poi trascinare anche il blocchetto "set (Talpa).Y to". Incastrare i blocchi uno sotto l'altro all'interno del blocco
procedure.
Dal menu Math trascinare due blocchi di moltiplicazione e incastrarli nell'intaglio etichettato "to" dei blocchi "set".
Nel primo operando dei blocchi di moltiplicazione inserire un blocco random fraction prelevato dal menu Math.
Nella casella del secondo operando di entrambi i blocchi di moltiplicazione inserire un blocco di sottrazione.
Nel primo operando del blocco di sottrazione, per il calcolo della posizione X, inserire il blocco Prato.Width, prelevato dal menu che
si apre cliccando su Prato nel pannello dei blocchi, sotto la voce Screen1. Ripetere l'operazione per il primo operando del blocco che
calcola la posizione Y, inserendo il blocco Prato.Height.
Nel secondo operando del blocco di sottrazione per il calcolo della posizione X, inserire il blocco Talpa.Width, e, nel blocco per il
calcolo della posizione Y, inserire il blocco Talpa.Height.

Definizione completa della procedura:

La procedura SpostaTalpa non riceve parametri, quindi non necessario usare il puntino blu sul blocco.
Dichiarare una variabile in cui memorizzare il punteggio ed inizializzarla a 0. Definire anche la procedura AggiornaPunti che
mostra il punteggio nella label Punti. Questa deve scrivere nella propriet Text della label il risultato del concatenamento tra la
stringa "Punti:" e il valore della variabile che conta i punti.
Nel menu Built-In clic su "Variables" e trascinare un blocco "inizialize global (name) to". Cliccare su "name" e sostituire name
con punteggio. Cliccare su Math e incastrare un blocco "0".

Clic su procedure, nel menu Built-In, e trascinare un blocco "to procedure do". Sostituire il nome "procedure" con
"AggiornaPunti". clic su Punti, che si trova nell'albero delle dipendenze di Screen1, e selezionare il blocco set (Punti).(Text) to.
Incastrarlo nel blocco della procedura AggiornaPunti.

Nell'intaglio del blocco "set Punti.Text to" si deve incastrare l'operatore di concatenazione join, prelevato dal menu Text. Nel
primo intaglio del blocco join incastrare il blocco di messaggio vuoto preso dal menu Text e tra le virgolette scrivere Punti: (con uno
spazio finale). Nel secondo intaglio incastrare la variabile punteggio: clic su variables e prelevare il blocco get, clic sulla freccia
verso il basso e scegliere "global punteggio". (oppure portare il mouse sul blocco dove la variabile stata inizializzata, dopo un po'
compaiono due blocchi, incastrare "get (global punteggio)".

Aggiungere il Timer
Il prossimo passo consiste nel far muovere la talpa. Il componente clock ha un gestore dell'evento chiamato "when ... Timer" che
viene richiamato periodicamente, in base al valore di TimerInterval. Il gestore di evento richiama "SpostaTalpa". Nel menu Blocks,
sotto la voce Screen1, fare clic su "TalpaTimer" e trascinare un blocco "when (TalpaTimer).Timer do" nell'area del progetto.

Se il telefono (o l'emulatore) collegato si deve vedere l'effetto del timer: la talpa si sposta continuamente sul prato.

Aggiungere il gestore di evento Talpa Touch


Ogni volta che la talpa viene colpita, il punteggio si deve incrementare. Il gestore di evento deve:
1.

Incrementare il punteggio.

2.

Chiamare "AggiornaPunti" per mostrare il nuovo punteggio.

3.

Far vibrare il telefono per 1/10 secondo (100 millisecondi).

4.

Chiamare "SpostaTalpa" per togliere la talpa dalla posizione in cui stata colpita.

Suggerimenti: per creare un blocco con il valore 100: portare il mouse nell'area di progetto e scrivere 100+Invio. Per creare un
blocco relativo a SpostaTalpa scrivere SpostaTalpa e, dalla lista, selezionare il blocco che interessa.

Azzeramento del punteggio.

Modifiche
Variare la velocit con cui la talpa si sposta in base all'abilit del giocatore. Ad esempio si cambia la propriet Interval valutando il
punteggio in un secondo.

Contare anche i numeri di colpi mancati e il numero di talpe sfuggite prima di essere colpite. In questo caso bisogna definire anche il
gestore dell'evento Canvas.Touch. Si deve precisare che toccando la talpa vengono generati due eventi, uno per la talpa e l'altro per
la Canvas.

Cambiare la difficolt.
Aggiungere un pulsante e denominarlo Livello. Modificare la propriet Text: Livello.
Aggiungere una variabile globale e denominarla Livello. Inizializzarla a 0.
Aggiungere un blocco "When Livello.Click do". Bisogna calcolare il livello con la formula:
Resto della divisione tra Livello+1 e 3.

Modificare la propriet Text del pulsante:


set Livello.Text to concatenazione del testo "Livello: " con il valore della variabile Livello.
Infine modificare l'Interval Timer in "500 + Livello * 250".

Inserire un componente HorizontalArrangement. Al suo interno spostare la label "Punti" ed aggiungere, alla sua destra, una nuova
label con la propriet Text: Mancate: (aggiungere uno spazio alla fine).
Creare una variabile: "Mancate=0".
Creare una variabile: Colpita = 0. Nel blocco "when talpa.touched" incastrare, in testa ai blocchi gi presenti. un blocco "set global
Colpita to 1".
Nel blocco "when Talpa.Timer" incastrare un blocco "if"
Nel blocco When Reset.Click incastrare un blocco "set mancate=0".
Riferirsi alla figura per apportare le modifiche ai blocchi:

Il gioco prevede la distinzione tra i colpi sbagliati, cio click su un'area vuota del Prato, e i colpi mancati, cio la talpa si sposta
prima di fare clic. Questa parte lasciata come esercizio.

Inserire il pulsante per avviare/fermare.


Nel Blocks Editor togliere la marca di spunta alla propriet Enabled del componente Timer.
Nell'HorizontalArragement inserire un pulsante, denominarlo Via. Modificare la propriet Text: Avvia.