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
3 – Operatori aritmetici e di assegnazione in python
8 – Errori in python
9 – Script python
10 – Scambio di variabili in python
Questa prima parte del corso è stata davvero ottima ed estremamente intuitiva. Ne ho visti tanti di corsi riguardo Pygame, ma non riuscivo ad adattarmi, e qui invece sono arrivato alla fine. A quando la seconda parte del corso? <3
Gentilissimo, grazie, spero presto di inserire tanti altri tutorial su Pygame