pixelsearch EN LANGAGE C !!!

Quelques petits tutoriels pour améliorer vos bots

Modérateurs: anonyme.perso, Lorrio

pixelsearch EN LANGAGE C !!!

Messagede Lorrio le Sam 16 Aoû 2008 21:35

Bon voila, je constate que mon ancien post a été supprimé donc obligé de le refaire,...

ça fait chié, j'avais fais un bon tuto.

Alors on reprend.

Vous êtes fan d'autoit, et vous être en train de passé au langage C mais vous vous demmander bien ou est passer votre fonction pixelsearch ?
Réponse : à ma connaissance, celle-ci n'existe pas.

Oula, j'imagine déjà vos têtes : "trahison ! comment vais-je faire ???"

Heureusement pour vous, Lorrio est là et vous a mâché le travail en vous faisant une superbe fonction !

Voici sont protocol : void pixelsearch(int *x , int *y , int hx , int hy , int bx , int by, char txtt[7])

Oula, c'est bien beau tout ça, mais comment que je m'en sert moi ?

Bon, pour faire simple, je fais cela à travert un exemple :

main()
{
int x,y;

system("pause");

pixelsearch(&x , &y , 0 , 0 , 1024 , 768, "FFC0FF");

SetCursorPos(x,y);

system("pause");
}


1.
On déclare 2 variables de type int (je trouve que c'est bien de mettre x et y car cela correspond au coordonnées cartésiennes).
On envoi l'adresse de ces 2 variables à la fonction afin que celle-ci puisse les modifier. Comment envoyer une adresse ? Placer un & devant.

2.
On envoi la zone de recherche : coordonnée cartésienne du début de la recherche (soit en haut à gauche, ici (0;0) soit le bord haut gauche de notre écran) puis les coordonnée de la fin. (vous noterais que je me suis planté car si mon écran fait 1024par768 et que je commence par (0,0), je devrais finir par (1023,767)

3.
Envoyer le code couleur hexadécimal.


Ouai, j'lai bien ta fonction, mais moi, je veux pouvoir l'adapter aux écrans donc à l'aide de variables.
Et bien c'est possible, regardez ceci :

Code: Tout sélectionner
main()
{
      int x,y;
     
      int hautX, hautY;
     
      hautX = 234;
      hautY = 214;
     
      char color[7]="FFC0FF\0";
     
      system("pause");
     
      pixelsearch(&x , &y , hautX , hautY , hautX+800 , hautY+500 , color);
     
      SetCursorPos(x,y);
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
     
      system("pause");
}


Bah voila, dois-je vraiment détailler ce bout de code ?
Je pense que si vous faite un minimum d'effort, vous comprendrez.

Juste ceci :
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

On place la souris sur le x et y que la fonction aura modifié et l'on fait un clic gauche.

ATTENTION :
Vous n'avez pas le droit de faire ça :
char color[7];
color[7]="FFC0FF\0";
Et pourquoi ? Parce que !
Essayez, vous verrez.
Oui, mais alors, je ne peux pas changer la couleur cherchée ?
Bah si : comme ceci : strcat(color,"FFC0FF\0"); en ajoutant #include <string.h>
strcat copie une chaine dans une autre, cherchez un peu, j'vais pas tout vous expliquer.

Pourquoi \0 ? bah, parce que toutes les chaines doivent se finir par \0.
Pourquoi 7 alors que en tout, ça fait 6 lettres + le \ et le 0, ça fait 8. Parce que \0 ne compte que pour une seule lettre.

Voila, ce petit tuto est terminé.

PS : si le pixel cherché n'est pas trouvé, x et y prennent la valeur de -1;

PS2 : pour pouvoir compiller, il vous faut ajouter la librairie gdi32 dans les options du projet.
Sous dev-cpp : Projet/Option du projet/Paramet.../ Ajouter ../../../../../../Dev-Cpp/lib/libgdi32.a dans l'éditeur de lien

Voila voila

Pixel.rar


Si vous voulez que je vous explique en détail la fonction, dites le moi.

Code: Tout sélectionner
void pixelsearch(int *x , int *y , int hx , int hy , int bx , int by, char txtt[7])
{   
    HDC dc = GetDC(NULL);
   
    COLORREF pix;
   
    int R,G,B;
    int RR,GG,BB;
    int i,j;
   
    char txt[7];
   
    strncpy(txt,txtt,6);
     
    *x=-1;
    *y=-1;
   
    for(i=0 ; i<6 ; i++)
    {
        txt[i]-=48;
        if(txt[i]>10)
        txt[i]-=7;
    }
   
    RR=txt[0]*16+txt[1];
    GG=txt[2]*16+txt[3];
    BB=txt[4]*16+txt[5];
   
    for(j=hy ; j <= by ; j++)
    {
        for(i=hx ; i<= bx ; i++)
        {
            pix = GetPixel(dc, i, j);
            R = GetRValue(pix);
            G = GetGValue(pix);
            B = GetBValue(pix);
           
            if ( (R==RR) && (G==GG) && (B==BB) )
            {
                *x = i;
                *y = j;
                j = by+1;
                i = bx+1;
            }
        }
    }
   
    ReleaseDC(NULL, dc);
   
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Mon avatar vous as t'il choqué ?
Si c'est le cas, n'hésitez pas à me le dire par MP.
Avatar de l’utilisateur
Lorrio
Programmeur
Programmeur
 
Messages: 712
Inscription: Mar 1 Juil 2008 15:08
Localisation: Brest

Re: pixelsearch EN LANGAGE C !!!

Messagede Lorrio le Jeu 9 Oct 2008 20:13

Idem, si on pouvait mettre ça dans une rubrique tuto, ce serait bien, mais bon, c'est comme vous voulez.
Mon avatar vous as t'il choqué ?
Si c'est le cas, n'hésitez pas à me le dire par MP.
Avatar de l’utilisateur
Lorrio
Programmeur
Programmeur
 
Messages: 712
Inscription: Mar 1 Juil 2008 15:08
Localisation: Brest

Re: pixelsearch EN LANGAGE C !!!

Messagede samipico le Lun 15 Déc 2008 19:15

Hum, merci beaucoup, ça va m'etre très utile si je veux vous faire un bot... T'as grave géré sur ce coup la ;)
Avatar de l’utilisateur
samipico
 
Messages: 18
Inscription: Lun 10 Nov 2008 13:26


Retourner vers Tutos d'aide programmation de bots

Qui est en ligne

Utilisateurs parcourant ce forum: Alexa [Bot] et 0 invités