Torna alla pagina inizialeTecnologia · 3ª media · Cambia materia
Inizia gratis
3ª media · Tecnologia
La creazione di contenuti digitali · Creazione e programmazione semplice

Programmazione a blocchi

Per preparare il gioco della classe, Giulia ha trascinato alcuni blocchi nell'area degli script: lo sprite si muove, parla, cambia costume. Nessuna riga di codice scritta a mano: i blocchi si incastrano come i pezzi di un puzzle. Ma perché il suo personaggio non parte quando clicca la bandiera? E perché quello di Marco conta sempre lo stesso numero? In questa pagina impari a leggere e costruire i programmi a blocchi, e a trovare gli errori. Alla fine ritroveremo il caso di Giulia.

Le tre strutture di base

Schema delle tre strutture di base: sequenza di tre blocchi impilati, ciclo con un gruppo di blocchi che si ripete, selezione con due strade, se e altrimenti. sequenza ripeti ciclo se / altrimenti selezione

Ogni programma, anche il più complicato, nasce combinando queste tre strutture.

Puoi vedere la corrispondenza tra blocchi e testo (pseudocodice), cioè tra il «codice sorgente» e il risultato visibile:

Blocco di Scratch Pseudocodice
ripeti 10 volte per 10 volte: …
per sempre ripeti all'infinito: …
se allora … altrimenti … se condizione allora … altrimenti …
imposta punti a 0 punti ← 0
cambia punti di 1 punti ← punti + 1
Esercitati★☆☆Da iniziare
Spiega con parole tue che cosa fanno le tre strutture di base di un programma —sequenza, ciclo e condizionale— e fai un esempio di vita quotidiana per ciascuna che non…

Spiega con parole tue che cosa fanno le tre strutture di base di un programma —sequenza, ciclo e condizionale— e fai un esempio di vita quotidiana per ciascuna che non abbia a che fare con i computer.

Risolvi
Esercitati★☆☆Da iniziare
Un programma ha questi blocchi sparsi: «dì Ciao!», «quando si clicca la bandiera», «aspetta un attimo», «dì Salve!». Ordinali nella pila corretta e descrivi che cosa…

Un programma ha questi blocchi sparsi: «dì Ciao!», «quando si clicca la bandiera», «aspetta un attimo», «dì Salve!». Ordinali nella pila corretta e descrivi che cosa accadrà esattamente quando il programma viene eseguito.

Risolvi
Esercitati★☆☆Da iniziare
Questi blocchi di aspetto sono sparsi: «passa al costume da pirata», «dì Ciao, mi chiamo Marco! per 2 secondi», «quando si clicca la bandiera», «aspetta 1 secondo».…

Questi blocchi di aspetto sono sparsi: «passa al costume da pirata», «dì Ciao, mi chiamo Marco! per 2 secondi», «quando si clicca la bandiera», «aspetta 1 secondo». Ordinali per presentare un personaggio che prima saluta e poi si traveste, e descrivi ciò che vedrà lo spettatore.

Risolvi
Esercitati★☆☆Da iniziare
Un programma ha questa pila: «quando si clicca la bandiera», «dì 3», «aspetta un attimo», «dì 2», «aspetta un attimo», «dì 1», «dì Via!». Descrivi in dettaglio che cosa…

Un programma ha questa pila: «quando si clicca la bandiera», «dì 3», «aspetta un attimo», «dì 2», «aspetta un attimo», «dì 1», «dì Via!». Descrivi in dettaglio che cosa vedrà e sentirà l'utente da quando clicca la bandiera fino alla fine e spiega a che cosa servono le attese.

Risolvi

Eventi, movimento e palco

Un progetto può avere più pile, ognuna con il suo evento: funzionano in parallelo e in modo indipendente.

Il palco è un piano cartesiano: la $x$ indica la posizione orizzontale, la $y$ quella verticale, e il centro è $(0; 0)$.

Esercitati★☆☆Da iniziare
Il programma della figura, formato da blocchi incastrati, dovrebbe far percorrere a un personaggio il quadrato tratteggiato e avvisare al termine, ma all'interno del…

Il programma della figura, formato da blocchi incastrati, dovrebbe far percorrere a un personaggio il quadrato tratteggiato e avvisare al termine, ma all'interno del ciclo manca un blocco.

quando si clicca la bandiera ripeti 4 volte fai un passo ? dì Sono arrivato!

