《乒乓生涯》引擎技术交接文档

用途:换 agent 时的完整交接。覆盖评分机制、属性机制、AI 决策、物理引擎、每 1 分差距的含义、真实球员数据标定方法、完整开发日志。
项目路径:/root/1234/tt-physics/ | 引擎:Godot 4.7(GDScript,纯代码后端 + Control UI)| 测试:9 套件 200 项检查全绿。

0. 一页速览(10 行读懂整个系统)

#要点
1坐标系 z 向上(重力 -z),台面 z=0.76,网上沿 0.9125;渲染时才映射为 Godot y-up。
2球飞行 = RK4 积分(重力/空气阻力/马格努斯/旋转衰减);台/网/拍按冲量+库仑摩擦碰撞。
3球员有 54 项属性(0-100 绝对标尺,引擎唯一标尺)+ 器材(握拍/胶皮)+ 隐藏属性(稳定性/关键分/大赛/伤病/士气/疲劳)。
4三套评分:开球网积分(ELO 400-3000,底层锚点)、业余评分、专业评分;单项属性另有业余/专业双显示标尺,经"绝对属性"换算。
5击球 = 意图生成 + 物理裁决:属性决定"想怎么打"(挥拍/拍面角/目标旋转/误差),物理引擎决定"结果是否上台"。没有保送,打不上台就是失误。
6AI 三层思维链:战略层(风格/比分/总评差→主基调)→战术层(回合意图/发球战术)→执行层(技术选择+机会球+博弈预测)。
7状态系统:士气(随得失分波动,沉着决定波动幅度)、疲劳(累积,惩罚质量≤25%+失误率线性升)、发挥系数 form=状态×士气×大赛×伤病。
8失误 = 主动(非受迫,只关自己属性)+ 受迫(对手质量≥0.45 压制)+ 物理失误(拍面误差推出可行角度窗口)。
9冒险/搏杀 = risk 管线(胆识→战略基线→比分/手感/士气修正),risk 同时推高发力和失误率、决定爆冲还是求稳。
10WTT 赛事按世界排名解锁(支线→挑战→球星→冠军→大满贯→总决赛),对手是真实球员库;国内邀请赛(业余)对手显示开球网。

1. 评分机制(三套体系 + 绝对属性)

1.1 开球网积分(400-3000,底层锚点)

ELO 制:预期胜率 E = 1/(1+10^((Rb-Ra)/400)),K=32。所有球员内部都持有一个开球网积分,是业余/专业两套评分的换算桥梁。专业界面隐藏它,只在业余赛事对手身上显示。

1.2 业余评分(0-100)

由开球网积分分段线性映射(低分段区分度高):

开球网400600800100012001400160018002000220023002500
业余评分1815223040506070788595

1.3 专业评分(0-100)

2300 起(2300 以下不属专业体系,显示"—"):

开球网23002400250026002700280029003000
专业评分30394959697989100

1.4 绝对属性(引擎唯一标尺,0-100)

核心概念:物理引擎、比赛模拟、失误计算全部只认"绝对属性"。业余/专业标尺只是显示层包装。PlayerAttrs.attrs 存的就是绝对属性;get_attr() 返回"绝对×器材修正×本场发挥系数"。
开球网段绝对属性上限典型绝对属性
400-800205-15
800-12003515-28
1200-16005528-45
1600-20007545-60
2000-22005850-56
2200-23006154-61
2300-25007561-75
2500-27008575-85
2700-300010085-100
用户新标定(2025 更新):2300 = 绝对属性上限 61;2500 = 75;2500-2700 即 75-85。95+ 只给马龙(95.5);樊振东/张继科/瓦尔德内尔 ≈ 93;其余真实球员同比例缩放(见 6.1)。

1.5 单项属性双标尺换算(核心公式,已在 src/scale.gd)

业余 → 绝对:                绝对 → 业余:
  v≤60: v×0.55                v≤33: v/0.55
  60<v≤80: 33+(v-60)×0.8      33<v≤49: 60+(v-33)/0.8
  80<v≤90: 49+(v-80)×1.1      49<v≤60: 80+(v-49)/1.1
  v>90: 60+(v-90)×4.0          v>60: 90+(v-60)/4.0

