At My Fingertips
Rapid Playground
In questa attività imparerai come costruire grafiche di grandi dimensioni con una struttura a griglia, come il labirinto che vedi raffiugrato nell'immagine sottostante.
Il labirinto è composto da diverse tessere. La definizione e la creazione di queste tessere è discussa nell'attività Tessere per il labirinto di Pac-Man.
Svolgi dapprima quell'attività, salva tutte le funzioni che creano tessere nella tua toolbox e torna qui.
Importa le funzioni tessera_diritta
, tessera_angolo
, tessera_pavimento
e tessera_pacman
dalla tua toolbox nella cella di codice seguente.
A questo punto ti starai forse chiedendo se esista un modo più semplice per costruire un labirinto di grandi dimensioni. Come sempre capita nell'informatica, esistono molteplici approcci possibili: noi ti guideremo attraverso una delle soluzioni possibili, che trasforma una *lista di stringhe in labirinto.
Immagina di scegliere una tessera e di voler aiutare un lettore a capire quale tu abbia scelto, per esempio una tessera diritta orizzontale. Ci sono diversi modi in cui puoi esprimerla:
Descriverla:
Una tessera diritta orizzontale è composta da un rettangolo blu avente larghezza pari a cinque volte la sua altezza, sovrapposta a un quadrato nero avente lato uguale all'ampiezza del rettangolo
Crearla:
tessera_diritta(100, True)
Darle un nome:
tessera_oriz = ...
Sono tutte modalità valide per esprimere una tessera, ma sono adatte per esprimere un labirinto composto da molte tessere? Vediamolo!
Proviamo a esprimere il seguente labirinto (molto minimalista) tessera per tessera, usando le strategie che abbiamo appena descritto. Sono un buon modo per esprimere il nostro labirinto?
Descrivere le tessere:
Una tessera diritta orizzontale è composta da un rettangolo blu...
Una tessera diritta verticale è composta da un rettangolo blu...
Una tessera diritta orizzontale è composta da un rettangolo blu...
Leggere una descrizione di questo tipo e riuscire a capire quale aspetto debba avere il nostro labirinto non è per nulla semplice.
Creare le tessere:
tessera_diritta(100, True)
tessera_diritta(100, False)
tessera_diritta(100, True)
Un po' meglio, ma anche questa soluzione non è di facile interpretazione.
Dare un nome alle tessere:
tessera_oriz
tessera_vert
tessera_oriz
Questo è molto meglio, ma immaginati di provare a visualizzare un labirinto di queste dimensioni utilizzando questo approccio. Anche in questo caso non si tratta di una soluzione ottimale.
Cosa ne dici di questo?
"-"
"|"
"-"
Questo sistema permette di esprimere e iinterpretare un labirinto tessera per tessera molto più facilmente.Definiamo un modo per associare un carattere a una tessera. Per fare questo, scegliamo caratteri che abbiano un aspetto simile alle tessere che con essi vogliamo rappresentare. Per esempio:
Questi sono i caratteri che abbiamo utilizzato noi, ma puoi scegliere autonomamente quelle che preferisci, se lo desideri.
La scelta diventa un po' più difficile per le tessere ad angolo: "L" può essere una buona scelta per un angolo in basso a sinistra, ma come facciamo con un angolo in alto a sinistra? Non è così semplice, che ne dici?
Queste sono state le nostre scelte:
Ti stai chiedendo il perché? Prova a trovare le lettere corrispondenti sulla tua tastiera: se disponi di una tastiera QWERTY o QWERTZ dovrebbero formare qualcosa di simile a un quadrato.
In questo modo è facile ricordare quale carattere rappresenti un determinato angolo, anche se i caratteri non assomigliano alle tessere che rappresentano.
tessera_da_carattere
Cominciamo a implementare una funzione tessera_da_carattere
che prende un carattere (una stringa di lunghezza 1) e ritorna la tessera rappresentata da quel carattere.
Per ciascuno dei possibili valori ricevuti in input la funzione deve ritornare la tessera corrispondente.
Ora che possiamo esprimere una tessera con un carattere, possiamo esprimere un labirinto con una stringa (una stringa è una serie di caratteri).
Vogliamo dare in input qualcosa di simile a questo:
mio_labirinto = [
"q-w",
"| |",
"a-s"
]
e ottenere:
Di conseguenza, vogliamo che l'input sia una list[str]
: una lista di stringhe, dove ciascuna delle stringhe rappresenta una riga distinta del labirinto.
labirinto_da_stringhe
Implementiamo una funzione labirinto_da_stringhe
che associ una lista di stringhe a un labirinto completo.
Una stringa è composta da caratteri. Ciascuna stringa rappresenta tutte le tessere in una singola riga. Di conseguenza, tutte le tessere rappresentate da una singola stringa dovrebbero essere collocate una accanto all'altra, per comporre una singola riga.
In seguito, le righe così ottenute dovrebbero essere collocate una sopra l'altra per ottenere il labirinto completo.
Ora sei in grado di generare in modo efficiente labirinti di grandi dimensioni! Divertiti nella cella di codice sottostante e sii creativo!
Puoi anche provare ad aggiungere tessere che rappresentino Pac-man orientato in diverse direzioni (mentre guarda a sinistra, destra, su o giù).
Ricordati che devi associare le tessere a un carattere nella funzione tessera_da_carattere
ed eseguire nuovamente le celle di codice.
Hai importato tutte le funzioni per generare tessere da un'altra attività utilizzando la tua toolbox.
Hai imparato a usare caratteri e stringhe, nonché ad associare un carattere a una grafica usando le istruzioni condizionali.
Hai imparato come si possa rappresentare un labirinto utilizzando liste di stringhe e come da questa rappresentazione sia possibile generare un labirinto di grandi dimensioni, usando cicli per combinare le tessere in righe e le righe nell'immagine conclusiva.
This activity has been created by Lardelli and is licensed under CC BY-SA 4.0.
It is derived from this activity.
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)