查看: 4436|回复: 23

[原创] [文本格式已更新]让ai分析了游戏源码的比赛引擎,大家感受下,小有收获

[复制链接]
发表于 2026-11-8 17:06 | 显示全部楼层 |阅读模式
本帖最后由 darbra 于 2026-11-8 19:28 编辑

这是用ai对cm0304的比赛引擎进行了逆向分析,后续对fm2027等进行分析,先试试水

【 8. 种子定了以后,游戏到底怎么“踢”一场球?(以阿森纳 vs 切尔西为例)】

[注]:本节内容全部源自反编译代码(涵盖主循环、持球决策、动作结算、球轨迹、门将以及进球处理等模块)。
注有“读代码证实”的,代表直接查阅了源码;注有“推断”的,代表看懂了代码大意但未逐行验证。
文中所举例子里的具体数值(如射手射术、距离、抽到的牌等)仅为示意,但核心公式和运转流程是完全真实的。


--- 8.1 先打消一个误会:游戏并不是在“算比分” ---

很多人以为游戏会预先算出“阿森纳控球 58%、射门 14 次、进 2 球”这种数据,或者有一个决定“强队有 70% 胜率”的总骰子——这其实是错的。
实际上,游戏是在后台跑一个真实的 2D 小世界:球场有精确坐标,场上有 22 个球员和 1 个球,全场大约会运行 96000 个逻辑帧(Tick)。
每一个逻辑帧,每个球员都会“思考并执行”一步动作:传球、盘带、射门、逼抢或是跑位。
所谓的最终比分,仅仅是这个小世界跑完 90 分钟后,球到底进了几次门的“计数结果”。
那么“种子”决定了什么?它只决定一件事:每次游戏遇到需要“碰运气”的判定时,从牌堆里翻出来的那张随机牌是什么。


--- 8.2 一个逻辑帧(Tick)里会发生什么?【读代码证实】 ---

每个 Tick 会依次执行以下步骤:
1. 球的轨迹:从球的“轨迹数组”里调出这一帧的位置。球一旦被踢出,整条飞行轨迹(每一帧的 x、y 坐标和高度)就会被引擎一次性算好并存起来。
2. 边界判定:判断球是否出界或进门。
3. 球员 AI 思考:
   - 有球的球员 ➔ 决定是传、带还是射门。
   - 没球的球员 ➔ 决定跑位、盯人或压上。
   - 门将 ➔ 决定站位、出击或扑救。
4. 动作结算:执行上述决定的动作,并结算结果。
5. 命令检查:检查玩家的“战术命令队列”(比如换人、改战术)是否到点生效。

在第 3 和第 4 步的几乎每一次判断中,系统都会从“同一副牌”里抽牌(整个工程约有 2000 个抽牌点)。


--- 8.3 一脚射门是怎么发生的?(以阿森纳 9 号面对切尔西门将为例) ---

第 1 步:想射还是不射?(持球人的思考)
持球人会同时评估传球、盘带和射门的收益。引擎会计算:他离球门多远、球门在他视角的张角、身体朝向、防守压迫力度、传球线路是否被挡等。
选择“射门”需要跨过几道带有抽牌判定的门槛。距离越远、压迫越大,门槛就越高越难过。战术设置里如果开启了“远射(Long Shots)”,能让他在更远距离依然强行选择射门。

第 2 步:选择哪种射门方式?
代码里内置了大约 16 种射门动作(普通劲射、推射死角、弧线球、凌空、头球等)。具体选哪种,取决于是否是头球/定位球、距离、角度、防守压迫,同时还要加上一些随机数值门槛来做最终决定。

第 3 步:瞄准哪里?
瞄准点基本在球门范围内:横向大约限制在“球门中心 ±30 个坐标单位”内,高度默认随机(0~19)。
举个例子:“推角度球”会比较球门左右两个角,看哪个角相对门将的夹角更大,从而选择更远的那一边。这就是为什么门将的站位会直接影响前锋“射哪个角”。

