草庐IT

如何用 GPT-4 帮你写游戏?

nkwshuyi 2023-12-24 原文

你知道的,GPT-4 发布了。

目前你想要用上 GPT-4,主要的渠道是 ChatGPT Plus 。作为交了订阅费的用户,你可以在对话的时候选择模型来使用。

另一种渠道,就是申请官方 API 的排队。我在申请 New Bing Chat 的时候,耐心被折磨了 20 天。所以这次申请完就放在一边了。啥时候通过申请,听天由命吧。

有了 GPT-4 ,你可以干什么呢?

有人看了官方的演示视频后,就兴冲冲打算上传图片进行「看图说话」。然后你会发现,连上传图片的地儿都没有。即便是用上 ChatGPT Plus,你也依然只能守着文本框发呆。

哦,对了,刚才差点儿忘了说。即便你交了钱用上 ChatGPT Plus,每 4 个小时周期内,也只能有 100 条 GPT-4 对话限额。

那咱们该如何利用这宝贵的对话权限呢?

我昨天尝试了 GPT-4 各种推理和翻译能力,印象深刻。但是今天我要跟你介绍的,是它的编程功能。精确来说,是游戏编程。

这是我今天在网上看到的例子。这位老兄(Andre)就是说了一句话,然后 GPT-4 就编好了创新性的融合游戏(生命游戏 + Pong)。

Andre 于是用丰富的语言内容表达了自己的惊喜。

我觉得这就是个噱头。你说一句话,游戏就能编出来了?你也太小瞧开发者的能力门槛了吧?

为了揭穿这个谎言,我决定把他说的话原封不动扔到我的 GPT-4 对话里,看看出来的是啥玩意儿。

嗯,程序有了,我直接把程序贴到了 Visual Studio Code 里面,运行。

哈哈,你看,报错了吧?

我就知道不靠谱嘛!

且慢,好像人家早就给我提示,让我安装软件包来着。

好吧,算我没看清楚,好吧?我根据提示安装上 pygame 软件包,然后运行。

居然没有报错,就能用了。

不过运行的效果,是这样的:

你看你看,啥玩意儿嘛?分明就是两个游戏。而且右边这半边最可恨。是可以拿着板子上下飞舞,可是球哪儿去了?

不过按照以往的经验,我们可以用自然语言让它改进。


于是我怒气冲冲,这么说:

至少你需要给我一个球让我打,还要一个记分牌。

它还挺懂礼貌,先跟我道歉,然后把代码做了更新。

我把更新的代码弄了进来运行,依然没有报错。

这次确实有了球可拍,而且也能计分了。但是问题多多啊。你看,分数规则奇怪,而且球和左侧的游戏交互也缺乏。

于是我继续提要求:

如果球击中左侧的组件,则该组件应相应消失。请修改代码。

之后又提出:

添加一个重新开始游戏的按钮。此外,如果球撞到左侧组件,则得分 + 1。谢谢。

GPT-4 很认真修改代码,之后运行效果是这样的:

不过,还是有不尽如人意的地方。例如得分总会突然归零。以及左侧那堆网格线,看得我头晕。

于是我继续给 GPT-4 提出要求:

添加开始和暂停按钮。同时,除非球飞出右边界,否则保留得分。此外,左侧的网格有点烦人,请您把它们擦掉好吗?

这次结果代码执行起来,效果是这样的:

你看这感觉,是不是好多了呢?

我知道这游戏还有很多缺点,而且我的做法毫无原创性可言。但是这个复现过程,至少证明了一件事 —— 原帖的作者 Andre 没有夸大其词 —— 完全用自然语言提要求,GPT-4 确实就可以帮你写游戏了。

我于是发了一番感慨:

当然,任何一个有经验的程序员,都可以站出来指出 GPT-4 辅助编程的种种缺点,然后断言它永远替代不了优秀的开发者。

你别忘了, GPT-4 发布还不到 48 小时,目前一众大语言模型还在以狂飙的姿态进化中。再说了,谁说它的目标是替代「优秀的开发者」了?

借用好友川总的话说,优秀的开发者会利用它,效率提升 100 倍;编程入门者会利用它,享受私教带来因材施教的愉悦。

我非常赞同,但是提出了一个疑问 —— 中间层开发者的被 AI 冲击后,入门者该怎么成长为顶级优秀的专业人士呢?

目前,我还没有答案。想听听你的看法。欢迎留言,咱们一起交流讨论。

点赞 +「在看」,转发给你身边有需要的朋友。收不到推送?那是因为你只订阅,却没有加星标

