扫雷群规则资讯

QQ扫雷群python开发扫雷游戏作弊器扫雷红包群群规图片

发布人:微信群怎么开挂抢红包 来源:微信抢红包群,支付宝红包群,红包群,红包扫雷群发布时间:2022-08-12 15:06:57 热度:

自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式。

一、准备工作

1.扫雷游戏

我是win10,没有默认的扫雷,所以去扫雷网下载

2.python 3

我的版本是 python 3.6.1

3.python的第三方库

win32api,win32gui,win32con,Pillow,numpy,opencv可通过 pip install --upgrade SomePackage 来进行安装注意:有的版本是下载pywin32,但是有的要把pywin32升级到最高并自动下载了pypiwin32,具体情况每个python版本可能都略有不同

我给出我的第三方库和版本仅供参考

二、关键代码组成

1.找到游戏窗口与坐标

扫雷游戏窗口class_name ="TMain"title_name ="Minesweeper Arbiter "hwnd = win32gui.FindWindow(class_name, title_name)窗口坐标left= 0top = 0right = 0bottom = 0if hwnd:print("找到窗口")left, top,right, bottom = win32gui.GetWindowRect(hwnd) win32gui.SetForegroundWindow(hwnd)print("窗口坐标:")print(str(left)+ +str(right)+ +str(top)+ +str(bottom))else:print("未找到窗口")复制代码2.锁定并抓取雷区图像锁定雷区坐标去除周围功能按钮以及多余的界面具体的像素值是通过QQ的截图来判断的left+= 15top += 101right -= 15bottom -=42抓取雷区图像rect = (left, top,right, bottom)img =ImageGrab.grab().crop(rect)

3.各图像的RGBA值

数字1-8 周围雷数0 未被打开ed 被打开 空白hongqi 红旗boom 普通雷boom_red 踩中的雷rgba_ed = [(225, (192, 192, 192)), (31, (128, 128, 128))]rgba_hongqi = [(54, (255, 255, 255)), (17, (255, 0, 0)), (109, (192, 192, 192)), (54, (128, 128, 128)), (22, (0, 0, 0))]rgba_0 = [(54, (255, 255, 255)), (148, (192, 192, 192)), (54, (128, 128, 128))]rgba_1 = [(185, (192, 192, 192)), (31, (128, 128, 128)), (40, (0, 0, 255))]rgba_2 = [(160, (192, 192, 192)), (31, (128, 128, 128)), (65, (0, 128, 0))]rgba_3 = [(62, (255, 0, 0)), (163, (192, 192, 192)), (31, (128, 128, 128))]rgba_4 = [(169, (192, 192, 192)), (31, (128, 128, 128)), (56, (0, 0, 128))]rgba_5 = [(70, (128, 0, 0)), (155, (192, 192, 192)), (31, (128, 128, 128))]rgba_6 = [(153, (192, 192, 192)), (31, (128, 128, 128)), (72, (0, 128, 128))]rgba_8 = [(149, (192, 192, 192)), (107, (128, 128, 128))]rgba_boom = [(4, (255, 255, 255)), (144, (192, 192, 192)), (31, (128, 128, 128)), (77, (0, 0, 0))]rgba_boom_red = [(4, (255, 255, 255)), (144, (255, 0, 0)), (31, (128, 128, 128)), (77, (0, 0, 0))]

4.扫描雷区图像保存至一个二维数组map

