玩家说“AI开挂了”,他到底在抱怨什么

先看一个模拟场景(以下数值均为示例,不代表真实用户数据):玩家用一支虚构球队“滨江青隼”在生涯模式里连续三场以4:1、3:0、5:2取胜,第四场第12分钟,他的右边锋拿球加速下底,被对方19号中卫从三米外追上并完成抢断。上一场,同一名中卫在同样的距离上根本追不上。

在体育游戏里,这种变化几乎无处可藏。速度、力量、射门精度都直接体现在画面和结果上,玩家对自己球员“应该有多快”有非常稳定的肌肉记忆。只要底层属性被暗中修改,玩家大多能在几次对抗之内察觉。

把玩家的抱怨拆开,动态难度常见的失败可以归成四类:

失败类型 玩家看到的现象 背后常见的做法
作弊感 对手突然更快、更准、更硬 连胜后直接提高AI球员属性
放水感对方门将脱手、后卫站着不动 连败后让AI故意犯低级错误
难度跳变 上一场轻松,这一场完全踢不动 按胜负一次性切换难度档位
控制感丧失 觉得怎么踢都一样,结果早被决定调整不可见、不可关闭、无法解释

竞速游戏里的橡皮筋AI就是作弊感的典型:领先时对手加速、落后时对手减速,Game Developer 上的设计文章把它批评为“一眼可见且不公平”。另一个值得注意的例子是:2020年11月曾有玩家对EA提起集体诉讼,指控其在Ultimate Team模式中用动态难度影响比赛;原告审阅技术资料后于2021年2月自愿撤诉,EA公开表示虽持有相关专利,但从未在这些模式中使用。这件事说明的不是某款游戏如何设计,而是只要玩家怀疑存在“暗中调整”,信任就已经开始流失。所以动态难度的第一原则是:调整本身要经得起玩家的怀疑。

Performance:先记录玩家怎么赢,而不是只记赢了几场

很多系统只看胜负和比分差,这是最粗糙的信号。连赢三场,可能是玩家真的变强了,也可能是他找到了AI的一个漏洞,比如每次都从右路传中、后点头球得分。前一种情况应该让对手整体更有对抗性,后一种情况只需要让AI学会防这一种套路。

乐鱼体育在记录玩家表现时,更关注这几类过程数据:

  • 进球来源:运动战、定位球、反击、个人突破各占多少;
  • 推进路线:左路、中路、右路的推进次数与成功率;
  • 失球来源:是被打身后、被打肋部,还是自己后场传球失误;
  • 操作层面:传球失误集中在哪个区域,冲刺键是否长时间按住导致体能提前耗尽;
  • 比赛情境:比分领先或落后时,玩家的打法有没有明显变化。

同样是5:2取胜,一场是五种方式进球,一场是四个球都来自右路传中,对难度系统来说是两件完全不同的事。

Analysis:连胜和连败都要先诊断原因

连败比连胜更需要诊断。模拟一个场景:玩家连续输了五场,系统如果直接降低难度,下一场他可能赢了,但他并不知道自己之前为什么输,第七场、第八场还会以同样方式输回去。

输球至少有五种来源,对应的处理完全不同:

  1. 防守站位问题:比如防线压得过高,被对手反复打身后。应该给出站位提示,而不是让对方前锋变慢。
  2. 操作问题:比如抢断时机总是提前半拍,导致被过后空门。适合推荐一个短训练,或在比赛中给出一次性提示。
  3. AI强度确实超出玩家当前水平:各项过程数据都被全面压制,这时才需要降低AI的战术复杂度或决策质量。
  4. 阵容问题:玩家把体能只剩40%的球员连续首发,或让边后卫踢中卫。应该在赛前提醒阵容和体能。
  5. 战术错误:比如落后时仍然用五后卫阵型死守。适合在中场休息时给出战术建议。

只有第三种原因需要真正动难度,前两种和后两种属于玩家可以自己修正的问题。更细的诊断方法可以参考连续输掉五场比赛以后先判断问题出在哪里。

Difficulty:难度不是一个数字,而是一组可以分开拧的旋钮

“难度等级1到5”对玩家是一个方便的入口,但在系统内部,难度应该被拆成多个独立维度,并且有明确的优先顺序:

层级 可以调整的内容玩家的感知
战术层 压迫强度、防线高度、是否针对玩家的主攻路线布置防守 对手换了打法,可以理解
节奏层反击频率、控球耐心、比赛整体速度 比赛更紧或更松,比较自然
决策层 反应时间、决策延迟、观察范围、传球选择的冒险程度 对手更聪明或更保守
任务层 本场目标,例如零封对手、控球率过半、完成三次边路传中 目标变化,挑战感来自目标本身
教学层 站位提示、操作提示、战术建议的频率 得到帮助,而非被放水
属性层 速度、力量、命中率等底层数值 最容易被察觉,也最容易被当成作弊

调整应该从上往下尝试,属性层放在最后。原因很简单:战术和决策的变化在真实比赛中每天都在发生,一支球队下半场改成高位逼抢,没人会说它作弊;但一名中卫突然比上半场快了一截,谁都会觉得不对。关于战术调整和能力值调整的取舍,AI动态难度这篇有更具体的对比。