Indica quale blocco manca all'interno del ciclo affinché il personaggio completi il percorso del quadrato e spiega che cosa fa ciascuna parte del programma.

Risolvi
Esercitati★☆☆Da iniziare
I blocchi evento decidono quando una pila di blocchi inizia a funzionare. Spiega che cosa fa partire ciascuno di questi tre eventi: «quando si clicca la bandiera»,…

I blocchi evento decidono quando una pila di blocchi inizia a funzionare. Spiega che cosa fa partire ciascuno di questi tre eventi: «quando si clicca la bandiera», «quando si preme il tasto spazio» e «quando si clicca il personaggio», e descrivi che cosa accadrebbe se un progetto avesse due pile diverse con due eventi diversi.

Risolvi
Esercitati★☆☆Da iniziare
Lo sfondo di un programma a blocchi funziona come una mappa di coordinate: la «x» indica la posizione orizzontale e la «y» quella verticale, e il centro è il punto…

Lo sfondo di un programma a blocchi funziona come una mappa di coordinate: la «x» indica la posizione orizzontale e la «y» quella verticale, e il centro è il punto $(0, 0)$. Spiega dove apparirà il personaggio con il blocco «vai a x: 0, y: 0» e in quale direzione si sposterà se la «x» aumenta o se la «y» diminuisce.

Risolvi

Variabili e cicli controllati

Schema di un ciclo controllato dalla variabile punti: imposta punti a 0, ripeti fino a quando punti è uguale a 3 aggiungendo 1 a punti e facendo un passo, poi dì Traguardo. imposta punti a 0 ripeti fino a quando punti = 3 cambia punti di 1 fai 1 passo dì Traguardo!

Regola pratica: il valore iniziale si imposta prima del ciclo, mai dentro. Per contare da 1 a 10 serve inoltre un blocco «cambia numero di 1» dentro il ciclo, dopo aver detto il numero.

Un ciclo può anche servire per animare: «ripeti 4 volte: costume successivo; aspetta 0,5 s» dura $4 \cdot 0{,}5 = 2$ s.

Esercitati★★☆Da iniziare
Un programma vuole contare da uno a dieci con questi blocchi: «ripeti 10 volte: dì il numero; aggiungi 1 al numero». Quando viene eseguito, il conteggio non parte da uno…

Un programma vuole contare da uno a dieci con questi blocchi: «ripeti 10 volte: dì il numero; aggiungi 1 al numero». Quando viene eseguito, il conteggio non parte da uno e, ogni volta che viene rieseguito, parte da un numero diverso. Spiega quale blocco manca e dove dovrebbe essere collocato, e in quale posizione della pila bisogna mettere il valore iniziale del numero.

Risolvi
Esercitati★★☆Da iniziare
La figura mostra due programmi che muovono un personaggio con due tipi di ciclo diversi. Spiega che differenza c'è tra i due cicli, fai un esempio di situazione in cui…

La figura mostra due programmi che muovono un personaggio con due tipi di ciclo diversi.

all'inizio ripeti 10 volte fai un passo all'inizio ripeti finché arrivi al traguardo fai un passo

Spiega che differenza c'è tra i due cicli, fai un esempio di situazione in cui conviene usare ciascuno e ragiona su che cosa può succedere con il ciclo di destra se il traguardo non esistesse.

Risolvi
Esercitati★★☆Da iniziare
La figura mostra un programma con una variabile chiamata «punti» che controlla un ciclo. Esegui la traccia del programma: indica quante volte viene eseguito il ciclo e…

La figura mostra un programma con una variabile chiamata «punti» che controlla un ciclo.

quando si clicca la bandiera imposta punti a 0 ripeti finché punti = 3 aggiungi 1 a punti fai un passo dì Traguardo!

Esegui la traccia del programma: indica quante volte viene eseguito il ciclo e quanti passi compie in totale il personaggio. Poi ragiona su che cosa accadrebbe se il blocco «imposta punti a 0» fosse dentro il ciclo invece che prima.

Risolvi
Esercitati★★☆Da iniziare
Per animare un personaggio si usa «ripeti 4 volte: costume successivo; aspetta mezzo secondo». Spiega che cosa ottiene quel ciclo e calcola quanto dura l'animazione…

Per animare un personaggio si usa «ripeti 4 volte: costume successivo; aspetta mezzo secondo». Spiega che cosa ottiene quel ciclo e calcola quanto dura l'animazione completa se ogni attesa è di $0,5\ \text{s}$ e il cambio di costume è istantaneo.