第 4 步:射术判定与误差计算(决定射得准不准)
1. 射术抽牌 (s):
   如果是脚射且距离较近(约禁区内),引擎用 Finishing(射门)属性来抽牌;距离适中则混用 Finishing 和 LongShots(远射);更远则纯看 LongShots。头球看 Heading,定位球看对应属性。
   【注意】:Finishing 的有效数值其实被压缩在 42~54 之间。可见属性 5 和 20 的射手,抽牌范围大约是 0~43 对比 0~49,差距并没有直觉上那么悬殊。
2. 弱脚惩罚:如果射门方向超出了球员“顺脚的范围”,会根据弱脚属性扣分。双脚均衡的球员不扣分,纯单脚球员最多扣 40 分。
3. 误差预算:引擎根据距离、防守压迫、以及刚才抽出的“射术牌 s”,算出一个 0~35 的“误差预算”。距离远、压迫大、抽牌差,误差预算就大。
   这笔预算会先分给“高度偏差”(可能打飞),剩下的预算才是“水平偏角”(打偏)。
   如果你的射术牌抽得极高,水平方向几乎不会偏;但高度偏差在前面已经分配好了,所以好射手也依然可能打高。
4. 力量判定:以劲射为例,力量 = 随机基础值 + 20 × 射术牌,封顶 600。射术好的人更容易踢出力量上限。

第 5 步:球飞出去
引擎把“瞄准点 + 力量 + 旋转 + 误差”合并,生成一条精确到每一帧的完整飞行轨迹,存进数组。
同时,它还会抽一张范围到 10000 的牌存起来,作为这脚球的“运气号”,用于打破极个别的平局判定。


--- 8.4 门将和防守人怎么起作用? ---

门将扑救:在球飞行期间,门将每一帧都会预测球的位置。
他的“触及范围”大致等于 Agility(灵活)的随机判定 + Reflexes(反应)的随机判定。
拿着这个范围去对比“门将距离球轨迹有多远”。如果够不着,直接判定扑空;如果够得着,进入扑救质量判定阶段。
扑救质量不仅看 Handling(手型),还要扣除球速、距离带来的难度分。最终划分为:常规扑救(抱住或化解)、好扑救、神扑。

防守人挡射:防守球员会触发“封堵射门”或“人墙封堵”等判定,具体细节依然是由动作结算模块根据碰撞规则来计算。


--- 8.5 球是怎么“进”的?【读代码证实+部分推断】 ---

1. 引擎在计算球轨迹时,如果提前模拟出球越过了球门线,且在门框范围之内,就会把这条轨迹标记为“进门轨迹”,并记录越线的是哪一帧、进了哪边的门。擦柱入网等特殊情况也在此时算好。
2. 随着时间流逝,当小世界运行到“越线的这一帧”时,主循环发现球在门里,且还没结算过。
3. 开始进球结算:给进球方和进球球员 +1,给双方发“士气/评分”变动事件(进球方涨,失球方降),接着触发解说事件(比如帽子戏法、绝杀、越位无效等),最后延迟几十帧重新开球。


--- 8.6 “种子”在这一连串动作里到底做了什么? ---

把上述流程串起来,你会发现每一处“碰运气”都是在按顺序抽同一副牌:
* 想射不射 ➔ 门槛判定抽牌
* 选射法 ➔ 抽牌决定细节
* 瞄准 ➔ 抽牌决定高度和偏移
* 射术 ➔ 根据能力值上限抽牌
* 误差 ➔ 抽牌决定高了还是偏了
* 力量 ➔ 抽牌浮动
* 门将 ➔ 根据反应、灵活抽牌
* 运气号 ➔ 抽一张留作备用

这意味着,同一个“种子”+ 同样的操作顺序,一定会得出完全一样的射门结果。
但如果你中途换人或改变战术,引擎就会多抽几张牌,导致后面的牌序全部错位——原本能抽出“满分射门”的那脚球,可能因为牌序变了,抽到烂牌直接打飞。
结论:游戏的“随机性”并不作用于宏观的比分,而是作用于每一脚球、每一个动作的微观细节,最终的比分只是这些细节累积出的结果。



【 9. CA / PA 和比赛到底有关系吗?(源码解密结论) 】

先说核心结论:CA 有关系,但影响比很多人想象的要小得多;PA 在实际比赛过程里基本没有作用。


--- 9.1 CA、PA 是真实参与计算的数据吗? ---

是的。开赛时引擎会把球员的 CA (0-200) 换算成引擎内部使用的 CA' (150-250)。
计算公式:CA' = (CA + 100) / 2 + 100


--- 9.2 CA 到底干了什么?(最重要的一点) ---

对于 25 个“技术类与判断类”属性(如射门、传球、盘带、视野、预判、门将手型等),引擎会先用 CA 算一个基础值:
基础公式:(CA' + 2 × 可见属性) / 10

用人话解释:CA 先给每个球员铺了一个“属性地板”,而面板上的可见属性只是在这个地板上加一点分。
举个直观的例子,同样是 CA 100 的球员:
* 射门属性只有 1 ➔ 内部有效值为 42
* 射门属性拉满到 20 ➔ 内部有效值为 50
你会发现,属性最差的人,其核心有效值依然是最好的人的 84%!

对比实战对抗(满状态下):
* 前锋A:CA 140,射门 8 ➔ 有效值 46
* 前锋B:CA 80,射门 18 ➔ 有效值 48
结论:这俩人的实际射门准度几乎一样,“高 CA 但面板低”的球员在技术对抗上并不吃亏。

但是,物理身体属性(如速度 Pace、强壮、弹跳)完全不吃 CA 加成!
* 球员A 速度 8,球员B 速度 18。在赛跑对位上,B 会取得压倒性优势,无论他们的 CA 差多少。
总结规律:1 点可见面板属性,大约相当于 4~8 点 CA。


--- 9.3 CA 还在哪些边角料地方有作用? ---

1. 动作质量闸门:传球、传中等动作会有个判定,CA 越高,越容易踢出高质量球,但最高和最低的触发率平均只差 2% 左右。
2. 状态低迷惩罚:如果球员今天“拉跨”,CA 越高的人,保底的下限会稍微高一丁点(差距极小,肉眼不可见)。
3. 后台快速模拟(跳过比赛直接出结果时):此时 CA 是决定球员表现和赛后评分的明显权重。


--- 9.4 PA 有作用吗? ---

在比赛实际踢的过程中,PA 有且只有一个微小的作用:给球员“临场心理状态爆发”时的加成设置一个天花板。
PA 高的小妖和 PA 低的老将,如果当前 CA 一样,在比赛里最多也就差“状态爆棚时多出 0~2 点的有效属性上限”。
PA 的真正作用全都在比赛之外:决定球员成长潜力、转会费估价等。


--- 9.5 一句话总结 ---

比赛靠的是:“面板可见属性 + 由 CA 垫起来的地板”。
CA 是地板,不是天赋加成;PA 则只是一个非常宽松的天花板;身体属性完全脱离 CA 独立计算。
因此,看一个球员在场上强不强,速度、强壮、弹跳等身体属性比 CA 更能决定对位胜负;而传控射等技术类环节,CA 和面板属性的影响力大概各占一半。
发表于 2026-11-10 10:48 | 显示全部楼层
真的是完美验证了夏洛特的那个属性影响力,田径经理2027
发表于 2026-11-8 23:44 | 显示全部楼层
很好很好 建议再多拷打一下ai 特别是豆包 豆包最喜欢瞎编

0304阿森纳他就没有9号的 8号永贝里 10号博格坎普

而且现代引擎一个tick是250ms 就是1秒4帧 这就不好平账了 一场是两万多帧

其他流程上的部分 我认为还是相当可靠的 很值得参考
发表于 2026-11-8 17:13 | 显示全部楼层
现在有ai了,弄这个有点意思
发表于 2026-11-8 17:38 | 显示全部楼层
能不能直接上结论
发表于 2026-11-8 17:55 | 显示全部楼层
iverson1211 发表于 2026-11-8 17:38
能不能直接上结论

楼主贴的就是结论, 耐心点看完吧。
发表于 2026-11-8 18:15 | 显示全部楼层
iverson1211 发表于 2026-11-8 17:38
能不能直接上结论

你可以把楼主的话再发给豆包精简一下,
发表于 2026-11-8 18:56 | 显示全部楼层
目前玩家社区的看法是先根据各种数据、概率等计算出阶段性的比赛事件,再反推比赛动画。楼主用AI的这个分析,可以说是很震撼了,希望能把fm27也拆解出来。
 楼主| 发表于 2026-11-8 19:34 | 显示全部楼层
speed0811 发表于 2026-11-8 17:55
楼主贴的就是结论, 耐心点看完吧。

又加了ca pa对比赛的影响 看看咯
 楼主| 发表于 2026-11-8 19:35 | 显示全部楼层
iamderossi 发表于 2026-11-8 18:56
目前玩家社区的看法是先根据各种数据、概率等计算出阶段性的比赛事件,再反推比赛动画。楼主用AI的这个分析 ...

又加了ca pa对比赛的影响 看看咯
发表于 2026-11-8 22:16 | 显示全部楼层
感谢楼主细致分析,很有收获
发表于 2026-11-9 00:03 | 显示全部楼层
感谢分析,太详细了
发表于 2026-11-9 00:25 | 显示全部楼层
要不说跑狗吃香呢
发表于 2026-11-9 00:56 | 显示全部楼层
这么多帧,每次处理差百分之一,一连串运行之后,差距应该是天差地别吧
发表于 2026-11-9 22:52 来自手机 | 显示全部楼层
这分析了为什么跑狗牛逼,
发表于 2026-11-10 05:45 | 显示全部楼层
还是数值设计因素吧,不用编辑器修改,再怎么低ca,球员右边身体那一栏也没有1的,甚至正常5以下都少;但是左边中间精神和技术真的会有一大片1,引擎又不能让技术部分的1真100%倍率作用到比赛(不然底层联赛根本没法看了),那最后自然就是现在反编译出来的这种比赛引擎
发表于 2026-11-10 12:10 | 显示全部楼层
说起来一直看有人说决断预判之类完全没有用,那么解包支不支持这个说法呢
发表于 2026-11-11 10:00 | 显示全部楼层
本帖最后由 heyide 于 2026-11-11 10:04 编辑

但是,物理身体属性(如速度 Pace、强壮、弹跳)完全不吃 CA 加成!
* 球员A 速度 8,球员B 速度 18。在赛跑对位上,B 会取得压倒性优势,无论他们的 CA 差多少。
总结规律:1 点可见面板属性,大约相当于 4~8 点 CA。


笑死 田径经理27   我原先一直这么多代的猜想是“属性是参数加算,速度是倍率乘算” ,原来居然是属性被CA拖后腿,身体无视CA直接对比,这套屎山代码能跑这么多年也真就是没有竞品.....
发表于 2026-11-11 11:01 | 显示全部楼层
看来之前b站大神测出来的跑狗无敌结论,也是和这几个属性和总CA无关是能应证的,所以不管总CA多低的球员,身体属性好就是好,其他技术属性的加成敏感性太低了
发表于 2026-11-11 11:04 | 显示全部楼层
看来之前b站大神测出来的跑狗无敌结论,也是和这几个属性和总CA无关是能应证的,所以不管总CA多低的球员,身体属性好就是好,其他技术属性的加成敏感性太低了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|爆棚小组 PlayGM论坛

GMT+8, 2026-11-13 05:00 , Processed in 0.025198 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表