La grafica della tartaruga

Dove si parla di come generare tartarughe virtuali e mandarle in giro per lo schermo a disegnare.

Creare una tartaruga

Per giocare con la grafica della tartaruga bisogna procurarci… una tartaruga. Ci sono molti modi per farlo, verranno illustrati più avanti, qui ne vediamo uno, il più comune. I passaggi necessari, in sintesi, sono:

  1. caricare la libreria che contiene gli oggetti della grafica della tartaruga,
  2. creare una finestra dove far vivere delle tartarughe,
  3. creare una tartaruga,
  4. scrivere i comandi che la tartaruga deve eseguire,
  5. rendere attiva la finestra creata.

Di seguito sono illustrati i precedenti passaggi.

Per utilizzare la libreria della grafica della Tartaruga dobbiamo dire a Python di caricarla in memoria. In realtà, di tutta la libreria ci interessa, per ora, solo l’ambiente dove vivono le tartarughe. Per caricare questo ambiente dobbiamo scrivere:

>>> import pygraph.pyturtle as tg

Nota

Io ho usato la parola tg perché mi ricorda: turtle geometry, ma è possibile usare un qualunque altro nome, basta essere coerenti nel resto del programma.

Questa istruzione legge la libreria pyturtle.py e la associa al nome tg. Se non sono apparsi messaggi di errore vuol dire che Python ha trovato e caricato la libreria.

Ora dobbiamo creare un piano in cui far vivere la tartaruga. Il comando che realizza questo è: TurtlePlane(), ma questa è una funzione che si trova nella libreria che abbiamo associato al nome tg quindi il comando completo sarà: tg.TurtlePlane() che significa: esegui la funzione TurtlePlane() della libreria tg. Ma manca ancora un particolare: vogliamo associare il piano prodotto dalla funzione ad un nome in modo da potervi fare riferimento in seguito. Il comando da dare è dunque:

>>> piano = tg.TurtlePlane()

Nota

Bisogna prestare molta attenzione alle maiuscole e minuscole e alle parentesi. Mentre il nome piano può essere sostituito da un qualunque altro nome, basta essere coerenti nel seguito.

Ora che abbiamo una superficie adatta possiamo passare al punto 3: dobbiamo creare una tartaruga. Ci sono diversi modi per farlo, verranno illustrati nel capitolo relativo alla libreria pyturtle, qui propongo il più semplice. Come prima, dobbiamo intanto pensare un nome da dare alla tartaruga che stiamo per creare, ad esempio tina, e dare il comando:

>>> tina = tg.Turtle()

Riassumendo:

  • tg è la libreria pygraph.pyturtle;
  • tina è una tartaruga che vive nell’ultimo piano creato: piano.

Nota

Questa versione della grafica della tartaruga è piuttosto spartana, la nostra tartaruga tina è quel triangolino che si vede al centro del piano delle tartarughe, non assomiglia affatto ad una tartaruga!

A questo punto si possono esplorare i principali comandi della geometria della tartaruga. La tartaruga tina è ora a nostra disposizione per gli esperimenti. Possiamo provare a darle qualche comando:

>>> tina.forward(100)

tina si sposta avanti di 100 passi lasciando una traccia.

>>> tina.right(90)

Non si sposta verso destra, ma ruota verso destra di 90 gradi. E per ruotare verso sinistra?

>>> tina.left(90)

Esatto! Ripetiamo ora uno spostamento e una rotazione per un po” di volte:

>>> for i in range(4):
        tina.forward(100)
        tina.right(90)

tina disegna un quadrato.

>>> tina.up()
>>> tina.back(200)
>>> tina.down()

Solleva la penna si sposta indietro di 200 passi e riappoggia la penna, in questo modo si può far muovere Tartaruga senza disegnare.

>>> tina.color = "blue"

Cambia il colore della penna.

>>> for i in range(180):
        tina.forward(80)
        tina.back(78)
        tina.left(2)

Altro disegno, questa volt blu… Spostiamo ancora tina:

>>> tina.up()
>>> tina.back(100)
>>> tina.down()

Poi cambiamo il colore della penna:

>>> tina.color = (1, 0, 0)

Si può assegnare il colore della penna in vari modi:

  • scrivendo tra virgolette il nome del colore in inglese;
  • fornendo tre numeri compresi tra 0 e 1 ragruppati in una parentesi tonda. In questo caso il primo numero indica la componente rossa, il secondo quella verde, il terzo quella blu (RGB);
  • (o in un terzo modo che è spiegato più avanti).

E ora proviamo a fare una stella con 100 raggi:

>>> for i in range(100):
        tina.forward(80)
        tina.back(80)
        tina.left(360/100)

I raggi sono proprio 100 (li ho contati!).

Dopo un po” che si fanno dei tentativi con i comandi grafici può succedere di avere la finestra grafica così piena di scarabocchi da non capirci più niente. Un altro comando fondamentale è reset. Questo è un metodo del piano della tartaruga, ripulisce la finestra grafica e rimette a posto Tartaruga:

>>> piano.reset()

Per quanto riguarda l’ultimo punto, rendere attivo il piano della tartaruga, verrà illustrato più avanti.

Gli oggetti della classe Turtle, oltre ad avere dei metodi (come forward, right, …) che corrispondono a delle azioni hanno anche degli attributi che corrispondono a delle proprietà, delle caratteristiche. Ad esempio ogni tartaruga ha un colore e uno spessore della sua penna. Ad esempio:

>>> piano.reset()
>>> tina.color = "green"
>>> tina.width = 4
>>> for i in range(20):
        tina.forward(80)
        tina.back(80)
        tina.left(360.0/20)

Riassumendo

  • Per lavorare con la grafica della tartaruga posso scrivere:

    >>> import pygraph.pyturtle as tg
    >>> tp = tg.TurtlePlane()
    >>> tina = tg.Turtle()
    

    ottengo così due oggetti: un piano delle tartarughe (tp) e una tartaruga (tina).

  • I comandi fondamentali per far muovere la tartaruga creata e disegnare qualcosa sono:

    <tartaruga>.forward(<numero>)
    <tartaruga>.back(<numero>)
    <tartaruga>.left(<numero>)
    <tartaruga>.right(<numero>)
    <tartaruga>.up()
    <tartaruga>.down()
    <piano>.reset()
    
  • Gli oggetti della classe Turtle, hanno anche diversi attributi, due di questi sono: width e color, la sintassi per modificare questi attributi è:

    <tartaruga>.width = <numero>
    <tartaruga>.color = <colore>
    
  • Gli oggetti della classe TurtlePlane, hanno anche diversi metodi, il primo che abbiamo visto è: reset, la sintassi per eseguirlo è:

    <piano>.reset()