专业 → 绝对:                绝对 → 专业:
  v≤30: 40+v×0.7              v<40: 0(专业体系外)
  30<v≤50: 61+(v-30)×0.7      40≤v≤61: (v-40)/0.7
  50<v≤70: 75+(v-50)×0.5      61≤v≤75: 30+(v-61)/0.7
  v>70: 85+(v-70)×0.5         75≤v≤85: 50+(v-75)/0.5
                                v>85: 70+(v-85)/0.5
用户新标定(2025 更新):专业 30(青训/开球网 2300) = 绝对 61;专业 50(二线/2500) = 绝对 75;专业 70(主力/2700) = 绝对 85;专业 100 = 绝对 100(传奇)。95+ 仅马龙(绝对 95.5 ≈ 专业 91);樊振东/张继科/老瓦绝对 93 ≈ 专业 86。
关键锚点业余绝对专业含义
业余90 = 绝对60 ≈ 开球网220090600(专业体系外)业余顶级单项 ≈ 专业门外
专业30 = 绝对61 ≈ 开球网2300916130青训入门(16岁国青)
专业50 = 绝对75 ≈ 开球网2500947550职业二线
专业70 = 绝对85 ≈ 开球网2700968570职业主力/世界级
陷阱(历史 bug):绝不能把"业余评分/专业评分"直接当绝对属性用——必须经换算。曾把 2200 对手按"业余78"直接设绝对78,导致对手凭空强 20 点。

1.6 总评(绝对总评)计算

总评 = Σ(大类评分 × 风格权重)
大类评分 = Σ(子属性 × 类内权重)  (进攻类先算"正手拉球总评=前冲0.5+高吊0.3+侧拐0.2"等复合项)
风格权重(7风格,主0.7+副0.3混合):
  进攻型  .35/.10/.15/.10/.20/.10   快攻型  .30/.10/.20/.10/.20/.10
  弧圈相持 .35/.10/.10/.10/.25/.10   台内控制 .20/.10/.30/.15/.15/.10
  防守反击 .15/.30/.15/.10/.20/.10   削球型  .10/.35/.10/.10/.25/.10
  变化型   .20/.10/.20/.20/.15/.15   (顺序:进攻/防守/台内/发接/步法/心理)
器材修正先加在属性上(横拍反手拧拉+3…、正胶旋转类×0.85…),再截断开球网段上限,再加权。

总评与单项标尺的关系:总评是属性加权(绝对口径)。显示时再经绝对→专业/业余换算。16 岁青训开局:开球网 2300 → 绝对属性上限 61、绝对属性基础 58-61(核心技术/步法=61)、绝对总评约 60、专业综评≈29。

2. 属性机制(54 项,每项"差 1 分"的影响)

2.1 属性 → 物理参数的通用公式链

挥拍速度 swing = 基础速度 × (0.6+0.6·技术/100) × (0.8+0.4·爆发力/100) × 状态系数
目标转速 ω    = 顶级理论转速 × (技术/100) × (0.8+0.4·手腕/100)     (上限900 rad/s≈143转/秒)
拍面误差 err  = ((1-技术/100)×0.04 + 0.006 + (1-技术/100)×0.02×来球旋转强度) × (1-手腕/100×0.4)
主动失误率 p  = 基础失误率(按技术) × (1-技术/100) × 心理(1+(1-沉着/100)×0.5) × 体能(1+疲劳) × 风险(0.6+0.8×risk)
质量系数 Q   = (技术/100)×(爆发力/100)×(手腕/100)×手感×rand(0.9~1.1)
落点深度     = 0.45+0.7×(技术/100)^1.2   (控制型技术改打短球0.25+0.4·t/100)
够球率 P     = 1/(1+e^(-(步法分-来球难度)/8)), 步法分=启动×0.3+移动精度×0.5+还原×0.2

2.2 技术类属性(38 项)差 1 分的通用效果

技术属性 t 每 +1 分(以 t=70 为基准的典型值):

影响项公式t=70→71 变化t=90→91 变化
挥拍速度×(0.6+0.6·t/100)+0.60%+0.53%
出球旋转×(t/100)+1.43%+1.11%
拍面误差-(0.04+0.02·spin)/100 rad-0.0006 rad(-0.034°,-3.4%)-0.0004 rad(-5.5%)
主动失误率×(1-t/100)-3.3%(相对)-10%(相对)
质量系数 Q×(t/100)+1.43%+1.11%
落点深度0.45+0.7·(t/100)^1.2+0.6%(≈+0.6cm)+0.5%
AI 选择权重score=t/100·aggr-失误×0.6+1%·aggr+1%·aggr

各技术的基础值差异(决定"同属性下不同技术强度"):

