前言

最近在玩游戏光明旅者(Hyper Light Drifter),真的很好玩,强烈推荐。

其中的冲刺有一定的冷却CD,但是抓住时机以一定频率冲刺就可以破除CD不停地冲刺,我尝试了一下连续冲刺十五次是没有问题的,但是冲刺挑战成就竟然需要连续冲刺800下!

于是就有了这篇说明使用python刷成就的方法的文章。

如果不想看探索历程的,可以直接跳转到文章的解决方案

探索历程

首先冲刺挑战的判定仅仅是连续冲刺,并不需要绕圈。

所以要想利用python冲刺的话,改为键鼠操作,然后把鼠标放在固定位置,控制键盘以一定频率按动,让人物不停来回横跳就行了。

我打算先实现用python操控游戏,然后再调试频率。

试验开始。

寻找键鼠操纵库

pykeyboard

在网上寻求答案的时候,我找到的第一个库是pykeyboard,当时我二话不说就用了起来。

from pykeyboard import PyKeyboard
from time import sleep k = PyKeyboard() while True:
k.press_key(k.space_key)
sleep(0.2)

然后确实在vscode运行程序之后,光标处不停地输入着空格。

大喜过望的我把光明旅者游戏界面打开,然而并没有预想中的效果。

主人公还是一动不动地站在原地,而当我按下空格的时候才会冲刺。

第一次尝试失败。而且我还不知道失败的原因。

pyautogui

我认为可能是库的原因,所以又换了一个库。这次是热门的pyautogui。

import time
import pyautogui while True:
pyautogui.press('space')
time.sleep(0.2)

然而不知道为什么还是不行。

郁闷中我又去网上查找答案,我先是觉得是光标的问题,如果把光标移动进入游戏界面,就可以顺利操控游戏。但是我并没有找到相关的内容。

然后我又把键位调成了鼠标右键冲刺,原本按空格的代码改成了

pyautogui.rightClick()

但还是不行。

我十分地迷茫。程序根本没有在游戏中进行操作,任何的实际键鼠操作都可以顺利地在游戏中响应。

甚至没有被程序影响。

这时候我忽然明白如果程序确实没有干涉到游戏读入键鼠的操作,因为如果它们读入的是同一个键鼠的话,那么在程序运行的时候是不可能用实际的键鼠流畅操作游戏的,而是会被程序所影响变得迟钝。

python也许只是在模拟键鼠的输入,而不是真正的键鼠操作。

这时候我醒悟了。在网上冲浪一番后找到了这个说明

https://www.zhihu.com/question/68458175

在进入游戏后鼠标模式就会从 raw input 切换为 direct input 模式,所以这时候你即使用python改了你本机的鼠标坐标,也移动不了游戏视角的。

这个模式应该是DirectX那家公司创的,就是众所周知的DX9,DX11。而这些都是基于C语言和Windows环境。所以目前只知道能在windows中实现调用 direct mouse input,而 linux / mac 目前还未知。所以开发游戏脚本/强化学习算法,最好还是在windows上做。

调用方法就是楼下提到的 win32api 库,或者下文中的 ctypes 库,再或者是专门为控制游戏视角而开发的python库 pydirectinput 都可以,后两者本质也是调用 win32api。

pydirectinput

然后我立刻去试了这个库。

import time
import pydirectinput while True:
pydirectinput.press('SPACE')
time.sleep(0.2)

确实可以了。

下面就是设定冲刺频率了。

冲刺频率

sleep尝试

首先我使用sleep函数。

但是很快就发现不太对劲,不管我调休眠多少时间都太慢了。

time观察

然后我用time察看了程序运行时间。

import time
import pydirectinput while True:
t0=time.time()
pydirectinput.press('SPACE')
print(time.time()-t0)



结果是0.32秒左右按键一次。

然后我测试了在游戏中达到连续冲刺实际需要的按键间隔。

这里使用了keyboard.hook来监听键盘事件。

import keyboard
import time keyboard.hook(lambda e: print(e, time.time()))



可以看到按下space的间隔大约是0.22秒左右。

这就很尴尬了。需要的时间间隔比程序可以做到的最少时间间隔整整多了0.1秒。

起初我以为是电脑配置的问题,程序运行得不够快。

但是后来我发现,pydirectinput库的函数是自带暂停休眠的!

https://www.likecs.com/ask-672805.html

还多亏了上面这位。

pause解决

然后我多加了一句代码。

import time
import pydirectinput while True:
t0=time.time()
pydirectinput.press('SPACE')
pydirectinput.PAUSE=0.03
print(time.time()-t0)

输出是这个样子:



由于太快了所以把pause时间改成0.14秒,这样正好就是0.22秒。

但是我进入游戏界面还是一抖一抖冲刺很慢。

然后我试着改成了0.08秒,结果非常成功。

可能是玩游戏的时候占用了CPU,程序在后台运行会变慢吧。

以下是最终解决方案。

解决方案

import keyboard
import time
import pydirectinput
#需要提前安装pydirectinput库,使用pip即可 while True:
pydirectinput.press('SPACE')
pydirectinput.PAUSE=0.08
#可能每个人电脑配置不一样,不行的话试试修改数值)

改成键鼠操作,运行然后进入游戏界面即可。

参考资料

本博客CSDN地址:

https://blog.csdn.net/zulumasaya/article/details/126259420?csdn_share_tail={"type"%3A"blog"%2C"rType"%3A"article"%2C"rId"%3A"126259420"%2C"source"%3A"zulumasaya"}&ctrtid=8YRcC

