IHM python Cours
Interface Homme-Machine en Python avec Pygame
Durée : 1 heure
Objectif : Comprendre les bases des interfaces graphiques et du paradigme événementiel pour préparer la création d’un jeu type escape game/RPG
Introduction aux Interfaces Homme-Machine (lecture 10 min)
Qu’est-ce qu’une Interface Homme-Machine (IHM) ?
Une Interface Homme-Machine est le moyen de communication entre un utilisateur et un programme informatique. C’est tout ce qui permet à l’utilisateur d’interagir avec le logiciel et de recevoir des informations en retour.
Exemples du quotidien :
- Les applications sur smartphone (boutons, gestes tactiles)
- Les sites web (menus, formulaires, boutons)
- Les jeux vidéo (interfaces de jeu, menus)
- Les logiciels de bureautique (barres d’outils, fenêtres)
Les deux grands types d’interfaces
CLI - Command Line Interface (Interface en ligne de commande)
- L’utilisateur tape des commandes textuelles
- Le programme répond avec du texte
- Exemple : le terminal, les programmes Python simples avec
input()
Avantages : Simple à programmer, précis, rapide pour les utilisateurs expérimentés
Inconvénients : Peu intuitif, courbe d’apprentissage élevée
GUI - Graphical User Interface (Interface graphique)
- L’utilisateur interagit avec des éléments visuels (boutons, images, icônes)
- Le programme répond visuellement
- Exemple : les jeux vidéo, les applications modernes
Avantages : Intuitif, accessible, visuellement attractif
Inconvénients : Plus complexe à programmer
Le paradigme événementiel (lecture 15 min)
Du séquentiel à l’événementiel
Programmation séquentielle (ce que vous connaissez)
Le programme s’exécute ligne par ligne, de haut en bas, de manière prévisible.
Le programme se termine après la dernière ligne.
Programmation événementielle (nouveau paradigme)
Le programme reste en attente et réagit aux actions de l’utilisateur.
Le programme ne se termine que lorsque l’utilisateur décide de le fermer.
Les événements
Un événement est une action effectuée par l’utilisateur (ou par le système) que le programme peut détecter et traiter.
Types d’événements courants :
MOUSEBUTTONDOWN: L’utilisateur clique avec la sourisMOUSEBUTTONUP: L’utilisateur relâche le bouton de la sourisMOUSEMOTION: L’utilisateur déplace la sourisKEYDOWN: L’utilisateur appuie sur une touche du clavierKEYUP: L’utilisateur relâche une toucheQUIT: L’utilisateur ferme la fenêtre
Schéma de la boucle événementielle
Introduction à Pygame (lecture 20 min)
Pourquoi Pygame ?
Pygame est une bibliothèque Python spécialement conçue pour créer des jeux 2D et des applications graphiques interactives.
Avantages :
- Facile à apprendre pour les débutants
- Gestion simplifiée des graphismes, sons et événements
- Grande communauté et nombreux tutoriels
- Idéal pour des jeux 2D, prototypes et projets éducatifs
Installation :
Structure minimale d’un programme Pygame
Voici le squelette de base que vous utiliserez pour tous vos projets Pygame :
Explication détaillée des éléments clés
Initialisation de Pygame
Cette ligne initialise tous les modules de Pygame. Elle doit toujours être appelée au début.
Création de la fenêtre
Crée une fenêtre de dimensions LARGEUR × HAUTEUR pixels. L’objet screen représente la surface d’affichage principale.
exemple: pygame.display.set_mode((600, 600))
L’horloge
L’horloge contrôle la vitesse du jeu. clock.tick(60) limite le programme à 60 images par seconde (FPS), rendant le jeu fluide et cohérent sur différentes machines.
La boucle de jeu
C’est le cœur du programme. Tant que running est True, le programme continue. Cette boucle s’exécute environ 60 fois par seconde.
Gestion des événements
pygame.event.get() récupère tous les événements qui se sont produits depuis la dernière itération. On parcourt cette liste et on réagit selon le type d’événement.
D’autres evenements utiles:
Remplissage de l’écran
Efface l’écran en le remplissant d’une couleur. Les couleurs en Pygame sont des tuples RGB : (Rouge, Vert, Bleu) avec des valeurs de 0 à 255.
Exemples :
(0, 0, 0)= noir(255, 255, 255)= blanc(255, 0, 0)= rouge(0, 255, 0)= vert(0, 0, 255)= bleu
Rafraîchissement de l’affichage
Met à jour tout l’écran avec ce qui a été dessiné. Sans cette ligne, rien ne s’affichera !
Exemple complet n°1: Fenêtre avec changement de couleur au clic
Exercice mental : Que se passe-t-il si vous cliquez plusieurs fois?
Éléments pour votre projet (lecture 10 min)
Pour créer votre escape game/RPG, vous aurez besoin de maîtriser ces éléments :
Afficher une image de fond
Note importante : Le système de coordonnées dans Pygame :
Le point (0, 0) est en haut à gauche de l’écran !
Afficher une image à une certaine position
- placer une figure rectangle
La fonction pygame.draw.rect(screen, color, (x, y, width, height)) dessine un rectangle. (x, y, width, height) est un tuple Python.
x et y sont les coordonnées du coin supérieur gauche. width et height sont la largeur et la hauteur du rectangle:
Exemple complet n°2
- placer une image rectangle (porte)
Pour cet exemple, télécharger les images:
Exemple complet n°3
Détecter un clic sur une zone précise
cliquer:
relacher:
Exemple complet n°4
Exercice 1: Créer un programme complet qui permet de changer la couleur de la porte lorsque l’on clique sur celle-ci (et que l’on maintient appuyé), mais qui remet la première couleur lorsque l’on relâche le bouton:
Exercice 2: Créer un programme qui permet de changer la couleur de la porte lorsque l’on clique sur celle-ci. Il faudra à nouveau cliquer sur la porte pour retrouver la couleur d’origine.
Detecter un clic sur un objet
Méthode : Utilisez pygame.Rect pour créer un calque rectangle:
- Utiliser ce calque sur une image Il faut appliquer le calque sur l’image, qui aura les mêmes dimensions que celle-ci:
Ce calque est alors cliquable:
Exemple complet n°5:
Exercice 1: On dispose de 2 images d’une même porte, aux contours différents. Créer un programme complet qui permet de changer l’image de la porte lorsque l’on clique sur celle-ci (et que l’on maintient appuyé), mais qui remet la première image lorsque l’on relâche le bouton:
Exercice 2: Créer un programme qui permet de changer l’image de la porte lorsque l’on clique sur celle-ci. Il faudra à nouveau cliquer sur la porte pour retrouver l’image d’origine.
Afficher du texte
- Première étape: utiliser le module font. On créé un objet
pygame.font, pour lequel on choisit une police de caractères (par defaut, laisserNone) et une taille pour cette police:
- il faut créer une surface sur laquelle on écrit, à l’aide de la fonction
render:
Exemple:
L’anticrénelage ou anti-aliasing, ou lissage des obliques ou encore lissage de police, est une méthode permettant d’éviter le crénelage.
- Troisième étape: Afficher et positionner la surface avec la fonction
blit:
au final:
Exemple complet n°6:
Remarques:
- Chaque fois que le texte change, il faudra créer une nouvelle surface à placer sur l’ancienne.
- Pour changer de ligne, on ne pourra pas utiliser le symbole “
\n”. Il faudra créer une nouvelle surface pour chaque ligne, et la positionner de manière correcte.
Exercice: Ecrire un programme qui affiche les 2 lignes comme ci-dessus.
Detecter l’appui sur une touche du clavier
Pour detecter l’appui sur la touche "h" du clavier, on utilisera la séquence d’instruction suivantes:
(à placer dans la zone de gestion des évènements)
3. Testez progressivement
- D’abord : affichez juste la fenêtre et l’image de fond
- Ensuite : ajoutez la détection de clic sur une zone
- Puis : ajoutez l’affichage de texte
- Enfin : ajoutez les boutons et la logique du jeu
4. Utilisez des commentaires et des constantes
Structure de base pour votre TP
Récapitulatif des concepts clés
✅ IHM : Moyen de communication entre l’utilisateur et le programme
✅ Paradigme événementiel : Le programme attend et réagit aux actions
✅ Boucle de jeu : Cœur du programme, s’exécute en continu
✅ Événements : Actions détectables (clics, touches, etc.)
✅ Pygame : Bibliothèque pour créer des jeux 2D en Python
✅ Structure : Init → Boucle (événements → logique → affichage) → Quit
Ressources utiles
- Documentation officielle Pygame : https://www.pygame.org/docs/
- Tutoriels vidéo : recherchez “Pygame tutorial” sur YouTube
- Exemples de code : https://github.com/pygame/pygame/tree/main/examples
- Chargement des images, format et transparence: https://zestedesavoir.com