技术基础球速 m/s顶级转速 rad/s旋转类型基础失误率进攻性 aggr
正手拉前冲11.0900上旋0.040.85
正手拉高吊8.0820上旋0.020.50
正手侧身爆冲12.5940上旋0.040.95
正手攻球10.5160不转0.020.70
正手拍击13.090不转0.080.75
正手快带10.0600上旋0.020.60
正手反拉11.0880上旋0.040.70
正手挑打8.5200不转0.020.60
正手抹/晃撇6.5420-450侧旋0.020.40
撇拉8.0600侧旋0.020.50
反手攻球9.5150不转0.020.65
反手弹击12.0110不转0.080.80
反手撕9.5720上旋0.040.70
反手拉前冲10.0850上旋0.040.80
反手拉高吊7.5800上旋0.020.55
反手拧拉8.5750侧上旋0.050.70
反手侧拧8.0700侧上旋0.050.70
反手挑打8.0180不转0.020.60
反手侧喇7.5520侧旋0.020.50
反手抹6.5430侧旋0.020.40
反手反拉10.5850上旋0.040.65
扣杀高球15.0250不转0.081.00
直拍横打9.5220上旋0.040.60
防守7.5120不转0.0150.25
快带9.0600上旋0.020.50
侧切5.5500下旋0.030.35
吸短3.0300下旋0.020.20
放高球5.5450上旋0.030.20
削球5.5650下旋0.030.30
防回头9.0260不转0.0150.50
直拍推挡8.0100不转0.0150.40
摆短3.2500下旋0.010.30
劈长6.5600下旋0.010.35
晃撇6.5430侧旋0.010.40
翻挑7.5200不转0.010.50
晃搓4.5480下旋0.010.30
兜球5.5400侧旋0.020.40

特殊修正:侧切出球速度×(0.5+0.5·侧切/100)卸力;吸短×(0.4+0.6·吸短/100)减力;扣杀失误=0.08×(1-扣杀/100)×(0.3+1-沉着/100)×体能×风险;放高球失误=0.03×(1-放高球/100)×(0.3+1-核心腰腹/100)×体能×风险。

2.3 身体类(7 项)差 1 分的影响

属性引擎用途+1 分的具体效果
启动速度步法分×0.3;移动速度=2+4·t/100 m/s;反应延迟=0.05+0.15·(1-t/100)步法分+0.3;移速+0.04m/s;反应-0.0015s;够球率(难度50时)+约0.9个百分点(在P=0.5附近)
移动精度步法分×0.5;击球点偏移(1-到位系数)×0.15;发球落点精度×0.5步法分+0.5(够球影响最大项,约+1.5个百分点);到位偏移减小
还原节奏步法分×0.2步法分+0.2(约+0.6个百分点够球率)
爆发力挥拍速度×(0.8+0.4·t/100);发球速度同款出球速度+0.4%(≈0.05m/s);单板质量+约0.4%
核心腰腹放高球失误(0.3+1-核心/100)项;横拍修正+2放高球失误-约0.5%(相对)
手腕柔韧性转速×(0.8+0.4·t/100);拍面误差×(1-t/100×0.4)转速+0.4%;拍面误差-0.4%(旋转类技术收益明显)
耐力疲劳累积速率=0.012×(1.5-t/100)/分;疲劳→质量惩罚≤25%+失误率×(1+疲劳)+移动/反应衰减每分疲劳累积-0.00012;疲劳满的时间延后约1.3%/分

2.4 心理类(4 项)差 1 分的影响

属性引擎用途+1 分的具体效果
沉着失误率心理系数(1+(1-t/100)×0.5);士气波动值 0.08×(1-t/100×0.6);关键分≥85→1.08;扣杀失误(0.3+1-t/100)项失误率-0.3~0.5%(相对);士气波动-0.6%(大心脏);关键分稳
胆识冒险基线×(0.7+0.6·t/100);关键分≥85→+0.1风险risk+0.006→发力+约0.15%、失误率+约0.4%(搏杀倾向,收益与风险并存)
算球能力预留:博弈预测/预判线路(当前公式未直接调用,待接入)暂无(设计位置:AI 技术选择的"对手失误概率"评估精度)
变化发球变化频率=t/100;发球旋转强度(0.7+0.3·t/100);变化型风格≥80 偶发抢攻发球多样性+1%;发球旋转+0.3%

2.5 发接类(4 项)差 1 分的影响

