• 【learning】微信跳一跳辅助c++详解 轻松上万 【下】


     如果你还没有看完本blog的上篇,建议您先看完上篇!!

     

    第一代辅助如何死的?

    我们先来看四张图

         

    如上方最左图所示,前面是一个小圆柱子,看起来很人畜无害似不似??

    由于上一步跳出了偏差,并没有跳在正中心,导致该扫描的位置未被扫描,如上方第二幅图所示。(上方右图绿色部分为被作为关键点的部分)

    我们把log翻到上一次,发现位置的判断正常,但因不明原因跳偏,跳偏的原因至今不明.....

    为防止再次出锅,我写了第二个版本的代码....

    显然,要修改判定机制

    一眼扫过去,就会发现扫描的范围过窄,显然要增大被扫描的范围....

    如果单纯这么修改,依然会出锅,简单地来说,就是依然存在扫描到柱子侧面的可能,导致再次出锅。

    通过进一步的测试,我发现跳一跳的方块具有此类奇特性质:

    除了棕色带数字433的方块,及木凳子方块外,在确定方块正面后,以该面频数最高颜色作为匹配色,求出所有颜色与匹配色相同的点的平均坐标,即为下一个方块的中心点:

    此处说明一下,挂掉的那根柱子侧面并非完全同色

    如图所示:

      

     

    绿色部分的正中间的那个红点即为计算出的落点。

    通过该判断机制,在未启用白点判断的情况下,实现了连续30次命中中心点。

    如何判定方块正面

    启初,我根据已有的几千张图片进行了分析,发现若不进行专门的顶部判定,仅通过上述方式进行判定,也是可以找到准确找到方块中心点的。

    码了出来,挂着去吃了顿饭,回来发现在8200+时死掉了....

    通过分析log,事实证明我凸漾...   如图所示:

    由于上图用的是经过优化的算法,并没有抓偏移。若仅采用上述的判定机制,由于两图红色标记部分面积均大于绿色部分,会出现算错目标落点的情况。

    考虑如何进行优化。

    不难发现,相对于方块侧面,方块正面与棋子的距离会更远一些,故在计算频数时,我们考虑对每个点赋予一个权值,该权值与计算点至棋子中心点间距呈线性关系(目前采用的是k=1),求出该颜色后,作为匹配色,求出所有颜色与匹配色完全相同的点的平均坐标,作为目标点。

    然后就可以了(没错就这么简单)

    求目标点的代码:

     1     mp.clear(); Xsum.clear(); Ysum.clear();  
     2     if(chessY<=290 ){//第二代扫描 
     3         for(int i=chessY+60;i<=P.m;i++){
     4             int j=chessX-(i-chessY)*tan30;
     5             for(int jj=-50;jj<=50;jj++){
     6                 int R=P.r[j+jj][i],G=P.g[j+jj][i],B=P.b[j+jj][i];
     7                 if(R==0&&G==0&&B==0) continue;
     8                 if(R==114&&G==114&&B==114) continue;
     9                 int J=j+jj,I=i;
    10                 node id=node(R,G,B); 
    11                 int add=getQZ(chessX-J);
    12                 mp[id]+=add; Xsum[id]+=J*add; Ysum[id]+=I*add; 
    13             }
    14         }
    15     }else{
    16         for(int i=chessY-60;i;i--){
    17             int j=chessX-(chessY-i)*tan30;
    18             for(int jj=-50;jj<=50;jj++){
    19                 int R=P.r[j+jj][i],G=P.g[j+jj][i],B=P.b[j+jj][i];
    20                 if(R==0&&G==0&&B==0) continue;
    21                 if(R==114&&G==114&&B==114) continue;
    22                 int J=j+jj,I=i;
    23                 node id=node(R,G,B); 
    24                 int add=getQZ(chessX-J);
    25                 mp[id]+=add; Xsum[id]+=J*add; Ysum[id]+=I*add; 
    26             }
    27         }
    28     }
    29     printf("siz=%d
    ",mp.size()); 
    30     if(mp.size()>3000){
    31         wave2();
    32         return 0;
    33     }
    34     map<node,int>::iterator it,itX,itY,maxn;
    35     it=maxn=mp.begin();
    36     itX=Xsum.begin();
    37     itY=Ysum.begin();
    38     while(it!=mp.end()){
    39         int sum1=it->second,sum2=maxn->second;
    40         if(sum1>sum2)
    41             maxn=it;
    42         it++;
    43         itX++;
    44         itY++;
    45     }
    46     int sumX=Xsum[maxn->first];
    47     int sumY=Ysum[maxn->first];
    48     int cnt=maxn->second;
    49     sumX/=cnt; sumY/=cnt;//已经确定目标点

    如何确定另外两种特殊情况并作出反应

    不难发现,那两种方块比较花,说白了,就是颜色的种类较多。

    通过多次测试,令阈值为3000,若颜色种类低于阈值,则采用上述判定机制直接进行判定,否则直接采用第一代判定机制(是不是很机智

    在统计颜色数量孰多前,先进行白点检测,若检测到白点则直接跳白点即可。

     

    (上图在测试主算法的可靠性,故没有启用抓白点)

    然而...

    尽管新的算法看起来极其优秀(实际测试中其实就是),截止目前尚未出现因算法本身而导致死亡的锅,但现实中,受限于电脑性能的不稳定性,按压时间会出现偏差,导致跳偏甚至跳死的现象,至今无解...(考虑回广州后用性能更强的电脑跑一下)

    二代辅助目前历史记录为37244,尚未破一代记录。

    理论上,在无卡顿的电脑上,二代辅助可实现99999。

    不过,我还有一些其他的方法可以实现99999,比如游戏原始方块信息采集+AE渲染,渲染1分钟,实现5个9,看起来还天衣无缝哦~(逃)

     

    全文终

    代码如下(由于里面有一代的代码故很长请不要吐槽)

      1 #include<bits/stdc++.h>
      2 #include<cmath>
      3 #include<windows.h>
      4 #define d(x) keybd_event(x,0,0,0)
      5 #define u(x) keybd_event(x,0,2,0)
      6 #define s(x) Sleep(x)
      7 #define me(x) mouse_event(x,0,0,0,0)
      8 #define sc(x,y) SetCursorPos(x,y)
      9 #define gk(x) GetAsyncKeyState(x)
     10 
     11 #define M 100000
     12 using namespace std;
     13 
     14 int up(int x){while((x*3)%4!=0) x++;return x;}
     15 int lf(int x){return abs(x);}
     16 void printhead(unsigned char c[],int n,int m){
     17     //该函数用于写入一个24位bmp头 
     18     c[0]=0x42; c[1]=0x4d; //BM
     19     unsigned siz=54+3*up(n)*up(m);
     20     for(int i=2;i<=5;i++){
     21         c[i]=siz&255; siz=siz>>8;
     22     }//写入siz
     23     siz=3*n*m;
     24     c[10]=0x36;//写入数据头位置
     25     c[0x0e]=0x28;//头大小 
     26     for(int i=0x12;i<=0x15;i++) c[i]=m&255,m>>=8;//写入宽度 
     27     for(int i=0x16;i<=0x19;i++) c[i]=n&255,n>>=8;//写入高度
     28     c[0x1a]=1;//永远为1
     29     c[0x1c]=0x18;//24位位图 
     30     //for(int i=0x22;i<=0x25;i++) c[i]=siz&255,siz>>=8;//写入去头字节数 
     31 }
     32 #define MFLONG 15000000
     33 #define W 1921
     34 #define H 1081
     35 unsigned char _c[MFLONG]={0};
     36 struct board{//画布函数 
     37     int n,m;//宽高 
     38     unsigned char r[H][W],g[H][W],b[H][W];
     39     board(){
     40         n=m=0; memset(b,0,sizeof(b));
     41         memset(r,0,sizeof(r)); memset(g,0,sizeof(g));
     42     }
     43     board(int nn,int mm,int R,int G,int B){
     44         n=nn; m=mm; memset(b,B,sizeof(b));
     45         memset(r,R,sizeof(r)); memset(g,G,sizeof(g));
     46     }
     47     void clear(){
     48         n=m=0; memset(b,0,sizeof(b));
     49         memset(r,0,sizeof(r)); memset(g,0,sizeof(g));
     50     }
     51     void outfile(char ad[]){
     52         FILE *fp; fp=fopen(ad,"wb");
     53         printhead(_c,n,m); int ns=54;
     54         for(int i=n;i;i--){
     55             for(int j=1;j<=m;j++){
     56                 _c[ns++]=b[i][j];
     57                 _c[ns++]=g[i][j];
     58                 _c[ns++]=r[i][j];
     59             }
     60             int k=(3*m)%4;
     61             for(int i=0;i<k;i++)
     62             _c[ns++]=0;
     63         }
     64         fwrite(_c,1,ns,fp);
     65         fclose(fp);
     66     }
     67     void readfile(char ad[]){
     68         FILE *fp; fp=fopen(ad,"rb");
     69         fread(_c,1,MFLONG,fp);
     70         fclose(fp);
     71         for(int i=0x15;i>=0x12;i--) m=m<<8,m=m+_c[i];
     72         for(int i=0x19;i>=0x16;i--) n=n<<8,n=n+_c[i];
     73         int ns=54;
     74         for(int i=n;i;i--){
     75             for(int j=1;j<=m;j++){
     76                 b[i][j]=_c[ns++];
     77                 g[i][j]=_c[ns++];
     78                 r[i][j]=_c[ns++];
     79             }
     80             int k=(m*3)%4;
     81             ns+=k;
     82         }
     83         fclose(fp);
     84     }
     85 }; 
     86 board S,P,P2,CAP;
     87 
     88 void capture(){
     89     d(VK_SNAPSHOT); u(VK_SNAPSHOT);
     90     S.readfile("screenx.bmp");
     91 }
     92 #define epsR 2
     93 #define epsG 2
     94 #define epsB 2
     95 #define conY 1.4356 ///过滤底色和阴影的参数
     96 
     97 #define LR 43
     98 #define RR 68
     99 #define LG 49
    100 #define RG 57
    101 #define LB 76
    102 #define RB 102
    103 #define tan30 0.5773
    104 
    105 /*#define JumpepsR 7
    106 #define JumpepsG 7
    107 #define JumpepsB 7//用于判断目标点的东西*/
    108 int JumpepsR,JumpepsG,JumpepsB; 
    109 
    110 int wx[]={-1,-1,-1,0,1,1,1,0};
    111 int wy[]={-1,0,1,1,1,0,-1,-1};
    112 
    113 struct node{
    114     int  r,g,b;
    115     node(){r=g=b=0;}
    116     node(unsigned char R,unsigned char G,unsigned B){
    117         r=R; g=G; b=B;
    118     }
    119     friend bool operator <(node a,node b){
    120         if(a.r!=b.r) return a.r<b.r;
    121         if(a.g!=b.g) return a.g<b.g;
    122         return a.b<b.b;
    123     }
    124     bool cmp(int R,int G,int B){
    125         int e1=abs(r-R);
    126         int e2=abs(g-G);
    127         int e3=abs(b-B); 
    128         if(e1>epsR) return 0;
    129         if(e2>epsG) return 0;
    130         if(e3>epsB) return 0;
    131         return 1;
    132     }    
    133 };
    134 int pf(int x){return x*x;}
    135 map<node,int> mp,Xsum,Ysum;
    136 int chessX,chessY;//棋子的x,y坐标 
    137 int TX,TY;
    138 
    139 int cmpspecial(char c[],int px,int py,int eps){//判断所有特殊的东西,包括白点,椅子等 
    140     CAP.readfile(c);
    141     int minn=1234567890,maxx=0,maxy=0;
    142     for(int j=chessX;j>=chessX-300;j--)
    143     for(int i=1;i<=P.m-CAP.m;i++){
    144         int sum=0,pcnt=0; 
    145         for(int ii=1;ii<CAP.m;ii++)
    146         for(int jj=1;jj<CAP.n;jj++){
    147             sum+=pf(P.r[j+jj][i+ii]-CAP.r[jj][ii]);
    148             sum+=pf(P.g[j+jj][i+ii]-CAP.g[jj][ii]);
    149             sum+=pf(P.b[j+jj][i+ii]-CAP.b[jj][ii]);
    150         }
    151         if(sum<minn){
    152             minn=sum,maxx=i,maxy=j;
    153             //break;
    154         }
    155     }
    156     if(minn<=eps){
    157         printf("catch %s
    ",c);
    158         for(int ii=1;ii<CAP.m;ii++)
    159         for(int jj=1;jj<CAP.n;jj++){
    160             P.r[maxy+jj][maxx+ii]=0; 
    161             P.g[maxy+jj][maxx+ii]=255;
    162             P.b[maxy+jj][maxx+ii]=0;
    163         }
    164         TX=maxy+py; TY=maxx+px;
    165         P.r[TX][TY]=255; P.g[TX][TY]=P.b[TX][TY]=0;
    166 //        P.outfile("test.bmp"); 
    167         return 1; 
    168     }else return 0;
    169 }
    170 
    171 int getQZ(int x){
    172     return x; 
    173 }
    174 
    175 int lineR[10000]={0},lineG[10000]={0},lineB[10000]={0},X[10000]={0},Y[10000]={0};
    176 int wave2(){//专门处理椅子和其他东西的 
    177     printf("find chess or 433day
    "); 
    178     memset(X,0,sizeof(X)); memset(Y,0,sizeof(Y));
    179     memset(lineR,0,sizeof(lineR)); memset(lineG,0,sizeof(lineG)); memset(lineB,0,sizeof(lineB)); 
    180     //loop:;
    181     int cnt=0; 
    182     mp.clear(); 
    183     if(chessY<=290 ){
    184         for(int i=chessY+60;i<=P.m;i++){
    185             int j=chessX-(i-chessY)*tan30;
    186             if(P.r[j][i]==0&&P.g[j][i]==0&&P.b[j][i]==0) continue;
    187             cnt++;
    188             lineR[cnt]=P.r[j][i];
    189             lineG[cnt]=P.g[j][i];
    190             lineB[cnt]=P.b[j][i];
    191             X[cnt]=j; Y[cnt]=i;
    192             mp[node(P.r[j][i],P.g[j][i],P.b[j][i])]++;
    193             cnt++;
    194             lineR[cnt]=P.r[j-4][i];
    195             lineG[cnt]=P.g[j-4][i];
    196             lineB[cnt]=P.b[j-4][i];
    197             X[cnt]=j-4; Y[cnt]=i;
    198             mp[node(P.r[j-4][i],P.g[j-4][i],P.b[j-4][i])]++;
    199             cnt++;
    200             lineR[cnt]=P.r[j+4][i];
    201             lineG[cnt]=P.g[j+4][i];
    202             lineB[cnt]=P.b[j+4][i];
    203             X[cnt]=j+4; Y[cnt]=i;
    204             mp[node(P.r[j+4][i],P.g[j+4][i],P.b[j+4][i])]++;
    205             cnt++; 
    206             lineR[cnt]=P.r[j+8][i];
    207             lineG[cnt]=P.g[j+8][i];
    208             lineB[cnt]=P.b[j+8][i];
    209             X[cnt]=j+8; Y[cnt]=i;
    210             mp[node(P.r[j+8][i],P.g[j+8][i],P.b[j+8][i])]++;
    211             cnt++; 
    212             lineR[cnt]=P.r[j-8][i];
    213             lineG[cnt]=P.g[j-8][i];
    214             lineB[cnt]=P.b[j-8][i];
    215             X[cnt]=j-8; Y[cnt]=i;
    216             mp[node(P.r[j-8][i],P.g[j-8][i],P.b[j-8][i])]++;
    217             P.r[j+1][i]=P.r[j-1][i]=255;
    218             P.g[j+1][i]=P.g[j-1][i]=255;
    219             P.b[j+1][i]=P.b[j-1][i]=0; 
    220         }
    221     }else{
    222         for(int i=chessY-60;i;i--){
    223             int j=chessX-(chessY-i)*tan30;
    224             if(P.r[j][i]==0&&P.g[j][i]==0&&P.b[j][i]==0) continue;
    225             cnt++;
    226             lineR[cnt]=P.r[j][i];
    227             lineG[cnt]=P.g[j][i];
    228             lineB[cnt]=P.b[j][i];
    229             X[cnt]=j; Y[cnt]=i;
    230             mp[node(P.r[j][i],P.g[j][i],P.b[j][i])]++;
    231             cnt++;
    232             lineR[cnt]=P.r[j-4][i];
    233             lineG[cnt]=P.g[j-4][i];
    234             lineB[cnt]=P.b[j-4][i];
    235             X[cnt]=j-4; Y[cnt]=i;
    236             mp[node(P.r[j-4][i],P.g[j-4][i],P.b[j-4][i])]++;
    237             cnt++;
    238             lineR[cnt]=P.r[j+4][i];
    239             lineG[cnt]=P.g[j+4][i];
    240             lineB[cnt]=P.b[j+4][i];
    241             X[cnt]=j+4; Y[cnt]=i;
    242             cnt++; 
    243             mp[node(P.r[j+4][i],P.g[j+4][i],P.b[j+4][i])]++;
    244             lineR[cnt]=P.r[j+8][i];
    245             lineG[cnt]=P.g[j+8][i];
    246             lineB[cnt]=P.b[j+8][i];
    247             X[cnt]=j+8; Y[cnt]=i;
    248             cnt++; 
    249             mp[node(P.r[j+8][i],P.g[j+8][i],P.b[j+8][i])]++;
    250             lineR[cnt]=P.r[j-8][i];
    251             lineG[cnt]=P.g[j-8][i];
    252             lineB[cnt]=P.b[j-8][i];
    253             X[cnt]=j-8; Y[cnt]=i;
    254             mp[node(P.r[j-8][i],P.g[j-8][i],P.b[j-8][i])]++;
    255             P.r[j+1][i]=P.r[j-1][i]=255;
    256             P.g[j+1][i]=P.g[j-1][i]=255;
    257             P.b[j+1][i]=P.b[j-1][i]=0; 
    258         }
    259     }
    260     JumpepsR=JumpepsG=JumpepsB=10;
    261     //if(cnt==0) goto loop;
    262         int maxn=0,maxid=0,quan=3;
    263         for(int i=1;i<=cnt;i++){
    264             quan=3; 
    265             int R=lineR[i];
    266             int G=lineG[i];
    267             int B=lineB[i];
    268             int sum=0;
    269             for(int j=1;j<=cnt;j++){
    270                 int DeltaR=abs(lineR[j]-R);
    271                 int DeltaG=abs(lineG[j]-G);
    272                 int DeltaB=abs(lineB[j]-B);
    273                 if(DeltaR>JumpepsR) continue;
    274                 if(DeltaG>JumpepsG) continue;
    275                 if(DeltaB>JumpepsB) continue;
    276                 sum+=abs(X[j]-chessX)*0.05+4; 
    277             }
    278             if(sum>maxn) maxn=sum,maxid=i;
    279         }        
    280         int sumX=0,sumY=0,sum=0;
    281         int R=lineR[maxid];
    282         int G=lineG[maxid];
    283         int B=lineB[maxid];    
    284         for(int j=1;j<=cnt;j++){
    285             int DeltaR=abs(lineR[j]-R);
    286             int DeltaG=abs(lineG[j]-G);
    287             int DeltaB=abs(lineB[j]-B);
    288             if(DeltaR>JumpepsR) continue;
    289             if(DeltaG>JumpepsG) continue;
    290             if(DeltaB>JumpepsB) continue;
    291             sum++;
    292             P.r[X[j]][Y[j]]=0; 
    293             P.g[X[j]][Y[j]]=255; 
    294             P.b[X[j]][Y[j]]=0; 
    295             sumX+=X[j]; sumY+=Y[j];
    296         }
    297     if(sum==0) 
    298     return 1;
    299         sumX/=sum; sumY/=sum;
    300         //求出目标点坐标
    301         P.r[sumX][sumY]=255; P.g[sumX][sumY]=P.b[sumX][sumY]=0;
    302     TX=sumX; TY=sumY;
    303     //P.outfile("test.bmp"); 
    304     return 0; 
    305     
    306     //点击模组 
    307 }
    308 
    309 int wave(){//完成对图像的底色和阴影过滤,以及求出棋子的中心点 
    310     P.clear();
    311     int sx=32,ex=1074;
    312     int sy=682,ey=1265;
    313     P.m=ey-sy+1; P.n=ex-sx+1;
    314     for(int i=sx;i<=ex;i++)
    315     for(int j=sy;j<=ey;j++){
    316         P.r[i-sx+1][j-sy+1]=S.r[i][j];
    317         P.g[i-sx+1][j-sy+1]=S.g[i][j];
    318         P.b[i-sx+1][j-sy+1]=S.b[i][j];
    319     }
    320 //    P.readfile("st1152.bmp"); 
    321 //抓出图像
    322         
    323     P2=P; 
    324     int sumx=0,sumy=0,cntx=0;
    325     for(int i=1;i<=P.n;i++)
    326     for(int j=1;j<=P.m;j++){
    327         int dR=abs(P.r[i][j]);
    328         int dG=abs(P.g[i][j]);
    329         int dB=abs(P.b[i][j]);
    330         int cnt=0;
    331         if(LR<=dR&&dR<=RR) cnt++;
    332         if(LG<=dG&&dG<=RG) cnt++;
    333         if(LB<=dB&&dB<=RB) cnt++;
    334         if(cnt==3){
    335         //    P.r[i][j]=P.g[i][j]=P.b[i][j];
    336             sumx+=i; sumy+=j; cntx++;
    337         }
    338     }//识别棋子 
    339     
    340     for(int i=1;i<=P.n;i++){
    341         mp.clear();
    342         for(int j=1;j<=P.m;j++)
    343         mp[node(P.r[i][j],P.g[i][j],P.b[i][j])]++;
    344         map<node,int>::iterator it; 
    345         node maxid,maxid2; int maxn=0;
    346         for(it=mp.begin();it!=mp.end();it++){
    347             if(maxn<it->second){
    348                 maxn=it->second;
    349                 maxid=it->first;
    350             }
    351         }
    352         maxid2.r=maxid.r/conY;
    353         maxid2.g=maxid.g/conY;
    354         maxid2.b=maxid.b/conY;
    355         for(int j=1;j<=P.m;j++){
    356             if(maxid.cmp(P.r[i][j],P.g[i][j],P.b[i][j]))
    357                 P.r[i][j]=P.g[i][j]=P.b[i][j]=0;
    358             if(maxid2.cmp(P.r[i][j],P.g[i][j],P.b[i][j]))
    359                 P.r[i][j]=P.g[i][j]=P.b[i][j]=0;
    360         }
    361     }
    362     if(cntx==0) 
    363     return 1;
    364     sumx/=cntx; sumy/=cntx;
    365     sumx+=14; 
    366     P.r[sumx][sumy]=P.g[sumx][sumy]=P.b[sumx][sumy]=255; 
    367     chessX=sumx; chessY=sumy;     
    368     
    369     if(cmpspecial("000white.bmp",8,6,0)) return 2; 
    370     
    371     //loop:;
    372     mp.clear(); Xsum.clear(); Ysum.clear();  
    373     if(chessY<=290 ){//第二代扫描 
    374         for(int i=chessY+60;i<=P.m;i++){
    375             int j=chessX-(i-chessY)*tan30;
    376             for(int jj=-50;jj<=50;jj++){
    377                 int R=P.r[j+jj][i],G=P.g[j+jj][i],B=P.b[j+jj][i];
    378                 if(R==0&&G==0&&B==0) continue;
    379                 if(R==114&&G==114&&B==114) continue;
    380                 int J=j+jj,I=i;
    381                 node id=node(R,G,B); 
    382                 int add=getQZ(chessX-J);
    383                 mp[id]+=add; Xsum[id]+=J*add; Ysum[id]+=I*add; 
    384             }
    385         }
    386     }else{
    387         for(int i=chessY-60;i;i--){
    388             int j=chessX-(chessY-i)*tan30;
    389             for(int jj=-50;jj<=50;jj++){
    390                 int R=P.r[j+jj][i],G=P.g[j+jj][i],B=P.b[j+jj][i];
    391                 if(R==0&&G==0&&B==0) continue;
    392                 if(R==114&&G==114&&B==114) continue;
    393                 int J=j+jj,I=i;
    394                 node id=node(R,G,B); 
    395                 int add=getQZ(chessX-J);
    396                 mp[id]+=add; Xsum[id]+=J*add; Ysum[id]+=I*add; 
    397             }
    398         }
    399     }
    400     printf("siz=%d
    ",mp.size()); 
    401     if(mp.size()>3000){
    402         wave2();
    403         return 0;
    404     }
    405     map<node,int>::iterator it,itX,itY,maxn;
    406     it=maxn=mp.begin();
    407     itX=Xsum.begin();
    408     itY=Ysum.begin();
    409     while(it!=mp.end()){
    410         int sum1=it->second,sum2=maxn->second;
    411         if(sum1>sum2)
    412             maxn=it;
    413         it++;
    414         itX++;
    415         itY++;
    416     }
    417     int sumX=Xsum[maxn->first];
    418     int sumY=Ysum[maxn->first];
    419     int cnt=maxn->second;
    420     sumX/=cnt; sumY/=cnt;//已经确定目标点
    421     node hh=maxn->first; 
    422     
    423     if(chessY<=290 ){//第二代采用密集的扫描 
    424         for(int i=chessY+60;i<=P.m;i++){
    425             int j=chessX-(i-chessY)*tan30;
    426             for(int jj=-50;jj<=50;jj++){
    427                 int R=P.r[j+jj][i],G=P.g[j+jj][i],B=P.b[j+jj][i];
    428                 if(R!=hh.r||G!=hh.g||B!=hh.b) continue;
    429                 P.r[j+jj][i]=0; P.g[j+jj][i]=255; P.b[j+jj][i]=0; 
    430             }
    431         }
    432     }else{
    433         for(int i=chessY-60;i;i--){
    434             int j=chessX-(chessY-i)*tan30;
    435             for(int jj=-50;jj<=50;jj++){
    436                 int R=P.r[j+jj][i],G=P.g[j+jj][i],B=P.b[j+jj][i];
    437                 if(R!=hh.r||G!=hh.g||B!=hh.b) continue;
    438                 P.r[j+jj][i]=0; P.g[j+jj][i]=255; P.b[j+jj][i]=0; 
    439             }
    440         }
    441     } 
    442     loop:;
    443     P.r[sumX][sumY]=255; P.g[sumX][sumY]=P.b[sumX][sumY]=0;
    444     TX=sumX; TY=sumY;
    445 //    P.outfile("test.bmp"); 
    446     return 0; 
    447     
    448     //点击模组 
    449 }
    450             
    451 
    452 int main(){
    453     while(!gk(VK_F7)) s(10); 
    454     keybd_event(VK_F7,0,2,0); 
    455     char c[100];
    456     int cas=0,x=0,y=0,sum=0,buchang=0; 
    457     //Sleep(2000);
    458     int last=0; 
    459     while(1){
    460         cas++; 
    461         capture();
    462         Sleep(1000); 
    463         capture();
    464         Sleep(1000);
    465         int k=wave(); 
    466         if(gk(VK_F7)) return 0; 
    467         int X=abs(TX-chessX),Y=abs(TY-chessY); 
    468         double d=0.866,b=1.732;
    469         int he=2*X+d*(Y-b*X);
    470         printf("dist=%dpixels
    ",he); 
    471         me(2); s(he*2.55); me(4); 
    472         s(1200); 
    473         freopen("log.txt","r",stdin); 
    474         scanf("%d%d",&x,&y);
    475         fclose(stdin); 
    476         sprintf(c,"log%d.bmp",x);
    477         P.outfile(c);
    478         sprintf(c,"st%d.bmp",x);
    479         P2.outfile(c); 
    480         x++; y+=(k==2); 
    481         printf("sumjump=%d,centrejump=%d
    
    ",x,y);
    482         freopen("log.txt","w",stdout); 
    483         printf("%d %d
    ",x,y);
    484         fclose(stdout);    
    485         freopen("con","w",stdout);  
    486     }
    487      
    488 }
  • 相关阅读:
    Android EditText内容监听
    Android模仿QQ空间图片上传——原理
    PHP新手入门1——表单
    linux下ftp常用命令
    TextView所有属性
    iOS开发-删除字典中的null
    去除导航栏下方的横线
    应用的启动视图 LauchView
    App所需申请资料
    应用本地化
  • 原文地址:https://www.cnblogs.com/xiefengze1/p/8664835.html
Copyright © 2020-2023  润新知