1、申 请 I D:青史无疆
2、个人邮箱:1445927464@qq.com
3、原创技术文章:侠客风云传挖矿助手
我就记录一下大体过程:
1.侠客风云传有一个挖矿小游戏,其实就是打地鼠。如下图:
【图一】
2.难度虽然不高,但多周目耗体力,于是就想写个助手节省体力。当然可以直接修改内存得到,但是并不想用那种方法。
通过观察,发现不是目标的地鼠的胸部都是棕色,目标地鼠的胸部都不是棕色。于是就想到了用识辨像素的方法。详情见3.
3.大体助手构思:按下某个键盘快捷键,助手自动找到目标地鼠并打下。(用识辨像素的方法找到目标地鼠)
4.具体实现:
a.自制小工具获取地鼠胸部的颜色值范围。
主要代码:
[C++] 纯文本查看 复制代码 HDC hdc=GetDC(NULL);
int color=GetPixel(hdc,x,y);
red=GetRValue(color);
green=GetGValue(color);
blue=GetBValue(color);
完整效果:
【图二】
b.自制小工具获取地鼠孔的坐标位置,将其储存在一个文件中。
主要代码:
[C++] 纯文本查看 复制代码 POINT p;
GetCursorPos(&p);
......
ofstream out1("position.ini");
for(int i=0;i<count+1;i++)
{
out1 << ballx[i] << "\t" << bally[i] << endl;
}
out1.close();
完整效果:
【图三】
【图四】
c.遍历地鼠孔的像素,顺便判断是否是目标地鼠。如果是目标地鼠,就把鼠标移到相应位置,并模拟鼠标左击(关键)。
主要代码:
[C++] 纯文本查看 复制代码 ifstream in("position.ini");
for(int i=0;i<12;i++)
{
int tempx;
int tempy;
in >> tempx >> tempy;
int color=GetPixel(hdc,tempx,tempy);
red=GetRValue(color);
green=GetGValue(color);
blue=GetBValue(color);
if(red<0x88&&red>0x68&&green<0x68&&green>0x48&&blue<0x38&&blue>0x18)//范围根据步骤a获得的颜色。
{
}
else
{
dx=tempx;
dy=tempy-30;
break;
}
}
in.close();
SetCursorPos(dx,dy);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
//快键键设置:
SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);
......
else if(wParam==VK_NUMPAD3)//通过小键盘3挖矿
{
pthread_t tid;
pthread_create(&tid,NULL,GetStone,NULL);
}
快键键3挖矿完整效果:
【图五】
(26是满连击)
成品和源码地址:http://pan.baidu.com/s/1eSsLaCE
本来还想做成全自动,但是地鼠出来的时间间隔浮动有点大。
以前在开放时是注册过的,后来被清了。
|