属性引擎用途+1 分的具体效果
发球旋转发球转速×t/100;发球失误0.15×(1-t/100);发球质量系数(对手接发难度)×0.7发球转速+1%;双误率-0.15个百分点;对手接发难度+0.7%
发球隐蔽性对手判断准确率×(1-t/100×0.5);发球失误(1-t/100)项;发球质量系数×0.3对手判断-0.5%;发球失误-约1%(相对)
发球变化旋转强度(0.7+0.3·t/100);落点精度(移动精度×0.5+t×0.5)/100发球旋转+0.3%;发球落点误差-0.5%
接发球判断判断准确率=t/100×(1-隐蔽×0.5)×rand;接发失误0.05×(1-判断)×(1-技术)×心理;回球质量系数0.5+0.5×判断判断+1%(被隐蔽×0.5打折);接发失误-约3%(相对);接发回球质量+0.5%

2.6 隐藏属性(5 项)

属性作用+1 分效果
稳定性士气波动×(1-t/100×0.5)情绪起伏-0.5%
关键分关键分系数=max(…,1+t/100×0.08)10平后属性+0.08%
大赛发挥大赛 form×(1+t/100×0.1)大赛场次发挥+0.1%
伤病倾向每场受伤率=t/100×0.05;受伤 form×0.85受伤率+0.05%
潜力(星级1-5)训练潜力系数0.6~1.4

3. AI 球员决策机制

3.1 三层思维链(src/brain.gd)

战略层(比赛/局间):风格→主基调(attack/control/defend);总评差>25→风险基线×0.55求稳;
  比分落后→基线0.7、领先→0.35;再×胆识因子(0.7+0.6·胆识/100);压制区域=对手弱侧(反手/正手/中路)。
战术层(每回合):round_intent() 抢攻/控制/防守(连失2分+信心低→转控制;手感热→抢攻);
  serve_tactic() 发球旋转/落点/速度(对手接发弱→多变旋转;压对手弱侧)。
执行层(每拍 _strike):技术选择=策略表(按来球旋转×落点)→机会球识别(对手质量<0.4→拧拉/爆冲/扣杀)
  →冒险度 risk(见3.2)→接发判断→主动失误roll→意图生成→物理裁决。

3.2 冒险/搏杀管线(risk)

risk = clamp(战略基线(0.7+0.6·胆识/100 修正) + 意图(抢攻+0.15/防守-0.2)
            + 比分(落后3分+0.2/领先4分-0.15) + 手感(热+0.1/连失-0.1)
            + 关键分(沉着≥85-0.1/胆识≥85+0.1), 0.05~0.95)
     × 士气(0.35+0.65·士气)
risk 三出口:① 发力 swing×(0.8+0.4·risk) ② 失误率×(0.6+0.8·risk) ③ 技术选择(risk≥0.55→爆冲/扣杀,否则拉前冲)
物理裁决兜底:risk高→球快→可行角度窗口窄→拍面误差推出窗口→出界/下网(冒险=高失误的物理来源,非概率硬凑)
反馈:连续下网/出界≥2→swing×0.88收力(自动从搏杀降级,不会无限失误)

3.3 状态机制(士气/疲劳/发挥系数)

士气 morale(0-1):得分+波动×0.7;主动失误-波动×2.2(莫名其妙没打上波动最大);被压失分-波动×1.0;
  连得3分+波动×0.8回稳。波动值=0.08×(1-沉着/100×0.6)×(1-稳定性/100×0.5)。
士气低→保守(risk×士气因子)+士气<0.3→失误率×1.15(决策崩盘)。
疲劳 fatigue(0-1):每分+0.012×(1.5-耐力/100);疲劳→质量惩罚≤25%+失误率×(1+疲劳)+移动-30%+反应+40%+步法分-35%。
发挥系数 form=状态系数(0.85+0.3×近期状态)×士气心理(1+(士气-0.5)×0.2)×大赛(1+大赛发挥/100×0.1)×伤病(0.85)。
  最终有效属性=绝对属性×器材修正×form(比赛引擎每分刷新;比赛后复位,防残留污染球员卡)。

3.4 技术选择细节

策略表(select_technique):近网下旋→摆短/劈长/拧拉/挑打/晃搓…;近网上旋→挑打/弹击/拧拉;
  底线长下旋→拉高吊/拉前冲/削球;底线长上旋→快带/反拉/攻球;追身→攻球/推挡/防守;高球→扣杀。
