At My Fingertips
Rapid Playground
In questa attività implementerai diverse funzioni per creare diverse tessere che potrai successivamente utilizzare, unendole, per generare un labirinto di Pac-Man come quello che vedi nell'immagine sottostante:
Questa attività si concentra esclusivamente sulla creazione delle tessere e sulla composizione di un piccolo laborinto. Al termine potrai salvare nella tua toolbox tutte le funzioni che avrai creato: ti serviranno per l'attività Labirinto di Pac-Man, nella quale imparerai a creare un labirinto di maggiori dimensioni.
Anche se tessere diverse hanno disegni diversi, tutte sono formate a partire dalla stessa base: un quadrato con lo sfondo nero.
Per evitare di dover scrivere
rettangolo(lato, lato, nero)
per ciascuna tessera, implementiamo innanzitutto una funzione quadrato_nero
che ritorna semplicemente un quadrato nero con un lato
di una determinata lunghezza.
In questo modo potrai semplicemente scrivere
quadrato_nero(lato)
per ottenere lo sfondo.
Puoi usare la funzione rettangolo, ma se hai una funzione quadrato
nella tua toolbox è ancora meglio! Ricordati, in tal caso, di importarla.
Implementa la funzione tessera_diritta
che genera una tessera diritta da usare per il bordo del labirinto.
La tessera dovrebbe essere orizzontale se il valore del parametro booleano orizzontale
è True
, altrimenti dovrebbe essere verticale.
La linea blu che passa sopra la tessere diritta dovrebbe essere centrale e il suo spessore dovrebbe corrispondere a 1/5 del lato della tessera.
Usa la funzione quadrato_nero
che hai implementato in precedenza per creare lo sfondo.
Implementa la funzione tessera_angolo
per generare una tessera ad angolo ruotata in base al parametro rotazione
.
Dato che il parametro rappresenta un angolo, i valori consentiti sono 0, 90, 180 or 270:
tessera_angolo(100, 0)
dovrebbe ritornare un angolo in alto a destratessera_angolo(100, 90)
dovrebbe ritornare un angolo in alto a sinistratessera_angolo(100, 180)
dovrebbe ritornare un angolo in basso a sinistratessera_angolo(100, 270)
dovrebbe ritornare un angolo in basso a destraDato che non è consentito alcun altro valore, dovresti completare l'asserzione nella funzione in modo da controllare che i parametri in entrata siano validi.
Lo spessore della linea blu dovrebbe corrispondere a 1/5 del lato della tessera e dovrebbe potersi combinare alle tessere diritte. Questo significa che la linea blu dovrebbe passare attraverso il centro dei lati della tessera ad angolo, come una continuazione della tessera diritta.
Implementa la funzione tessera_pavimento
per generare una tessera del pavimento che può essere vuota o essere contrassegnata da un punto o una pastiglia, a seconda del valore dei parametri booleani punto
e pastiglia
.
Se punto
e pastiglia
sono entrambi False
, la tessera dovrebbe essere vuota.
Se punto
è True
, la tessera dovrebbe contenere un cerchio bianco avente il diametro pari a 1/5 del lato della tessera.
Se pastiglia
è True
, la tessera dovrebbe contenere un cerchio bianco avente il diametro uguale al lato della tessera.
punto
e pastiglia
non dovrebbero mai essere entrambi impostati su True
. Puoi assicurarti che ciò non accada mediante un'asserzione (come nell'attività Pac-Man).
Infine, implementa la funzione tessera_pacman
che genera una tessera quadrata di un dato lato
, sulla quale figura un Pac-Man con la bocca aperta in base al parametro angolo_bocca
.
pacman
La funzione pacman
dovrebbe generare un Pac-Man in base a un determinato raggio
, la cui bocca sia aperta a un determinato angolo_bocca
.
Se non lo hai ancora fatto, dovresti risolvere l'attività Pac-Man e salvare la funzione pacman
nella tua toolbox cliccando sull'icona
sulla cella che contiene la definizione della funzione.
Dopo aver fatto questo lavoro, importa la funzione pacman
dalla tua toolbox eseguando la prossima casella di codice.
Ora implementa la funzione tessera_pacman
usando la funzione pacman
che hai appena importato. Questo è il risultato che dovresti ottenere:
La posizione di Pac-Man dovrebbe essere fissa al centro dello sfondo. Usa le funzioni fissa, componi e centro_sinistra per ottenere il risultato desiderato.
Genera alcune tessere utilizzando le funzioni che hai implementato e combinale usando le funzioni accanto e sopra per ottenere un labirinto semplice come il seguente:
Implementa una funzione labirinto_semplice
che prenda come parametro il lato di ciascuna tessera.
Non stipare tutto il codice in quest'unica funzione: quando necessario, introduci funzioni ausiliarie supplementari.
Il codice dovrebbe risultare leggibile e senza ripetizioni inutili.
Avrai notato che combinare le tessere in questo modo risulta piuttosto complicato, anche per un labirinto piccolo come questo. Immagina se dovessi costruire un labirinto grande come quello che abbiamo mostrato all'inizio!
Dev'esserci un modo per semplificare questo lavoro... lo discutiamo nell'attività Labirinto di Pac-Man!
Hai costruito semplici tessere che possono essere usate per generare un labirinto di Pac-Man.
Ti sei esercitato nella definizione di funzioni e hai implementato diverse funzioni che ricevono valori booleani come parametri.
Hai usato istruzioni condizionali per gestire tutti i casi possibili e ritornare le grafiche che rappresentano semplici tessere.
Per le tessere ad angolo, ti sei esercitato nell'utilizzo delle funzioni fissa e componi; per la tessera Pac-Man hai dovuto importare la funzione pacman
dalla tua toolbox.
Ti sei esercitato nell'uso delle asserzioni per accertare la validità dei valori dei parametri della funzione tessera_angolo
.
L'introduzione della funzione ausiliaria quadrato_nero
è una forma di scomposizione del problema, dato che in questo caso tutte le tessere avevano lo stesso sfondo.
Hai dovuto costruire un semplice labirinto e sei arrivato alla conclusione che costruire labirinti più grandi tessera per tessera è troppo laborioso.
This activity has been created by Lardelli and is licensed under CC BY-SA 4.0.
It is derived from this activity.
Tessere per il labirinto di Pac-Man
PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI
Privacy Policy • Platform Version c08406b (Wed, 20 Nov 2024 12:30:00 GMT)