无聊时写的一个扫雷辅助,话不多说,看代码 (吐槽一下,csdn默认设置下载资源5积分,修改不了。。)
#include
#include
/**
发现个有意思的事,扫雷内部会判断:
如果用户是第一次点击,并且不幸的正好是点到雷了
那么会随机把这个雷转移到别的格子上,应该是增加用户体验吧..
--by习惯
**/
byte data[24][32]; //int类型报错,游戏默认byte存储棋盘,行要算上 左右 两边的 墙,所以列 +2 ,
int rows, cols; //实际的行和列,减少循环次数(也可扫描整个棋盘)
long BASE = 0x01005360; //基质
long BASEROWS = 0x010056A8;
long BASECOLS = 0x010056AC;
HWND getHWND() {
return FindWindow(NULL, "扫雷");
}
HANDLE getProcess() {
HWND hGame = getHWND();
DWORD pid;
GetWindowThreadProcessId(hGame, &pid);
HANDLE hpro = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if(hpro == NULL) {
printf("打开进程失败");
exit(0); //退出程序
}
return hpro;
}
void getData() {
HANDLE hpro = getProcess();
LPVOID base = (LPVOID)BASE; //第一个是16墙 ,15未选择,143是雷 65是1,66是2
LPVOID baseRows = (LPVOID)BASEROWS;
LPVOID baseCols = (LPVOID)BASECOLS;
ReadProcessMemory(hpro, base, data, sizeof(data), NULL);
ReadProcessMemory(hpro, baseRows, &rows, 4, 0);
ReadProcessMemory(hpro, baseCols, &cols, 4, 0);
}
void click(int row, int col) {
HWND hGame = getHWND();
// baseXPos: 13,baseYPos: 57,每个方格大小 15 ×15
//注意:程序左上角坐标(0,0),x轴是向右递增,y轴是向下递增
int xPos = 5 + col * 16;
int yPos = 45 + row * 16;
PostMessage(hGame, WM_LBUTTONDOWN, 0, MAKELPARAM(xPos, yPos));
PostMessage(hGame, WM_LBUTTONUP, 0, MAKELPARAM(xPos, yPos));
}
void clear() {
getData();
for (int i=0; i
for (int j=1; j
if(data[i][j] != 143) {//不是雷
click(i+1, j);
}
}
}
}
int main() {
clear();
printf("OK");
return 0;
}
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lxNzE0NTg4OTQ0_size_16_color_FFFFFF_t_70][]
[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lxNzE0NTg4OTQ0_size_16_color_FFFFFF_t_70]: /images/1604721415523.png