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
- Ouvre Thonny.
- Télécharge le starter via ce lien, décompresse le ZIP et ouvre
main.pydans Thonny. - Clique sur Run. Tu vois un écran statique avec un vaisseau et un fond de ciel, mais rien ne bouge encore.
- 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 = FalseDessiner 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.1BASE_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 :
- Facile : ajoute un deuxième type d’obstacle (par exemple un obstacle bleu qui vole plus haut ou plus bas).
- Moyen : ajoute des power-ups. Attrape une capsule verte pour un bouclier temporaire (le vaisseau peut être touché 1 fois).
- Difficile : fais monter et descendre le vaisseau avec les flèches et limite l’écran pour que le vaisseau ne sorte pas.
- 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.