机会球:对手质量Q<0.4→台内拧拉/挑打、中台risk≥0.55爆冲否则拉前冲、高球risk≥0.55扣杀否则拉前冲。
有限博弈(expect_advantage):每个候选技术算"我的出球质量→对手失误概率-我的失误概率",加权0.6进技术得分。
AI 决策:70% 选得分最高技术,30% 属性加权随机(临场变化)。

3.5 器材机制

效果
直拍直拍横打/推挡+5、正手挑打/摆短+3、手腕+2;反手位技术池含直拍横打(横拍球员这两项=无此项)
横拍反手拧拉/撕+3、反手拉前冲/核心腰腹+2
反胶基准(全面)
正胶拉球类×0.85、拍击/攻球/弹击+8(速度型,旋转弱)
生胶反手弹击/攻球/撕+10、拉球×0.8、接发判断+5(不吃转)
长胶削球+10、拉球/攻球/扣杀×0.9(削球手)

3.6 徽章系统(12 枚,src/badges.gd)

触发:技术/情境(接发/相持/关键分/落后)匹配→每效果独立概率→应用。
效果类型:属性提升(可破上限)/球速提升/旋转提升/失误率降低/直接得分(发力×1.25)。
例:霸王拧(拧拉30%旋转+30%速度+25%、8%直接得分)、前三板大师(接发全属性+20%必触发)、
  大心脏(关键分沉着胆识+20%、失误-30%)、绝地反击(落后全属性+10%)、发球机器(发球旋转+20%隐蔽+15%)。
开局按风格赠送(STYLE_BADGES)+大心脏。

4. 物理引擎运算方式

4.1 飞行(RK4,dt=0.0005s)

力:重力(9.81,-z)+空气阻力+马格努斯。马格努斯 |Fm|=0.5·ρ·A·Cm·v²·(ω×v)/|ω||v| ——大小只与v²有关、与转速无关!
  下压力 a_m=0.0561·v²(球向+X飞、上旋ω=+Y时向下);实战用平均系数0.0382·v²(球速飞行中衰减到0.6-0.7,平均下压力≈0.68×瞬时)。
旋转衰减:ω(t)=ω0·e^(-λt)。

4.2 碰撞

台:法向恢复0.9+库仑摩擦μ=0.5,切向冲量封顶 min(μ·jn, 2/7·|v_t|)。下旋球底部前滚→摩擦削减前向速度→
  多次弹跳后回跳/停台(已实验验证:ω=550慢发高弧23次弹跳停在对方半台近网)。
网:薄片模型,x反向低恢复(0.3),y/z衰减。
拍:平面碰撞,恢复0.85,摩擦0.8,无滑移封顶;碰撞后旋转=0.3×物理+0.7×目标旋转(简化旋转传递)。

4.3 目标导向击球模型(2025 重写,用户批准):每板两步 ① 判定阶段(属性驱动):技术/战术 → 目标落点区域(安全区,不贴底线;技术决定深浅、战术决定左右、risk 决定深浅)+ 属性散布(σ = 0.02+0.28×(1−t/100)^2 rad,安全阈值下限 0.02 rad=现实高手落点精度极限)→ 上台概率 p_on = 0.85+0.15×t − 0.25×来球质量(受迫) − 主动失误率,接发再×判断系数;失败 = 下网/出界,回合结束。 失误率(用户规格 2025):主动失误率 = 自身技术基础(基础失误率×(1−t/100)^1.5,心理/体能/冒险修正) + 绝对属性差距项(正降负加):自己绝对 ≥61 每分差距 0.85%、50-60 每分 1.0%、40-50 每分 1.25%、0-40 每分 1.5%(对手总评−自己总评)。全局上限 70%(平衡机制:1200 新手打明显强者时"10个自杀7,8个"),下限 0.3%(现实记录)。1200 打 1200 差距项=0,不会全失误。 ② 物理生成阶段(反推+模拟):由目标落点反推出球速度(纯重力估算 v_h=L/t_f、v_z=(z_T−z0+½gt²)/t_f,含过网约束与马格努斯有效重力)→ 2-3 次 RK4 短模拟迭代校准(残差 ≤5cm)→ 将出球状态交给物理引擎,RK4 完整飞行(阻力/马格努斯/弹跳)裁决。 循环:击球 → 够球判定(线性曲线)→ 对手击球。失误率与落点完全由属性决定;离拍后轨迹完全物理。安全阈值:球速 ≤16 m/s(常规)/20(扣杀)、失误率 ≥0.3%、落点散布 ≥0.02 rad、有效属性 ≤100。 (原"拍面角+经验压拍"实现已废弃:碰撞微观过程由反推取代,见开发日志 16) 4.3旧 意图生成+物理裁决(击球核心,_strike)

