开炮辅助抢环球打远征
·
原理并不难,就是用Python写一个界面,然后放置一些组件按钮等,但是比连点器要灵活一些,因为这里还可以获取系统参数用于判断代码后序需要执行的方式:
大致思路的源代码如下所示:
# pyautogui.click((choice_ptx,choice_pty)) # 不断点击技能选择
小橘子V4.829 https://wwapw.lanzouu.com/im4Cy3crucaf
小橘子V6.512 https://wwapw.lanzouu.com/iPFUT3crtzbi
# 对选择技能的界面进行截图
screen_return = pyautogui.screenshot()
screen_return = np.array(screen_return).astype(np.uint8)
work3_roi = screen_return[work3_ymin:work3_ymin+work3_h, work3_xmin:work3_xmin+work3_w]
work4_roi = screen_return[work4_ymin:work4_ymin+work4_h, work4_xmin:work4_xmin+work4_w]
if debug and saveResImg:
nowtime = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
name34 = 'CSkill3_'+nowtime+'_'+str(gamei).zfill(3)+'.png'
name4 = 'CSkill4_'+nowtime+'_'+str(gamei).zfill(3)+'.png'
dimdir34 = osp.join(dstfo2, name34)
dimdir4 = osp.join(dstfo2, name4)
cv2.imwrite(dimdir34, work3_roi) # 保存整个游戏界面 2024-10-12 20:49:19
# ===============================================================================================
if printlog:
print('tempW',tempW)
if allscreen_flag:
roi_jnxz = work4_roi[0:int(0.31*tempW),int(0.41*tempW):int(1.69*tempW)] # '技能选择'四个字
roi_jn_ico = work4_roi[int(0.72*tempW):int(1.23*tempW),:] # 三个技能图标的位置
roi_jn_txt = work4_roi[int(1.18*tempW):int(1.69*tempW),:] # 技能图标下面对应的文字描述位置
roi_jy_ico = work4_roi[int(1.69*tempW):,int(0.72*tempW):int(1.44*tempW)] # 精英掉落的位置
if printlog:print('>>>>>>>>全屏roi_jnxz:', roi_jnxz.shape)
else:
roi_jnxz = work4_roi[0:int(0.35*tempW),int(0.41*tempW):int(1.69*tempW)] # '技能选择'四个字
roi_jn_ico = work4_roi[int(0.72*tempW):int(1.28*tempW),:] # 三个技能图标的位置
roi_jn_txt = work4_roi[int(1.18*tempW):int(1.74*tempW),:] # 技能图标下面对应的文字描述位置
roi_jy_ico = work4_roi[int(1.69*tempW):,int(0.72*tempW):int(1.49*tempW)] # 精英掉落的位置
if printlog:print('>>>>>>>>小屏roi_jnxz:', roi_jnxz.shape)
# 开始匹配技能选择模板
ico_jnxz = all_ico_templs[0]
pts_jnxz, maxsco_jnxz = match_template(roi_jnxz, ico_jnxz) # 匹配技能选择小图标
randfloat2 = np.random.uniform(0.7, 0.9)
time.sleep(randfloat2)
screen_return2 = pyautogui.screenshot()
screen_return2 = np.array(screen_return2).astype(np.uint8)
work4_roi2 = screen_return2[work4_ymin:work4_ymin+work4_h, work4_xmin:work4_xmin+work4_w]
roi_jn_ico = work4_roi2[int(0.72*tempW):int(1.23*tempW),:] # 三个技能图标的位置
roi_jn_txt = work4_roi2[int(1.18*tempW):int(1.69*tempW),:] # 技能图标下面对应的文字描述位置
if maxsco_jnxz>=icothre:
# 匹配到技能选择才进行后续操作
if printlog:print('匹配到技能选择图标,sco:', maxsco_jnxz)
# 区域截图保存到本地查看效果
nowtime = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
dir_jnxz = osp.join(dstfo2, nowtime+'_jnxz_'+str(gamei).zfill(3)+'.png')
dir_ico = osp.join(dstfo2, nowtime+'_ico_'+str(gamei).zfill(3)+'.png')
dir_txt = osp.join(dstfo2, nowtime+'_txt_'+str(gamei).zfill(3)+'.png')
dir_jy = osp.join(dstfo2, nowtime+'_jydl_'+str(gamei).zfill(3)+'.png')
randfloat3 = np.random.uniform(0.1, 0.25)
time.sleep(randfloat3) # 选技能之前延迟一下
# pyautogui.click((jn_ico_xmin+5,jn_ico_ymin+5)) # 不断点击技能选择
# 能索引,查get_jn_names()中的字典可知9为枪械,15,20为x,y坐标,0.95为对应的匹配分数
matched_jn_ptscos = match_jineng(roi_jn_ico, all_ico_templs)
if printlog:
for idx_jn, ptsco in matched_jn_ptscos.items():
print('>>>matched_jn_ptscos:', idx_jn, ptsco)
print()
# 开始正式根据技能的优先级进行点击,click_pts_3jn在前面已经做过坐标随机偏移了
click_pts = click_prior_jn(matched_jn_ptscos, click_pts_3jn, roi_jn_ico)
if printlog:print()
pyautogui.click(click_pts)
if printlog:print('click_pts:', click_pts)
# 开始匹配返回按钮
screen2 = pyautogui.screenshot()
screen2 = np.array(screen2).astype(np.uint8)
work_roi = screen2[work_ymin:work_ymin+work_h, work_xmin:work_xmin+work_w]
matpts2, maxsco2 = match_template(work_roi, temp_return)
if debug and saveResImg:
cv2.imwrite(osp.join(dstfo, 'work_roi'+str(i)+'.png'), work_roi)
# print('匹配返回maxsco2:', i, maxsco2)
if maxsco2<matthre:
continue # 没有找到返回按钮
else:
# print('找到返回按钮')
return_ptx = matpts2[0] + int(temp2W/2) + work_xmin # 注意需要映射回全原图的坐标
return_pty = matpts2[1] + int(temp2H/2) + work_ymin
randfloat7 = np.random.uniform(0.8, 1)
time.sleep(randfloat7)
if simulate:
print('AAAAA点击返回')
else:
# 对一局游戏完成的界面进行截图
if debug and saveResImg:
screen_return = pyautogui.screenshot()
screen_return = np.array(screen_return).astype(np.uint8)
work3_roi = screen_return[work3_ymin:work3_ymin+work3_h, work3_xmin:work3_xmin+work3_w] # 整个游戏界面
nowtime = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
name3 = 'ResImg_'+nowtime+'_'+str(gamei).zfill(3)+'.png'
dimdir3 = osp.join(dstfo2, name3)
cv2.imwrite(dimdir3, work3_roi)
return_ptxi = np.random.randint(return_ptx-5,return_ptx+5)
return_ptyi = np.random.randint(return_pty-5,return_pty+5)
if printlog:print('点击返回游戏的位置:', return_ptxi, return_ptyi)
pyautogui.click((return_ptxi, return_ptyi)) # 点击返回退出游戏
更高级的远征版本的思路基本也是一致的,就是很多细小的匹配需要自己封装函数和类,便于频繁调用。因为代码设计到识别,所以对电脑的性能还是有一定要求的,十年前的笔记本估计是用不起来,新版本可以参考这里V8.223 https://wwapw.lanzouu.com/ioeSU3crtmfe
更多推荐



所有评论(0)