Risolvi
Esercitati★★★Da iniziare
In un gioco a cronometro si vuole registrare il record del tempo minore impiegato per completare un circuito. Un alunno scrive questo codice all'arrivo al traguardo: «se…

In un gioco a cronometro si vuole registrare il record del tempo minore impiegato per completare un circuito. Un alunno scrive questo codice all'arrivo al traguardo:

«se <Tempo_Partita < Record> allora [imposta Record a Tempo_Partita]»

Tuttavia, giocando per la prima volta dopo aver creato la variabile Record (che Scratch inizializza per default a 0), il record non si aggiorna mai, per quanto veloce vada l'auto.

  1. a) Giustifica perché questa verifica fallisce e spiega la differenza di inizializzazione tra la ricerca di un record di punteggio massimo e quella di un record di tempo minimo.
  2. b) Progetta la struttura di blocchi che risolva questo problema per la prima partita e per le successive, senza dover scrivere manualmente un valore iniziale fittizio prima di cliccare la bandiera verde.
Risolvi
Esercitati★★★Da iniziare
Per misurare la durata di una partita si crea questo cronometro: «quando si clicca la bandiera verde: imposta Secondi a 0 per sempre: aspetta 1 s cambia Secondi di 1»…

Per misurare la durata di una partita si crea questo cronometro:

«quando si clicca la bandiera verde:

imposta Secondi a 0

per sempre:

aspetta 1 s

cambia Secondi di 1»

Confrontando questo contatore con un orologio reale dopo 10 minuti di gioco intenso, il cronometro di Scratch segna solo 9 minuti e 35 secondi (uno scarto di 25 secondi).

  1. a) Giustifica perché un ciclo con il blocco «aspetta 1 s» accumula ritardo quando il gioco elabora molti personaggi e movimenti simultanei.
  2. b) Progetta un cronometro alternativo con i blocchi utilizzando il sensore «cronometro» e variabili che non dipenda dalla velocità di aggiornamento del gioco e mostri il tempo trascorso in secondi con un decimale (per esempio: 14,2 s).
  3. c) Giustifica perché la tua proposta mantiene la precisione esatta anche in caso di rallentamenti dello schermo.
Risolvi

Condizioni annidate e operatori logici

Esercitati★★☆Da iniziare
Descrivi con parole tue i blocchi di un programma che chiede l'età all'utente e risponde «puoi entrare» se ha 14 anni o più, e «mi dispiace» in caso contrario. Indica…

Descrivi con parole tue i blocchi di un programma che chiede l'età all'utente e risponde «puoi entrare» se ha 14 anni o più, e «mi dispiace» in caso contrario. Indica quale tipo di blocco di decisione useresti e quale verifica farebbe esattamente.

Risolvi
Esercitati★★☆Da iniziare
Un bar del quartiere regala un caffè solo ai soci e solo prima delle 10 del mattino. Descrivi i blocchi di decisione annidati del programma che lo verifica e spiega la…

Un bar del quartiere regala un caffè solo ai soci e solo prima delle 10 del mattino. Descrivi i blocchi di decisione annidati del programma che lo verifica e spiega la differenza tra mettere due «se» uno dentro l'altro e mettere due «se» in sequenza, usando questo esempio.

Risolvi
Esercitati★★☆Da iniziare
I blocchi operatore «e», «o» e «non» combinano le verifiche. Spiega che cosa fa ciascuno e descrivi le condizioni complete di questi due sistemi: una porta che si apre…

I blocchi operatore «e», «o» e «non» combinano le verifiche. Spiega che cosa fa ciascuno e descrivi le condizioni complete di questi due sistemi: una porta che si apre se la tessera è valida e inoltre l'impronta coincide, e un allarme che suona se si apre la finestra o si rompe il vetro.

Risolvi
Esercitati★★★Da iniziare
Un compagno ha programmato il ciclo di un semaforo per le auto (verde: 10 s; giallo: 3 s; rosso: 12 s) e un semaforo pedonale sincronizzato. Per farlo, ha creato due…

