Tuto : gestion d’une manette en Python

Un petit tutoriel en langage Python pour gérer une manette de jeu :

Gestion des touches directionnelles

-> Ce code gère uniquement les touches directionnelles

# Macé Robotics
# Public Licence

import pygame # Importation de la bibliothèque Pygame pour gérer une manette
from time import sleep
import sys

# Initialisation de Pygame pour préparer à l'utilisation de ses modules.
pygame.init()

# Compte le nombre de manettes connectées à l'ordinateur.
joystick_count = pygame.joystick.get_count()

# Vérification si aucun joystick n'est détecté
if joystick_count == 0:
print("Erreur, pas de joystick détecté !") # Affiche un message d'erreur si aucun joystick n'est connecté.
pygame.quit() # Arrête Pygame proprement.
sys.exit() # Quitte le programme.

else:
# Si un joystick est détecté, initialisation de celui-ci.
joystick = pygame.joystick.Joystick(0) # Récupère le premier joystick (index 0).
joystick.init() # Initialise le joystick pour pouvoir l'utiliser.

# Récupération du nombre de "hat switches" (poignées de contrôle directionnelles, souvent utilisées pour la direction).
hats = joystick.get_numhats()

# Fonction pour traiter les mouvements de la "hat switch" (direction du joystick)
def getHat(number):
# Si le "hat" n'est pas en position (0,0), il a été déplacé
if joystick.get_hat(number) != (0, 0):

# Si le mouvement sur l'axe Y du "hat" est vers le haut
if joystick.get_hat(number)[1] == 1:
print("Avancer") # Afficher "Avancer" lorsque le mouvement est vers le haut.

# Si le mouvement sur l'axe Y du "hat" est vers le bas
if joystick.get_hat(number)[1] == -1:
print("reculer") # Afficher "reculer" lorsque le mouvement est vers le bas.

# Si le mouvement sur l'axe X du "hat" est vers la droite
if joystick.get_hat(number)[0] == 1:
print("tourner à droite") # Afficher "tourner à droite" lorsque le mouvement est vers la droite.

# Si le mouvement sur l'axe X du "hat" est vers la gauche
if joystick.get_hat(number)[0] == -1:
print("tourner à gauche") # Afficher "tourner à gauche" lorsque le mouvement est vers la gauche.


# Boucle principale du programme
while True:
for event in pygame.event.get(): # Écoute tous les événements (comme les mouvements du joystick).
if event.type == pygame.QUIT: # Si l'utilisateur ferme la fenêtre
pygame.quit() # Arrête Pygame proprement.
sys.exit() # Quitte le programme.

# Si le joystick a des hats (directionnels)
if hats != 0:
for i in range(hats): # Parcours chaque hat
getHat(i) # Appelle la fonction getHat pour traiter les mouvements de chaque hat.

sleep(0.1) # Petite pause pour réduire l'utilisation du processeur.

Gestion de toutes les touches

  • Gestion des 11 boutons, touche directionnelles et les deux sticks :
# Macé Robotics
# Public Licence

import pygame # Importation de la bibliothèque Pygame pour gérer une manette
from time import sleep
import sys

# Initialisation de Pygame pour préparer à l'utilisation de ses modules.
pygame.init()

# Compte le nombre de manettes connectées à l'ordinateur.
joystick_count = pygame.joystick.get_count()

# Vérification si aucun joystick n'est détecté
if joystick_count == 0:
print("Erreur, pas de joystick détecté !") # Affiche un message d'erreur si aucun joystick n'est connecté.
pygame.quit() # Arrête Pygame proprement.
sys.exit() # Quitte le programme.

else:
# Si un joystick est détecté, initialisation de celui-ci.
joystick = pygame.joystick.Joystick(0) # Récupère le premier joystick (index 0).
joystick.init() # Initialise le joystick pour pouvoir l'utiliser.

# Récupération du nombre de "hat switches" (poignées de contrôle directionnelles, souvent utilisées pour la direction).
hats = joystick.get_numhats()


buttons = joystick.get_numbuttons()

print("Manette :", joystick.get_name())
print("Axes :", joystick.get_numaxes())
print("Boutons :", joystick.get_numbuttons())
print("Hats :", joystick.get_numhats())

DEADZONE = 0.15 # zone morte pour éviter les parasites

def get_axis(axis):
value = joystick.get_axis(axis)
if abs(value) < DEADZONE:
return 0
return round(value, 2)


# Fonction pour traiter les mouvements de la "hat switch" (direction du joystick)
def getHat(number):
# Si le "hat" n'est pas en position (0,0), il a été déplacé
if joystick.get_hat(number) != (0, 0):

# Si le mouvement sur l'axe Y du "hat" est vers le haut
if joystick.get_hat(number)[1] == 1:
print("Avancer") # Afficher "Avancer" lorsque le mouvement est vers le haut.
joystick.get_button(0)

# Si le mouvement sur l'axe Y du "hat" est vers le bas
if joystick.get_hat(number)[1] == -1:
print("reculer") # Afficher "reculer" lorsque le mouvement est vers le bas.

# Si le mouvement sur l'axe X du "hat" est vers la droite
if joystick.get_hat(number)[0] == 1:
print("tourner à droite") # Afficher "tourner à droite" lorsque le mouvement est vers la droite.

# Si le mouvement sur l'axe X du "hat" est vers la gauche
if joystick.get_hat(number)[0] == -1:
print("tourner à gauche") # Afficher "tourner à gauche" lorsque le mouvement est vers la gauche.


# Boucle principale du programme
while True:
for event in pygame.event.get(): # Écoute tous les événements (comme les mouvements du joystick).
if event.type == pygame.QUIT: # Si l'utilisateur ferme la fenêtre
pygame.quit() # Arrête Pygame proprement.
sys.exit() # Quitte le programme.

# --- BOUTONS ---
if event.type == pygame.JOYBUTTONDOWN:
print(f"Bouton {event.button} RELÂCHÉ")

if event.type == pygame.JOYBUTTONUP:
print(f"Bouton {event.button} RELÂCHÉ")

# Si le joystick a des hats (touches directionnels)
if hats != 0:
for i in range(hats): # Parcours chaque hat
getHat(i) # Appelle la fonction getHat pour traiter les mouvements de chaque hat.

# Si le joystick a des hats (directionnels)
if buttons != 0:
for i in range(buttons): # Parcours chaque hat
joystick.get_button(i)


# ----- STICK GAUCHE -----
left_x = get_axis(0)
left_y = get_axis(1)

if left_x != 0 or left_y != 0:
print(f"STICK GAUCHE X:{left_x} Y:{left_y}")

# ----- STICK DROIT -----
right_x = get_axis(2)
right_y = get_axis(3)

if right_x != 0 or right_y != 0:
print(f"STICK DROIT X:{right_x} Y:{right_y}")

sleep(0.1) # Petite pause pour réduire l'utilisation du processeur.

# end of file

 

Fin