【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\n",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\n",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\n"); 
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\n",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\n",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\n\n",x,y);
482         freopen("log.txt","w",stdout); 
483         printf("%d %d\n",x,y);
484         fclose(stdout);    
485         freopen("con","w",stdout);  
486     }
487      
488 }
posted @ 2018-03-28 16:56  AlphaInf  阅读(1309)  评论(0编辑  收藏  举报