Ecco come visualizzare il messaggio di “Vittoria” di un giocatore: semplice e testuale!
Innanzitutto bisogna aggiungere del codice che permette di creare un Font dedicato al messaggio di vittoria come di seguito descritto.
# Font per il messaggio di vittoria
victory_font_size = 70 # Cambia la dimensione del font per il messaggio di vittoria
victory_font = pygame.font.SysFont(None, victory_font_size)
Alla variabile “victory_font_size” è stato attribuito il valore settanta, che non è altro che la dimensione del Font. La riga di codice successiva crea un oggetto Font utilizzando un font di sistema predefinito con una dimensione specificata dalla variabile “victory_font_size“, e lo assegna alla variabile “victory_font“.
#Funzione per il messaggio di vittoria
def draw_victory_message(winner):
victory_color = (255, 0, 0) # Colore rosso per il messaggio di vittoria
if winner == "left":
message = "Ha vinto il giocatore 1!"
else:
message = "Ha vinto il giocatore 2!"
victory_text = victory_font.render(message, True, victory_color)
screen.blit(victory_text, (width/2 - victory_text.get_width()/2, height/2 - victory_text.get_height()/2))
Nella parte di codice di cui sopra, si definisce una funzione chiamata draw_victory_message che accetta un parametro “winner“. Questo parametro viene utilizzato per determinare quale giocatore ha vinto.
La prima riga della funzione draw_victory_message definisce una variabile “victory_color” che rappresenta una tupla RGB (Rosso, Verde, Blu). I valori della tupla (255, 0, 0) rappresentano il colore rosso.
Nella seconda riga, se la variabile “winner” è “left” viene impostata la variabile “message” uguale al valore “Ha vinto il giocatore 1!”. Se invece la variabile “winner” è “right” allora la variabile “message” viene valorizzata con la seguente stringa “Ha vinto il giocatore 2!”.
La riga victory_text = victory_font_render(message,True, victory_color) crea un’immagine del testo message usando il font definito precedentemente in victory_font (come spiegato nella tua domanda precedente). Il testo è “renderizzato” nel colore definito da “victory_color“.
La riga successiva disegna il testo “victory_text” sullo schermo. Lo posiziona al centro dello schermo utilizzando le dimensioni dello schermo (width e height) e le dimensioni dell’immagine del testo (victory_text.get_width() e victory_text.get_height()).
All’interno del ciclo While di PyGame il codice successivo aggiunge le istruzioni seguenti per visualizzare il messaggio di vittoria nella condizione di raggiungimento del punteggio.
# Controlla se uno dei giocatori ha vinto
if left_score == 3:
draw_victory_message("left")
pygame.display.flip()
pygame.time.wait(3000) # Mostra il messaggio per 3 secondi
running = False
elif right_score == 3:
draw_victory_message("right")
pygame.display.flip()
pygame.time.wait(3000) # Mostra il messaggio per 3 secondi
running = False
Il codice precedente controlla se uno dei due giocatori ha vinto. Se la variabile “left_score” è uguale a tre alla funzione draw_victory_message si passa il valore “left“. La riga successiva aggiorna l’intero schermo. In PyGame, le modifiche apportate allo schermo non sono immediatamente visibili finché non si chiama pygame.display.flip() o un metodo simile.
E’ inutile dire che il codice successivo mostra il messaggio per tre secondi. A questo punto la variabile “running” viene impostata al valore False e la partita termina. Per quanto concerne la variabile “right_score” vale quanto scritto per la variabile “left_score“.
Bene, ora, nel codice quando un giocatore avrà raggiunto il punteggio di tre verrà visualizzato un messaggio di vittoria.
Ora, il progetto di Pong sembra concluso, ma vorrei aggiungere una schermata iniziale per l’avvio della partita.
La schermata di START!
Nel codice successivo vedremo come aggiungere il pulsante di START ad una schermata iniziale.
# Impostazioni del pulsante START
button_color = (50, 205, 50) # Colore verde
button_width, button_height = 200, 80
button_rect = pygame.Rect((width - button_width) / 2, (height - button_height) / 2, button_width, button_height)
button_font = pygame.font.SysFont(None, 40)
button_text = button_font.render('START', True, (255, 255, 255)) # Testo bianco
button_text_rect = button_text.get_rect(center=button_rect.center)
Poi bisogna aggiungere rispettivamente, il codice per disegnare il pulsante start.
def draw_start_button():
pygame.draw.rect(screen, button_color, button_rect)
screen.blit(button_text, button_text_rect.topleft)
Il codice per la pressione del pulsante start.
def is_button_clicked():
mouse_pos = pygame.mouse.get_pos()
return button_rect.collidepoint(mouse_pos)
Poi la funzione per disegnare la schermata iniziale
def start_screen():
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit()
if event.type == MOUSEBUTTONDOWN and is_button_clicked():
return
screen.fill(bg_color)
draw_start_button()
pygame.display.flip()
E infine la riga che avvia la schermata iniziale.
# Mostra la schermata iniziale
start_screen()
A questo punto, il tutto diventa interessante, e quindi possiamo immaginare che quando il giocatore ha perso, dopo il messaggio di vittoria, il tutto torni alla schermata di start. Diventa interessante, aggiungere al centro dello schermo a random un muro casuale, spezzato, in cui la palla rimbalza.