L’aggiunta del muro al centro dello schermo
Prima di tutto importiamo il modulo random aggiungendo all’inizio del nostro codice l’import corrispondente come di seguito descritto.
import pygame
import random
from pygame.locals import *
Aggiungo una lista wall_rects per la creazione del muro centrale, quello random che dovrebbe comparire nel bel mezzo di una partita.
#creazione della lista utilizzata per il muro centrare
wall_rects = []
Non resta che creare il muro al centro dello schermo con la seguente funzione.
def create_center_wall():
global wall_rects
wall_rects = []
wall_width = 5
rect_height = 30
gap_height = 20
y = 0
while y < height:
if random.random() < 0.5: # 50% probabilità di creare un gap
y += gap_height
else:
rect = pygame.Rect(width // 2 - wall_width // 2, y, wall_width, rect_height)
wall_rects.append(rect)
y += rect_height + gap_height
Il codice precedente può essere spiegato come di seguito descritto.
Si procede ad inizializzare la lista vuota “wall_rects” che conterrà i rettangoli (o segmenti del muro) che costituiranno il muro centrale. Poi, viene impostata la larghezza del muro “wall_width” a cinque pixel e l’altezza di ogni segmento del muro “rect_height” a trenta pixel. Inoltre, si imposta l’altezza del gap “gap_height” tra i segmenti del muro a venti pixel.
Infine, si inizializza la variabile “y” a 0, che rappresenterà la posizione verticale corrente durante la creazione del muro.
Passiamo alla creazione del muro. Un ciclo while viene eseguito fintanto che
y
è minore dell’altezza totale della finestra di gioco “height“. All’interno del ciclo, un numero casuale tra 0 e 1 è generato utilizzando random.random(). Se questo numero è minore di 0.5 (cioè c’è il 50% di probabilità), viene creato un gap incrementando la variabile “y” di “gap_height” pixel. Se il numero casuale è maggiore o uguale a 0.5, viene creato un rettangolo rappresentante un segmento del muro con le coordinate, la larghezza e l’altezza specificate, e viene aggiunto alla lista “wall_rects“. Dopo di che, “
y
” viene incrementato dell’altezza del rettangolo più l’altezza del gap.
Ora, è il momento di disegnare il muro centrale con la seguente funzione.
def draw_center_wall():
for rect in wall_rects:
pygame.draw.rect(screen, paddle_color, rect)
Ecco la spiegazione dettagliata del codice appena proposto, in particolare della funzione di disegno del muro centrale. La funzione draw_center_wall() esegue un ciclo
for
su ogni rettangolo nella lista “wall_rects“. Ogni “rect” nella lista rappresenta un segmento del muro centrale.
Per ogni “rect” nella lista “wall_rects“, il metodo pygame.draw.rect viene chiamato per disegnare il rettangolo sulla superficie
screen
(la finestra di gioco) usando il colore “paddle_color“. Ogni rettangolo rappresenta un segmento del muro centrale sulla schermata del gioco.
E’ prevista la comparsa del muro in modo casuale tra una partita e l’altra, per far ciò aggiungiamo alla funzione reset_game() le ultime due righe.
def reset_game():
global left_score, right_score, ball_pos, ball_x_speed
left_score = 0
right_score = 0
ball_pos = pygame.Rect(width/2, height/2, 10, 10)
ball_x_speed = 3
ball_y_speed = 3
if random.randint(1, 2) == 1:
create_center_wall()
Infine, visualizziamo il muro semplicemente aggiungendo nel ciclo while principale il seguente codice.
# disegna il muro centrale
draw_center_wall()
Tutto ciò, diventa estremamente interessante e il risultato è il seguente.
Come si vede nell’immagine precedente, ora la variante del gioco Pong è abbastanza complessa e quindi non resta che aggiungere altre funzionalità: qualche suono e un algoritmo di Machine Learning che governi il movimento del paddle di destra e inpersonifichi il giocatore due.