Session 8 : Cheatsheet

Arrière-plan qui défile

scroll_x = 0
speed = 4

# À chaque frame :
scroll_x -= speed
if scroll_x <= -WIDTH:
    scroll_x = 0

screen.blit(bg_image, (int(scroll_x), 0))
screen.blit(bg_image, (int(scroll_x) + WIDTH, 0))

Faire apparaître des objets par la droite

# Créer un obstacle (à droite, hors de l'écran) :
obs = pygame.Rect(WIDTH, random.randint(50, HEIGHT - 100), 30, 80)
obstacles.append(obs)

# Le déplacer vers la gauche à chaque frame :
for obs in obstacles[:]:
    obs.x -= speed
    if obs.x < -obs.width:
        obstacles.remove(obs)

Timer de spawn avec USEREVENT

SPAWN_EVENT = pygame.USEREVENT + 1
pygame.time.set_timer(SPAWN_EVENT, 1500)  # toutes les 1,5 secondes

for event in pygame.event.get():
    if event.type == SPAWN_EVENT:
        obstacles.append(pygame.Rect(WIDTH, ...))

Dessiner les vies

for i in range(lives):
    pygame.draw.rect(screen, RED, (10 + i * 25, 10, 18, 18))

Faire augmenter la vitesse

BASE_SPEED = 4
speed = BASE_SPEED + score * 0.1

# Adapter l'intervalle de spawn :
interval = max(500, 1800 - score * 30)
pygame.time.set_timer(SPAWN_EVENT, interval)

Collision avec perte de vie

if ship_rect.colliderect(obs):
    obstacles.remove(obs)
    lives -= 1
    if lives <= 0:
        running = False

Écran de game over

# Après la boucle while :
screen.fill(BLACK)
go = font.render("GAME OVER", True, RED)
screen.blit(go, (WIDTH // 2 - go.get_width() // 2, HEIGHT // 2))
pygame.display.flip()
pygame.time.wait(3000)