[R] Détection d'un groupe de 4 pixels + click dessus

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
PsrY
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 25 juil. 2009 01:35
Status : Hors ligne

[R] Détection d'un groupe de 4 pixels + click dessus

#1

Message par PsrY »

Bonjour,

voila, je suis débutant, je suis programmeur autoit depuis... 6 jours ! ^^
donc je commençe tout juste, et j'essailais de faire un ptit bout de code, mais malheureusement je n'y arrive pas.

j'aimerais créer une petite fonction permetant de detecter un groupe de pixel et non pas seulement 1 pixel. voiçi le code :

Code : Tout sélectionner

loop()
func loop()
sleep(20)
$pixelcoord=PixelSearch ( 0,0,1280,800, $pixel1)
     if not @error Then
     loop()
     else
     PixelSearch ($pixelcoord[0], $pixelcoord[1]+1, 1280, 800, $pixel2)
                     if not @error Then
                     loop()
                     else
                     PixelSearch ($pixelcoord[0]+1, $pixelcoord[1]+1, 1280, 800, $pixel3)
                            if not @error Then
                            loop()
                            else
                            PixelSearch ($pixelcoord[0]+1, $pixelcoord[1], 1280, 800, $pixel4)
                                  if not @error Then
                                  loop()
                                  else
                                  Mouseclick("left",$pixelcoord[0],$pixelcoord[1],2)
                              EndIf
                          EndIf
                      EndIf
                  EndIf
                  EndFunc
voila, quelques idées pour faire marcher un tel bordel ? ^^ ai-je fait une erreur ? je ne la trouve pas...

j'aimerais que le groupe de 4 pixel soit détecté dans le sens inverse des aiguiles d'une montre, et que si, et uniquement si, les 4 pixels sont detectées, le programme double clique sur le 1er des pixel. voila

quand je lançe le programme, il tourne en boucle... ma seule et unique proposition, c'est que le programme s'acharne sur un pixel en boucle... (si vous voyez se que je veut dire)

merci de votre aide
Modifié en dernier par PsrY le sam. 25 juil. 2009 11:38, modifié 3 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Problème détection de plusieurs pixels

#2

Message par orax »

En fait, vous faites le contraire de ce que vous voulez : il ne cliquera que si les pixels n'ont pas été trouvés

Code : Tout sélectionner

$pixelcoord=PixelSearch ( 0,0,1280,800, $pixel1)
if not @error Then
    ; si le pixel a été détecté
    loop()
else
    ; sinon, s'il n'a pas été détecté
    PixelSearch ($pixelcoord[0], $pixelcoord[1]+1, 1280, 800, $pixel2)
    ; ...
En enlevant les "Not", peut-être que ça marchera.

Sinon essayez ça, si ça marche :

Code : Tout sélectionner

; boucle jusqu'à ce que loop() retourne quelque chose (1 en l'occurence)
Do
    Sleep(20)
Until loop()


Func loop()
    $pixelcoord = PixelSearch(0, 0, 1280, 800, $pixel1)
    If @error Then Return 0 ; si le pixel n'est pas trouvé, on sort de la fonction (et la boucle continue)

    PixelSearch($pixelcoord[0], $pixelcoord[1] + 1, 1280, 800, $pixel2)
    If @error Then Return 0

    PixelSearch($pixelcoord[0] + 1, $pixelcoord[1] + 1, 1280, 800, $pixel3)
    If @error Then Return 0

    PixelSearch($pixelcoord[0] + 1, $pixelcoord[1], 1280, 800, $pixel4)
    If @error Then Return 0

    MouseClick("left", $pixelcoord[0], $pixelcoord[1], 2)
    Return 1
EndFunc   ;==>loop
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
PsrY
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 25 juil. 2009 01:35
Status : Hors ligne

Re: [...] Problème détection de plusieurs pixels

#3

Message par PsrY »

Merci ! les deux solutions marche à merveille ! je les re-post pour les personnes qui serait intéréssées par ses codes :

Code : Tout sélectionner

$pixel1=0x41B341
$pixel2=0x41B341
$pixel3=0xD2F7FF
$pixel4=0xD5F9FF

Do
    Sleep(20)
Until loop()


Func loop()
    $pixelcoord = PixelSearch(0, 0, 1280, 800, $pixel1)
    If @error Then Return 0 ; si le pixel n'est pas trouvé, on sort de la fonction (et la boucle continue)

    PixelSearch($pixelcoord[0], $pixelcoord[1] + 1, 1280, 800, $pixel2)
    If @error Then Return 0

    PixelSearch($pixelcoord[0] + 1, $pixelcoord[1] + 1, 1280, 800, $pixel3)
    If @error Then Return 0

    PixelSearch($pixelcoord[0] + 1, $pixelcoord[1], 1280, 800, $pixel4)
    If @error Then Return 0

    MouseClick("left", $pixelcoord[0], $pixelcoord[1], 2)
    Return 1
EndFunc   ;==>loop
 
ou

Code : Tout sélectionner

$pixel1=0x41B341
$pixel2=0x41B341
$pixel3=0xD2F7FF
$pixel4=0xD5F9FF

loop()

func loop()
sleep(20)
$pixelcoord=PixelSearch ( 0,0,1280,800, $pixel1)  ;recherche de pixel1
     if @error Then
     loop() ;retour à la boucle si il n'a pas été trouvé
     else
     PixelSearch ($pixelcoord[0], $pixelcoord[1]+1, 1280, 800, $pixel2) ;recherche de pixel2 juste en dessous de pixel1
                     if @error Then
                     loop()
                     else
                     PixelSearch ($pixelcoord[0]+1, $pixelcoord[1]+1, 1280, 800, $pixel3) ;recherche de pixel3 juste a droite de pixel2
                            if @error Then
                            loop()
                            else
                            PixelSearch ($pixelcoord[0]+1, $pixelcoord[1], 1280, 800, $pixel4) recherche de pixel4 juste au dessus de pixel 3
                                  if @error Then
                                  loop()
                                  else
                                  Mouseclick("left",$pixelcoord[0],$pixelcoord[1],2) ;double click sur pixel1
                              EndIf
                          EndIf
                      EndIf
                  EndIf
                  EndFunc
 
Voila, fini les erreurs avec trop de pixel de même couleurs ^^
Voiçi le sens de détection :

pixel1*******pixel4
#***************/\
#***************#
\/**************#
pixel2#######>pixel3


merci encore,

PsrY
Répondre