Session 8 : Sky Highway

Ton vaisseau vole dans une route aérienne sans fin. L’arrière-plan défile derrière toi, des obstacles rouges arrivent par la droite, et des étoiles rapportent des points. Plus tu survis longtemps, plus ça va vite !

Ce que tu vas apprendre aujourd’hui

  • Faire un arrière-plan qui défile avec une variable scroll_x
  • Faire apparaître des objets qui vont de droite à gauche
  • La détection de collision avec des vies
  • L’augmentation de la difficulté : accélérer à mesure que le score monte

Étape 0 : Installation

  1. Ouvre Thonny.
  2. Télécharge le starter via ce lien, décompresse le ZIP et ouvre main.py dans Thonny.
  3. Clique sur Run. Tu vois un écran statique avec un vaisseau et un fond de ciel, mais rien ne bouge encore.
  4. Des problèmes ? Demande à un coach.

Étape 1 : Faire défiler l’arrière-plan

Un arrière-plan qui défile donne l’illusion du mouvement. On dessine l’arrière-plan deux fois côte à côte et on décale la position à chaque frame.

Cherche # ÉTAPE 1 et ajoute :

# Décaler l'arrière-plan vers la gauche
scroll_x -= speed
if scroll_x <= -WIDTH:
    scroll_x = 0

# Dessiner l'arrière-plan deux fois
screen.blit(bg_image, (int(scroll_x), 0))
screen.blit(bg_image, (int(scroll_x) + WIDTH, 0))

scroll_x commence à 0 et diminue à chaque frame. Quand il atteint -WIDTH, on revient à 0 : une boucle sans couture.

Clique sur Run. Le ciel défile maintenant derrière ton vaisseau !

Étape 2 : ✅ Basic : obstacles et vies

Les obstacles arrivent par la droite et vont vers la gauche. Si tu les touches, tu perds une vie.

Mettre les obstacles à jour (cherche # ÉTAPE 2) :

for obs in obstacles[:]:
    obs.x -= speed
    if obs.x < -obs.width:
        obstacles.remove(obs)
    pygame.draw.rect(screen, RED, obs)
    # Collision
    if ship_rect.colliderect(obs):
        obstacles.remove(obs)
        lives -= 1
        if lives <= 0:
            running = False

Dessiner les vies :

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

Faire apparaître des obstacles (dans l’événement du timer de spawn) :

h = random.randint(40, 120)
obstacles.append(pygame.Rect(WIDTH, random.randint(50, HEIGHT - h - 50), 30, h))

Étape 3 : ⭐ Stretch : ramasser les étoiles

Les étoiles rapportent des points et disparaissent quand tu les touches.

Cherche # ÉTAPE 3 :

for star in stars[:]:
    star.x -= speed
    if star.x < -20:
        stars.remove(star)
        continue
    pygame.draw.circle(screen, YELLOW, star.center, 10)
    if ship_rect.colliderect(star):
        stars.remove(star)
        score += 1

# Dessiner le score :
score_surf = font.render(f"Score : {score}", True, WHITE)
screen.blit(score_surf, (WIDTH - 120, 10))

Faire apparaître des étoiles (dans le même timer de spawn, mais moins souvent) :

if random.random() < 0.4:
    stars.append(pygame.Rect(WIDTH, random.randint(40, HEIGHT - 40), 20, 20))

Étape 4 : 🔥 Expert : spawn et vitesse qui augmente

Maintenant tu rends le jeu de plus en plus difficile à mesure que le score monte.

Faire augmenter la vitesse (cherche # ÉTAPE 4) :

speed = BASE_SPEED + score * 0.1

BASE_SPEED = 4 est déjà en haut du fichier. À un score de 20, tout va deux fois plus vite !

Adapter l’intervalle de spawn : plus le score est haut, plus les nouveaux obstacles arrivent souvent :

spawn_interval = max(500, 1800 - score * 30)  # min. 500ms
pygame.time.set_timer(SPAWN_EVENT, spawn_interval)

Écran de game over :

if not running:
    go_surf = font.render("GAME OVER", True, RED)
    screen.blit(go_surf, (WIDTH // 2 - go_surf.get_width() // 2, HEIGHT // 2 - 30))
    sc_surf = font.render(f"Score : {score}", True, WHITE)
    screen.blit(sc_surf, (WIDTH // 2 - sc_surf.get_width() // 2, HEIGHT // 2 + 10))
    pygame.display.flip()
    pygame.time.wait(3000)

Showcase

Montre ton jeu à un coach et à un buddy. Qui fait le meilleur score ?

À la prochaine !

« La prochaine fois : un boss qui se défend, en TROIS phases. »

À emporter chez toi

Essaie une de ces extensions à la maison :

  1. Facile : ajoute un deuxième type d’obstacle (par exemple un obstacle bleu qui vole plus haut ou plus bas).
  2. Moyen : ajoute des power-ups. Attrape une capsule verte pour un bouclier temporaire (le vaisseau peut être touché 1 fois).
  3. Difficile : fais monter et descendre le vaisseau avec les flèches et limite l’écran pour que le vaisseau ne sorte pas.
  4. Très difficile : ajoute du parallax scrolling : une deuxième couche d’arrière-plan (des nuages) qui défile plus lentement que la première.

Bloqué ? Demande au dojo suivant à un coach, ou essaie simplement autre chose. Programmer, c’est faire.


Dojo Defender : ta propre version

Aujourd’hui, tu continues aussi à travailler sur Dojo Defender — mais sans instructions pas à pas. C’est toi qui choisis ce que tu construis.

Télécharge le starter Dojo Defender — c’est le jeu complet avec tout dedans (vaisseau, ennemis, astéroïdes, vagues, boss). Choisis une feature dans la liste, planifie-la rapidement avec un coach, et lance-toi.

👉 Tout sur Dojo Defender se trouve sur la page Dojo Defender.


Regarde le cheatsheet de cette session