chatgpt生成偽代碼 我用ChatGPT和Lightly做了一個Astro Shooter游戲
自從出現(xiàn)后,它很快地就占據(jù)了我的各種新聞頭條和日常工作生活。對于這種AI產(chǎn)品,我其實并沒有很陌生。畢竟的和等AI工具其實更早以前就出現(xiàn)了。
但不一樣,它一出現(xiàn)幾乎就風(fēng)靡全球,遠(yuǎn)遠(yuǎn)超過歷史上的其他產(chǎn)品。
和還可以說是為程序員和文案人員而生,但卻幾乎什么人群都適用,甚至還是免費的。只要聯(lián)網(wǎng)注冊賬號,你就可以隨時向提出任何問題。
大多數(shù)時候,它都會給你一個答案。令人震驚的是,給出的答案大多數(shù)時候還頗有意思,甚至語言也不會過于生硬。
面世以后,有大量的文章吹噓能夠通過谷歌的面試,不過也有一些批評者說其實很智障。出于這種好奇心,我嘗試使用自動生成代碼進(jìn)行編程,來見識一下的能力。
我做了一個小測試,嘗試通過用做一個簡單的 游戲來弄清楚的能力。我的目標(biāo)是:除了調(diào)整參數(shù)外,完全不寫任何一行代碼,相當(dāng)于一個不太懂編程的人使用來開發(fā)游戲。
在這篇文章中,我們只會用到兩個工具:和。是一個超級輕量且強大的在線編輯器(IDE),它允許你在瀏覽器在網(wǎng)頁上進(jìn)行編譯、運行項目。我們將用它作為我們的編輯器和編譯器,與人工智能語言模型一起開發(fā)我們的游戲。
向發(fā)問
首先,我用一個簡單明了的問題開始了實驗。我問“是否能用為我編碼一個 游戲”。
毫不猶豫地回復(fù)了我一段基本代碼,如下:
import pygame
# Initialize the game engine
pygame.init()
# Set the screen size
screen = pygame.display.set_mode((800, 600))
# Set the title of the window
pygame.display.set_caption("Astro Shooter")
# Load the player image
player_image = pygame.image.load("player.png")
# Set the player starting position
player_x = 400
player_y = 500
# Load the enemy image
enemy_image = pygame.image.load("enemy.png")
# Set the enemy starting position
enemy_x = 50
enemy_y = 50
# Set the running flag to True
running = True
# Game loop
while running:
# Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Clear the screen
screen.fill((0, 0, 0))
# Draw the player
screen.blit(player_image, (player_x, player_y))
# Draw the enemy
screen.blit(enemy_image, (enemy_x, enemy_y))
# Update the display
pygame.display.update()
# Quit the game engine
pygame.quit()
復(fù)制代碼
給出的第一段代碼基本上只是個游戲畫布。你可以擁有你自己的飛船和一個敵人的占位符,除此以外別無其它,你甚至不能稱其為游戲,因為它甚至沒有宇宙飛船的外觀設(shè)計。
我從Itch.io里找來了一些簡單的宇宙飛船素材,這部分素材會附在后面的項目包里,歡迎取需。
增加方向鍵功能來移動飛船
光有畫布可不行,我們必須讓寫出新的代碼,調(diào)用更多的功能來移動我們的飛船。因此,我向提出了我的第二個需求:添加一個用方向鍵左右移動飛船的函數(shù)。
這就是添加到游戲循環(huán)中的移動函數(shù),下面是完整代碼:
# Game loop
while running:
# Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_x -= player_speed
if event.key == pygame.K_RIGHT:
player_x += player_speed
復(fù)制代碼
我嘗試運行生成的代碼,但當(dāng)我按下方向鍵時,飛船移動得太快了,甚至移動到了邊界之外。
于是我又向提出了一些需求。在提問的過程中,很常會吞掉一些長答案,或者運行到一半就會卡殼。這個似乎是服務(wù)器的問題,有時候刷新一下就好,但我最終發(fā)現(xiàn),讓他更新小部分代碼才是真正的打開方式。當(dāng)然,這種方式還是需要有一點代碼基礎(chǔ),否則有可能就不知道要把代碼段復(fù)制到原代碼的哪個部分。
在給出一個比較明確的要求后,我終于得到了比較理想的游戲代碼。
按照慣例把代碼復(fù)制粘貼到 IDE中運行。不得不說, IDE真的是一個很方便的在線編輯器,不需要任何安裝就可以讓你在瀏覽器上運行大多數(shù)編程項目。
讓生成更多的代碼,讓游戲正常運行
我向提出了更多的需求,包括生成更多的敵人,讓飛船射出導(dǎo)彈chatgpt生成偽代碼,以及在被導(dǎo)彈擊中時讓敵方飛船消失。
下面是我在輸入的一些需求:
說實話,這個過程并不像我想象的那么容易。我花了很多時間和溝通并反復(fù)調(diào)試,不斷在它生成的代碼中發(fā)現(xiàn)新的問題,然后再讓它解決問題。
例如:當(dāng)我第一次要求為我生成更多的敵人時。它只是顯示了一堆敵人,有些甚至出現(xiàn)在玩家的下方,這就變得無法射擊。很明顯,這和我設(shè)想的并不一樣。
讓敵人動起來
當(dāng)前版本中,游戲里唯一會動的東西是玩家的飛船和它的導(dǎo)彈。敵人的飛船仍然是一動不動的,完全被固定在出生點上。
所以,我需要給敵人增加一些動作,讓他們不斷朝著玩家向下移動。
如果你足夠熟悉編程,一定明白想實現(xiàn)這一點其實并不難,但用通俗的語言指揮來實現(xiàn)這個效果,需要花費一些時間才能獲得一個相對滿意的結(jié)果。
下面就是一個溝通失敗的例子:
要是我是飛船駕駛員,我可能人都傻了。
我花了很多時間才找到正確的溝通方法。想要讓更好更準(zhǔn)確的為你提供答案,最好的方法是提出下面這樣具體的問題:
會告訴你哪些可以修改,并給出相關(guān)的代碼片段。在這里chatgpt生成偽代碼,你可以手動檢查代碼,替換需要的東西,而不是直接復(fù)制和粘貼生成的代碼。
我在下面又問了幾個問題,讓游戲變得更好一些。
最終,我獲得了一個完全由提供代碼,并且看起來可玩的游戲。下面是這個游戲在中運行的樣子:
下面是這個游戲的完整代碼,你可以復(fù)制到瀏覽器上立即運行這個游戲并試玩一下。
對的進(jìn)一步思考
這么火不是沒有理由的。誰會想到一個聊天機器人只靠提示命令就能自己寫代碼開發(fā)出一個游戲?
不過,雖然我對的能力感到相當(dāng)贊嘆,但這并不意味著我對它的結(jié)果感到滿意。
如果你在沒有任何專業(yè)知識的情況下,盲目地依賴這個工具,你會在它錯誤的答案中迷失自己。目前來看,它仍然只是一個幫助人類提高效率的聊天機器人,而并不能取代人類。
你可以讓按照非常具體(和專業(yè))的命令生成答案chatgpt生成偽代碼,并手動處理調(diào)整,這真的會讓工作效率提高很多。如果你只是用命令來提示和調(diào)試,我反而覺得還不如有足夠知識儲備的人類。當(dāng)然,本身也會不斷地學(xué)習(xí)進(jìn)步,此后是不是依然保持原地踏步,就不得而知了。
如果你是一個程序員小白,平時主要依賴于在知乎、問答上詢問解決方案,那對你來說可能會提供一個更快捷方便的答案。通過它的回復(fù),你確實可以從這些建議中重新調(diào)試代碼并改善學(xué)習(xí)。
在我嘗試向索要代碼的過程中,它幾乎每一次都對它給出的代碼提供了相當(dāng)詳細(xì)的解釋,這對于一個學(xué)習(xí)中的程序員來說非常有幫助,也便于我們在練習(xí)的過程中進(jìn)步。
總的來說,我認(rèn)為作為人工智能發(fā)展的一座里程碑當(dāng)之無愧。它的出現(xiàn)必將改變我們未來的計算方式,我甚至對此抱有樂觀態(tài)度。
無論如何,這并不意味著我們應(yīng)該停止學(xué)習(xí)編程或任何其他已經(jīng)掌握的知識。我們應(yīng)該把當(dāng)作玩具、工具,甚至是朋友而不是敵人。它不應(yīng)該讓你停止進(jìn)步,而是為你提供幫助,讓你進(jìn)一步進(jìn)步。
免責(zé)聲明:本文系轉(zhuǎn)載,版權(quán)歸原作者所有;旨在傳遞信息,不代表本站的觀點和立場和對其真實性負(fù)責(zé)。如需轉(zhuǎn)載,請聯(lián)系原作者。如果來源標(biāo)注有誤或侵犯了您的合法權(quán)益或者其他問題不想在本站發(fā)布,來信即刪。
聲明:本站所有文章資源內(nèi)容,如無特殊說明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。