Aller au contenu

Super Mario Bros en Python

Réalisez un vrai plateformer façon Mario en Pygame avec plateformes, gravité, victoire et défaite.

Dans ce mini-projet, vous allez créer un plateformer inspiré de Mario Bros :

  • un personnage qui court et saute
  • des plateformes
  • des trous
  • un objectif à atteindre

Pas besoin de refaire Mario à l’identique. Le but est de recréer les mécaniques, pas le jeu original. Vous pourrez ensuite continuer à développer le jeu plus loin de votre côté si ça vous amuse.


Objectif du projet

À la fin, votre jeu doit ressembler à un vrai plateformer :

  • un personnage contrôlable
  • de la gravité
  • des sauts
  • plusieurs plateformes
  • une chute mortelle
  • un écran de fin
  • la possibilité de rejouer
gravity
Gameplay très rudimentaire d'un mario

Règles du jeu

  • Le joueur peut aller à gauche et à droite
  • Il peut sauter uniquement s’il est au sol
  • Il tombe s’il n’y a rien sous ses pieds
  • S’il tombe dans le vide : game over
  • S’il atteint la fin du niveau : victoire

Le personnage

Vous devez avoir :

  • une position
  • une vitesse horizontale
  • une vitesse verticale
  • un rectangle (pygame.Rect)

Exemple de variables :

player_rect = pygame.Rect(100, 400, 40, 60)
velocity_y = 0
speed = 5
gravity = 0.8
jump_power = 15

Si vous voulez, vous pouvez mettre la vraie image de Mario, moi j'avoue j'avais la flemme donc j'ai juste mis un rectangle.


Les plateformes

Les plateformes sont simplement une liste de rectangles :

platforms = [
    pygame.Rect(0, 550, 800, 50),     # sol
    pygame.Rect(200, 450, 150, 20),
    pygame.Rect(450, 350, 150, 20),
]

Vous devrez :

  • les afficher
  • détecter les collisions avec le joueur

Collision avec les plateformes

Le point important : le joueur doit atterrir sur le dessus des plateformes, pas les traverser.

Exemple simple :

on_ground = False

for platform in platforms:
    if player_rect.colliderect(platform) and velocity_y >= 0:
        player_rect.bottom = platform.top
        velocity_y = 0
        on_ground = True

La chute mortelle

Si le joueur tombe trop bas, la partie est terminée.

if player_rect.top > 600:
    state = "game_over"

La victoire

Ajoutez une zone d’arrivée :

goal_rect = pygame.Rect(750, 300, 40, 60)

Si le joueur la touche :

if player_rect.colliderect(goal_rect):
    state = "win"

États du jeu

Vous devez gérer au minimum :

  • "playing"
  • "game_over"
  • "win"

Structure typique :

if state == "playing":
    # gameplay
elif state == "game_over":
    # écran de défaite
elif state == "win":
    # écran de victoire

Structure conseillée

Vous êtes libres, mais une bonne structure ressemble à :

  • main.py
  • player.py
  • settings.py

Avec :

  • une classe Player
  • des plateformes stockées dans une liste
  • une boucle de jeu claire

Contraintes techniques

Votre projet doit :

  • utiliser la gravité et le saut vus précédemment
  • utiliser des Rect pour les collisions
  • empêcher le double saut
  • empêcher le joueur de traverser les plateformes
  • utiliser un état de jeu

Conseils pour réussir

  • Commencez par un seul sol
  • Faites marcher et sauter le joueur
  • Ajoutez une seule plateforme
  • Testez
  • Ajoutez-en une autre
  • Testez
  • Ajoutez la victoire
  • Testez
  • Ajoutez la défaite
  • Testez

Ne codez jamais tout d’un coup.


Bonus (optionnels)

  • Ennemis simples
  • Collectibles (pièces)
  • Score
  • Musique (regarder la doc Pygame)
  • Animation du personnage
  • Du scrolling et une tilemap (regarder la page suivante)

En résumé

Avec ce mini-projet, vous avez mis en pratique :

  • un gameplay de plateformer complet
  • la gravité et le saut
  • les collisions avec l’environnement
  • les états de jeu
  • l’organisation d’un vrai projet

Si vous avez réussi ce projet, vous êtes désormais capable de créer des vrais jeux complets et funs, et je vous encourage vivement à continuer d'améliorer ce projet si cela vous amuse.