def click_until_multi(self, tag, *img_path, pos, pos_end=None, step_time=0.8): ''' 在某一时间段内,后台点击鼠标,直到出现列表中任一图片 :param tag: 按键名 :param img_path: 图片路径 :param pos: (x,y) 鼠标单击的坐标 :param pos_end=None: (x,y) 若pos_end不为空,则鼠标单击以pos为左上角坐标pos_end为右下角坐标的区域内的随机位置 :step_time=0.5: 查询间隔 :return: 成功返回True, 失败退出游戏 ''' # 在指定时间内反复监测画面并点击 start_time = time.time() while time.time() - start_time <= self.max_op_time and self.run: # 点击指定位置 self.yys.mouse_click_bg(pos, pos_end) self.log.info('点击 ' + tag) ut.mysleep(step_time * 1000) maxval, _ = self.yys.find_multi_img(*img_path) if max(maxval) > 0.9: self.log.info('点击 ' + tag + ' 成功') return True # 提醒玩家点击失败,并在5s后退出 self.click_failed()
def click_until(self, tag, img_path, pos, pos_end=None, step_time=0.8, appear=True): ''' 在某一时间段内,后台点击鼠标,直到出现某一图片出现或消失 :param tag: 按键名 :param img_path: 图片路径 :param pos: (x,y) 鼠标单击的坐标 :param pos_end=None: (x,y) 若pos_end不为空,则鼠标单击以pos为左上角坐标pos_end为右下角坐标的区域内的随机位置 :step_time=0.5: 查询间隔 :appear: 图片出现或消失:Ture-出现;False-消失 :return: 成功返回True, 失败退出游戏 ''' # 在指定时间内反复监测画面并点击 start_time = time.time() while time.time() - start_time <= self.max_op_time and self.run: # 点击指定位置 self.yys.mouse_click_bg(pos, pos_end) self.log.info('点击 ' + tag) ut.mysleep(step_time * 1000) result = self.yys.find_game_img(img_path) if not appear: result = not result if result: self.log.info('点击 ' + tag + ' 成功') return True # 提醒玩家点击失败,并在5s后退出 self.click_failed()
def mitama_team_click(self): ''' 御魂标记己方式神 ''' num = self.mitama_team_mark if num > 0: # 100 1040 # 125 50 # 御魂场景获取标记位置 min = (num - 1) * 105 + (num - 1) * 100 + 95 max = min + 50 pos = (min, 355), (max, 425) start_time = time.time() while time.time() - start_time <= 3: x1 = pos[0][0] - 100 y1 = pos[0][1] - 250 x2 = pos[1][0] + 100 y2 = pos[1][1] exp_pos = self.yys.find_color(((x1, y1), (x2, y2)), (134, 227, 96), 5) # print('颜色位置', exp_pos) if exp_pos != -1: self.log.info('标记式神成功') return True else: # 点击指定位置并等待下一轮 self.yys.mouse_click_bg(*pos) self.log.info('标记式神') ut.mysleep(500) self.log.warning('标记式神失败')
def click_until_knn(self, tag, img_path, pos, pos_end=None, step_time=0.5, appear=True, thread=0): ''' 在某一时间段内,后台点击鼠标,直到出现某一图片出现或消失 :param tag: 按键名 :param img_path: 图片路径 :param pos: (x,y) 鼠标单击的坐标 :param pos_end=None: (x,y) 若pos_end不为空,则鼠标单击以pos为左上角坐标pos_end为右下角坐标的区域内的随机位置 :step_time=0.5: 查询间隔 :appear: 图片出现或消失:Ture-出现;False-消失 :thread: 检测阈值 :return: 成功返回True, 失败退出游戏 ''' # 在指定时间内反复监测画面并点击 start_time = time.time() while time.time()-start_time <= self.max_op_time and self.run: result = self.yys.find_game_img_knn(img_path, thread=thread) if not appear: result = not result if result: self.log.writeinfo(self.name + '点击 ' + tag + ' 成功') return True else: # 点击指定位置并等待下一轮 self.yys.mouse_click_bg(pos, pos_end) self.log.writeinfo(self.name + '点击 ' + tag) ut.mysleep(step_time*1000) self.log.writewarning(self.name + '点击 ' + tag + ' 失败!') # 提醒玩家点击失败,并在5s后退出 self.yys.activate_window() time.sleep(5) self.yys.quit_game()
def __init__(self, name='', emyc=0): # 初始参数 self.emyc = emyc self.name = name # 启动日志 self.log = WriteLog() # 绑定窗口 self.yys = GameControl(u'阴阳师-网易游戏') self.log.writeinfo(self.name + 'Registration successful') # 激活窗口 self.yys.activate_window() self.log.writeinfo(self.name + 'Activation successful') ut.mysleep(500)
def check_end(self): ''' 检测是否打完 :return: 胜利页面返回0;奖励页面返回1 ''' self.log.writeinfo(self.name + '检测是战斗是否结束') start_time = time.time() while time.time() - start_time <= self.max_win_time and self.run: maxVal, maxLoc = self.yys.find_multi_img('img/SHENG-LI.png', 'img/TIAO-DAN.png', 'img/JIN-BI.png') end_cof = max(maxVal) if end_cof > 0.9: myend = maxVal.index(end_cof) break ut.mysleep(800) if myend in [0]: logging.info(self.name + '战斗成功') return 0 elif myend in [1, 2]: logging.info(self.name + '本轮战斗结束') return 1
def check_exp_full(self): ''' 检查狗粮经验,并自动换狗粮 狗粮序列,1-左; 2-中; 3-右; 4-左后; 5-右后 ''' if self.gouliang == None: return # 狗粮经验判断 gouliang = [] if 1 in self.gouliang: gouliang.append( self.yys.find_game_img('img\\MAN2.png', 1, *TansuoPos.gouliang_left, 1, 0.8)) if 2 in self.gouliang: gouliang.append( self.yys.find_game_img('img\\MAN2.png', 1, *TansuoPos.gouliang_middle, 1, 0.8)) if 3 in self.gouliang: gouliang.append( self.yys.find_game_img('img\\MAN2.png', 1, *TansuoPos.gouliang_right, 1, 0.8)) if 4 in self.gouliang: gouliang.append( self.yys.find_game_img('img\\MAN2.png', 1, *TansuoPos.gouliang_leftback, 1, 0.8)) if 5 in self.gouliang: gouliang.append( self.yys.find_game_img('img\\MAN2.png', 1, *TansuoPos.gouliang_rightback, 1, 0.8)) # 如果都没满则退出 res = False for item in gouliang: res = res or bool(item) if not res: return # 开始换狗粮 while self.run: # 点击狗粮位置 self.yys.mouse_click_bg(*TansuoPos.change_monster) if self.yys.wait_game_img('img\\QUAN-BU.png', 3, False): break time.sleep(1) # 点击“全部”选项 self.yys.mouse_click_bg(*TansuoPos.quanbu_btn) time.sleep(1) # 点击卡片 if self.change_shikigami == 1: self.yys.mouse_click_bg(*TansuoPos.n_tab_btn) elif self.change_shikigami == 0: self.yys.mouse_click_bg(*TansuoPos.s_tab_btn) elif self.change_shikigami == 2: self.yys.mouse_click_bg(*TansuoPos.r_tab_btn) time.sleep(1) # 拖放进度条 if self.slide_shikigami: # 读取坐标范围 star_x = TansuoPos.n_slide[0][0] end_x = TansuoPos.n_slide[1][0] length = end_x - star_x # 计算拖放范围 pos_end_x = int(star_x + length / 100 * self.slide_shikigami_progress) pos_end_y = TansuoPos.n_slide[0][1] self.yys.mouse_drag_bg(TansuoPos.n_slide[0], (pos_end_x, pos_end_y)) time.sleep(1) # 更换狗粮 for i in range(0, len(self.gouliang)): if gouliang[i]: if self.gouliang[i] == 1: self.yys.mouse_drag_bg((422, 520), (955, 315)) elif self.gouliang[i] == 2: self.yys.mouse_drag_bg((309, 520), (554, 315)) elif self.gouliang[i] == 3: self.yys.mouse_drag_bg((191, 520), (167, 315)) elif self.gouliang[i] == 4: self.yys.mouse_drag_bg((309, 520), (829, 315)) elif self.gouliang[i] == 5: self.yys.mouse_drag_bg((191, 520), (301, 315)) ut.mysleep(1000)