1 技术选择(策略表/机会球/博弈) → 2 冒险度risk → 3 接发判断(首拍:判断准确率=接发判断/100×(1-隐蔽×0.5)×rand)
→ 4 主动失误roll(基础失误率×(1-技术/100)×心理×体能×风险) → 5 意图:
   swing=基础×(0.6+0.6·技/100)×(0.8+0.4·爆/100)×状态×risk×疲劳惩罚
   目标仰角=射程公式(平均Magnus修正)+过网约束+经验压拍(上旋来球摩擦抬vz→压拍 atan((2/7)·R·ω/v)×技术精度)
   发力控制:出球速度≤可行上限v_max(二分,保证"过网且落台内"的最大速度;含迎面来球借力)
→ 6 拍面误差±err(属性决定) → 7 racket.collide → RK4飞行 → 触台/撞网/出界/漏球 由引擎判定(不保证上台)。

4.4 失误模型

主动失误(非受迫)=概率roll+物理失误,只关自己属性(与对手级别无关)。
受迫失误=对手来球质量Q≥0.45压制(王0.87压李、李0.03压不动王、同级≈0.5部分受迫)。
物理失误=拍面误差把出球推出可行角度窗口(快球窗口窄→搏杀天然高失误)。
够球判定:P=1/(1+e^(-(步法分-来球难度)/8)),来球难度=球速×0.3+旋转×0.3+落点×0.4(各0-100)。
E-R-L:执行-应对+运气>10→敢打满速+擦边运气;<0→误差×1.5+低分失误概率。

5. 每一分的差距意味着什么

5.1 总评差 1 分

绝对总评分段对应水平开球网参考专业/业余综评参考
20-30纯新手/入门400-800业余 5-15
30-40初级爱好者800-1200业余 15-28
40-48中级爱好者1200-1600业余 28-50
48-55业余好手1600-2000业余 50-70
55-61业余顶级 / 专业入门2000-2300业余 70-85 / 专业 21-30
61-75职业(青训→二线)2300-2500专业 30-50
75-85职业主力 / 世界级2500-2700专业 50-70
85-93世界顶尖2700-2900专业 70-86(樊振东/张继科/老瓦 93 ≈ 专业 86)
93-100历史传奇2900-3000专业 86-100(95+ 仅马龙 95.5 ≈ 专业 91)
展示口径(2025 更新):界面一律优先展示"专业综评/业余综评"(由绝对总评经双标尺换算),开球网作为底层锚点仅在业余邀请赛等场合附属显示。

设计口径:总评差 1 分 ≈ 开球网差 20 分 ≈ 胜率 53%(ELO)。总评差 5 分 ≈ 胜率 60%,差 10 分 ≈ 70%,差 20 分 ≈ 80%+。

5.2 单项技术差 1 分(汇总,实测口径)

差距出球速度转速拍面误差主动失误率质量Q综合感受
技术 60→61+0.6%+1.7%-3.4%-2.4%(相对)+1.7%几乎无感(需多拍累积)
技术 70→80(10分)+6%+14%-24%-33%+14%一个档次(失误率明显下降+球质更高)
技术 90→91+0.5%+1.1%-5.5%-10%(相对)+1.1%顶尖段每分更金贵(失误率绝对值已很低)

关键理解:技术属性同时作用 6 个出口(速度/转速/误差/失误率/质量/落点),单项+1 的单板收益约 0.5-1.5%,乘以每局 20-50 拍,对同水平对手的净胜率影响约 +0.5~1 个百分点。所以"差 1 分"单看微小,但"差 10 分 = 一个档次"是设计口径(与 FC 的"总评 +1 是大事、+5 是档次"同理)。

5.3 开球网差 100 分

ELO 预期胜率 64%。实测(新标定:青训绝对总评 60 vs 2200 业余绝对总评 54.8,差 5.2 分):约 6:4 开(10 场 8 胜、55.6% 分胜率),符合"总评差 5 分 ≈ 胜率 60%"口径;状态差(0.7)时约 55 开,低谷(0.5)可反转至 5:5。

5.4 初始球员 vs 各段对手(实测 3 种子,供校准参考)

对手绝对总评结果
开球网1800(业余75→绝对45)452:0 碾压(每局对手3-5分)
开球网2000(业余82→绝对53)532:0 优势
开球网2200(业余85→绝对54.8)54.88/10 场 ≈ 6:4(用户口径),状态差可反转
张守衡(省队级,长胶削球)820:2 劣势(能咬1局)
王全能(专业90)950:2 大劣势
王楚钦(世界第1)96.4

6. 真实球员数据(主观标定,如何自己改)

诚实说明:前 20 名选手的姓名/国籍/排名/握拍/打法来自 2026 年公开新闻(世排:王楚钦第1、19岁勒布伦升至第2、林诗栋第6等),但每人的绝对属性数值是按用户新标定同比例缩放(95+ 仅马龙 95.5;樊振东/张继科/老瓦 93;世界第1 王楚钦 90;前 10 ≈ 86-88.5;11-20 ≈ 80-85;21-50 ≈ 75-80;51-100 ≈ 67-74;101-200 ≈ 59-66;201-300 ≈ 53-58;300+ ≈ 48-52),不是真实技术报告。你完全可以按 FC 的方式逐人改。

6.1 怎么改(全部在 src/pros.gd)

const TOP20 := [
  {"name": "王楚钦", "nation": "中国", "rank": 1, "style": "进攻型", "grip": "横拍", "rubber": "反胶", "abs": 96.0},
  ...
]
每行改:abs=绝对属性中心(总分水平)、style=打法(决定AI战术+风格权重)、grip/rubber=器材。
生成时按 abs ±2 分散到 54 项,核心打法属性再 +4。
世界排名→绝对属性映射(abs_by_rank)也在同文件,想改梯度就改它。
赛事对手段(tournament.gd LEVELS 的 opp_rank)决定各赛事遇到的世界排名区间。

6.2 FC 式定制的建议落点

FC 的"总评=多小项加权、每项影响比赛行为"我们已经具备;要更精细可加:正手/反手/中路倾向、步法覆盖半径、比赛风格徽章树、潜力动态上限、伤病恢复时间等(当前隐藏属性只做了 5 项基础版)。

7. 开发日志

阶段内容关键决策/踩坑
1. 物理内核RK4 飞行/台网拍碰撞/够球判定,37 项解析对照测试坐标 z-up;无滑移封顶 2/7 修掉转速虚高 2405rad/s;触台吸附 +R;rc=-R·n 修上旋刷成下旋
2. 属性体系54 项技术/六大类/7 风格权重/训练成长公式/示例球员复合项(正手拉球总评);单项+5 对总评影响约0.2 的设计原则
3. 比赛引擎发球/接发判断/回合/计分/统计/赛后评分/播报曾用"牛顿搜索保证上台"→被否(保送),改为意图生成+物理裁决
4. 拟真改造去保送、旋转上限改现实900rad/s、冒险求稳、主动/受迫失误分离、经验压拍最大教训:任何"保证上台"都违反用户拟真要求;失误必须由属性+物理自然产生
5. 三层思维链brain.gd:战略/战术/执行+对手建模+博弈预测+战术规则库机会球识别(软球爆冲);领先求稳/落后搏杀
6. 状态机制士气(沉着决定波动)/疲劳(质量惩罚≤25%+失误线性)/发挥系数form/伤病/大赛七局四胜实验:90专业带状态惩罚仍 4:0 反制1800业余
7. 评分体系开球网ELO+业余/专业映射+属性上限表+总评截断
8. 双标尺单项属性业余/专业标尺(scale.gd),四段换算bug教训:业余评分直接当绝对属性→对手虚强20点;专业0=绝对60 的语义靠"直拍专属=无此项"规避
9. 器材握拍侧重/四种胶皮/直拍横打专属aggr() 未知技术崩溃(直拍横打不在表内)
10. 物理实验死转下旋回跳(完整轨迹至静止)、非常规技术vs30台面摩擦0.15→0.5 才能回跳;只看首跳会误判
11. 生涯循环徽章12枚/副风格/比赛经验/15天周期/回合制挂起(manual_player/inject_choice)form 残留污染总评(手动循环没调 after_match);经验只统计最后一点(shot_log 每分清空)
12. WTT赛事六层级排名解锁/真实选手库/国内邀请赛/主页推进动画世界排名与开球网分离(用户核心指正);rank_req=0 判定 bug
13. 打包Godot 便携 exe+同名 pck 双击即玩;export templates 网络受限未下成pck 自动加载规则(乒乓生涯.exe+乒乓生涯.pck)
14. 新标定2300→绝对61、2500→75、2500-2700→75-85、95+仅马龙(95.5)、樊/张/老瓦93;专业标尺 30→61/50→75/70→85;青训开局绝对总评60(专业≈29);展示改专业/业余综评用户指令(2025);CAP_TABLE/scale.gd/pros.gd 同步;文档 1.4/1.5/5.1 更新
15. 平衡与修复发球转速量级(下旋550 rad/s)+洗下旋扣减;接发高点击球;出界球误判"漏球"修复;压拍补偿按 th 扫描标定;机会球稳杀;瞄准马格努斯系数标定 0.042旧模型实测 2300 vs 2200 = 8/10 场、55.6% 分(≈6:4);9 套件 202 项全绿
16. 目标导向击球模型(用户批准重构)每板两步:①属性判定(目标落点+散布+上台概率,失败=失误) ②物理生成(反推初速+过网约束+2-3次RK4迭代校准→物理引擎裁决);删除拍面角/压拍/瞄准近似链;安全阈值体系(球速/失误率/落点散布/有效属性);传奇精确属性卡(瓦尔德内尔:台内控制+变化型、反手拧拉=0、三金徽章:游击队长(err-30%)/防守大师(防守+20%)/魔术师(前三板全属性+30%));get_attr 封顶 100实测:老瓦(总评90.3)vs 青训(60) 85% 分 20:0 场次、vs 2200 业余 84% 20:0(碾压 ✓);vs 王楚钦/樊/张/马龙 78-79%(其他传奇暂无徽章,待配卡);青训 vs 2200 71%(跨级别压制);9 套件 202 项全绿
18. 游玩环节大修(用户规格)①奠基技术:正/反手攻球、防守不作为比赛可选技术,改底层修正(有效属性=具体×0.85+奠基×0.15),UI 标注"奠基" ②发球模型:10 类发球(下旋/上旋/奔球/左侧上·下旋/右侧上·下旋/转不转/高抛/下蹲砍式)+ 任意落点点选 + 失误率机制判定成功率 + 物理运算确认 + 发球后落点判定(近网/半出台/底线×正手位/中路/反手位) ③接发与阶段切换:接发方看落点与判断旋转;技术可用矩阵(位置×旋转×时间刁钻)过滤;≤3板前三板池(发球抢攻,非常规技术≥90破例),>3板相持全池 ④2D双窗可视化(俯视球台/拍位/落点+侧视球高/弧线) ⑤决策动画(回放来球动画,球与拍逐帧,决策前静止;够不到球=漏球由 reach 判定裁决)9 套件 203 项全绿;老瓦 vs 青训 87% 20:0 碾压保持
17. 失误率机制(用户规格)主动失误 = 自身技术基础 + 绝对属性差距项(≥61:0.85%/分;50-60:1%/分;40-50:1.25%/分;0-40:1.5%/分,正降负加)+ 对手回球质量(受迫);全局上限 70%、下限 0.3%;无分段自杀率(1200 打 1200 差距=0 不全是失误,1200 打强者时差距项推高至 70% 上限 → "10个自杀7,8个")实测:老瓦 vs 青训 85%(差距 −30×0.85% → 失误压至下限);青训 vs 2200 71%(差距 ±5.2×1% 双向);传奇内部 78-79%(待配卡)

附:参数手册

详细参数手册(所有公式/常量/属性作用点/调参入口):参数手册.html —— 含物理常量表、属性→物理公式(swing/转速/落点散布/失误率/质量/接发)、比赛引擎判定(发球/够球/目标导向击球)、思维链、徽章、平衡实测与调参速查表。

附:测试与运行

cd /root/1234/tt-physics
./run.sh                                        # 启动游戏(Linux)
godot --headless --path . --script res://tests/run_XXX.gd   # 9 套件:
run_tests(物理37) run_match_tests(比赛52) run_rating_test(评分19) run_state_test(状态25)
run_career_test(生涯19) run_interactive_test(回合制4) run_ui_test(UI流程8)
run_scale_test(双标尺19) run_tour_test(赛事17)
Windows 版下载:https://theparadiseoftabletennis.art/ttcareer/ttcareer-windows.zip

—— 文档完。所有公式与数值均可在 src/ 源码与 tests/ 断言中逐条核对 ——