Le choix de la base de données
Dans ce tutoriel, nous verrons comment ajouter des événements personnalisés dans PyGame, création d'événements personnalisés avec Pygame et exemples pratiques d'utilisation
En plus des événements fournis par PyGame (par exemple KEYDOWN et KEYUP), PyGame nous permet de créer nos propres événements personnalisés en fonction des besoins de notre jeu. Les événements personnalisés augmentent le contrôle et la flexibilité de notre jeu. Un événement personnalisé est un événement défini par l'utilisateur. Pygame définit les éventements comme des entiers. Un évènement doit être unique
comme le dernier événement réservé par pygame s'appelle USEREVENT, donc définir EVENEMENT_PERSONALISE = pygame.USEREVENT + 1 permet de s'assurer qu'il est unique.
Syntaxe :<nom_de_l'événement> = pygame.USEREVENT + 1
Exemple :# Ici ADDITION et SUBTRACTION est le nom de l'événement
ADDITION = pygame.USEREVENT + 1
SUBTRACTION = pygame.USEREVENT + 2
Maintenant, comment publier nos événements personnalisés une fois qu'ils sont créés ? Cela peut se faire de deux manières :
En utilisant la méthode pygame.event.post().
En utilisant la méthode pygame.time.set_timer().
On peut directement poster les événements en utilisant la méthode pygame.event.post(). La méthode ajoute l'événement à la fin des événements de la file d'attente. Afin d'exécuter cette méthode, nous devons convertir notre événement au type d'événement de Pygame afin de correspondre aux attributs de la méthode post et d'éviter les erreurs.
Syntaxe :
# Etape 1 - Convertir l'événement dans le type de données event de pygame ADD_event = pygame.event.Event(event)# nom_de_l'événement comme paramètre # Etape 2 - Poster l'événement pygame.event.post(ADD_event)
Diffuser l'événement périodiquement en utilisant les timers de PyGame. Ici, on va utiliser une autre méthode pour publier l'événement en utilisant la fonction set_timer(), qui prend deux paramètres, un nom d'événement utilisateur et un intervalle de temps en millisecondes.
Syntaxe :
# nom_de_l'événement, temps en ms # nom_de_l'événement, temps en ms pygame.time.set_timer(event, duration)
Note : Dans ce cas, on n'a pas besoin de convertir l'événement défini par l'utilisateur en un type de données d'événement PyGame.
Pour créer un écran avec des événements personnalisés, il faut tout d'abord définir les attributs de l'écran en fonction des besoins. Ensuite, créez un événement et convertissez-le en type de données d'événement PyGame. Ajoutez ensuite du code pour vos opérations qui génèreront un événement personnalisé.
Dans les exemples donnés, les deux approches ont été prises en compte.
Exemple : 📋 Copier le code
# Programme Python pour ajouter des événements personnalisés import pygame pygame.init() # Configurer l'écran et la minuterie screen = pygame.display.set_mode((500, 500)) timer = pygame.time.Clock() # Définir le titre pygame.display.set_caption('Événements personnalisés') # définir les couleurs BLANC = (255, 255, 255) ROUGE = (255, 0, 0) VERT = (0, 255, 0) BLEU = (0, 0, 255) # garder une trace de la variable active bg_active_color = BLANC screen.fill(BLANC) # événement utilisateur personnalisé pour changer de couleur CHANGE_COLOR = pygame.USEREVENT + 1 # événement utilisateur personnalisé pour gonfler/dégonfle # boîte ON_BOX = pygame.USEREVENT + 2 # création d'un Rectangle box = pygame.Rect((225, 225, 50, 50)) grow = True # envoi d'un événement pour changer de couleur # toutes les 500ms pygame.time.set_timer(CHANGE_COLOR, 500) running = True while running : # vérifie si tous les événements sont affichés # et en fonction de cela effectue les # opérations nécessaires for event in pygame.event.get() : # changement de couleur après chaque # 500ms if event.type == CHANGE_COLOR : if bg_active_color == VERT : screen.fill(VERT) bg_active_color = BLANC elif bg_active_color ==BLANC : screen.fill(BLANC) bg_active_color = VERT if event.type == ON_BOX : # pour gonfler et dégonfler la boîte if grow : box.inflate_ip(3, 3) grow = box.width < 75 else : box.inflate_ip(-3, -3) grow = box.width < 50 if event.type == pygame.QUIT : # pour quitter le programme running = False # Événement d'affichage lorsque le curseur est sur # la boîte if box.collidepoint(pygame.mouse.get_pos()) : pygame.event.post(pygame.event.Event(ON_BOX)) # Dessiner un rectangle sur l'écran pygame.draw.rect(screen, ROUGE, box) # Mise à jour de l'écran pygame.display.update() # Réglage du nombre d'images par seconde timer.tick(30) pygame.quit()
Le code crée une fenêtre Pygame, gère les événements personnalisés, change la couleur de fond toutes les 500ms, et fait gonfler/dégonfler le rectangle lorsqu'il est survolé par la souris. Enfin, il termine l'exécution de Pygame à la fermeture de la fenêtre.
Dans l'exemple ci-dessus, on a utilisé la méthode .post() pour gonfler/dégonfler la boîte lorsque le curseur se trouve en haut de la boîte et la méthode .set_timer() pour changer la couleur d'arrière-plan toutes les 500 ms.
Si vous souhaitez par exemple créer quatre événements personnalisés avec Pygame, suivez le même processus en définissant un identifiant unique pour chacun de vos événements et en créant des instances distinctes de la classe pygame.event.Event pour chacun d'eux.
Exemple : 📋 Copier le code
import pygame from pygame.locals import QUIT, USEREVENT # Définir des identifiants uniques pour vos événements personnalisés EVENEMENT_1 = USEREVENT + 1 EVENEMENT_2 = USEREVENT + 2 EVENEMENT_3 = USEREVENT + 3 EVENEMENT_4 = USEREVENT + 4 # Créer des instances d'événements personnalisés avec des paramètres evenement_1 = pygame.event.Event(EVENEMENT_1, parametre1="Valeur1", parametre2=42) evenement_2 = pygame.event.Event(EVENEMENT_2, parametre1="AutreValeur", parametre2=100) evenement_3 = pygame.event.Event(EVENEMENT_3, parametre1="EncoreUneValeur", parametre2=73) evenement_4 = pygame.event.Event(EVENEMENT_4, parametre1="DerniereValeur", parametre2=55) # Ajouter les événements à la file d'événements pygame.event.post(evenement_1) pygame.event.post(evenement_2) pygame.event.post(evenement_3) pygame.event.post(evenement_4) # Initialiser Pygame pygame.init() # Configurer la fenêtre largeur, hauteur = 800, 600 ecran = pygame.display.set_mode((largeur, hauteur)) pygame.display.set_caption("Événements personnalisés Pygame") # Boucle principale continuer = True while continuer: for event in pygame.event.get(): if event.type == QUIT: continuer = False elif event.type == EVENEMENT_1: print("Événement 1 détecté:") print("Paramètre 1:", event.parametre1) print("Paramètre 2:", event.parametre2) elif event.type == EVENEMENT_2: print("Événement 2 détecté:") print("Paramètre 1:", event.parametre1) print("Paramètre 2:", event.parametre2) elif event.type == EVENEMENT_3: print("Événement 3 détecté:") print("Paramètre 1:", event.parametre1) print("Paramètre 2:", event.parametre2) elif event.type == EVENEMENT_4: print("Événement 4 détecté:") print("Paramètre 1:", event.parametre1) print("Paramètre 2:", event.parametre2) pygame.display.flip() # Quitter Pygame pygame.quit()
Dans cet exemple, chaque événement personnalisé a ses propres identifiants (EVENEMENT_1, EVENEMENT_2, EVENEMENT_3, EVENEMENT_4) et ses propres instances avec des paramètres distincts. Vous pouvez ensuite les détecter et les traiter individuellement dans la boucle principale de votre jeu.
Voici quelques exemples pratiques d'utilisation d'événements personnalisés dans Pygame :
Changement de niveau :
Vous pourriez utiliser un événement personnalisé pour signaler un changement de niveau dans votre jeu. Par exemple, lorsque le joueur atteint un certain objectif ou porte, vous pouvez déclencher un événement personnalisé pour passer au niveau suivant.
Exemple : 📋 Copier le code
NIVEAU_SUIVANT = USEREVENT + 1 pygame.time.set_timer(NIVEAU_SUIVANT, 5000) # Déclencher l'événement toutes les 5 secondes # Dans la boucle principale for event in pygame.event.get(): if event.type == NIVEAU_SUIVANT: changer_niveau()
Système de dialogue :
Utilisez des événements personnalisés pour gérer un système de dialogue dans votre jeu. Lorsque le joueur interagit avec un personnage non-joueur, déclenchez un événement qui affiche le texte approprié à l'écran.
Exemple : 📋 Copier le code
EVENEMENT_DIALOGUE = USEREVENT + 1 # Lorsque le joueur interagit avec un NPC, déclenchez l'événement pygame.event.post(pygame.event.Event(EVENEMENT_DIALOGUE, texte="Bienvenue dans notre village!")) # Dans la boucle principale for event in pygame.event.get(): if event.type == EVENEMENT_DIALOGUE: afficher_texte_a_l_ecran(event.texte)
Gestion des power-ups :
Si votre jeu a des power-ups spéciaux, utilisez des événements personnalisés pour les activer. Par exemple, lorsque le joueur ramasse un power-up, déclenchez un événement pour améliorer temporairement les capacités du joueur.
Exemple : 📋 Copier le code
EVENEMENT_POWERUP = USEREVENT + 1 # Lorsque le joueur ramasse un power-up, déclenchez l'événement pygame.event.post(pygame.event.Event(EVENEMENT_POWERUP, type_powerup="Invincibilite")) # Dans la boucle principale for event in pygame.event.get(): if event.type == EVENEMENT_POWERUP: activer_powerup(event.type_powerup)
Gestion des événements du joueur :
Créez des événements personnalisés pour gérer les actions spécifiques du joueur, comme le saut, la tir, etc. Cela rend le code plus lisible et modulaire.
Exemple : 📋 Copier le code
EVENEMENT_SAUT = USEREVENT + 1 EVENEMENT_TIR = USEREVENT + 2 # Lorsque le joueur appuie sur la touche de saut, déclenchez l'événement pygame.event.post(pygame.event.Event(EVENEMENT_SAUT)) # Dans la boucle principale for event in pygame.event.get(): if event.type == EVENEMENT_SAUT: joueur.sauter() # Lorsque le joueur appuie sur la touche de tir, déclenchez l'événement pygame.event.post(pygame.event.Event(EVENEMENT_TIR)) # Dans la boucle principale for event in pygame.event.get(): if event.type == EVENEMENT_TIR: joueur.tirer()
En utilisant des événements personnalisés de manière judicieuse, vous pouvez rendre votre code plus modulaire, facile à comprendre et à étendre. Cela facilite également la gestion des interactions complexes dans votre jeu.