Un compagno ha programmato il ciclo di un semaforo per le auto (verde: 10 s; giallo: 3 s; rosso: 12 s) e un semaforo pedonale sincronizzato. Per farlo, ha creato due programmi indipendenti con «quando si clicca la bandiera verde» e cicli «per sempre» con blocchi di attesa in ciascun oggetto. Dopo un minuto di simulazione, auto e pedoni hanno la luce verde contemporaneamente.

  1. a) Giustifica perché si verifica questa pericolosa desincronizzazione usando cicli con tempi di attesa indipendenti.
  2. b) Progetta una soluzione con i blocchi che garantisca che non coincidano mai sul verde, spiegando se utilizzi variabili di stato o messaggi («invia messaggio e aspetta») e dettagliando l'ordine esatto dei cambi di luce.
Risolvi
Esercitati★★★Da iniziare
Uno studente programma il movimento di una palla con questo codice: «per sempre: fai 10 passi se tocca il bordo, rimbalza» Eseguendo il programma con una palla il cui…

Uno studente programma il movimento di una palla con questo codice:

«per sempre:

fai 10 passi

se tocca il bordo, rimbalza»

Eseguendo il programma con una palla il cui costume non è perfettamente centrato, osserva che in certi angoli la palla trema e resta bloccata sul bordo dello schermo senza riuscire a uscirne.

  1. a) Spiega passo dopo passo perché si verifica questo blocco in base a come Scratch calcola la collisione con il bordo e la posizione del centro del costume.
  2. b) Il problema si risolverebbe semplicemente invertendo l'ordine dei due blocchi all'interno del ciclo? Giustifica la tua risposta prevedendo che cosa accadrebbe a ogni iterazione.
  3. c) Progetta una modifica dei blocchi che garantisca che la palla si stacchi dal bordo e prosegua la sua traiettoria normalmente.
Risolvi
Esercitati★★★Da iniziare
Un gioco di piattaforme ha questo script sul personaggio: «quando si clicca la bandiera verde: imposta Vite a 3 se <Vite = 0> allora [ferma tutto] per sempre: se <tocca…

Un gioco di piattaforme ha questo script sul personaggio:

«quando si clicca la bandiera verde:

imposta Vite a 3

se allora [ferma tutto]

per sempre:

se <tocca Trappola?> allora:

  cambia Vite di -2

  aspetta 0,5 s»

Il gioco presenta due errori: la partita non finisce mai anche se il giocatore tocca ripetutamente la trappola, e se un giocatore cade nella trappola avendo 1 vita, il contatore passa a -1 vite senza fermare il gioco.

  1. a) Giustifica perché la verifica di fine partita, così com'è collocata, non ferma il gioco in nessun momento.
  2. b) Spiega perché utilizzare la condizione stretta è un errore di progettazione quando il danno sottrae più di 1 vita.
  3. c) Progetta la soluzione ricollocando e modificando i blocchi condizionali per assicurare che la partita termini esattamente quando le vite si esauriscono o scendono sotto zero.
Risolvi

Messaggi e cloni

Comunicazione per messaggi: la pila del pulsante (quando si clicca, invia «appari») manda il messaggio al mago, la cui pila «quando ricevo appari» esegue mostra. mittente: pulsante ricevente: mago pulsante:quando si clicca invia«appari» mago: quando ricevo«appari» mostra messaggio

Ogni sprite ha le sue pile e non può eseguire direttamente quelle di un altro: per questo non basta mettere i blocchi del mago dentro il pulsante. Il messaggio è il «ponte». E più sprite possono reagire allo stesso messaggio senza cambiare nulla nel mittente.

Cloni e velocità di esecuzione

I blocchi in un ciclo «per sempre» vengono eseguiti decine di volte al secondo. Per questo:

  • una moneta toccata fa salire i punti di 15-20 in un attimo: dopo «cambia punti di 1» serve far sparire la moneta, oppure un'attesa, in modo che il tocco conti una volta sola;

  • un nemico toccato toglie tutte le vite subito: dopo «cambia vite di −1» serve una pausa (per esempio «aspetta 1 secondo») o un segnale di «invulnerabilità» temporanea;

  • «aspetta 1 s» in un ciclo non dura esattamente 1 s di orologio: il tempo di esecuzione si somma e si accumula ritardo. Per un cronometro preciso conviene il sensore «cronometro» di Scratch, azzerato all'inizio;

  • un clone che esce dallo schermo va eliminato con «elimina questo clone» (non con «nascondi», che lo lascia vivo e rallenta il gioco);

  • nei giochi tipo Pong, dopo un gol conviene usare una variabile di stato («in gioco» = 0) o un messaggio, per non contare punti falsi mentre la palla torna al centro.

Esercitati★★☆Da iniziare
In un progetto ci sono due personaggi: un pulsante e un mago. Quando si clicca il pulsante, il mago deve apparire. Spiega a che cosa servono i blocchi «invia messaggio»…

