面对黑神话,晕3D的人表示绝对不会沉迷;但面对4399,有的人却常常无法自拔......
几个月前,吴巨星发来一个文件,竟然是B站up主早春樱花的神作《八荒湮隳》!几星期前突发奇想,准备帮这师徒四人提升一下修行速度。于是昨天趁着放假,给天蓬元帅量身打造了修行方案。事实证明打造过程虽不跌宕,但也小有起伏......
操作内容:实现角色自动修行,即实现自动往前走、放技能打怪、自动重新闯关。
基本操作:C、T、Rap、L...咳错了,重来:A(左移)、D(右移)、K(跳);八戒技能U(战争怒吼)、I(巨石破)(个人习惯);W(返回地图)。之所以不偏心悟空,是因为天蓬元帅的U技能太好用了!
怎么实现自动往前跑呢?只要按“D”就好了。原思路是使用电脑搜狗自带的软键盘,调用虚拟鼠标定位“D”,轻松解决;现实是切换到游戏页面,软键盘就没了,打脸orz...解决思路:调用虚拟键盘,按顺序“D→K→K→U→I”连跑带A怪,完美!
打完终极BOSS,怎么结束关卡?从地图最右侧按“A”向左位移,大概0.7秒,跑到发光的“W”处,然后停止左移,虚拟键盘按“W”,进入结算画面。
结算画面会弹出“重新挑战”和“返回地图”,怎么进入下个循环?调用pynput,虚拟鼠标锁定“重新挑战”位置并点击,perfect!
晚上挂一夜,懒得计算时间,外循环直接设置成无限次(用while True:),实现每轮关卡的无限循环;内循环(释放技能)次数由于关卡不同所以略有差异,25次到60次不等。至此,基本代码已经写好了。Python,运行!
你问我运行代码之后怎么切游戏?哈哈,自动不了一点,纯纯手动!调用time库,根据手速设置sleep时间,然后运行代码后在sleep时间内切换至提前打开的游戏地图页面,于是一个伪联动就造好了!
你问我没蓝了怎么办?角色挂了怎么办?哈哈,感谢游戏策划,商城里有一个头衔叫修成正果,穿上它直接无敌!!
万一漏了小怪怎么办?哈哈,因为天蓬元帅怎么会犯这种低级错误,技能U可不是吓唬人的!
你可能会抬杠:都无敌了,还刷什么级?额饿呃好问题!有没有一种可能,,玩代码比玩游戏更有趣?!
言归正传,以“水帘洞”关卡为例,八戒的自动修行正式开始!代码见下:
# 操作内容:虚拟操作-八戒的自动升级之路
# 问题关键:A(左跑)、D(右跑)、K(跳跃);八戒技能U(战争怒吼)、I(巨石破);W(返回地图)
# 八荒湮隳,启动!!
# 选一个地图(注:排除桃花源,墙高)(此处桃花源为例)
# 设置头衔:修成正果(后期不用)
# 运行此代码并在三秒内切换至游戏界面
# sleep or watch show time
import time
import pydirectinput
from pynput.mouse import Controller, Button
mouse = Controller()
time.sleep(3) # 反应时间,切换至水帘洞关卡
while True: # 外循环XX次,或者改成while True无限循环
for j in range(25): # 内循环25次,具体看地图合理修改;可调大些增加容错
# 按D不松手,向右一直跑
pydirectinput.keyDown('d')
# 按k两次,二连跳(有些图不需要)
pydirectinput.keyDown('k')
time.sleep(0.1) # 按住U键0.1秒
pydirectinput.keyUp('k')
time.sleep(0.1) # 间隔0.1秒
pydirectinput.keyDown('k')
time.sleep(0.1) # 按住U键0.1秒
pydirectinput.keyUp('k')
time.sleep(0.1) # 间隔0.1秒
# 按U进行战争怒吼
pydirectinput.keyDown('u')
time.sleep(0.1) # 按住U键0.1秒
pydirectinput.keyUp('u')
time.sleep(0.1) # 间隔0.1秒
# 按I进行巨石破
pydirectinput.keyDown('i')
time.sleep(0.1) # 按住U键0.1秒
pydirectinput.keyUp('i')
time.sleep(0.1) # 间隔0.1秒
time.sleep(1) # 往前跑3秒
pydirectinput.keyUp('d') # 不跑了
# time.sleep(3)
# 准备结算
time.sleep(1) # 切换时间
pydirectinput.keyDown('a') # 按A向左跑
time.sleep(1.5)
pydirectinput.keyUp('a') # 松开A停止移动
# 按W
pydirectinput.keyDown('w') # 按w结束战斗
pydirectinput.keyUp('w') # 松开w完结撒花
time.sleep(3) # 结束画面反应时间
mouse.position = (380, 280) # 移动鼠标到 空白区(具体看屏幕尺寸)
mouse.click(Button.left, 1) # 左键单击
mouse.position = (380, 480) # 移动鼠标到 "重新挑战"(具体看屏幕尺寸)
mouse.click(Button.left, 1) # 左键单击
下次一定:怎样适配多个地图?虚拟鼠标还要找好位置,换成像素识别等高端操作?其他角色怎么不漏小怪?下次一定下次一定!
——2025.01.17