python自动点击网页按钮_自动识图进行点击,用Python玩连连看是什么效果?

1、前言

Python实现的qq连连看辅助, 仅用于学习, 请在练习模式下使用, 请不要拿去伤害玩家们...

2、基本环境配置

版本:Python3.6

系统:Windows

3、相关模块:

私信小编001即可获取大量Python编程学习资料

1import PIL.ImageGrabimport pyautoguiimport win32apiimport win32guiimport win32conimport timeimport random
1import PIL.ImageGrabimport pyautoguiimport win32apiimport win32guiimport win32conimport timeimport random

4、使用方法

开始游戏后运行就行了, 再次提示, 请在练习模式中使用, 否则可能会被其他玩家举报。

d3c266fd74da9709d57b3f5fc88a1fea.png

效果图

c3dd7eae1461c7d4574c0fc771873069.png

5、代码实现

  1import PIL.ImageGrab  2import pyautogui  3import win32api  4import win32gui  5import win32con  6import time  7import random  8  9def color_hash(color): 10    value = "" 11    for i in range(5): 12        value += "%d,%d,%d," % (color[0], color[1], color[2]) 13    return hash(value) 14 15 16def image_hash(img): 17    value = "" 18    for i in range(5): 19        c = img.getpixel((i * 3, i * 3)) 20        value += "%d,%d,%d," % (c[0], c[1], c[2]) 21    return hash(value) 22 23 24def game_area_image_to_matrix(): 25    pos_to_image = {} 26 27    for row in range(ROW_NUM): 28        pos_to_image[row] = {} 29        for col in range(COL_NUM): 30            grid_left = col * grid_width 31            grid_top = row * grid_height 32            grid_right = grid_left + grid_width 33            grid_bottom = grid_top + grid_height 34 35            grid_image = game_area_image.crop((grid_left, grid_top, grid_right, grid_bottom)) 36 37            pos_to_image[row][col] = grid_image 38 39    pos_to_type_id = {} 40    image_map = {} 41 42    empty_hash = color_hash((48, 76, 112)) 43 44    for row in range(ROW_NUM): 45        pos_to_type_id[row] = {} 46        for col in range(COL_NUM): 47            this_image = pos_to_image[row][col] 48            this_image_hash = image_hash(this_image) 49            if this_image_hash == empty_hash: 50                pos_to_type_id[row][col] = 0 51                continue 52            image_map.setdefault(this_image_hash, len(image_map) + 1) 53            pos_to_type_id[row][col] = image_map.get(this_image_hash) 54 55    return pos_to_type_id 56 57 58def solve_matrix_one_step(): 59    for key in map: 60        arr = map[key] 61        arr_len = len(arr) 62        for index1 in range(arr_len - 1): 63            point1 = arr[index1] 64            x1 = point1[0] 65            y1 = point1[1] 66            for index2 in range(index1 + 1, arr_len): 67                point2 = arr[index2] 68                x2 = point2[0] 69                y2 = point2[1] 70                if verifying_connectivity(x1, y1, x2, y2): 71                    arr.remove(point1) 72                    arr.remove(point2) 73                    matrix[y1][x1] = 0 74                    matrix[y2][x2] = 0 75                    if arr_len == 2: 76                        map.pop(key) 77                    return y1, x1, y2, x2 78 79 80def verifying_connectivity(x1, y1, x2, y2): 81    max_y1 = y1 82    while max_y1 + 1 = 0 and matrix[min_y1 - 1][x1] == 0: 86        min_y1 -= 1 87 88    max_y2 = y2 89    while max_y2 + 1 = 0 and matrix[min_y2 - 1][x2] == 0: 93        min_y2 -= 1 94 95    rg_min_y = max(min_y1, min_y2) 96    rg_max_y = min(max_y1, max_y2) 97    if rg_max_y >= rg_min_y: 98        for index_y in range(rg_min_y, rg_max_y + 1): 99            min_x = min(x1, x2)100            max_x = max(x1, x2)101            flag = True102            for index_x in range(min_x + 1, max_x):103                if matrix[index_y][index_x] != 0:104                    flag = False105                    break106            if flag:107                return True108109    max_x1 = x1110    while max_x1 + 1 = 0 and matrix[y1][min_x1 - 1] == 0:114        min_x1 -= 1115116    max_x2 = x2117    while max_x2 + 1 = 0 and matrix[y2][min_x2 - 1] == 0:121        min_x2 -= 1122123    rg_min_x = max(min_x1, min_x2)124    rg_max_x = min(max_x1, max_x2)125    if rg_max_x >= rg_min_x:126        for index_x in range(rg_min_x, rg_max_x + 1):127            min_y = min(y1, y2)128            max_y = max(y1, y2)129            flag = True130            for index_y in range(min_y + 1, max_y):131                if matrix[index_y][index_x] != 0:132                    flag = False133                    break134            if flag:135                return True136137    return False138139140def execute_one_step(one_step):141    from_row, from_col, to_row, to_col = one_step142143    from_x = game_area_left + (from_col + 0.5) * grid_width144    from_y = game_area_top + (from_row + 0.5) * grid_height145146    to_x = game_area_left + (to_col + 0.5) * grid_width147    to_y = game_area_top + (to_row + 0.5) * grid_height148149    pyautogui.moveTo(from_x, from_y)150    pyautogui.click()151152    pyautogui.moveTo(to_x, to_y)153    pyautogui.click()154155156if __name__ == '__main__':157158    COL_NUM = 19159    ROW_NUM = 11160161    screen_width = win32api.GetSystemMetrics(0)162    screen_height = win32api.GetSystemMetrics(1)163164    hwnd = win32gui.FindWindow(win32con.NULL, 'QQ游戏 - 连连看角色版')165    if hwnd == 0:166        exit(-1)167168    win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)169    win32gui.SetForegroundWindow(hwnd)170    window_left, window_top, window_right, window_bottom = win32gui.GetWindowRect(hwnd)171    if min(window_left, window_top)  screen_width or window_bottom > screen_height:172        exit(-1)173    window_width = window_right - window_left174    window_height = window_bottom - window_top175176    game_area_left = window_left + 14.0 / 800.0 * window_width177    game_area_top = window_top + 181.0 / 600.0 * window_height178    game_area_right = window_left + 603 / 800.0 * window_width179    game_area_bottom = window_top + 566 / 600.0 * window_height180181    game_area_width = game_area_right - game_area_left182    game_area_height = game_area_bottom - game_area_top183    grid_width = game_area_width / COL_NUM184    grid_height = game_area_height / ROW_NUM185186    game_area_image = PIL.ImageGrab.grab((game_area_left, game_area_top, game_area_right, game_area_bottom))187188    matrix = game_area_image_to_matrix()189190    map = {}191192    for y in range(ROW_NUM):193        for x in range(COL_NUM):194            grid_id = matrix[y][x]195            if grid_id == 0:196                continue197            map.setdefault(grid_id, [])198            arr = map[grid_id]199            arr.append([x, y])200201    pyautogui.PAUSE = 0202203    while True:204        one_step = solve_matrix_one_step()205        if not one_step:206            exit(0)207        execute_one_step(one_step)208        time.sleep(random.randint(0,0)/1000)

主要思路就是利用pywin32获取连连看游戏句柄, 获取游戏界面的图片, 对方块进行切割, 对每个方块取几个点的颜色进行比对, 均相同则认为是同一个方块,

然后模拟鼠标取消就行了, 代码的最后一行是每次点击的间隔。

b15ad5821ecb43025e026cff23375486.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值