使用python完成光明旅者冲刺挑战成就的更多相关文章

  1. 不吹不擂,315 道 Python 面试题,欢迎挑战!

    各位大佬暂时先来315道题尝尝吧,后面有时间再继续补充. 有缘人如果看到这些题,不妨留言一下答案,来证明下你到底有多水,哈哈哈哈哈刀哈哈哈哈哈哈 第一部分 Python基础篇(80题) 1.为什么学习 ...

  2. Python 学习书籍推荐

    谁会成为AI 和大数据时代的第一开发语言? 这本已是一个不需要争论的问题.如果说三年前,Matlab.Scala.R.Java 和 Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明 ...

  3. 使用Python脚本分析你的网站上的SEO元素

    撰稿马尼克斯德芒克 上2019年1月, Sooda internetbureau Python就是自动执行重复性任务,为您的其他搜索引擎优化(SEO)工作留出更多时间.没有多少SEO使用Python来 ...

  4. 【年度盘点】最受欢迎的5大Java练习项目

    5. SSM + easyUI 搭建简易的人事管理系统 当前学习采用 SSM + easyUI 来开发一个比较简易的人事管理系统,让大家能够通过实际项目掌握 SSM 项目的开发.项目当前学习人数:16 ...

  5. 寒假挑战PythonTip(一人一python)总结——算法是程序的灵魂,程序员的心法

        2014年2月中旬,我上升到挑战python英雄榜第3名.这是我寒假修炼算法的成果之一.来一下总结吧! Linux的创始人Linus Torvalds在一次演讲中有一段涉及“什么才是优秀程序员 ...

  6. 小白学习Python之路---re模块学习和挑战练习

    本节大纲: 1.正则表达式 2.re模块的学习 3.速记理解技巧 4.挑战练习--开发一个简单的python计算器 5.心得总结 6.学习建议 正则表达式: 正则表达式,又称规则表达式.(英语:Reg ...

  7. 【Python 25】52周存钱挑战5.0(datetime库和import)

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  8. 【Python 22】52周存钱挑战2.0(列表list和math函数)

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  9. 【Python 21】52周存钱挑战1.0

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  10. 机器人编程挑战python

    机器人编程挑战 要使用pip安装模拟器,请运行pip install zombiedice(在Windows上)或pip3 install zombiedice(在macOS和Linux上).要使用一 ...

随机推荐

  1. 1.3K star!像拿快递一样传送文件,这么酷!

    嗨,大家好,我是小华同学,关注我们获得 "最新.最全.最优质" 开源项目和高效工作学习方法 trzsz 是一款革命性的文件传输工具,专为终端用户设计.它完美兼容传统 rz/sz 协 ...

  2. Sentinel——网关限流

    目录 网关限流 route维度 自定义异常 重定向 自定义结果 API维度 网关限流代码配置 网关限流 Sentinel 支持对 Spring Cloud Gateway.Zuul 等主流的 API ...

  3. Java编程--简单的Factory程序(工厂设计模式)

    Factory类不是接口.抽象类,就是普通的类. Factory就像一个工厂一样,可以返回很多对象. 子类在继承.实现抽象类和接口后由Factory类处理,由于子类可能会有多个,Factory根据客户 ...

  4. 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北过河人的同步问题(独木桥问题-代码补充)”

    1.问题:一条哦东西走向河流上,有一根南北走向的独木桥,要想过河只能通过这根独木桥.只要人们朝着相同的方向过独木桥,同一时刻允许有多个人可以通过.如果在相反的方向上同时有两个人过独木桥则会发生死锁.如 ...

  5. 在ARM笔记本和KylinOS桌面操作系统上安装docker

    目标 手头有一台华为L420笔记本,CPU为ARM(HUAWEI Kirin 9006C),OS为Kylin桌面操作系统V10(SP1),内核5.4.96,已激活. 需要安装docker,但在软件商店 ...

  6. SQL 查询强化 - 数据准备

    最近要搞新的项目了, 我的 BI 报表这块, 我感觉, 可能又要写sql, 对于一些简单的 查询, 表连接我还应付得来, 如果涉及多个表的, 什么子查询嵌套, 自定义函数, 加上控制流...就感觉就不 ...

  7. 解决更新WIFI驱动后出现网络适配器黄色三角警告

    更新WIFI驱动后出现网络适配器黄色三角警告问题的解决方案 在更新 Intel 无线网卡驱动后,遇到了网络适配器异常的问题,尤其是在曾经安装/卸载过 VMware 的电脑上.本篇文章将详细介绍这个问题 ...

  8. CTP报单业务介绍

    程序化登录信息 客户如果需要调用API介入柜台进行程序化交易,登录时需要一些基本信息,如下: 1.BrokerID 简称期货编码,是在该期货公司在CTP系统上的编码,为四位数,例如海通期货是8000 ...

  9. C# Environment.CurrentDirectory和AppDomain.CurrentDomain.BaseDirectory的区别

    Environment.CurrentDirectory 和 AppDomain.CurrentDomain.BaseDirectory 都是C#中用于获取当前应用程序的目录路径的方法,但是它们的用途 ...

  10. codeup之字符串求最大值

    Description 从键盘上输入3个字符串,求出其中最大者. Input 输入3行,每行均为一个字符串. Output 一行,输入三个字符串中最大者. Sample Input Copy Engl ...