Les menus en Pygame¶
Pour un jeu, il est souvent crucial d'expliquer ce qu’il se passe, ce qui passe le plus souvent par des interfaces en dehors du gameplay même.
Dans ce chapitre, on va voir comment ajouter :
- une interface lisible (HUD)
- des menus simples
- de la progression (score, sauvegarde)
Afficher du texte¶
Pour afficher du texte, on utilise le module font.
font = pygame.font.Font(None, 36)
Puis on crée une surface de texte :
text = font.render("Score : 10", True, (255, 255, 255))
Et on l’affiche :
screen.blit(text, (20, 20))
HUD : afficher des infos pendant le jeu¶
Un HUD (Head-Up Display) affiche des informations utiles pendant la partie.
Exemples :
- score
- vies
- temps
- niveau actuel
Exemple simple :
score_text = font.render(f"Score : {score}", True, (255, 255, 255))
screen.blit(score_text, (20, 20))
Menus simples¶
On peut créer un menu très simple avec un état de jeu :
state = "menu"
Dans la boucle :
if state == "menu":
screen.fill((20, 20, 20))
title = font.render("MON JEU", True, (255, 255, 255))
screen.blit(title, (300, 200))
Et écouter une touche pour commencer :
if keys[pygame.K_SPACE]:
state = "playing"
Boutons très basiques¶
Un bouton peut être juste :
- un rectangle
- du texte
- un clic souris
button_rect = pygame.Rect(300, 300, 200, 50)
pygame.draw.rect(screen, (100, 100, 100), button_rect)
Détecter un clic :
if event.type == pygame.MOUSEBUTTONDOWN:
if button_rect.collidepoint(event.pos):
print("Bouton cliqué")
Progression : le score¶
Un score est souvent un simple nombre :
score = 0
Par exemple :
- +1 par seconde
- +10 par ennemi
- +100 par niveau
Sauvegarder des données¶
Pour sauvegarder un score, on peut utiliser un fichier texte ou JSON.
Exemple avec JSON :
import json
data = {"best_score": 42}
with open("save.json", "w") as f:
json.dump(data, f)
Et pour le relire :
with open("save.json", "r") as f:
data = json.load(f)
best_score = data["best_score"]
Attention à bien traiter le cas où le fichier n'existe pas encore !
Exemple : score + menu + sauvegarde¶
Structure typique :
if state == "menu":
# afficher menu
elif state == "playing":
# jeu + score
elif state == "game_over":
# afficher score final
# sauvegarder si record
Quizz¶
text = font.render("Hello", True, (255, 255, 255))
screen.blit(text, (0, 0))
À quoi sert la variable `text` ?
- À stocker une chaîne de caractères
- *À stocker une surface contenant le texte à afficher
- À définir la police
- À gérer les événements clavier
> `font.render` crée une surface graphique, pas une simple string.
Exercice pratique¶
Améliorez votre jeu pour :
- Afficher un score à l’écran
- Ajouter un menu de départ
- Ajouter un écran de fin
- Sauvegarder le meilleur score
- Réafficher le record dans le menu
Bonus :
- Ajouter un bouton cliquable
- Changer la couleur d’un bouton au survol
En résumé¶
Vous savez maintenant :
- Afficher du texte avec
pygame.font - Créer un HUD simple
- Implémenter un menu avec des états
- Créer des boutons basiques
- Sauvegarder des données simples
- Donner un sentiment de progression au joueur
À partir de là, vos jeux ne sont plus juste des démos techniques, mais de vrais jeux jouables.