Ma nel gioco, non deve essere visualizzato un punteggio?
A questo punto vorrei aggiungere il punteggio dei due giocatori nella parte alta dello schermo. Vince, chi raggiunge per primo il punteggio di tre.
Per far questo bisogna, aggiungere due variabili “left_score” e “right_score” relative al punteggio del giocatore come di seguito descritto.
# Punteggi dei giocatori
left_score = 0
right_score = 0
Successivamente si scrive la funzione draw_score per disegnare il punteggio come di seguito descritto.
# Funzione per disegnare il punteggio
def draw_score():
score_color = (0, 0, 0) # Colore nero
left_text = font.render(str(left_score), True, score_color)
right_text = font.render(str(right_score), True, score_color)
screen.blit(left_text, (width/4 - left_text.get_width()/2, 10))
screen.blit(right_text, (3*width/4 - right_text.get_width()/2, 10))
In particolare, il codice presente nel box precedente definisce la funzione draw_score a cui non viene passato nessun argomento, e serve esclusivamente per disegnare il punteggio sullo schermo.
Alla variabile “score_color” viene attribuita una tupla RGB (0,0,0,) che rappresenta il colore nero. Nelle righe successive si definiscono due oggetti font “left_text” e “right_text” che creano due superfici contenenti il testo del punteggio. La funzione render presente nell’oggetto font converte i punteggi in immagini del testo.
Nelle righe successive si utilizza la funzione blit per disegnare un immagine sull’altra. In questo caso i punteggio devono essere disegnati sopra alla schermo. La posizione dei punteggi è definita come descritto nelle due righe di codice, sia per il punteggio di destra che per quello di sinistra.
A questo punto, per completare il tutto, si aggiorna il punteggio se la palla oltrepassa i bordi orizzontali con il seguente codice. In particolare si verifica se il lato sinistro della palla “ball_pos.left” ha superato il bordo sinistro dello schermo (posizione 0 sull’asse orizzontale). Come già indicato “ball_pos” rappresenta la posizione della palla.
Se la palla supera il bordo sinistro allora incrementa il punteggio del giocatore di destra. Questo lo si traduce aumentando di 1 il valore della variabile right_score. Quindi, viene “resettata” la posizione della palla “ball.pos.x” nella posizione orizzontale corrispondente al centro dello schermo e si inverte la direzione della palla nella riga specificando il valore -ball_x_speed.
# Aggiorna il punteggio se la palla va oltre i bordi orizzontali
if ball_pos.left <= 0:
right_score += 1
ball_pos.x = width/2 # Reset della posizione della palla
ball_x_speed = -ball_x_speed # Reset della direzione della palla
if ball_pos.right >= width:
left_score += 1
ball_pos.x = width/2
ball_x_speed = -ball_x_speed
Allo stesso modo si procede se la palla ha superato il bordo destro dello schermo.
Infine, si controlla se il giocatore ha vinto con il seguente codice. Se la variabile left_score = tre ha vinto il giocatore di sinistra, al contrario quello di destra se la variabile right_score uguale a tre. Il gioco si interrompe attribuendo alla variabile “running” il valore False.
# Controlla se uno dei giocatori ha vinto
if left_score == 3 or right_score == 3:
running = False
A questo punto, abbiamo creato in Pong Variant la visualizzazione dei punteggi.
Ora, che abbiamo anche il punteggio, bisognerebbe visualizzare un messaggio di vittoria nel momento in cui uno dei due giocatore ha raggiunto il punteggio di tre.