上一篇我们讲了,通过 Claude Fable 和 Codex 完成了经典游戏《坦克大战》的 3D 版本!
整个游戏已经可以正常运转了,网页版和电脑版同步发布了!
但是,我始终觉得有一点美中不足!我用 Fable 生成的 2D 版来分析下。
这是AI生成的图片:

为了做对比,我还专门下载了模拟器,找到坦克大战的 NES 文件。
然后截取了原版的图片:

对比可以发现,地图的布局还是有差异的,另外就是消墙逻辑也有差异。
具体的表现是:老版本射击基地的时候是两枪才能干掉砖墙,我这个版本是一枪就干掉了。导致基地很容易挂掉,难度有所增加。
这两个点,不修改,其实也能玩的很开心。但是我还是希望能改一改,更加完美!
所以今天,第一个问题是还原第一关地图,第二个是修改射击效果!第三个,我准备制作地图编辑功能。

为了完成这三个功能,我又消耗了一天时间!细节改起来真是要人命,不过收获的全是宝贵思路和经验!
游戏和网址我会分享在文章后面!
今天重点记录修改过程。
1、修改地图
修改地图的难点是,如何让 AI 理解我的需求。我最早是希望通过简单的描述让它帮我搞定,但事实证明这个事情难度极高。
我最初是直接给了一张游戏截图以及原版的平面图,让它还原地图!

我的需求大概是这个样子的:

它好像都懂了,但是结果还是差强人意!

地图是改了,但是细节还是差不少,然后我又希望通过画红色框的方式让它修改。最终也失败了,而且越改越离谱。
Opus4.8 平时改网页还是非常强的,但是改这个地图好像懵了。而且这还是个 3D 地图。
这个事情,改来改去,都把 5 小时配额跑完了。看来这条路是走不通了!
不过劳动人民的智慧是无穷无尽的。我让它帮我分析了地图的构成逻辑。
地图是用这种形式表达的:
erlang
row0 .............
row1 .b.b.b.b.b.b.
row2 .b.b.b.b.b.b.
row3 .b.b.bsb.b.b. ← 中央 2×2 钢,上方留凹槽入口
row4 .b.b.b.b.b.b.
row5 .....b.b..... ← 中央两块孤立小砖
row6 ss.bbb.bbb.ss ← 左右边墙嵌钢 + 中部横墙
row7 .............
row8 .b.b.bbb.b.b. ← 下半柱 + 中央 H 横梁
row9 .b.b.b.b.b.b.
row10 .b.b.b.b.b.b.
row11 ......b...... ← 基地正上方引导墙
row12 ............. ← 基地及护墙由 ringTiles 生成
然后默认的地图是 13x13,为了还原一半是钢板一半是砖墙的形式,第一关升级成了 26x26 的地图!这一下子整体复杂度翻了多少倍啊。
既然是网格,就必然有坐标。我就让 Opus 帮我把所有坐标都显示在地图上,我就根据坐标让它来修改。

为了实现这个效果也是折腾了一下的。因为这是一个 3D 视图,第一次因为 3D 视角问题对不齐,然后又修改了一波。终于完美对齐了。
然后我尝试告诉它某个编号,进行修改。终于可以精准的修改了!
这个图看得我眼花缭乱,信息量太大了,就这个图截图之后就有 6 MB,压缩之后都有 2 MB。
2、优化设计效果
第一个搞定!开始攻克第二个问题。

这个问题是这样的。我发现原版的大本营厚度大概是正常砖块🧱的一半,子弹一枪消耗的是一半的一半!
这个逻辑和我们的完全不一样。我们是直接一枪打掉一半。所以基地的砖墙只能抗一枪,导致和原版不一致。
为了修改这个问题,我们就想把整个系统进行升级,从原先的 26x26 升级到 52x52。复杂度又有指数上升了。
而且如何把这个问题给 Opus4.8 描述清楚又是一个大难题!
我是先询问了一下可行性:

它分析了一下,列出了需要修改的地方,并给了两种方案!
css
两种实现思路:
方案A:只给砖加 2×2 子块 mask(推荐) --- 只有 BRICK 引入子块,钢/水/树/冰/空仍整格(原版钢板也是整块炸)。改动集中在 4 个函数 + 一个子块数据结构,范围可控,性能可接受。
方案B:把整个 map 升到 52×52 --- 概念上最简单(N=26→52、TILE=16→8,一切天然半格),但渲染 cube 数 ×4(最多 2704 个)、很多硬编码坐标(护墙 ringTiles、BASE、出生点、各种 clearTiles)都要重算,性能和风险都更高。
复杂度结论:属于中等偏大的改动,不是小修小补,但范围可控------核心难点就是让「子块状态」在破坏、碰撞、渲染三处保持一致。推荐方案A(砖块 mask),1 次专注重构能做完,且不碰地图数据格式和编辑器。
要做的话告诉我,我按方案A来。
说实话,我对 3D 游戏的构成还不是特别清晰。它反馈的这些概念,我并不是太懂。但是我只看到 A 方案改动小,不影响性能。另外这个复杂度属于中等偏大。
我就按它的方案来改,我还是挺紧张的,毕竟我不太懂细节。它又说是中等偏大难度。
但是,这个问题我必须要推进。没有意外的话应该能搞定。
典中典之没有意外的话必然会有意外:

改好了,射击力度是好了。但是打出了一个坑!
这......我怎么移动啊!我要怎么告诉它,力度是干掉 1/4,但是和坦克垂直的一面宽度是 1 个单位,但是如果坦克偏移一定位置,就要干掉 1/2......
自然语言编程的最大难度是"你根本不懂如何表达":

还好 Opus4.8 理解了!
最终修改成功,基本上 OK 了!
已经高度还原《坦克大战》的第一关地图和子弹伤害!
后面的关卡地面目前完全由最强 Fable 生成。目前我只刷到了第 10 关,总共的关卡有 35 关,我对后面的关卡还一无所知。
3、地图编辑
为了搞清楚每个关卡的样子,并且可以可视化地显示关卡,我又开发了一个 Map 功能!

通过这个功能,可以把关卡字符串转换成可视化的图片!
但是光查看还不够,我还添加了编辑功能。 可以直接在地图上进行编辑,生成新的地图。
然后一键导出地图数组或者字符串!
这样我更新游戏的地图就非常方便了!
既然都能可视化编辑了,那么直接添加一个图片转地图的功能吧。
我只要把图片拖动到编辑区域,就能自动生成地图了。

生成之后稍微修改一下,就是一个非常有意思的关卡了!
这个功能目前还是我自用为主,稍后分享出来让大家可以自己编辑地图!
在线体验:
桌面版下载:
给 GZH "甲维斯C"发消息"jtank"!