欢迎订阅我的小报童付费专栏,每季度更新不少于10篇文章。目前价格优惠。

如果有问题咨询,或者希望加入社群和热爱钻研的小伙伴们一起讨论,订阅知识星球吧。不仅包括小报童的推送内容,还可以自由发帖与提问。之前已经积累下的帖子和问答,就有数百篇。足够你好好翻一阵子。

若文中部分链接可能无法正常显示与跳转,可能是因为微信公众平台的外链限制。如需访问,请点击文末「阅读原文」链接,查看链接齐备的版本。 

延伸阅读

有关如何用 GPT-4 帮你写游戏?的更多相关文章

  1. ruby - 我需要从 facebook 游戏中抓取数据——使用 ruby - 2

    修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它​​是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为

  2. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  3. ruby - 如何用递增的值填充数组 Ruby - 2

    我正在尝试解决http://projecteuler.net/problem=1.我想创建一个方法,它接受一个整数,然后创建一个包含它前面的所有整数的数组,并将整数本身作为数组中的值。以下是我目前所拥有的。代码不起作用。defmake_array(num)numbers=Array.newnumcount=1numbers.eachdo|number|numbers 最佳答案 (1..num).to_a是您在Ruby中需要做的全部。1..num将创建一个Range对象,以1开始并以任意值num结束是。Range对象有to_a方法通过

  4. ruby - 如何用 Nokogiri 解析连续的标签? - 2

    我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(

  5. python - Ruby 或 Python 的 3d 游戏引擎? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?

  6. ruby-on-rails - 如何用 has_many 保存数据 :through - 2

    我在游戏和帐户模型之间存在多对多关系,如下所示:classAccount:destroyhas_many:games,:through=>:account_gamesendclassGame:destroyhas_many:accounts,:through=>:account_gamesendclassAccountGame现在我知道让我们说我想创建一个类似这样的记录:@account=Account.new(params[:user])@account.games但是我应该如何在执行此操作时更新AccountGame中的某些属性?假设AccountGame有一些名为score的字段

  7. ruby - 使用 Ruby 编写 Unity 游戏 - 2

    所以我看到unity支持c#、JS和Boo。我可以学习其中一个,但我想制作一个“编译器”或类似的东西,让我可以编写ruby​​代码并输出JS代码或制作一个可以被Unity编译器读取的层。这有可能吗?我愿意在这方面投入很多时间并且有相当多的经验。 最佳答案 如果您的问题实际上是“我如何将Ruby编译为JavaScript”,那么这更容易回答:Opal:RubytoJavaScriptcompiler但是,学习其中一种受支持的语言会更好。当运行的是用另一种语言解释的代码时,很难调试“您的”代码。

  8. ruby - 如何用 YARD 记录一个不返回任何内容的方法 - 2

    我有这样的方法defself.import(file_name,opts={})我正在尝试用YARD记录下来。然而,这是一种100%副作用的方法(我知道,我知道,副作用,呃!)。但是对于此方法的用户,实际上没有任何类型的返回对象,但是YARD生成如下签名:+(Object)import(file_name,opts={})有什么办法可以告诉yardimport方法什么都不返回吗?我可以告诉它返回nil,但这不是一回事 最佳答案 所有方法都会返回一些东西,void关键字可能就是您要查找的内容。#@return[void]defmeth

  9. 【Unity游戏破解】外挂原理分析 - 2

    文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cppdumper例子2-森林whoishe后记认识unity打包目录结构dll一般很大,因为里面是所有的游戏功能编译成的二进制码游戏逆向流程开发人员代码被编译打包到GameAssembly.dll中使用il2ppDumper工具,并借助游戏名_Data\il2cpp_data\Metadata\global-metadata.dat

  10. Unity游戏开发:背包系统的实现 - 2

    背包是游戏中经常使用的一个组件,它负责管理玩家在游戏中所获得的道具。一个完整的背包系统应当具有将物品放置进背包、对背包内物品进行管理和使用背包内物品等功能。而往往一个背包系统的逻辑关系较为复杂,如果把所有功能都放在一个脚本中实现会使代码显得十分冗杂且缺乏逻辑。所以在背包系统的设计过程中,我们常将其分解为数据、逻辑和UI三部分分别来进行完成。一、UI设计以CottonPuzzle中的背包设计为例,我们需要有物品展示栏、物品切换按键和物品提示信息等部分。在Canvas中创建ItemHolder,在ItemHolder中创建LeftButton和RightButton控制物品的左右切换、Slot来控

随机推荐