《乒乓球》游戲無限量。
當(dāng)前,人們對(duì)設(shè)計(jì)用于幫程序員編寫軟件的人工智能(AI)工具非常感興趣。GitHub的Copilot和亞馬遜的CodeWhisperer通過對(duì)深度學(xué)習(xí)技術(shù)進(jìn)行調(diào)整,可以生成源代碼。最初開發(fā)該技術(shù)是為了生成自然語言文本。其理念是,程序員可以將這些工具作為一種強(qiáng)有力的自動(dòng)完成方法,使用提示來生成代碼塊,開發(fā)人員將代碼塊集成到自己的軟件中。
看著這些工具時(shí),我想知道:我們能否再進(jìn)一步,無需程序員參與?能不能只是按一下按鈕,即可完成一段可運(yùn)行程序的編寫和部署?
我的日常工作是為微控制器編寫嵌入式軟件,因此我立刻想到了將一個(gè)獨(dú)立的手持設(shè)備用作演示平臺(tái)。借助一個(gè)屏幕和幾個(gè)控件,用戶將能夠與簡(jiǎn)單的AI生成軟件進(jìn)行交互。無限量《乒乓球》(Pong)游戲的概念由此誕生。
我選擇《乒乓球》游戲有幾個(gè)原因。該游戲的玩法很簡(jiǎn)單,雅達(dá)利最初的1972年《乒乓球》街機(jī)機(jī)箱上是這樣解釋的:“要取得高分,就避免丟球。”只要一個(gè)向上的按鈕和一個(gè)向下的按鈕就可以玩這個(gè)游戲了。《乒乓球》與20世紀(jì)70年代和80年代打造的許多經(jīng)典雅達(dá)利游戲一樣,僅需編寫較少的幾行代碼,已經(jīng)作為編程練習(xí)題目實(shí)現(xiàn)了很多很多次。這意味著在AI工具訓(xùn)練數(shù)據(jù)的源代碼資源庫中有豐富的《乒乓球》游戲示例,這就提高了獲得可行結(jié)果的可能性。
我使用了一臺(tái)售價(jià)6美元的樹莓派Pico W作為手持設(shè)備的核心,借助它的內(nèi)置無線功能,可以直接連接基于云端的AI工具。為此,我安裝了一個(gè)售價(jià)9美元的Pico LCD 1.14顯示模塊。它的240×135彩色像素足夠用于《乒乓球》游戲,而且該模塊集成了兩個(gè)按鈕和一個(gè)雙軸微型操縱桿。
我為Pico選擇的編程語言是MicroPython,因?yàn)樗俏页S玫恼Z言,而且它是一種解釋型語言代碼,不需要基于個(gè)人計(jì)算機(jī)的編譯器即可運(yùn)行。我使用的AI編碼工具是OpenAI Codex。使用可對(duì)Web的HTTP格式查詢做出響應(yīng)的API即可訪問OpenAI Codex。使用MicroPython的urequests和ujson庫,可以直接構(gòu)建和發(fā)送查詢。在目前的測(cè)試階段,使用OpenAI Codex API是免費(fèi)的,但需要注冊(cè),而且查詢限制為每分鐘20次,即使是最狂熱的《乒乓球》游戲玩家,這也足夠了。
下一步是創(chuàng)建容器程序。該程序負(fù)責(zé)檢測(cè)何時(shí)通過按鈕請(qǐng)求《乒乓球》的新版本,向OpenAI Codex發(fā)送提示、接收結(jié)果并啟動(dòng)游戲。容器程序還設(shè)置了一個(gè)硬件抽象層,處理Pico和LCD/控制模塊之間的物理連接。
整個(gè)項(xiàng)目中最關(guān)鍵的部分是創(chuàng)建提示,每當(dāng)我們想要OpenAI Codex吐出新版《乒乓球》時(shí),這個(gè)提示都會(huì)傳輸?shù)絆penAI Codex。提示是一段純文本,帶有最簡(jiǎn)單的源代碼框架,用幾行代碼概述很多電子游戲中常見的結(jié)構(gòu),即我們要用的庫列表、處理事件(如按鍵)的調(diào)用、根據(jù)這些事件更新游戲狀態(tài)的調(diào)用,以及在屏幕上顯示更新狀態(tài)的調(diào)用。
如何使用這些庫以及如何填寫調(diào)用取決于AI。將這種通用結(jié)構(gòu)轉(zhuǎn)化為《乒乓球》游戲的關(guān)鍵是嵌入注釋,這些注釋在人工編寫的源代碼中是可選擇的,但在提示中是非常有用的。注釋使用簡(jiǎn)單的英語來描述游戲玩法,例如,“該游戲包括以下類別……球:該類別代表球。它具有一個(gè)位置、一種速度和一個(gè)調(diào)試屬性。乒乓球:該類別代表游戲本身。它具有兩個(gè)擋板和一個(gè)球。它知道如何檢查游戲結(jié)束。”(在Hackaday.io上可以使用樹莓派Pico W來玩《乒乓球》游戲;該網(wǎng)站有我的容器和提示代碼。)
AI返回大約300行代碼。在我早期的嘗試中,代碼無法顯示游戲,因?yàn)槲业哪K使用的MicroPython幀緩沖(framebuffer)庫版本與訓(xùn)練OpenAI Codex的幀緩沖庫不同。解決方案是添加提示注釋,描述我的庫所使用的方法,例如“de f rectangle (self, x, y, w, h, c)”。另一個(gè)問題是,許多訓(xùn)練示例使用的是全局變量,而我最初的提示是將變量屬性定義為作用于單個(gè)類,這通常是更好的做法。最終我不得不放棄,順其大流,將我的變量聲明為全局變量。
當(dāng)前,在由我的提示返回的代碼中,有80%都能產(chǎn)生可行的《乒乓球》游戲。有時(shí)游戲完全不能玩,有時(shí)能產(chǎn)生游戲,但不太像《乒乓球》,例如,擋板不僅上下移動(dòng),有時(shí)還能左右移動(dòng)。有時(shí)是兩個(gè)人來玩,有時(shí)是一人與機(jī)器對(duì)抗。由于提示中未做指定,因此Codex會(huì)采用兩個(gè)選項(xiàng)之一。與機(jī)器對(duì)抗時(shí),很想看看Codex如何實(shí)施這部分代碼邏輯。
那么,這段代碼的作者是誰?當(dāng)然,其中存在一些法律爭(zhēng)議,例如,該代碼如何獲取許可?因?yàn)樵S多訓(xùn)練集都基于開源軟件,相關(guān)軟件對(duì)由此衍生的代碼規(guī)定了特定的許可條件。但對(duì)于作者,許可權(quán)和所有權(quán)是分開的,關(guān)于所有權(quán),我認(rèn)為應(yīng)屬于使用AI工具并驗(yàn)證結(jié)果的程序員,這就像你使用某公司制作的繪畫程序,使用了公司的畫筆和濾鏡,創(chuàng)作了一件藝術(shù)作品。
至于我的項(xiàng)目,下一步將研究更復(fù)雜的游戲,比如1986年推出后風(fēng)靡一時(shí)的街機(jī)游戲《打磚塊》,有人知道嗎?
審核編輯 :李倩
-
人工智能
+關(guān)注
關(guān)注
1806文章
48987瀏覽量
249046 -
樹莓派
+關(guān)注
關(guān)注
121文章
1997瀏覽量
107393 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5560瀏覽量
122762
原文標(biāo)題:?掌上樹莓派Pico W能自己編寫游戲。
文章出處:【微信號(hào):CloudBrain-TT,微信公眾號(hào):云腦智庫】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
樹莓派6 傳聞:發(fā)布日期與規(guī)格!

20個(gè)任何人都能完成的樹莓派酷炫項(xiàng)目!

樹莓派復(fù)古游戲,你會(huì)選哪一個(gè)?

樹莓派分類器:用樹莓派識(shí)別不同型號(hào)的樹莓派!

用 Lakka 和 樹莓派 打造終客廳游戲機(jī)!

樹莓派“吉尼斯世界記錄”:將樹莓派的性能發(fā)揮到極致的項(xiàng)目!

基于XIAO RP2040和樹莓派的圍棋棋盤游戲系統(tǒng)設(shè)計(jì)

別再用鑰匙啦!樹莓派Pico教你用RFID“刷”門禁~

deepin 23+樹莓派讓小車動(dòng)起來

Raspberry Pi Pico 2 W 發(fā)布

評(píng)論