Menu
CoddyTech

Una lista di oggetti

Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 13 di 36.

Due stelle con nome non sono un cielo. Per quaranta serve un’lista: crea gli oggetti in un ciclo e aggiungi ciascuno di essi.

stars = []
for i in range(40):
    x = random.randint(0, 639)
    y = random.randint(0, 479)
    speed = random.randint(1, 3)
    stars.append(Star(x, y, speed))

Poi un ciclo li aggiorna tutti e un altro li disegna tutti:

for star in stars:
    star.update()

All’interno di for, star è ciascun oggetto a turno, quindi star.update() sposta quella stella alla propria velocità. Aggiungere altre cento stelle cambia un solo numero; il codice di aggiornamento e disegno resta uguale.

Crea la lista una sola volta, prima del ciclo di gioco. Una lista creata all’interno del ciclo è una nuova lista di nuove stelle a ogni fotogramma, tutte di nuovo al punto di partenza, quindi non si muove mai nulla.

challenge icon

Sfida

Medio
  1. Aggiungi import random all'inizio.
  2. Prima del ciclo, crea stars: una lista di 40 oggetti Star, ognuno con un valore x casuale da 0 a 639, un valore y casuale da 0 a 479 e una velocità casuale da 1 a 3.
  3. Nel ciclo, aggiorna ogni stella in stars e disegna ogni stella dopo il riempimento. Rimuovi slow e fast.

Provalo tu

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Stars")
clock = pygame.time.Clock()

class Star:
    def __init__(self, x, y, speed):
        self.x = x
        self.y = y
        self.speed = speed

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)


slow = Star(200, 0, 1)
fast = Star(440, 0, 3)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    slow.update()
    fast.update()

    screen.fill((20, 22, 40))
    slow.draw(screen)
    fast.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame