《逃离永明岛》是剧情驱动的点击式文字冒险游戏,但四位主角的互动机制(玩法)有所不同。我今天想分享一下主角团中,小女孩顾西西的「关卡」玩法:解谜卡牌游戏《百兽斗》,以及我如何与Claude在一周内从零开始设计并实现出这个小游戏的原型。 开发过程涉及了与AI讨论机制设计、写模拟测试代码、写Godot代码、添加UI/美术部件等。《百兽斗》作为内嵌小游戏非常「短平快」,所以本文可以算是一个AI辅助开发的极简案例记录,供开发者朋友们参考批评。
(注:一年半前我还是游戏开发零经验,《逃》是我单人开发的第一款游戏,所以本文是新手向。内容不涉及剧透和具体谜题,不影响实际游戏体验。另外,这个小游戏的明快风格和主线故事有较大区别。)
为了忠实记录从无到有的过程,文章尽量囊括了关键细节和步骤,其中包含了我和Claude的对话截图,所以整体有点长。内容分为三个部分:
核心机制策划
对战逻辑模拟代码和平衡性调试
Godot实现,包括添加UI和美术
《逃》中,西西是一个喜欢玩电子游戏的十岁小女孩。所以最初立项时,我就打算把她的「关卡」做成一个内嵌小游戏,与其他三位以分支剧情选择互动为主的成年角色区别开来。
作为玩家,我自己玩剧情类游戏时,不喜欢空降下来的「为了互动而互动」的小游戏。所以这个内嵌卡牌游戏在两个方向上和主线紧密绑定:
每张卡都是主线中出现过的角色,且牌面数值和能力符合角色性格背景
西西玩卡牌游戏的原因、集卡流程、战斗对象、胜利奖励,都和故事直接相关
除以上两点外,《百兽斗》卡牌游戏的规则和玩法是独立的。由于最终需要无缝内嵌进《逃》这个轻解谜文字冒险游戏里,在设计之初,我有如下前提限制:
一共只能有26张卡(因为《逃》有26名角色)
这应是个确定性的解谜类游戏,不能出现随机元素。这样不会打破解谜冒险类玩家的预期
游戏节奏需短平快,必须能快速上手,不能抢占太多注意力而喧宾夺主
游戏风格卡通明亮,策略不能太复杂,从而符合西西的关卡风格
我个人想让它有攻防对战元素,这样可以配些和主线剧情BGM风格迥异的战斗音乐
在这些条条款款之下,我决定做一个类《圣兽之王》放置战斗的卡通版《邪恶冥刻》。
《圣兽之王》是香草社的战略游戏,主要玩法在于组队布阵搭配人物装备词条,一旦战斗开始,角色行动都是自动的,直到一方全灭。
我将组队布阵简化为「选卡排序」,把5人队伍简化为选3张卡出阵
为了让战斗迅速结束,我设置了3回合的限制。若3回合结束而敌方(E;守擂方)没有全灭,就算玩家(P;挑战方)败
《邪恶冥刻》是2021最火的卡牌类独立游戏之一,我就不介绍了……Roguelike牌组构筑。
我喜欢它的数值简单(只有个位数攻/血;牌面能力相对单纯),可以减轻上手和脑内计算负担
采用PVE非对称战斗。我打算设计6个主线关卡
从密林邪教动物改用明亮卡通动物形象,符合西西喜好
确定大方向后,我就去和Claude聊天了。我的游戏设计能力尚浅,需要它帮忙审核一下这个想法有什么问题。以下是第一轮对话,Claude就已经提出了很多不错的意见:
它首先批评了用阵型代替速度的做法(邪恶冥刻),我同意。最终,我让阵型决定了谁会被对方优先攻击(最前排)。
更可贵的是它建议的20张卡牌列表 - 因为我玩的卡牌对战游戏很少,所以牌面数值和能力设计属于未知领域。它建议的这些来自其他卡牌游戏的典型能力,很多被我修改后采用,例如这里「剑士」的连击能力最后被「独角兽」的卡牌使用。
接下来,我让它设计一些敌方的卡牌组合作为关卡。它考虑到了初学者的学习曲线,把前几关敌人的组合风格设计为引导玩家发现明显策略。此类关卡设计逻辑(包括下面提到的「疾速猛攻队」之类的主题),我也在最终游戏中沿用了。
几个来回的讨论后,我留下了26张卡牌设计(以A-Z命名),6个关卡草案(即敌方的3卡阵型配置),重新把规则梳理了一遍。然后,我让Claude大致模拟对战一下,看看游戏玩起来是什么样的。
Claude老老实实地开始脑内模拟。以下模拟完后的总结:
卡牌游戏设计分析与建议
我分析了你的卡牌游戏设计,并通过模拟每一关的对战,发现了一些需要调整的地方。总体来说,这是一个有趣的确定性解谜游戏,但平衡性需要改进。
关卡平衡性分析
第一关 (疾速猛攻队)
问题:过于简单,多种组合都能轻松获胜
敌方卡牌虽然速度高,但防御值都只有2点,极易被击破
Y卡牌的特殊能力在实战中效果有限
G卡虽然首回合伤害高,但无法持续威胁
模拟测试:
使用 E(前), B(中), F(后) 组合:
首回合Y攻击B,被反伤击破
G攻击E造成10点伤害,击破E
A攻击B,击破B
F攻击A,击破A,然后攻击G,击破G
P方首回合胜利
<------下略------>
在它的描述性模拟中,我主要是想看看这个游戏玩起来的「感觉」,也就是总体「好不好玩」,所以它的脑内模拟战报不用准确,大致不差就行。
这个「假想试玩」的过程又反复了很多次,很多规则和能力的毛边在其中被打磨得更光滑。这也让我大致确定了26张卡牌的数值范围和能力方向,以及对应关卡的风格和样式。这些玩耍性质的模拟,对我理解游戏的大致平衡性和策略范围很重要。同时,我也把卡牌和《逃》的人物,按性格背景做了一一对应。
在这一步,AI扮演了游戏策划助手/头脑风暴小黄鸭的角色。
当我确定最初的想法具有一定可玩性后,就让Claude去着手实现核心逻辑代码了。有了代码,我们可以更加精确的测试玩法和设计,并真正着手调整游戏平衡性。
我让它写python。因为比起Godot的gdscript,python是热门语言,所以出错的概率要低不少。(让它写gdscript时,经常就会写成python……)
下面的对话发生在VScode + Cline中(我还没试过Claude Code,听说更好用)。其中提到的文件是我总结了上一步机制设计的文本描述。
在经过2.5美元的API开销之后,它写好了`card_game.py`。
当然了,第一轮的代码一般都是错的。像下面这样我追加要求它继续检查和测试自己的代码,并解决它自己或者我旁观时抛出的问题的对话,一共7次,大概花了20美元吧。
当我和它自己从战报里都看不出任何问题之后,我就让Claude展开平衡性测试员的工作了:扮作玩家来攻克之前的关卡草案,并根据结果提出修改意见。一共6轮。这里,我主要想看它如何从玩家角度思考对策,了解策略思考的大致深度。
同时我又让它写了一份穷举测试代码,将所有可能的玩家卡牌组合都跑一遍。这样我就知道,每一关有多少种玩家组合可以通过。(当然,穷举只在这类复杂度很低的小游戏里可行。)
可通关组合的比例,加上它的思考过程,让我最终确定了游戏平衡性基准线,和从易到难的关卡顺序。至此,所有卡牌的数值能力设计,以及6个关卡配置,基本算是成形了。
在这一步,AI扮演了程序员和游戏测试员的角色。当然,这里的测试因为仅仅涉及文本/字符串,所以非常适合原生语言模型,无需额外的控制器工具和视觉能力(读取游戏画面)。
游戏在逻辑层面成形后,我开始往Godot游戏引擎里搬运。我先大致构思出一个实现框架,然后让Claude把python代码的逻辑迁移进去:
同上,初次实现肯定是有很多问题的。问题明显的地方,我就自己上手改了。不明显的,会让它自己先检查澄清。
和之前的步骤可以自动测试不同,Godot的编辑、运行、测试部分需要我手动,所以这一步是真正的工作量所在。(最近注意到有Godot MCP还有Godot-Gemini这类AI-引擎项目。我没试过,不知道好用不。)
UI部件是我自己在编辑器里手拼,再和上述脚本整合。UI的动画设计、视觉节奏、信号处理、音效触发等等影响「游戏手感」的地方也大都是手调,其中模块化的部分函数让Claude实现。不赘述。
《百兽斗》的战斗背景要么就是主游戏场景,要么是着色器视效,所以现在只缺卡牌美术了。我用PS设计了如下模板:
由于每张卡牌都是对应一位角色的动物化卡通形象,我直接在Spine里把每个现有角色摆了若干姿势,然后让Midjourney根据这个「精灵图」转卡通形象:
最后装配进UI,《百兽斗》原型完成!(做这个可玩的原型只花了一周,但后期打磨还是挺久的。)
很多内测人员表示非常好玩,应该做成一个单独的游戏……呃……下次吧……这次我主要还是来好好讲个故事的。
《逃离永明岛》正式版将于7月31日上线,游戏时长约9小时。新试玩版存档兼容。
评论区
共 条评论热门最新