In un progetto ci sono due personaggi: un pulsante e un mago. Quando si clicca il pulsante, il mago deve apparire. Spiega a che cosa servono i blocchi «invia messaggio» e «quando ricevi messaggio», descrivi le pile di blocchi che avrebbe ciascun personaggio e ragiona sul perché non basta mettere i blocchi del mago dentro il pulsante.

Risolvi
Esercitati★★★Da iniziare
In un videogioco, questo blocco è stato inserito dentro il ciclo «per sempre» del personaggio principale: «se <tocca Moneta?> allora [cambia Punti di 1]» «se <tocca…

In un videogioco, questo blocco è stato inserito dentro il ciclo «per sempre» del personaggio principale:

  • «se allora [cambia Punti di 1]»

  • «se allora [cambia Vite di -1]»

  • «se allora [ferma tutto]»

Durante la prova si rilevano due errori gravi: toccando una sola moneta il contatore sale di colpo di 15-20 punti, e sfiorando un nemico le 3 vite si perdono all'istante.

  1. a) Giustifica tecnicamente perché accade questo, tenendo conto della velocità di esecuzione dei cicli al secondo.
  2. b) Progetta la modifica necessaria nei blocchi della moneta e del personaggio per correggere entrambi i comportamenti senza interrompere il movimento generale del gioco (considera nascondere/distruggere oggetti e periodi di invulnerabilità).
Risolvi
Esercitati★★★Da iniziare
In un gioco spaziale, l'oggetto 'Asteroide' ha programmate queste tre pile: Pila 1: «quando si clicca la bandiera verde: per sempre [aspetta 2 s; crea clone di me…

In un gioco spaziale, l'oggetto 'Asteroide' ha programmate queste tre pile:

Pila 1: «quando si clicca la bandiera verde: per sempre [aspetta 2 s; crea clone di me stesso]»

Pila 2: «quando ricevi Allerta_Meteoriti: crea clone di me stesso»

Pila 3: «quando vieni clonato: mostra; per sempre [cambia y di -5; se <posizione y < -170> allora [nascondi]]»

Dopo un paio di minuti di gioco, il gioco rallenta gravemente, smettono di crearsi asteroidi e ogni volta che arriva il messaggio Allerta_Meteoriti il numero di cloni si moltiplica in modo incontrollato.

  1. a) Giustifica perché il blocco «nascondi» fa sì che il gioco smetta di rispondere e raggiunga il limite di cloni di Scratch.
  2. b) Spiega l'errore della Pila 2: perché gli stessi cloni esistenti raddoppiano la quantità di asteroidi quando ricevono un messaggio?
  3. c) Progetta la soluzione corretta con i blocchi per la creazione, il movimento e l'eliminazione definitiva dei cloni.
Risolvi
Esercitati★★★Da iniziare
In un gioco di Pong per due giocatori (racchette sinistra e destra), si rilevano questi errori di interazione: 1. Quando supera la racchetta, la palla rimbalza sul bordo…

In un gioco di Pong per due giocatori (racchette sinistra e destra), si rilevano questi errori di interazione:

  1. Quando supera la racchetta, la palla rimbalza sul bordo posteriore e somma più punti consecutivi prima che il punto venga azzerato.

  2. Mentre la palla torna al centro dopo un punto, i giocatori possono continuare a colpirla sommando punti falsi.

  3. Se la palla sfiora la parte posteriore della racchetta quando questa sale rapidamente, la palla parte a razzo verso l'interno della propria porta.

  1. a) Progetta la struttura di blocchi della palla per gestire il punto: rilevamento del gol, arresto momentaneo del gioco e comunicazione con i tabelloni tramite messaggi.
  2. b) Progetta la condizione di rimbalzo della racchetta in modo che rimandi la palla verso il campo avversario solo se l'impatto avviene sulla faccia frontale, cioè quando la palla si sta dirigendo verso la racchetta.
  3. c) Spiega come devono reagire le racchette e la palla al messaggio di 'nuovo punto' per riprendere il gioco in modo equo e sincronizzato.
Risolvi

Torniamo a Giulia: il suo personaggio non partiva perché in cima alla pila mancava un blocco evento, mentre quello di Marco contava sempre lo stesso numero perché il valore iniziale era impostato dentro il ciclo.

In sintesi

Vedi tutti gli esercizi di questa sezione