我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

时间:2023-02-24 16:12:24

自从ChatGPT出现后,它很快地就占据了我的各种新闻头条和日常工作生活。对于这种AI产品,我其实并没有很陌生。毕竟GitHub的Copilot和Jasper等AI工具其实更早以前就出现了。

但ChatGPT不一样,它一出现几乎就风靡全球,远远超过历史上的其他产品。

Copilot和Jasper还可以说是为程序员和文案人员而生,但ChatGPT却几乎什么人群都适用,甚至还是免费的。只要联网注册账号,你就可以随时向ChatGPT提出任何问题。

大多数时候,它都会给你一个答案。令人震惊的是,ChatGPT给出的答案大多数时候还颇有意思,甚至语言也不会过于生硬。

ChatGPT面世以后,有大量的文章吹嘘ChatGPT能够通过谷歌的面试,不过也有一些批评者说ChatGPT其实很智障。出于这种好奇心,我尝试使用ChatGPT自动生成代码进行编程,来见识一下ChatGPT的能力。

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

我做了一个小测试,尝试通过用Python做一个简单的Astro Shooter游戏来弄清楚ChatGPT的能力。我的目标是:除了调整参数外,完全不写任何一行代码,相当于一个不太懂编程的人使用ChatGPT来开发游戏。

在这篇文章中,我们只会用到两个工具:Lightly和ChatGPT。Lightly是一个超级轻量且强大的在线编辑器(IDE),它允许你在浏览器在网页上进行编译、运行项目。我们将用它作为我们的编辑器和编译器,与人工智能语言模型ChatGPT一起开发我们的游戏。


向ChatGPT发问

首先,我用一个简单明了的问题开始了实验。我问ChatGPT“是否能用Pygame为我编码一个Astro Shooter游戏”。

我用ChatGPT和Lightly做了一个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给出的第一段代码基本上只是个游戏画布。你可以拥有你自己的飞船和一个敌人的占位符,除此以外别无其它,你甚至不能称其为游戏,因为它甚至没有宇宙飞船的外观设计。

我从Itch.io里找来了一些简单的宇宙飞船素材,这部分素材会附在后面的项目包里,欢迎取需。

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码


增加方向键功能来移动飞船

光有画布可不行,我们必须让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服务器的问题,有时候刷新一下就好,但我最终发现,让他更新小部分代码才是真正的打开方式。当然,这种方式还是需要有一点代码基础,否则有可能就不知道要把代码段复制到原代码的哪个部分。

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

在给出一个比较明确的要求后,我终于得到了比较理想的游戏代码。

按照惯例把代码复制粘贴到Lightly IDE中运行。不得不说,Lightly IDE真的是一个很方便的在线编辑器,不需要任何安装就可以让你在浏览器上运行大多数编程项目。

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

让ChatGPT生成更多的代码,让游戏正常运行

我向ChatGPT提出了更多的需求,包括生成更多的敌人,让飞船射出的物体,以及在被击中时让敌方飞船消失。

下面是我在ChatGPT输入的一些需求:

  • 让游戏中再出现十个敌人。
  • 让玩家在按下空格键时发射。
  • 当发射命中敌人时,使敌人消失。如果击中了敌人,玩家就得到100分。

说实话,这个过程并不像我想象的那么容易。我花了很多时间和ChatGPT沟通并反复调试,不断在它生成的代码中发现新的问题,然后再让它解决问题。

例如:当我第一次要求ChatGPT为我生成更多的敌人时。它只是显示了一堆敌人,有些甚至出现在玩家的下方,这就变得无法射击。很明显,这和我设想的并不一样。

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码


让敌人动起来

当前版本中,游戏里唯一会动的东西是玩家的飞船和它的发射弹。敌人的飞船仍然是一动不动的,完全被固定在出生点上。

所以,我需要给敌人增加一些动作,让他们不断朝着玩家向下移动。

如果你足够熟悉编程,一定明白想实现这一点其实并不难,但用通俗的语言指挥ChatGPT来实现这个效果,需要花费一些时间才能获得一个相对满意的结果。

下面就是一个沟通失败的例子:

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

要是我是飞船驾驶员,我可能人都傻了。

我花了很多时间才找到正确的沟通方法。想要让ChatGPT更好更准确的为你提供答案,最好的方法是提出下面这样具体的问题:

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

ChatGPT会告诉你哪些可以修改,并给出相关的代码片段。在这里,你可以手动检查代码,替换需要的东西,而不是直接复制和粘贴生成的代码。

我在下面又问了ChatGPT几个问题,让游戏变得更好一些。

  • 我要怎样才能把发射弹改成白色矩形?
  • 我要怎样修改代码,才能使敌人不显示在玩家下面?
  • 我要怎样修改代码,才能使敌人向下移动的速度更慢?

最终,我获得了一个完全由ChatGPT提供代码,并且看起来可玩的游戏。下面是这个游戏在Lightly中运行的样子:

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

下面是这个游戏的完整代码,你可以复制到浏览器上立即运行这个游戏并试玩一下。

​https://2129eec9db-share.lightly.teamcode.com​


对ChatGPT的进一步思考

ChatGPT这么火不是没有理由的。谁会想到一个聊天机器人只靠提示命令就能自己写代码开发出一个游戏?

不过,虽然我对ChatGPT的能力感到相当赞叹,但这并不意味着我对它的结果感到满意。

如果你在没有任何专业知识的情况下,盲目地依赖ChatGPT这个工具,你会在它错误的答案中迷失自己。目前来看,它仍然只是一个帮助人类提高效率的聊天机器人,而并不能取代人类。

你可以让ChatGPT按照非常具体(和专业)的命令生成答案,并手动处理调整,这真的会让工作效率提高很多。如果你只是用命令来提示和调试,我反而觉得还不如有足够知识储备的人类。当然,ChatGPT本身也会不断地学习进步,此后是不是依然保持原地踏步,就不得而知了。

如果你是一个程序员小白,平时主要依赖于在知乎、问答上询问解决方案,那ChatGPT对你来说可能会提供一个更快捷方便的答案。通过它的回复,你确实可以从这些建议中重新调试代码并改善学习。


在我尝试向ChatGPT索要代码的过程中,它几乎每一次都对它给出的代码提供了相当详细的解释,这对于一个学习中的程序员来说非常有帮助,也便于我们在练习的过程中进步。

我用ChatGPT和Lightly做了一个Astro Shooter游戏,没有写一行代码

总的来说,我认为ChatGPT作为人工智能发展的一座里程碑当之无愧。它的出现必将改变我们未来的计算方式,我甚至对此抱有乐观态度。

无论如何,这并不意味着我们应该停止学习编程或任何其他ChatGPT已经掌握的知识。我们应该把ChatGPT当作玩具、工具,甚至是朋友而不是敌人。它不应该让你停止进步,而是为你提供帮助,让你进一步进步。