{"id":3498,"date":"2025-12-24T11:59:41","date_gmt":"2025-12-24T10:59:41","guid":{"rendered":"https:\/\/www.macerobotics.com\/?p=3498"},"modified":"2026-02-05T14:47:46","modified_gmt":"2026-02-05T13:47:46","slug":"tuto-gestion-dune-manette-en-python","status":"publish","type":"post","link":"http:\/\/www.macerobotics.com\/?p=3498","title":{"rendered":"Tuto : gestion d&#8217;une manette en Python"},"content":{"rendered":"<p>Un petit tutoriel en langage Python pour g\u00e9rer une manette de jeu :<\/p>\n<p><a href=\"http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3581 aligncenter\" src=\"http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3.jpg\" alt=\"\" width=\"678\" height=\"416\" srcset=\"http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3.jpg 1232w, http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3-300x184.jpg 300w, http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3-1024x629.jpg 1024w, http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3-768x472.jpg 768w, http:\/\/www.macerobotics.com\/wp-content\/uploads\/2025\/12\/manettePS3-600x369.jpg 600w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<h1>Gestion des touches directionnelles<\/h1>\n<p>-&gt; Ce code g\u00e8re uniquement les touches directionnelles<\/p>\n<div class=\"code-embed-wrapper\"> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\"># Mac\u00e9 Robotics<br\/># Public Licence<br\/><br\/>import pygame  # Importation de la biblioth\u00e8que Pygame pour g\u00e9rer une manette<br\/>from time import sleep  <br\/>import sys  <br\/><br\/># Initialisation de Pygame pour pr\u00e9parer \u00e0 l&#039;utilisation de ses modules.<br\/>pygame.init()<br\/><br\/># Compte le nombre de manettes connect\u00e9es \u00e0 l&#039;ordinateur.<br\/>joystick_count = pygame.joystick.get_count()  <br\/><br\/># V\u00e9rification si aucun joystick n&#039;est d\u00e9tect\u00e9<br\/>if joystick_count == 0:<br\/>    print(&quot;Erreur, pas de joystick d\u00e9tect\u00e9 !&quot;)  # Affiche un message d&#039;erreur si aucun joystick n&#039;est connect\u00e9.<br\/>    pygame.quit()  # Arr\u00eate Pygame proprement.<br\/>    sys.exit()  # Quitte le programme.<br\/><br\/>else:<br\/>    # Si un joystick est d\u00e9tect\u00e9, initialisation de celui-ci.<br\/>    joystick = pygame.joystick.Joystick(0)  # R\u00e9cup\u00e8re le premier joystick (index 0).<br\/>    joystick.init()  # Initialise le joystick pour pouvoir l&#039;utiliser.<br\/><br\/># R\u00e9cup\u00e9ration du nombre de &quot;hat switches&quot; (poign\u00e9es de contr\u00f4le directionnelles, souvent utilis\u00e9es pour la direction).<br\/>hats = joystick.get_numhats()<br\/><br\/># Fonction pour traiter les mouvements de la &quot;hat switch&quot; (direction du joystick)<br\/>def getHat(number):<br\/>    # Si le &quot;hat&quot; n&#039;est pas en position (0,0), il a \u00e9t\u00e9 d\u00e9plac\u00e9<br\/>    if joystick.get_hat(number) != (0, 0):<br\/><br\/>        # Si le mouvement sur l&#039;axe Y du &quot;hat&quot; est vers le haut<br\/>        if joystick.get_hat(number)[1] == 1:<br\/>            print(&quot;Avancer&quot;)  # Afficher &quot;Avancer&quot; lorsque le mouvement est vers le haut.<br\/>        <br\/>        # Si le mouvement sur l&#039;axe Y du &quot;hat&quot; est vers le bas<br\/>        if joystick.get_hat(number)[1] == -1:<br\/>            print(&quot;reculer&quot;)  # Afficher &quot;reculer&quot; lorsque le mouvement est vers le bas.<br\/>        <br\/>        # Si le mouvement sur l&#039;axe X du &quot;hat&quot; est vers la droite<br\/>        if joystick.get_hat(number)[0] == 1:<br\/>            print(&quot;tourner \u00e0 droite&quot;)  # Afficher &quot;tourner \u00e0 droite&quot; lorsque le mouvement est vers la droite.<br\/>        <br\/>        # Si le mouvement sur l&#039;axe X du &quot;hat&quot; est vers la gauche<br\/>        if joystick.get_hat(number)[0] == -1:<br\/>            print(&quot;tourner \u00e0 gauche&quot;)  # Afficher &quot;tourner \u00e0 gauche&quot; lorsque le mouvement est vers la gauche.<br\/><br\/><br\/># Boucle principale du programme<br\/>while True:<br\/>    for event in pygame.event.get():  # \u00c9coute tous les \u00e9v\u00e9nements (comme les mouvements du joystick).<br\/>        if event.type == pygame.QUIT:  # Si l&#039;utilisateur ferme la fen\u00eatre<br\/>            pygame.quit()  # Arr\u00eate Pygame proprement.<br\/>            sys.exit()  # Quitte le programme.<br\/><br\/>    # Si le joystick a des hats (directionnels)<br\/>    if hats != 0:<br\/>        for i in range(hats):  # Parcours chaque hat <br\/>            getHat(i)  # Appelle la fonction getHat pour traiter les mouvements de chaque hat.<br\/>    <br\/>    sleep(0.1)  # Petite pause pour r\u00e9duire l&#039;utilisation du processeur.<\/code><\/pre> <div class=\"code-embed-infos\"> <\/div> <\/div>\n<h1>Gestion de toutes les touches<\/h1>\n<ul>\n<li>Gestion des 11 boutons, touche directionnelles et les deux sticks :<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\"># Mac\u00e9 Robotics<br\/># Public Licence<br\/><br\/>import pygame  # Importation de la biblioth\u00e8que Pygame pour g\u00e9rer une manette<br\/>from time import sleep  <br\/>import sys  <br\/><br\/># Initialisation de Pygame pour pr\u00e9parer \u00e0 l&#039;utilisation de ses modules.<br\/>pygame.init()<br\/><br\/># Compte le nombre de manettes connect\u00e9es \u00e0 l&#039;ordinateur.<br\/>joystick_count = pygame.joystick.get_count()  <br\/><br\/># V\u00e9rification si aucun joystick n&#039;est d\u00e9tect\u00e9<br\/>if joystick_count == 0:<br\/>    print(&quot;Erreur, pas de joystick d\u00e9tect\u00e9 !&quot;)  # Affiche un message d&#039;erreur si aucun joystick n&#039;est connect\u00e9.<br\/>    pygame.quit()  # Arr\u00eate Pygame proprement.<br\/>    sys.exit()  # Quitte le programme.<br\/><br\/>else:<br\/>    # Si un joystick est d\u00e9tect\u00e9, initialisation de celui-ci.<br\/>    joystick = pygame.joystick.Joystick(0)  # R\u00e9cup\u00e8re le premier joystick (index 0).<br\/>    joystick.init()  # Initialise le joystick pour pouvoir l&#039;utiliser.<br\/><br\/># R\u00e9cup\u00e9ration du nombre de &quot;hat switches&quot; (poign\u00e9es de contr\u00f4le directionnelles, souvent utilis\u00e9es pour la direction).<br\/>hats = joystick.get_numhats()<br\/><br\/><br\/>buttons = joystick.get_numbuttons()<br\/><br\/>print(&quot;Manette :&quot;, joystick.get_name())<br\/>print(&quot;Axes :&quot;, joystick.get_numaxes())<br\/>print(&quot;Boutons :&quot;, joystick.get_numbuttons())<br\/>print(&quot;Hats :&quot;, joystick.get_numhats())<br\/><br\/>DEADZONE = 0.15  # zone morte pour \u00e9viter les parasites<br\/><br\/>def get_axis(axis):<br\/>    value = joystick.get_axis(axis)<br\/>    if abs(value) &lt; DEADZONE:<br\/>        return 0<br\/>    return round(value, 2)<br\/><br\/><br\/># Fonction pour traiter les mouvements de la &quot;hat switch&quot; (direction du joystick)<br\/>def getHat(number):<br\/>    # Si le &quot;hat&quot; n&#039;est pas en position (0,0), il a \u00e9t\u00e9 d\u00e9plac\u00e9<br\/>    if joystick.get_hat(number) != (0, 0):<br\/><br\/>        # Si le mouvement sur l&#039;axe Y du &quot;hat&quot; est vers le haut<br\/>        if joystick.get_hat(number)[1] == 1:<br\/>            print(&quot;Avancer&quot;)  # Afficher &quot;Avancer&quot; lorsque le mouvement est vers le haut.<br\/>            joystick.get_button(0)  <br\/>        <br\/>        # Si le mouvement sur l&#039;axe Y du &quot;hat&quot; est vers le bas<br\/>        if joystick.get_hat(number)[1] == -1:<br\/>            print(&quot;reculer&quot;)  # Afficher &quot;reculer&quot; lorsque le mouvement est vers le bas.<br\/>        <br\/>        # Si le mouvement sur l&#039;axe X du &quot;hat&quot; est vers la droite<br\/>        if joystick.get_hat(number)[0] == 1:<br\/>            print(&quot;tourner \u00e0 droite&quot;)  # Afficher &quot;tourner \u00e0 droite&quot; lorsque le mouvement est vers la droite.<br\/>        <br\/>        # Si le mouvement sur l&#039;axe X du &quot;hat&quot; est vers la gauche<br\/>        if joystick.get_hat(number)[0] == -1:<br\/>            print(&quot;tourner \u00e0 gauche&quot;)  # Afficher &quot;tourner \u00e0 gauche&quot; lorsque le mouvement est vers la gauche.<br\/><br\/><br\/># Boucle principale du programme<br\/>while True:<br\/>    for event in pygame.event.get():  # \u00c9coute tous les \u00e9v\u00e9nements (comme les mouvements du joystick).<br\/>        if event.type == pygame.QUIT:  # Si l&#039;utilisateur ferme la fen\u00eatre<br\/>            pygame.quit()  # Arr\u00eate Pygame proprement.<br\/>            sys.exit()  # Quitte le programme.<br\/><br\/>        # --- BOUTONS ---<br\/>        if event.type == pygame.JOYBUTTONDOWN:<br\/>            print(f&quot;Bouton {event.button} REL\u00c2CH\u00c9&quot;)<br\/><br\/>        if event.type == pygame.JOYBUTTONUP:<br\/>            print(f&quot;Bouton {event.button} REL\u00c2CH\u00c9&quot;)<br\/>      <br\/>    # Si le joystick a des hats (touches directionnels)<br\/>    if hats != 0:<br\/>        for i in range(hats):  # Parcours chaque hat <br\/>            getHat(i)  # Appelle la fonction getHat pour traiter les mouvements de chaque hat.<br\/><br\/>    # Si le joystick a des hats (directionnels)<br\/>    if buttons != 0:<br\/>        for i in range(buttons):  # Parcours chaque hat <br\/>            joystick.get_button(i)  <br\/><br\/><br\/>    # ----- STICK GAUCHE -----<br\/>    left_x = get_axis(0)<br\/>    left_y = get_axis(1)<br\/><br\/>    if left_x != 0 or left_y != 0:<br\/>        print(f&quot;STICK GAUCHE X:{left_x} Y:{left_y}&quot;)<br\/><br\/>    # ----- STICK DROIT -----<br\/>    right_x = get_axis(2)<br\/>    right_y = get_axis(3)<br\/><br\/>    if right_x != 0 or right_y != 0:<br\/>        print(f&quot;STICK DROIT X:{right_x} Y:{right_y}&quot;)<br\/><br\/>    sleep(0.1)  # Petite pause pour r\u00e9duire l&#039;utilisation du processeur.<br\/><br\/># end of file<\/code><\/pre> <div class=\"code-embed-infos\"> <\/div> <\/div>\n<p>&nbsp;<\/p>\n<p>Fin<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un petit tutoriel en langage Python pour g\u00e9rer une manette de jeu : Gestion des touches directionnelles -&gt; Ce code g\u00e8re uniquement les touches directionnelles Gestion de toutes les touches Gestion des 11 boutons, touche directionnelles et les deux sticks : &nbsp; Fin<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3498","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts\/3498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3498"}],"version-history":[{"count":5,"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts\/3498\/revisions"}],"predecessor-version":[{"id":3584,"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts\/3498\/revisions\/3584"}],"wp:attachment":[{"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3498"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}