8. ÉTAPE 7 : Créer un Monde (Fond d'écran et Limites)


Objectif

L'élève apprend à manipuler une image de fond (background) et à contraindre le joueur pour qu'il ne sorte pas de l'écran (collisions avec les bords du monde).

Question motivante

"Le vide intersidéral, c'est pour l'espace. Comment donner l'impression que notre héros marche sur de l'herbe ou dans un donjon ?"

Concepts clés à maîtriser

  • screen.blit() pour le décor : L'ordre d'affichage est crucial (le décor d'abord, les entités après).

  • Les fonctions min() et max() : Bloquer les coordonnées du joueur entre 0 et la largeur/hauteur de l'écran.


1. Préparation (Avant la boucle)

Les élèves doivent charger une image de sol (ex: grass.png) qu'ils vont répéter ou étirer à la taille de l'écran.

Python
# ===== CHARGEMENT DU DÉCOR =====
background_img = pygame.image.load("assets/background.png").convert()
background_img = pygame.transform.scale(background_img, (WIDTH, HEIGHT))

2. Contrainte de mouvement (Dans la section DÉPLACEMENT DU JOUEUR)

On utilise max() et min() pour s'assurer que x et y restent dans les limites de WIDTH et HEIGHT.

Python
    # Limiter le joueur aux bords de l'écran
    player['x'] = max(0, min(player['x'], WIDTH - player['width']))
    player['y'] = max(0, min(player['y'], HEIGHT - player['height']))

3. Affichage (Dans la section AFFICHAGE)

Attention : Il faut dessiner le fond AVANT le reste, sinon il cachera le joueur.

Python
    # 1. Remplir le fond (ou dessiner l'image de fond)
    screen.blit(background_img, (0, 0))
    
    # 2. Dessiner les ennemis
    # ...
    
    # 3. Dessiner le joueur (en dernier pour qu'il soit "au-dessus")
    # ...

Le Défi "Générateur" :

"Au lieu d'un seul fond, pouvez-vous créer une boucle for qui dessine une petite image d'herbe de 64x64 pixels sur tout l'écran comme une grille (un dallage) ?"