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
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.pyplayer.pysettings.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
Rectpour 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.