《乒乓球》游戲無限量。
當(dāng)前,人們對設(shè)計用于幫程序員編寫軟件的人工智能(AI)工具非常感興趣。GitHub的Copilot和亞馬遜的CodeWhisperer通過對深度學(xué)習(xí)技術(shù)進行調(diào)整,可以生成源代碼。最初開發(fā)該技術(shù)是為了生成自然語言文本。其理念是,程序員可以將這些工具作為一種強有力的自動完成方法,使用提示來生成代碼塊,開發(fā)人員將代碼塊集成到自己的軟件中。
看著這些工具時,我想知道:我們能否再進一步,無需程序員參與?能不能只是按一下按鈕,即可完成一段可運行程序的編寫和部署?
我的日常工作是為微控制器編寫嵌入式軟件,因此我立刻想到了將一個獨立的手持設(shè)備用作演示平臺。借助一個屏幕和幾個控件,用戶將能夠與簡單的AI生成軟件進行交互。無限量《乒乓球》(Pong)游戲的概念由此誕生。
我選擇《乒乓球》游戲有幾個原因。該游戲的玩法很簡單,雅達利最初的1972年《乒乓球》街機機箱上是這樣解釋的:“要取得高分,就避免丟球。”只要一個向上的按鈕和一個向下的按鈕就可以玩這個游戲了。《乒乓球》與20世紀(jì)70年代和80年代打造的許多經(jīng)典雅達利游戲一樣,僅需編寫較少的幾行代碼,已經(jīng)作為編程練習(xí)題目實現(xiàn)了很多很多次。這意味著在AI工具訓(xùn)練數(shù)據(jù)的源代碼資源庫中有豐富的《乒乓球》游戲示例,這就提高了獲得可行結(jié)果的可能性。

我使用了一臺售價6美元的樹莓派Pico W作為手持設(shè)備的核心,借助它的內(nèi)置無線功能,可以直接連接基于云端的AI工具。為此,我安裝了一個售價9美元的Pico LCD 1.14顯示模塊。它的240×135彩色像素足夠用于《乒乓球》游戲,而且該模塊集成了兩個按鈕和一個雙軸微型操縱桿。

我為Pico選擇的編程語言是MicroPython,因為它是我常用的語言,而且它是一種解釋型語言代碼,不需要基于個人計算機的編譯器即可運行。我使用的AI編碼工具是OpenAI Codex。使用可對Web的HTTP格式查詢做出響應(yīng)的API即可訪問OpenAI Codex。使用MicroPython的urequests和ujson庫,可以直接構(gòu)建和發(fā)送查詢。在目前的測試階段,使用OpenAI Codex API是免費的,但需要注冊,而且查詢限制為每分鐘20次,即使是最狂熱的《乒乓球》游戲玩家,這也足夠了。
下一步是創(chuàng)建容器程序。該程序負責(zé)檢測何時通過按鈕請求《乒乓球》的新版本,向OpenAI Codex發(fā)送提示、接收結(jié)果并啟動游戲。容器程序還設(shè)置了一個硬件抽象層,處理Pico和LCD/控制模塊之間的物理連接。
整個項目中最關(guān)鍵的部分是創(chuàng)建提示,每當(dāng)我們想要OpenAI Codex吐出新版《乒乓球》時,這個提示都會傳輸?shù)絆penAI Codex。提示是一段純文本,帶有最簡單的源代碼框架,用幾行代碼概述很多電子游戲中常見的結(jié)構(gòu),即我們要用的庫列表、處理事件(如按鍵)的調(diào)用、根據(jù)這些事件更新游戲狀態(tài)的調(diào)用,以及在屏幕上顯示更新狀態(tài)的調(diào)用。
如何使用這些庫以及如何填寫調(diào)用取決于AI。將這種通用結(jié)構(gòu)轉(zhuǎn)化為《乒乓球》游戲的關(guān)鍵是嵌入注釋,這些注釋在人工編寫的源代碼中是可選擇的,但在提示中是非常有用的。注釋使用簡單的英語來描述游戲玩法,例如,“該游戲包括以下類別……球:該類別代表球。它具有一個位置、一種速度和一個調(diào)試屬性。乒乓球:該類別代表游戲本身。它具有兩個擋板和一個球。它知道如何檢查游戲結(jié)束。”(在Hackaday.io上可以使用樹莓派Pico W來玩《乒乓球》游戲;該網(wǎng)站有我的容器和提示代碼。)

AI返回大約300行代碼。在我早期的嘗試中,代碼無法顯示游戲,因為我的模塊使用的MicroPython幀緩沖(framebuffer)庫版本與訓(xùn)練OpenAI Codex的幀緩沖庫不同。解決方案是添加提示注釋,描述我的庫所使用的方法,例如“de f rectangle (self, x, y, w, h, c)”。另一個問題是,許多訓(xùn)練示例使用的是全局變量,而我最初的提示是將變量屬性定義為作用于單個類,這通常是更好的做法。最終我不得不放棄,順其大流,將我的變量聲明為全局變量。
當(dāng)前,在由我的提示返回的代碼中,有80%都能產(chǎn)生可行的《乒乓球》游戲。有時游戲完全不能玩,有時能產(chǎn)生游戲,但不太像《乒乓球》,例如,擋板不僅上下移動,有時還能左右移動。有時是兩個人來玩,有時是一人與機器對抗。由于提示中未做指定,因此Codex會采用兩個選項之一。與機器對抗時,很想看看Codex如何實施這部分代碼邏輯。
那么,這段代碼的作者是誰?當(dāng)然,其中存在一些法律爭議,例如,該代碼如何獲取許可?因為許多訓(xùn)練集都基于開源軟件,相關(guān)軟件對由此衍生的代碼規(guī)定了特定的許可條件。但對于作者,許可權(quán)和所有權(quán)是分開的,關(guān)于所有權(quán),我認為應(yīng)屬于使用AI工具并驗證結(jié)果的程序員,這就像你使用某公司制作的繪畫程序,使用了公司的畫筆和濾鏡,創(chuàng)作了一件藝術(shù)作品。
至于我的項目,下一步將研究更復(fù)雜的游戲,比如1986年推出后風(fēng)靡一時的街機游戲《打磚塊》,有人知道嗎?
審核編輯 :李倩
-
人工智能
+關(guān)注
關(guān)注
1819文章
50164瀏覽量
266020 -
樹莓派
+關(guān)注
關(guān)注
122文章
2080瀏覽量
110585 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5600瀏覽量
124482
原文標(biāo)題:?掌上樹莓派Pico W能自己編寫游戲。
文章出處:【微信號:CloudBrain-TT,微信公眾號:云腦智庫】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
樹莓派5還是香橙派5 Pro?兩款熱門開發(fā)板的詳細對比
在樹莓派Pico上運用不同的并行化手段
如何使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)?
樹莓派6 傳聞:發(fā)布日期與規(guī)格!
20個任何人都能完成的樹莓派酷炫項目!
樹莓派分類器:用樹莓派識別不同型號的樹莓派!
用 Lakka 和 樹莓派 打造終客廳游戲機!
樹莓派“吉尼斯世界記錄”:將樹莓派的性能發(fā)揮到極致的項目!
基于XIAO RP2040和樹莓派的圍棋棋盤游戲系統(tǒng)設(shè)計
別再用鑰匙啦!樹莓派Pico教你用RFID“刷”門禁~
?掌上樹莓派Pico W能自己編寫游戲
評論