3: IL PRIMO PROGRAMMA

COMINCIAMO A LAVORARE

Per iniziare la nostra esplorazione di pygame avremo per prima cosa bisogno di una cartella dove salvare i nostri file: vi consiglio di creare una cartella "pygame" nella vostra cartella "Documenti", in modo da poterli salvare e ritrovare facilmente. Per editare i programmi potete usare IDLE (alla quale farò riferimento nel seguito) oppure, se la sapete usare, qualche IDE più evoluta come Wing o PyCharm. Potete digitare il codice o, per i programmi più lunghi, copiarlo e incollarlo; spesso vi chiederò, per esercizio, di fare delle modifiche.

Trovo molto utile, come metodo di lavoro, indicarvi io stesso con quale nome salvare i vostri file. Quando trovate un'indicazione come questa:

NUOVO PROGRAMMA: nome.py
fate clic in IDLE su File=>New file. Alla prima richiesta di salvataggio usate il nome che vi ho indicato: in questo modo potremo fare riferimento ai nostri vecchi programmi anche a distanza di qualche lezione, aggiornandoli man mano che impariamo cose nuove.

APRIRE UNA FINESTRA

Ora iniziamo con il primo programma:

NUOVO PROGRAMMA: finestra.py
scriviamo nell'editor di testo le seguenti righe di codice (attenti alle doppie parentesi tonde in #4):


import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))

Diamo il Run e vedremo, oltre alla consueta finestra di IDLE, una nuova finestra (che chiameremo da ora in poi la finestra di pygame): è il nostro primo passo nel mondo della grafica!

A dire il vero non è un passo tanto esaltante: la finestra è tutta nera, possiamo minimizzarla e riportarla sul desktop con il bottone in alto a destra. Se però tentiamo di chiuderla cliccando il bottone con la crocetta otterremo un errore e dovremo chiudere la finestra dell'editor per terminare il programma (oppure usare il task manager di Windows premendo Ctrl Alt Canc insieme).

Prima di continuare vediamo di analizzare quello che abbiamo scritto:

ESERCIZIO 3.1: Create finestre di altre dimensioni
SOLUZIONI

LA CAPTION ED IL COLORE

Come ho già detto il sottomodulo display di pygame raggruppa una serie di funzioni che controllano la visualizzazione della finestra principale. Aggiungiamo adesso queste righe:


import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Il mio primo programma")
screen.fill((255, 255, 255))
pygame.display.flip()

Se diamo il Run troviamo due novità: la finestra ora è bianca ed ha cambiato titolo. Vediamo perchè

Quest'ultimo procedimento potrebbe sembrarvi piuttosto seccante, ma è un comportamento voluto: se quello che disegniamo si vedesse immediatamente, nel caso di disegni piuttosto complessi il nostro occhio potrebbe percepire l'avanzare del disegno e si avrebbe il flickering (sfarfallio dello schermo). Così invece è possibile fare modifiche grafiche anche complicate e poi mostrare il risultato tutto in una sola volta, migliorando di molto la qualità video.

ANCORA SUI COLORI

A partire dalla versione 2 pygame definisce una tabella con più di 600 named colors (la trovate qui) che possono essere indicati, più facilmente, per mezzo di una string con il loro nome. Questo ci permette di scrivere, nella riga #6:


screen.fill("white")

invece di

screen.fill((255, 255, 255))

In ogni modo consiglio di esercitarsi anche con le tuple RGB (cercando di indovinare un colore a partire dai suoi 3 valori), perchè un buon programmatore di videogiochi deve conoscere bene questo modello.

Se invece siete già esperti potete usare, sempre dalla versione 2, una stringa in formato HTML "#rrggbb" o esadecimale "0xrrggbb", dove rr, gg, bb sono i valori esadecimali per il rosso, verde e blu.

ESERCIZIO 3.2: Cambiate la caption con un titolo a vostro piacimento
ESERCIZIO 3.3: Sperimentate colorando la finestra di vari colori, usando i named colors (fate riferimento al link sopra).
ESERCIZIO 3.4: Sperimentate colorando la finestra di vari colori, usando i valori RGB. Se leggete attentamente l'approfondimento sui colori, dovreste essere in grado di sapere che numeri dovete mettere per ottenere un dato colore (ad esempio: colorate la finestra di: VERDE, ROSSO, ROSSO SCURO, VIOLA, ARANCIONE).
SOLUZIONI

print() ED input()

Se cercate di usare le funzioni di Python che già conoscete, vi accorgerete che esse non scrivono sulla finestra che abbiamo creato, ma continuano a scrivere sulla finestra di IDLE. Per scrivere sulla finestra di pygame dovremo usare delle apposite funzioni di pygame stesso.

Comunque è possibile utilizzare per il momento queste funzioni per scrivere programmi "ibridi", per metà su IDLE e per metà nella finestra di pygame. Ricordate che quando diamo il run compare immediatamente la finestra di I/O di IDLE, mentre la finestra di pygame compare solo nel momento in cui chiamiamo la funzione set_mode().

Un primo semplice utilizzo è quello di far terminare il programma senza errori. Aggiungete alla fine del programma queste altre due righe:


.   .   .
input("Premi INVIO per terminare il programma")
pygame.quit()

Nella prima delle due nuove righe chiamiamo la input(), non per prendere qualche dato in ingresso, ma semplicemente per fare in modo che il programma si fermi ed attenda che premiamo INVIO (infatti il risultato della funzione non viene assegnato a nessuna variabile e va perso). Nella seconda chiamiamo la funzione quit() di pygame. La funzione quit() "spegne" tutti i moduli di pygame, chiude la finestra e ritorna al sistema operativo senza errori. Va sempre chiamata per ultima, altrimenti, come abbiamo visto, la finestra di pygame non si chiuderà correttamente. In questo modo il programma aprirà la finestra di pygame, si fermerà e la chiuderà quando premiamo INVIO (attenzione: è necessario prima cliccare sulla finestra di IDLE per renderla attiva). Va detto che questa soluzione è decisamente poco elegante, ma è provvisoria ed impareremo presto a chiudere la finestra cliccando sulla crocetta in alto a destra. Provate, per esperimento, a commentare (inserendo un # all'inizio) la riga con la input(): cosa succede?

Nei prossimi due esercizi dovete prima fornire dei dati a Python (usando la input() nella finestra di IDLE) e poi aprire la finestra di pygame in base ad essi.

ESERCIZIO 3.5: Creare un programma finestra2.py che chieda all'utente la caption da usare per la finestra. Prima di creare la finestra di pygame (con la set_mode()) il programma deve chiedere il titolo usando la funzione input() di Python (e noi la immetteremo nella finestra di IDLE), poi aprirà la finestra di pygame ed imposterà la caption immessa.
ESERCIZIO 3.6: Creare un programma finestra3.py che chieda all'utente tre numeri da 0 a 255 e colori la finestra con il colore corrispondente (simile al precedente).
Ricordate che in Python 3 per accettare in input un numero dovete scrivere num = int(input(" . . . ")) perchè input() restituisce sempre una stringa.
SOLUZIONI

Fine della lezione