一、背景
在前几天尝试用GPT-4o编写打飞机游戏后,我打算再试试其他题材的游戏制作。
经过前几次的测验,AI在生成300行左右的代码量时表现较好,可以通过提示进行一些排错和修正。而MUD、RPG、联机服务端等由于代码量及功能逻辑更为复杂,浅尝即止后都放弃了实验。
这次经过一天多的尝试和调整,完成了一个简版大富翁,实现了地图编辑、投骰子、人物移动等逻辑。
简版大富翁
Tips:如果愿意付出更高成本,大约1-2小时就可以完成。主要是后续AI回复的Token消耗量超出了我的想象,以至于我转回使用ChatGPT的4o免费额度,而官方的免费版本大约每提出5-10个问题后需要等待3个小时才能重置额度。
二、消耗资源
这次通过2个平台的24次对话完成了简版大富翁,分别为:
- 便携AI聚合API:对话19次,消耗$0.94;
- ChatGPT:对话5次,消耗$0;
国内的第三方API平台可以充值额度进行使用,这家API供应商最低充值$1,优点是相较GPT官方会员较便宜,但此类API的缺点是:偶现计费但未返回内容,以及对话预设的max_token过小,导致AI回复不全。
返回结果受限于max_token而中断了
另外还有个问题:最初找聚合API是想体验下claude-3-5-sonnet-20240620
这个模型(因为我账号被Ban了),但这家聚合网站宣称提供claude模型使用,但注册后的在线页面却无法正常使用,仅能使用GPT系列。
三、对话过程
我认为截止到目前,AI最有趣的是无论你发出多么难以回答、甚至无法组成问题的语句,AI总能回复出一些内容,这在你遇到完全不熟悉的领域时会很有帮助。
在本次对话过程中,我努力不介入代码问题排错,而是告知AI在运行中出现的异常情况。大约80%的对话场景中,AI可以做出反应并及时修正,剩余时候仍需要我阅读代码并找出具体错误。而初次阅读其他人写的代码,其实并不轻松,对吧?
下方的灰色部分字体(引用)是我发送给AI的文字内容,没有做任何修饰,希望能给你们一些参考。
(1)框架搭建
开头依旧是描述你想要的游戏内容背景:
用Canvas绘制类似大富翁的2D界面,其中是一个闭环的长方形。
每个方格为白底黑色边框,方格内填充文字内容。
按空格键 可以掷骰子,骰子也使用代码绘制。
根据投掷的骰子数来移动人物,人物使用三角形代替即可。
AI很快就搭建了框架
(2)地图系统
在基础框架实现后,我希望能通过JSON形式来配置自定义地图。
基本实现了我的需求,我希望地图和文字内容我可以通过json文件自定义配置。
我想创建一个10*5的棋盘大小,并且通过json配置文件可以创建任意形状的棋盘。可以是环形、可以是Z字形等等
AI很快创建了一套基于坐标的配置文件
(3)人物及骰子
增加骰子动画和人物移动动画,并且把骰子从右上角放到正中间吧
动画需要再流畅一些,并且现在有2个问题
1、首次渲染的画面和点击空格后的画面不一致,字体会瞬间变大
2、每次骰子投完后,请保持上一次的点数不要消失
此时遇到的还只是一些显示问题,并不影响逻辑,AI很快完成了修改。
(4)格子高亮
很好,我希望能再增加一些属性,例如某个格子有边框环绕效果,文字渐变动画等。
不要高亮边框了,改成高亮内边框吧,最好是一条横线连着内边框做动画。文字高亮取消吧。
不要蓝色横线动画了,内边框改成红蓝二色的跑马灯动画吧
这里应该是我的描述有误,AI理解成了一条横线在内边框内上下循环运动。我想要的是内边框环绕运动。
期望效果
下面AI生成的效果录屏,emmm….
(5)调整移动规则
ok,关于json格子地图我有个想法,我希望能改成T字型多终点的方案,希望在到达岔口时弹出对应方向按钮,让用户选择往哪个方向前进,请帮我改进一下。
从这里开始,AI开始出错了。也或许在到达岔口时弹出对应方向按钮,让用户选择往哪个方向前进
无法让AI充分理解。
现在到达终点后停止前进,触发onArrive()函数即可。
程序存在一个BUG,即到达岔口时需要停止前进,等待用户选择方向后,再根据方向前进。
另外不只处理下和右的选择,需要包含上下左右方向的处理。
不,现在仍未实现岔口暂停功能,你的判断存在问题。并不是在骰子点数移动完后再判断,而是每一步移动过程中判断是否到达了岔口。
现在判断岔口和显示方向正常了,继续移动存在问题,当投出的点数有好几步时,在选择方向后只会走一步
为什么当选择岔口后,还有多个格子时,玩家会瞬间到达骰子的最后位置,丢失了移动动画。
在选择方向就还是会瞬间移动
另外我又发现一个问题,红蓝色切换太快导致屏幕上显示成紫色了,请修复一下。
(6)视窗滚动
似乎每增加一些新功能时,AI的首次表现都还不错。
我想通过两个变量设置棋盘的行列数,当我设置一个比较大的行列值时,部分棋盘内容会被隐藏在可视范围外,希望当我移动至边缘时,地图能自动加载出被隐藏的内容。让角色平滑移动。
(7)优化移动规则
初版的移动规则是根据json的target
属性来鉴别前后相邻格子,这样制作json文件会很困难。也不利于多个方向的地图编写。
1 2 3 4 5 6 7 8 9
| [ { "text": "起点", "x": 0, "y": 0, "highlight": true, "paths": [{"direction": "right", "target": 1}] }, { "text": "格子 1", "x": 1, "y": 0, "highlight": true, "paths": [{"direction": "right", "target": 2}] }, { "text": "格子 2", "x": 2, "y": 0, "highlight": true, "paths": [{"direction": "right", "target": 3}] }, { "text": "岔路口", "x": 3, "y": 0, "highlight": true, "paths": [{"direction": "right", "target": 4}, {"direction": "down", "target": 5}] }, { "text": "终点 1", "x": 4, "y": 0, "highlight": true, "paths": [], "isEnd": true }, { "text": "格子 5", "x": 3, "y": 1, "highlight": true, "paths": [{"direction": "down", "target": 6}] }, { "text": "终点 2", "x": 3, "y": 2, "highlight": true, "paths": [], "isEnd": true } ]
|
所以我希望AI能改为扫描相邻格子的数量来优化移动规则,没想到这是噩梦的开始…
格子中的target作用是什么,现在step剩余步骤较多时,会出现移动次数超过剩余点数的情况,修复一下。
那是否意味着当存在多个岔路口时,target会存在重复值?比如在一个T字路口会存在2个target=5?
我觉得可以用更好的设计来完成,例如判断当前坐标x,y的四周是否有多个相连接的格子来判断是否到达了岔口,当只有2个相邻的格子,则根据之前记录的移动方向来继续前进。
现在按下空格键后,人物不会移动了
从这里开始就需要人工介入了,通过审查它的代码来寻找问题。
我明白了,问题出在step()方法内,第一步时周围只有一个相龄格子,导致不会移动。
请修改一下,当周围只有一个相龄格子时,则朝着该格子的方向移动。
返回的代码仍未修复该问题,而且此时在平台充值的$1已耗尽,我又切回到ChatGPT官网。
(8)切到ChatGPT官网并进行排错
刚切到ChatGPT时我比较担心它无法理解这一大串代码,毕竟是两个不同平台不同会话。
我正在编写一个网页2D大富翁游戏,下面是我的代码。现在我遇到了一个问题,按下空格后人物不会前进,请帮我修复该问题。
【网页源代码….】
第一次回复的内容只是优化了代码写法、增加注释,并没有解决该问题。
我明白了,问题出在step()方法内,第一步时周围只有一个相龄格子,导致不会移动。
请修改一下,当周围只有一个相龄格子时,则朝着该格子的方向移动。
我又调试了一遍代码,找出了无法移动的原因并告诉AI。
board.indexOf应该取不到值,因为经过getNeighbors()处理后,变量多了direction属性。
这个需要修复下
重新梳理关于移动的详细逻辑并告诉AI,需要从代码角度和AI交流一下问题。
step()方法对于方向的判断有些问题,逻辑应该是这样的:
1、相邻格子大于2个:此时需要让玩家选择朝哪个方向前进
2、相邻格子等于2个:此时有两种情况
2.1、方向为直线:根据用户前进方向继续前进
2.2、方向为拐角:排除前进方向的反方向,例如:从左往右前进到达拐角,此时可能有向左和向上两个方向,因为之前是从左往右,则排除向左,往另一个方向前进
3、相邻格子等于1个:起点位置,往唯一的方向前进
关于neighbors.length === 2的判断还是不对,应该是这样的:
1、左右、上下 这类对应的直线路径,根据原方向继续前进
2、左上、右下 这类对应不是直线的,才根据前一步的方向和当前可选方向排除反向,并进行前进。
至此,3小时内的免费额度已耗尽,而简版大富翁也基本完成,点击链接访问简版大富翁。
四、总结
根据这两次测试情况来看,我认为现阶段AI只能够帮助搭建一些简易框架,逻辑代码还需要自己编写。仅仅300行的代码量排错就比较麻烦了,如果靠AI生成上万行的代码,排错难度简直难以想象。
另一个问题是,我们似乎没法非常准确的表达我们的需求,AI也无法理解简单的一句话下隐藏的复杂逻辑。
总之,虽然近期AI在各个领域展现的势头非常猛烈,但要实现完全自动化的游戏开发,还需要等待时间和技术的进一步发展。