​掌上树莓派Pico W能自己编写游戏

电子说

1.3w人已加入

描述

《乒乓球》游戏无限量。

当前,人们对设计用于帮程序员编写软件的人工智能(AI)工具非常感兴趣。GitHub的Copilot和亚马逊的CodeWhisperer通过对深度学习技术进行调整,可以生成源代码。最初开发该技术是为了生成自然语言文本。其理念是,程序员可以将这些工具作为一种强有力的自动完成方法,使用提示来生成代码块,开发人员将代码块集成到自己的软件中。

看着这些工具时,我想知道:我们能否再进一步,无需程序员参与?能不能只是按一下按钮,即可完成一段可运行程序的编写和部署?

我的日常工作是为微控制器编写嵌入式软件,因此我立刻想到了将一个独立的手持设备用作演示平台。借助一个屏幕和几个控件,用户将能够与简单的AI生成软件进行交互。无限量《乒乓球》(Pong)游戏的概念由此诞生。

我选择《乒乓球》游戏有几个原因。该游戏的玩法很简单,雅达利最初的1972年《乒乓球》街机机箱上是这样解释的:“要取得高分,就避免丢球。”只要一个向上的按钮和一个向下的按钮就可以玩这个游戏了。《乒乓球》与20世纪70年代和80年代打造的许多经典雅达利游戏一样,仅需编写较少的几行代码,已经作为编程练习题目实现了很多很多次。这意味着在AI工具训练数据的源代码资源库中有丰富的《乒乓球》游戏示例,这就提高了获得可行结果的可能性。

深度学习

我使用了一台售价6美元的树莓派Pico W作为手持设备的核心,借助它的内置无线功能,可以直接连接基于云端的AI工具。为此,我安装了一个售价9美元的Pico LCD 1.14显示模块。它的240×135彩色像素足够用于《乒乓球》游戏,而且该模块集成了两个按钮和一个双轴微型操纵杆。

深度学习

我为Pico选择的编程语言是MicroPython,因为它是我常用的语言,而且它是一种解释型语言代码,不需要基于个人计算机的编译器即可运行。我使用的AI编码工具是OpenAI Codex。使用可对Web的HTTP格式查询做出响应的API即可访问OpenAI Codex。使用MicroPython的urequests和ujson库,可以直接构建和发送查询。在目前的测试阶段,使用OpenAI Codex API是免费的,但需要注册,而且查询限制为每分钟20次,即使是最狂热的《乒乓球》游戏玩家,这也足够了。

下一步是创建容器程序。该程序负责检测何时通过按钮请求《乒乓球》的新版本,向OpenAI Codex发送提示、接收结果并启动游戏。容器程序还设置了一个硬件抽象层,处理Pico和LCD/控制模块之间的物理连接。

整个项目中最关键的部分是创建提示,每当我们想要OpenAI Codex吐出新版《乒乓球》时,这个提示都会传输到OpenAI Codex。提示是一段纯文本,带有最简单的源代码框架,用几行代码概述很多电子游戏中常见的结构,即我们要用的库列表、处理事件(如按键)的调用、根据这些事件更新游戏状态的调用,以及在屏幕上显示更新状态的调用。

如何使用这些库以及如何填写调用取决于AI。将这种通用结构转化为《乒乓球》游戏的关键是嵌入注释,这些注释在人工编写的源代码中是可选择的,但在提示中是非常有用的。注释使用简单的英语来描述游戏玩法,例如,“该游戏包括以下类别……球:该类别代表球。它具有一个位置、一种速度和一个调试属性。乒乓球:该类别代表游戏本身。它具有两个挡板和一个球。它知道如何检查游戏结束。”(在Hackaday.io上可以使用树莓派Pico W来玩《乒乓球》游戏;该网站有我的容器和提示代码。)

深度学习

AI返回大约300行代码。在我早期的尝试中,代码无法显示游戏,因为我的模块使用的MicroPython帧缓冲(framebuffer)库版本与训练OpenAI Codex的帧缓冲库不同。解决方案是添加提示注释,描述我的库所使用的方法,例如“de f rectangle (self, x, y, w, h, c)”。另一个问题是,许多训练示例使用的是全局变量,而我最初的提示是将变量属性定义为作用于单个类,这通常是更好的做法。最终我不得不放弃,顺其大流,将我的变量声明为全局变量。

当前,在由我的提示返回的代码中,有80%都能产生可行的《乒乓球》游戏。有时游戏完全不能玩,有时能产生游戏,但不太像《乒乓球》,例如,挡板不仅上下移动,有时还能左右移动。有时是两个人来玩,有时是一人与机器对抗。由于提示中未做指定,因此Codex会采用两个选项之一。与机器对抗时,很想看看Codex如何实施这部分代码逻辑。

那么,这段代码的作者是谁?当然,其中存在一些法律争议,例如,该代码如何获取许可?因为许多训练集都基于开源软件,相关软件对由此衍生的代码规定了特定的许可条件。但对于作者,许可权和所有权是分开的,关于所有权,我认为应属于使用AI工具并验证结果的程序员,这就像你使用某公司制作的绘画程序,使用了公司的画笔和滤镜,创作了一件艺术作品。

至于我的项目,下一步将研究更复杂的游戏,比如1986年推出后风靡一时的街机游戏《打砖块》,有人知道吗?

审核编辑 :李倩  

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分