扫描雷区图像def showmap(): img = ImageGrab.grab().crop(rect)fory inrange(blocks_y):forx inrange(blocks_x): this_image = img.crop((x * block_width, y * block_height, (x +1) * block_width, (y +1) * block_height))ifthis_image.getcolors() == rgba_0:map[y][x] =0elif this_image.getcolors() == rgba_1:map[y][x] =1elif this_image.getcolors() == rgba_2:map[y][x] =2elif this_image.getcolors() == rgba_3:map[y][x] =3elif this_image.getcolors() == rgba_4:map[y][x] =4elif this_image.getcolors() == rgba_5:map[y][x] =5elif this_image.getcolors() == rgba_6:map[y][x] =6elif this_image.getcolors() == rgba_8:map[y][x] =8elif this_image.getcolors() == rgba_ed:map[y][x] =-1elif this_image.getcolors() == rgba_hongqi:map[y][x] =-4elif this_image.getcolors() == rgba_boom or this_image.getcolors() == rgba_boom_red: global gameover gameover =1breaksys.exit(0)else:print("无法识别图像")print("坐标")print((y,x))print("颜色")print(this_image.getcolors()) sys.exit(0)print(map)

5.扫雷算法

这里我采用的最基础的算法1.首先点出一个点2.扫描所有数字,如果周围空白+插旗==数字,则空白均有雷,右键点击空白插旗3.扫描所有数字,如果周围插旗==数字,则空白均没有雷,左键点击空白4.循环2、3,如果没有符合条件的,则随机点击一个白块

插旗def banner(): showmap()fory inrange(blocks_y):forx inrange(blocks_x):if1<=map[y][x] andmap[y][x] <=5: boom_number =map[y][x] block_white =0block_qi =0foryy inrange(y-1,y+2):forxx inrange(x-1,x+2):if0<= yy and0<= xx and yy < blocks_y and xx < blocks_x:ifnot (yy == y and xx == x):ifmap[yy][xx] ==0: block_white +=1elifmap[yy][xx] ==-4: block_qi +=1if boom_number == block_white + block_qi:foryy inrange(y -1, y +2):forxx inrange(x -1, x +2):if0<= yy and0<= xx and yy < blocks_y and xx < blocks_x:ifnot (yy == y and xx == x):ifmap[yy][xx] ==0: win32api.SetCursorPos([left+xx*block_width, top+yy*block_height]) win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN,0,0,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP,0,0,0,0) showmap()点击白块def dig(): showmap() iscluck =0fory inrange(blocks_y):forx inrange(blocks_x):if1<=map[y][x] andmap[y][x] <=5: boom_number =map[y][x] block_white =0block_qi =0foryy inrange(y -1, y +2):forxx inrange(x -1, x +2):if0<= yy and0<= xx and yy < blocks_y and xx < blocks_x:ifnot (yy == y and xx == x):ifmap[yy][xx] ==0: block_white +=1elifmap[yy][xx] ==-4: block_qi +=1if boom_number == block_qi and block_white >0:foryy inrange(y -1, y +2):forxx inrange(x -1, x +2):if0<= yy and0<= xx and yy < blocks_y and xx < blocks_x:ifnot(yy == y and xx == x):ifmap[yy][xx] ==0: win32api.SetCursorPos([left + xx * block_width, top + yy * block_height]) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0) iscluck =1ifiscluck ==0: luck()随机点击def luck(): fl =1while(fl): random_x = random.randint(0, blocks_x -1) random_y = random.randint(0, blocks_y -1)if(map[random_y][random_x] ==0): win32api.SetCursorPos([left + random_x * block_width, top + random_y * block_height]) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0) fl =0def gogo(): win32api.SetCursorPos([left, top]) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0) showmap() global gameover while(1):if(gameover ==0): banner() banner() dig()else: gameover =0win32api.keybd_event(113,0,0,0) win32api.SetCursorPos([left, top]) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0) showmap()

这个算法在初级和中级通过率都不错,但是在高级成功率惨不忍睹,主要是没有考虑逻辑组合以及白块是雷的概率问题,可以对这两个点进行改进,提高成功率红包群扫雷广告

10-50微信红包扫雷群

... 
上一篇 : 红包群我与调查问卷的二三事扫雷红包群怎么玩
下一篇 : 抢红包群直播间里的新东方是怎么开挂的?扫雷红包群怎么玩
猜你喜欢的微信抢红包群,支付宝红包群,红包群,红包扫雷群