Problème dans un code python

Fermé
Antonin - Modifié le 27 mai 2023 à 23:23
 Antonin - 29 mai 2023 à 21:19

Bonjour,

Je rencontre un probleme avec un code que j'ai fait ayant pour but d'automatiser mon farm sur un jeu.
Le code est le suivant:
 

import pyautogui
import keyboard
import time
import threading

# Coordonnées des pixels à surveiller
pixel_click_right_x = 713
pixel_click_right_y = 286

pixel_colors = {
    (832, 389): ((154, 77, 77), 4.5),    # Marron
    (690, 347): ((252, 0, 0), 0.1),      # Rouge
    (828, 387): ((126, 0, 252), 2.25),   # Violet
    (839, 386): ((0, 252, 63), 1.8),     # Vert
    (792, 387): ((252, 252, 0), 3.25),   # Jaune
    (738, 388): ((0, 126, 190), 1.25),   # Bleu
    (766, 389): ((190, 190, 190), 3.5)   # Gris
}

program_active = False

def check_pixel_color():
    global program_active

    while True:
        if program_active:
            pixel_color = pyautogui.pixel(pixel_click_right_x, pixel_click_right_y)
            for coord, (color, wait_time) in pixel_colors.items():
                if pixel_color == color:
                    time.sleep(wait_time)
                    pyautogui.click(button='right')
                    break

        time.sleep(0.1)

def toggle_program_activation():
    global program_active
    program_active = not program_active

# Écoute de la touche "N" pour activer/désactiver le programme
keyboard.on_press_key("n", lambda event: toggle_program_activation())

# Démarrage du thread pour vérifier les pixels
check_pixel_thread = threading.Thread(target=check_pixel_color)
check_pixel_thread.start()

# Boucle infinie jusqu'à ce que la touche "N" soit pressée pour arrêter le programme
while True:
    if keyboard.is_pressed("n"):
        break



Alors, à la base je voulais:

-Démarrer une boucle infini qui se lance et s'arrête en appuyant sur la touche "N". - Réaliser un click droit. -Si le pixel de coordonée (1020,480) change de couleur, le programme refera un click droit. -Si le pixel de coordonnées (832, 389) prend le code couleur suivant (154, 77, 77), attendre 4,5 secondes et appuyer sur click droit. #marron -Si le pixel de coordonnées (690, 347) prend le code couleur suivant (252, 0, 0), attendre 0,1 secondes et appuyer sur click droit. #rouge -Si le pixel de coordonnées (828, 387) prend le code couleur suivant (126, 0, 252), attendre 2,25 secondes et appuyer sur click droit. #violet -Si le pixel de coordonnées (839, 386) prend le code couleur suivant (0, 252, 63), attendre 1,8 secondes et appuyer sur click droit. #vert -Si le pixel de coordonnées (792, 387) prend le code couleur suivant (252, 252, 0), attendre 3,25 secondes et appuyer sur click droit. #jaune -Si le pixel de coordonnées (738, 388) prend le code couleur suivant (0, 126, 190), attendre 1,25 secondes et appuyer sur click droit. #bleu -Si le pixel de coordonnées (766, 389) prend le code couleur suivant (190, 190, 190), attendre 3,5 secondes et appuyer sur click droit. #gris -Finir la Boucle et la recommencer

Sauf que le programme ne fait que clicker sur click droit au lieu de clicker une seule fois sur click droit et d'attendre que les pixels spécifiques changent de couleurs afin de reclicker sur click droit.
Pouvez-vous m'aider s'il vous plait. Si je n'ai pas été assez clair, n'hésitez pas à me le dire que je me réexplique. Merci par avance.


Windows / Opera 98.0.0.0

A voir également:

3 réponses

Est-ce qu'on parle de 'N' ou 'n' ?
    if keyboard.is_pressed("n"):

Sinon, affiches quelque chose dans toggle_program_activation pour voir si tu y entres.

Quelque chose m'intrigue, où obtiens-tu les coordonnées courantes:

# Coordonnées des pixels à surveiller
pixel_click_right_x = 713
pixel_click_right_y = 286

À quoi te sert le champs  coord  si tu ne l'utilises pas?

0

Déjà merci de votre réponse^^,
Alors, je parle de "n", et le fait que le programme se lance et s'arrête lorsque j'appuie sur "n" fonctionne bien pour le coup.
Et:
pixel_click_right_x = 713
pixel_click_right_y = 286
me sert à savoir analyser lorsque ce pixel change de couleur pour faire un click mais je pensais que la fonction "check_pixel_color" se chargeait de le faire non? Sinon, comme puis-je faire en sorte que le programme réalise bien un click droit lorsque le "pixel_click_right" change de couleur?

0

Qu'est-ce qui fait que le pixel change de couleur? Il ne change pas tout seul.
Qu'est-ce qui te dit que les codes RGB seront exactement ceux que tu donnes dans ta table?

Regardes ceci:

https://pyautogui.readthedocs.io/en/latest/screenshot.html
Pour obtenir ou changer la position du curseur, retourne à la doc:
https://pyautogui.readthedocs.io/en/latest/mouse.html
.size() et .position() devraient t'aider.

0

En gros le pixel change de couleur ''tout seul'' car dans le jeu auquel ce programme m'aidera, le pixel change de couleur tout seul pour annoncer qu'il faut utiliser click droit et gagner l'item en question.
Sinon, pour les codes RGB, j'ai utilisé des captures d'écrans auquel j'ai récupérer le code RGB part paint juste après mais il est possible en effet qu'ils ne soient pas exactement les bons, donc je vais vérifier avec ce que vous m'avez donné.
D'autre part, je ne comprends toujours pas pourquoi le programme ne fait ''que'' réaliser des clicks gauche en boucle au lieu de le faire qu'une seule fois et d'attendre que le pixel change de couleur...

0
PierrotLeFou
29 mai 2023 à 18:00

Clic gauche ou clic droit?
Regardes ta boucle:
tant que l'une des couleurs est égale à celle de la position mentionnée, le code va faire des clic droit.
def check_pixel_color():
    global program_active

    while True:
        if program_active:
            pixel_color = pyautogui.pixel(pixel_click_right_x, pixel_click_right_y)   # *** toujours la mème position
            for coord, (color, wait_time) in pixel_colors.items():   # *** coord ne sert pas dans cette boucle
                if pixel_color == color:   # *** en supposant que la comparaison marche
                    time.sleep(wait_time)
                    pyautogui.click(button='right')   # ** clic droit
                    break   # *** le break est sur le for

        time.sleep(0.1)

Je te redemande à quoi sert la variable coord dans cette boucle?

0

La variable de la coordonée sert à savoir quel pixel regarder lorsqu'il changera de couleur mais il est vrai qu'en réalité, il manque totalement la partie avec le ''pixel_click'', il faudrait que je la rahoute.

0