这个思路在行业里并不新。Hunicke 在2005年提出的 Hamlet 系统,通过调节物资的供需来控制难度,而不是直接修改敌人的强度;Valve 在 GDC 2009 讲解的 Left 4 Dead「AI Director」,用规则控制节奏、敌人出现和物品摆放。两者都是在“环境和节奏”上做文章。反过来,Resident Evil 4 那套根据命中率和受伤情况调整敌人攻击性的隐藏难度,常被当作“玩家察觉不到的动态难度”的例子来讨论,它引出的问题恰恰是:察觉不到,是不是就等于可以接受。

Adjustment:一次调整多大,才不会让玩家感觉难度跳了一级

有了维度和顺序,接下来要解决幅度问题。难度跳变通常不是因为方向错了,而是因为一次改得太多。

最近五场表现原因诊断选择一到两个调整维度限定单场幅度比赛内只换打法赛后评估与回退

几条在实际设计中比较有用的约束:

  • 用最近五场的加权表现做判断,而不是只看上一场,避免一场偶然大胜就触发调整;
  • 每场最多调整两个维度,其余保持不变,这样玩家能感受到“对手有一点不同”,而不是“换了一个游戏”;
  • 比赛进行中不修改任何底层属性,只允许AI像真实教练一样在中场或特定时间点换战术;
  • 每次调整都要记录前后状态,如果调整后连续三场的体验指标明显变差,自动回退到上一个版本。

模拟案例:3v3篮球里一直赢的挡拆外线投篮

场景设定为3v3半场,场地示例尺寸15米×11米,每场先得21分获胜。玩家最近五场全胜,过程数据显示,他超过六成的得分来自同一种进攻:2号控卫与5号内线挡拆后,控卫在弧顶外投篮。

不合理的调整是:提高AI防守球员的封盖成功率,或者降低玩家外线投篮命中率。玩家会立刻发现“同样的空位怎么突然投不进了”。

系统实际选择的调整只动了战术层和决策层:AI在挡拆时改为换防,并让离球最远的防守人提前半步向弧顶靠拢;同时把AI对挡拆的识别反应时间从示例中的0.6秒缩短到0.45秒,但依然在人类可以达到的范围内。球员的速度、弹跳和封盖属性保持不变。

结果是玩家上半场的外线投篮机会明显减少,前两次挡拆被换防后被迫运球到底线。之后他发现换防造成了内线错位,开始让5号顺下要位。赛后回看,他输掉的是前几个回合,赢回来的是新的打法。

放水比加难更难做

降低难度的失败,往往比提高难度更伤玩家。对方门将在一次再普通不过的扑救中脱手,玩家补射得分,他不会高兴,只会觉得被施舍。

更好的做法是让AI“选择”一种更容易被打穿的方式,而不是“执行”得更差:

  • AI改为更保守的中低位防守,给玩家留出中场推进的空间,但每个防守动作依然做得合理;
  • 减少AI的反击次数,让玩家少面对最容易失球的局面;
  • 把本场目标从“获胜”改成“完成三次有效射门”“半场失球不超过一个”,让玩家有一个可以达到的阶段目标;
  • 在玩家连续犯同一个错误时,给一次站位或操作提示。
判断一次降难是否合格,可以问一句:如果把录像放给另一个玩家看,他会不会指出某个AI动作“明显不正常”?如果会,这就是放水,而不是调整。

Feedback:让玩家看到调整,并且能说不

控制感来自两件事:知道发生了什么,以及可以选择。动态难度的反馈至少应该覆盖三个时间点。

赛前,告诉玩家这一场对手的倾向,比如“对手本场会重点限制右路传中”。这并不会削弱挑战,反而让玩家有了准备和应对的目标。

赛后,用一两句话解释调整的原因,例如“你最近五场有68%的进球来自右路,对手本场加强了右侧的补位”。玩家能看懂这句话,就能判断系统有没有读错他。

设置里,提供明确的选项:保持当前难度、希望更有挑战、只保留教学提示、完全关闭动态调整。玩家的选择本身也是反馈,应该写回玩家模型。如果一个玩家三次把动态调整关掉,说明他想要的是固定、可预期的对手,系统不应该再悄悄打开。

关于对手在学习玩家之后如何保持公平,比如反应时间和信息边界的限制,可以结合体育游戏智能对手一起看。动态难度和智能对手在乐鱼体育的设计里共用一套约束:AI可以变聪明,但不能看到玩家看不到的信息,也不能获得玩家没有的数值优势。

上线前可以逐条核对的清单

每一次动态难度规则的改动,在进入正式环境之前,可以用下面这几条逐项核对:

  • 玩家连胜后,对手的速度、力量、命中率是否与上一场保持一致;
  • 本场的调整能否用一句玩家能听懂的话解释清楚;
  • 单场调整是否不超过两个维度,是否跨场平滑而不是一次跳档;
  • 连败时,系统是否先给出了原因诊断,再决定是否降低AI强度;
  • 降难时,录像里是否找不到任何“明显不正常”的AI动作;
  • 玩家是否能在设置里一键关闭动态调整,并且关闭后不会被悄悄打开;
  • 调整后三场内是否有评估,效果变差时能否自动回退。

七条里只要有一条答不上来,这次调整就还不应该交给玩家。