Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


契机

近几个月人工智能可以说是最抢流量的话题之一了,笔者也不能免俗,一直都在尝试和摸索与 AI 共同进行写作、翻译等本职工作的可能性。不过在其他领域的应用方面几乎没动什么脑筋,直到又遇见了老冤家——《最终幻想 6》。

以前也曾经在各大平台尝试过这款经典 RPG ,但终究因为各种原因没有坚持到底。前阵子发现史克威尔又拿像素重置版在主机平台炒了一波冷饭,才想起自己去年已经买过 PC 版了。于是又一次把它给捡了起来,也不知道这次能不能顺利来到最终 boss 面前。

不过玩着玩着发现,作为一名肢体残障人士,多年来玩游戏遇到的障碍始终无法得到好的解决,所以笔者心血来潮,突然开始琢磨:

有没有一种可能,让 AI 替我设计一款完全化解个人痛点的游戏辅助工具呢?

于是就有了这篇文字中记录的整个过程。

(本项目最终成品代码: AI 设计的屏幕键盘

个人情况和需求

笔者患有神经肌肉类疾病,全身几乎无法活动,平时都是靠左手拇指与食指操作轨迹球鼠标或语音识别来控制各种设备。(这里吐槽一句,罗技的木星轨迹球怎么就停产了啊,搞得现在新品价格涨到以往的十倍不止。)

作为几十年如一日的骨灰级玩家,笔者也试用过不少黑科技来帮助自己游戏。比如大名鼎鼎的语音控制工具 VoiceAttack、各种屏幕键盘,甚至朋友替我特制的主机专用虚拟手柄转接器——尽管是过去式了,但那件设备真的非常有用,伴我度过了整个 PS3 和 PS4 时代。

其中,语音控制类工具虽然功能强大,但毕竟比鼠标直接操作要慢半拍,而且特别费嗓子(笔者有慢性咽炎)。除了工作时不得不用以外,玩非动作类的游戏还是不太想劳它大驾。

所以只要设置好按键,屏幕键盘似乎是最优解。可惜 Windows 系统自带的屏幕键盘因为功能简陋、可自定义程度低,早已被我扔进回收站。

笔者目前主要使用的屏幕键盘是 Hot Virtual Keyboard ,这也是一款老牌工具了,不仅有各种主题,还能调整按键位置、设计简单的指令脚本,其实是很推荐的。但是,就连它也无法满足游戏中经常遇到的需求——同时按下若干个键,最典型的例子是控制人物八方向移动(向左上方走就要同时按下 w 和 a 键),在玩《最终幻想 6》的时候就很需要。

Hot Virtual Keyboard很好用,可惜不支持同时按下
Hot Virtual Keyboard很好用,可惜不支持同时按下。

显然,鼠标光标只有一个,而我又只有一根拇指可以用,要想在屏幕键盘上同时按下两个以上的按键,只能设置对应多个键盘按键的虚拟按钮。遗憾的是,目前市面上并没有能够实现这一功能的屏幕键盘。

这个问题困扰笔者很久,虽然中间曾通过按键精灵脚本勉强绕过,但按键精灵类工具容易与各种系统热键发生冲突或导致误操作,使用也不是很方便。

笔者几乎是个编程小白,只是少年时稍微学过一点 C 语言,去年也心血来潮了解过 Python 语言的基本语法,自认是没本事丰衣足食的。

所以我一般会通过语音控制让计算机先替我按住一个键盘按键,然后自己再去按屏幕键盘上的另一个按钮,这样虽然挺费事的,却也能大致应付游戏需要了。

然而现在,我们有了 ChatGPT。

制作过程

准备工作

毕竟只是做一款个人用的小工具,选择 Python 作为编程语言从各种意义上说都是合适的,因此我们需要的工具很简单:

  • 一款脚本语言编辑器,我用的是 Visual Studio Code。
  • 一位人工智能乙方。因为有 Plus 账户,我用的是 GPT-4 ,理论上 3.5 也可以;本来的打算是如果 ChatGPT 搞不定,就去求助 Google 的 Bard ,但因为后者只能通过英文交流,还是有点抗拒。

整理出的需求如下:

  • 一个至少有 26 个虚拟按钮的窗口(16 个按钮给左右摇杆,其余给手柄功能键);
  • 每个虚拟按钮都可以对应一个或两个以上键盘按键;
  • 按钮对应的键盘按键可以自定义;
  • 窗口大小和按钮位置可以自由调整;
  • (重要)该窗口不能获得窗口焦点,因为要用来操作别的窗口,所以要始终保持窗口焦点在对象窗口中(也是屏幕键盘的标配)。

保证基本功能

首先,作为甲方的我们发出第一条 prompt。

细节部分和上面的需求可能有出入,毕竟一开始有些地方还没考虑到,不过总的方向已经确定了。

乙方反馈:

一直都是这么干净利落,直接给成品代码,运行结果如下:

看起来挺正常,对吧?

然而并不是。

窗口会不停闪烁,点击后也会立刻获取焦点,没办法操作目标窗口。

于是我们进行反馈。

emmm,这个甲方还挺客气的,其他功能还可以?意思是长得像而已啦……

乙方表现的情商也很高:

窗口始终在最前,又不获取焦点,好像真的是屏幕键盘。

实际情况如何?

看起来更像一个正常的窗口了,不光有标题栏,还能随意拖动和调整大小(从这些额外因素看,甚至连最终成品都比它要差一些)。

可惜……

image-20230514095531543

我明明将焦点移到了 Windows 便笺,可是按下屏幕键盘上的按钮后,焦点仍然回到了屏幕键盘,无法在文字编辑区输入结果。

后来想了一下,最基本的要求其实是保证焦点停在对象窗口,而不是让屏幕键盘始终保持最前,于是对需求稍作修改:

win32 龟?什么东西?……先不去管他,看结果。

怎么比前一版更难看了?少了标题栏,不能调整窗口大小,也不能移动窗口了。但是但是……

可以在便笺输入文字了!

这也就意味着焦点问题得到解决,离真正实用只有一步之遥了。

调整到完成

从现在起,我们的目标是让这款屏幕键盘真正玩起游戏!

看起来 ChatGPT 又一次读懂了我们的意思,实际跑一下看看吧。

???

……通天棍?

虽然多了个「X」按钮,能用来关闭程序,鼠标拖动空白处也确实可以移动窗口了,不过这也太……

立即吐槽不可描述的形状。

改正态度积极,然而

这是目前为止第一次无法启动,怎么还开倒车了?

反馈后得到的结果是:

查看代码可以发现其中有一行:

root.geometry("800x400+100+100")  # 长度x宽度+X轴位置+Y轴位置

在这里我们可以设定窗口的初始位置和大小,虽然这个窗口目前不能自由调整,但是这样也算满足了我们最初的需要。

接下来就是关于按键设置的问题:

这毕竟是我们最关心的问题嘛,ChatGPT 的回答简洁干脆:

结果又无法运行,反馈后得到的回复是:

别说,这个 bug 还有点蠢萌,但是用了它修改后的代码,结果依然是

好吧,总之就是指定的列表元素不够按键数量呗,我们可以自己调整。

为了让布局再舒服一点,ChatGPT 又为我们做了一些改进:

到此为止,我们已经可以在代码中调整虚拟按钮出现的位置和窗口位置、大小,后面只剩下一些枯燥的微调工作,最终窗口如下:

不不不,不许说丑!又又又,又没逼着你们用,我自己欣赏还不行吗?!

玩游戏时是这样的:

可以看到,按下“w+a”后克叔是在朝左上方移动。
这次变成了左下。
当然主要是为了玩它。

可以看出,这款屏幕键盘对一般的 PC 游戏和虚拟机类应用都能顺利兼容,大功告成!

总结与展望

自孤独面对窗外世界的少年时代起,游戏就是笔者最忠实的玩伴。但因为身体原因,想玩最新的游戏或者把老游戏玩得舒服,我也不得不付出比常人更多的钻研精力。

这个过程虽然辛苦,却也快乐。

如今我们一只脚已经踏入 AI 时代的大门,作为一名残障人士,似乎能看到更多的希望。所以笔者也很想和大家一起尝试各种新鲜的应用方式,来让我们的工作、生活和娱乐变得更轻松有趣。

生命在于折腾。

> 下载 少数派 2.0 客户端 、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