At My Fingertips

Documentation

In questa attività imparerai come costruire grafiche di grandi dimensioni con una struttura a griglia, come il labirinto che vedi raffiugrato nell'immagine sottostante.

pacman maze

Le tessere

Il labirinto è composto da diverse tessere. La definizione e la creazione di queste tessere è discussa nell'attività PyTamaro iconTessere 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.

Loading...

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.

Esprimere una tessera

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:

  1. 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

  2. Crearla:

    tessera_diritta(100, True)
  3. 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!

Esprimere un labirinto

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?

simple maze

  1. 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.

  2. 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.

  3. 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?

  1. Assegnare un carattere a ciascuna tessera:
    "-"
    "|"
    "-"
    Questo sistema permette di esprimere e iinterpretare un labirinto tessera per tessera molto più facilmente.

Associare caratteri alle tessere

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:

  • "|" per rappresentare una tessera diritta verticale
  • "-" per rappresentare una tessera diritta orizzontale
  • " " per rappresentare una tessera del pavimento vuota
  • "." per rappresentare una tessera del pavimento con un punto
  • "o" per rappresentare una tessera del pavimento con una pastiglia
  • "P" per rappresentare una tessera Pac-Man

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:

  • "w" per rappresentare una tessera con l'angolo in alto a destra (rotazione 0)
  • "q" per rappresentare una tessera con l'angolo in alto a sinistra (rotazione 90)
  • "a" per rappresentare una tessera con l'angolo in basso a sinistra (rotazione 180)
  • "s" per rappresentare una tessera con l'angolo in basso a destra (rotazione 270)

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.

keyboard

In questo modo è facile ricordare quale carattere rappresenti un determinato angolo, anche se i caratteri non assomigliano alle tessere che rappresentano.

La funzione 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.

Loading...

Associare stringhe a un labirinto

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:

example maze

Di conseguenza, vogliamo che l'input sia una list[str]: una lista di stringhe, dove ciascuna delle stringhe rappresenta una riga distinta del labirinto.

La funzione 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.

Loading...

Ora sei in grado di generare in modo efficiente labirinti di grandi dimensioni! Divertiti nella cella di codice sottostante e sii creativo!

Loading...

Extra

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.

Cos'hai imparato

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

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version c08406b (Wed, 20 Nov 2024 12:30:00 GMT)