自从ChatGPT出现后,它就逐渐占据了我的新闻头条和工作生活。对于这种AI产品,我并没觉得有多新鲜,毕竟Github的Copilot和Jasper等AI写作工具很早就出现了。
但ChatGPT很不一样,它的增长速度令人惊讶,远远超过历史上其他产品。
如果说Copilot和Jasper是为程序员和文案人员准备的,那么ChatGPT的存在则是为所有人提供的,免费的工具。只要你能上网并有一个账户,你就可以从ChatGPT获取任何你想要的东西。
大多数时候,它都会给你一个答案。最厉害的是,这些答案通常有很高的准确度。
有大量的文章吹嘘ChatGPT能够通过谷歌的面试,而也有一些批评的声音说ChatGPT其实很智障。
我很好奇ChatGPT是否能够自动生成代码进行编程。
于是我做了一个小测试,通过用Python做一个简单的Astro Shooter游戏来弄清楚ChatGPT到底有多牛。这一次,除了调整几个参数外,我完全不写任何一行代码,这样我们就可以看到那些不太懂编程的人是否真的可以用ChatGPT来开发。
在这篇文章中,我们将只使用两个工具来开发游戏,Lightly和ChatGPT。Lightly是一个超级轻量级并强大的Python在线编辑器(IDE),它允许你在浏览器在网页上进行编译、运行项目。我们将使用它作为我们的编辑器和编译器,与人工智能语言模型ChatGPT一起开发我们的游戏。
向ChatGPT发起提问
我用一个简单明了的问题开始了我的第一个提问,我问ChatGPT“是否能用Pygame为我编码一个Astro Shooter游戏”。
ChatGPT毫不犹豫地回复了我一段基本代码,如下:
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()
ChatGPT给出的第一段代码基本上只是个游戏画布。你可以拥有你自己的飞船和一个敌人的占位符,除此以外别无其它,你甚至不能称其为游戏,因为它甚至没有宇宙飞船的外观设计。
我为游戏找了一些简单的宇宙飞船设计素材。我把这些免费分享在这里,欢迎取用。这些素材是免费的,但你可以随时以任何价格请创作这些素材的艺术家们喝杯咖啡。
增加方向键功能来移动飞船
我们必须让ChatGPT写出新的代码调用更多的东西来移动我们的飞船。因此我向ChatGPT提出了我的第二个需求。要求ChatGPT添加一个函数,用方向键左右移动玩家。
这就是添加到游戏循环中的移动函数,下面是完整代码:
# 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
我尝试运行ChatGPT生成的代码。 当我按下方向键时,飞船移动得太快了,甚至移动到了边界之外。
于是我又向ChatGPT提出了一些需求。ChatGPT不知为何会遇到下面这种技术问题,在产生长的答案时,会停止显示其余的答案。我还不确定这是否是ChatGPT服务器的普遍问题。
在给出一个比较明确的要求后,我终于得到了理想的游戏代码。
然后我在Lightly IDE中运行了这些代码,Lightly IDE是一个很方便的在线编辑器,不需要任何安装就可以让你在浏览器上运行大多数编程项目。
让ChatGPT生成更多的代码,让游戏能正常运行
我向ChatGPT提出了更多的需求,包括生成更多的敌人,让飞船射出导弹,以及在被导弹击中时让敌方飞船消失。
下面是我在ChatGPT输入的需求。
- 让游戏中再出现十个敌人。
- 让玩家在按下空格键时发射导弹。
- 写一段代码,当导弹击中敌人时,使敌人消失。如果导弹击中了敌人,玩家就得到100分。
说实话,这个过程并不像我想象的那么容易。我花了很多时间和ChatGPT沟通并反复调试,不断在它生成的代码中发现新的问题然后再让它解决问题。
例如,当我第一次要求ChatGPT为我生成更多的敌人时。它只是显示为一堆更多的敌人,有些甚至出现在玩家的下方,这就变得无法射击。很明显,这和我设想的并不一样。
让游戏中的敌人动起来
当前版本中,游戏里唯一会动的东西是玩家的飞船和它的导弹。敌人的飞船仍然是一动不动的,无论它们在哪里被创造出来,都固定在屏幕的出生点。
所以,我需要给敌人增加一些动作,让他们不断朝着玩家向下移动。
如果你足够熟悉编程,一定明白想实现这一点其实并不难,但用通俗的语言指挥ChatGPT来实现这个效果,需要花费一些时间才能获得一个相对满意的结果。
下面就是一个沟通失败的例子:
我花了很多时间才找到正确的沟通方法。想要让ChatGPT更好更准确的为你提供答案,最好的方法是提出下面这样具体的问题。
ChatGPT会告诉你哪些可以修改,并给出相关的代码片段。在这里,你可以手动检查代码,替换需要的东西,而不是直接复制和粘贴生成的代码。
我在下面又问了ChatGPT几个问题,让游戏变得更好一些。
- 我怎样才能把导弹改成白色矩形?
- 我怎样才能改变代码,使敌人不显示在玩家下面?
- 我怎样才能改变代码,使敌人向下移动的速度更慢?
于是我获得了一个完全由ChatGPT单独编码的看起来更可玩的游戏。下面是这个游戏在Lightly中运行的样子: https://www.zhihu.com/zvideo/1634943774546706432
下面是这个游戏的完整代码,你可以复制到浏览器上立即运行这个游戏并试玩一下。 https://2129eec9db-share.lightly.teamcode.com
对ChatGPT的进一步思考
ChatGPT这么火不是没有理由的。谁会想到一个聊天机器人只靠提示的命令就能自己编码开发出一个游戏?
不过,虽然我对ChatGPT的能力感到相当赞叹,但这并不意味着我对它的结果很满意。
如果你在没有任何专业知识的情况下,盲目地依赖ChatGPT这个工具,你会在它错误的答案中迷失自己。目前来看,它仍然是一个帮助人类提高效率的聊天机器人,而并不能取代人类。
你可以让ChatGPT按照非常具体(和专业)的命令生成答案,并手动处理调整,真的让工作加快很多。如果你只是用命令来提示和调试,我就不确定是否真的会快很多了。而且这样做的前提是你得有足够充足的编程知识。
如果你是一个程序员小白,平时主要依赖于在StackOverflow上询问解决方案,ChatGPT对你来说会是一个更快捷方便的选择,你可以调试你的代码并从它给出的建议中学习。
在我尝试向ChatGPT索要代码的询问中,几乎每一次它都对它给出的代码提供了相当详细的解释,这对于一个学习中的程序员来说,非常有帮助,你可以在练习的过程中取得进步。 总的来说,我认为ChatGPT作为人工智能发展的一座里程碑当之无愧,对于它将改变我们未来的计算方式,我抱有乐观态度。
无论如何,这并不意味着我们应该停止学习代码或任何其他ChatGPT已经掌握的知识。我们应该把ChatGPT当作玩具、工具,甚至是朋友而不是敌人。它不应该让你停止进步,而是为你提供帮助,让你进一步进步。
欢迎查看我们的博客的其它文章,了解更多与编程有关的知识,我们希望编程对你来说也是一项有趣和轻松的事情。