libri-javascript-python

Realizziamo il semplice gioco acchiappa il fantasma con pygame, utilizzando gli strumenti appresi finora.

Più avanti perfezioneremo il gioco utilizzando gli sprite e altri metodi, per il momento mi preme far vedere come, con semplici strumenti, si può realizzare il nostro giochino.


Gioco acchiappa il fantasma con pygame

Creiamo il nostro fantasma con sfondo trasparente e salviamo l’immagine con estensione .png nella cartella images.

Dopo impostiamo il colore di sfondo grigio scuro e la finestra di dimensione 800 x 600 pixel con il titolo Ghost.

Poi inseriamo l’immagine e la memorizziamo in una variabile di nome ghost.

Introduciamo due nuovi metodi convert() e convert_alpha() che trasformano il formato interno della Surface in un formato ottimizzato e più veloce per essere disegnato dalla blit().

Il metodo convert_alpha si usa con le immagini con lo sfondo trasparente, proprio come nel nostro caso.

Dopo utilizziamo il metodo get_rect() dell’oggetto Surface, per ottenere un Rect con le stesse dimensioni della Surface. Questo ci permette di utilizzare in seguito il metodo collidepoint che ci serve per verificare se abbiamo cliccato l’immagine.

Generiamo le coordinate x e y con la funzione random per generare una posizione a caso del nostro fantasma di volta in volta.

Utilizziamo il metodo Clock e impostiamo il frame rate (FPS) a 1, ovvero il numero di frame al secondo. Dunque useremo il metodo tick() come ultima istruzione del ciclo principale.

Ecco dunque il codice completo:

import pygame, sys, random

pygame.init()

GREY=(108, 108, 108)

screen=pygame.display.set_mode((800, 600))
pygame.display.set_caption('Ghost')
screen.fill(GREY)

ghost=pygame.image.load('images/fantasma.png').convert_alpha()
p=ghost.get_rect()

x=random.randint(0,700)
y=random.randint(0,500)

p.x=x
p.y=y

screen.blit(ghost,p)

FPS=1
cl=pygame.time.Clock()

while True: 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            click = event.pos
            if p.collidepoint(event.pos):
                print("Hai cliccato l\'immagine")
            else:
                print ("Hai cliccato fuori")
                
    screen.fill(GREY)

    x=random.randint(0,700)
    y=random.randint(0,500)
    p.x=x
    p.y=y
    screen.blit(ghost,p)

    pygame.display.update()
    cl.tick(FPS)

Possiamo anche generare un sistema a punti, creando una variabile che si incrementa ogni volta che si clicca sul fantasma. Ad ogni clic sul fantasma incrementiamo anche l’FPS di 0.1, in modo da rendere il clic successivo più difficile.

Ecco quindi il codice modificato:

import pygame, sys, random

pygame.init()

GREY=(108, 108, 108)

screen=pygame.display.set_mode((800, 600))
pygame.display.set_caption('Ghost')
screen.fill(GREY)

ghost=pygame.image.load('images/fantasma.png').convert_alpha()
p=ghost.get_rect()

x=random.randint(0,700)
y=random.randint(0,500)
p.x=x
p.y=y
screen.blit(ghost,p)

punti=0

FPS=1
cl=pygame.time.Clock()

while True: 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            click = event.pos
            if p.collidepoint(event.pos):
                punti+=1
                print(punti)
                FPS+=0.1
                
    screen.fill(GREY)
    x=random.randint(0,700)
    y=random.randint(0,500) 

    p.x=x
    p.y=y
    screen.blit(ghost,p)
    pygame.display.update()
    cl.tick(FPS)

Abbiamo realizzato questo semplice gioco ‘acchiappa il fantasma con pygame‘, nella prossima lezione vedremo come scrivere nella finestra, in modo da visualizzare il punteggio ottenuto.

Alcuni link utili

Indice tutorial sul linguaggio python

1 – Introduzione al linguaggio python

2 – Le variabili in python

3 – Operatori aritmetici e di assegnazione in python

4 – Stringhe in python

5 – Casting in python

6 – Input e print in python

7 – Primi esercizi in python

8 – Errori in python

9 – Script python

10 – Scambio di variabili in python