《乒乓生涯》后端参数手册

面向「调整参数」的完整后端说明:所有公式、常量、属性作用点、比赛判定规则,与 src/ 源码逐条对应。改参数前先查此表,改完跑 tests/ 回归。

0. 调参速查表(想调什么 → 去哪改)

想调的东西文件 → 常量/函数
球速快慢/弧线高低stroke.gd TECHS 各技术 speed;match.gd _launch_ball tf(飞行时间 0.22/0.30/0.46s)
球的旋转强度stroke.gd TECHS omega + target_omega(上限 900);ball.gd ROT_DECAY(0.2)
马格努斯/空气效应constants.gd MAGNUS_COEFF(0.2)/DRAG_COEFF(0.5);ball.gd forces_at
球台弹性/摩擦(回跳)constants.gd TABLE_RESTITUTION(0.9)/TABLE_FRICTION(0.5);table.gd 旋转耦合系数 0.6
技战术失误率曲线stroke.gd unforced_prob(指数 1.5、下限 0.3%、上限 70%)
属性差距的失误率stroke.gd gap_miss_rate(≥61:0.85%/分;50-60:1%;40-50:1.25%;0-40:1.5%)
落点散布(高手多准)stroke.gd angle_error(σ=0.02+0.28×(1−t)²,clamp[0.02,0.35])
上台概率总体match.gd _ontable_prob(0.85+0.15t −0.5×max(Q−0.30,0) −主动失误 −接发判断惩罚)
够球率(接得到接不到)match.gd reach_p 公式 + 坡度 80/偏移 100
反应/移动速度match.gd _reaction_delay / ms = 2+4×启动/100 / brain fatigue
发球成功率/质量match.gd SERVE_TYPES + _serve 公式
总评/球员卡数值attrs.gd 类别权重/风格权重/复合项
技术水平锚点(2300→61…)rating.gd CAP_TABLE;scale.gd 双标尺
AI 决策风格brain.gd setup_strategy/round_intent/serve_tactic
徽章强度badges.gd BADGES(pct/prob)
速度现实上限stroke.gd swing_speed cap(常规16/扣杀20);match.gd 也 clamp 16
达标平衡参考§12 实测表(6:4、传奇 85% 等)

1. 坐标系与物理常量(constants.gd / ball.gd / table.gd / net.gd / racket.gd)

1.1 坐标约定

z 轴向上;重力 −z;台面 z=0.76;网沿 z=0.9125;x 为球台长边方向(±1.37),y 为宽边方向(±0.7625)。渲染时映射为 Godot y-up。

1.2 物理常量表

常量含义
BALL_RADIUS / BALL_MASS0.02 m / 0.0027 kg标准 40mm 球
BALL_INERTIA = 0.4·m·r²实心球转动惯量;角冲量换算 m/I = 2.5/r²
CONTACT_MASS_RATIO = 2/70.2857接触点无滑移封顶(=I/(I+mR²))
AIR_DENSITY / DRAG_COEFF1.205 / 0.5空气阻力 F_d = 0.5·ρ·A·Cd·v²
MAGNUS_COEFF0.2马格努斯 F_m = 0.5·ρ·A·Cm·v²·(ω×v)/|ω||v|(大小与转速无关,方向随 ω)
ROT_DECAY0.2 s⁻¹旋转衰减 ω(t)=ω₀·e^(−0.2t)
GRAVITY9.81
TABLE_LENGTH/WIDTH2.74 / 1.525半长 1.37、半宽 0.7625
NET_HEIGHT / NET_POST0.1525 / 0.9125网上沿绝对高度
TABLE_RESTITUTION / FRICTION0.9 / 0.5台面法向恢复 + 库仑摩擦(0.5 才能让下旋球回跳)
NET_RESTITUTION / NET_WIDTH0.3 / 1.83网薄片碰撞
RACKET_RESTITUTION / FRICTION0.85 / 0.8拍面碰撞
碰撞模型:台面 — 法向冲量 jn=1.9×v_n;切向库仑 jt=min(μ·jn, 2/7·|v_t|),角速度耦合 Δω=0.6·rc×J/I(0.6 为经验系数,保留弹跳后下旋)。拍面相同结构;击球后 ω_出 = 0.3×物理 + 0.7×目标

2. 属性体系(attrs.gd)

2.1 属性一览(53 项,绝对标尺 0-100)

类别属性(权重)
进攻(25)正手攻球/拍击/拉前冲/拉高吊/拉侧拐/挑打/晃撇/抹/反拉/侧身爆冲/快带、撇拉、反手攻球/弹击/撕/拉前冲/拉高吊/拧拉/侧拧/挑打/侧喇/抹/反拉、扣杀高球、直拍横打
防守(8)防守、快带、侧切、吸短、放高球、削球、防回头、直拍推挡
台内(6)摆短、劈长、晃撇、翻挑、晃搓、兜球
发接(4)发球旋转、发球隐蔽性、发球变化、接发球判断
步法(7)启动速度、移动精度、还原节奏、爆发力、核心腰腹、手腕柔韧性、耐力
心理(4)算球能力、沉着、胆识、变化

2.2 六类评分(内部权重)

进攻大类:正手拉球总评 0.20(前冲0.5+高吊0.3+侧拐0.2) + 反手拉球总评 0.15(前冲0.5+高吊0.5)
    + 正手攻球0.08 反手攻球0.08 侧身爆冲0.06 拧拉0.06 撕0.05 挑打0.04 正/反拉0.04×2
    快带0.03 晃撇0.03 抹0.02×2 侧喇0.02 拍击0.01 扣杀0.02 高吊0.008 侧拐0.004 撇拉0.002 侧拧0.002 反手挑打0.004 直拍横打0.02
防守:防守0.30 快带0.15 侧切0.10 吸短0.10 放高0.10 削球0.15 防回头0.05 直拍推挡0.05
台内:摆短0.30 劈长0.25 晃撇0.15 翻挑0.10 晃搓0.10 兜球0.10
发接:发球旋转0.25 隐蔽0.20 变化0.20 接发判断0.35
步法:启动0.20 移动0.20 还原0.20 爆发0.15 腰腹0.15 手腕0.05 耐力0.05
心理:算球0.25 沉着0.25 胆识0.25 变化0.25
(直拍横打/推挡:横拍球员该权重跳过→归一)

2.3 风格权重(7 风格 × 六类:[进攻/防守/台内/发接/步法/心理])

风格进攻防守台内发接步法心理
进攻型.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

总评 = Σ(六类分 × 风格权重);副风格时 权重 = 主×0.7 + 副×0.3。总评口径:基础属性 × 器材修正(不含 form,防污染)。

2.4 有效属性(战斗实际用)

get_attr(k) = clamp( [基础 × 器材修正(k)] × form , 0, 100 )
奠基修正(2025 用户规格):正手/反手/防守技术 = 具体×0.85 + 奠基×0.15  →  再 × form、封顶 100
  正手技术(含 撇拉/晃撇) ← 正手攻球;反手技术 ← 反手攻球
  防守类(快带/侧切/吸短/放高球/削球/防回头) ← 防守
  奠基技术本身(正手攻球/反手攻球/防守)不做奠基修正
form = 0.85+0.3·state ×(1+(士气−0.5)×0.2)×(1+大赛发挥/100×0.1,仅 big_match)×(0.85 带伤),clamp[0.5,1.3]

2.5 器材修正表

器材修正
直拍直拍横打/推挡 +5;正手挑打/摆短 +3;手腕柔韧性 +2
横拍反手拧拉/撕 +3;反手拉前冲/核心腰腹 +2
正胶拉球类×0.85;拍击/攻球/弹击(正反手)+8
生胶反手弹击/攻球/撕 +10;拉前冲(正反)/正手高吊×0.8;接发判断 +5
长胶削球 +10;拉前冲/攻球/扣杀×0.9

2.6 隐藏属性(不显示,作用点)

隐藏属性作用
稳定性士气波动幅度 ×(1−稳定性/100×0.5)
关键分clutch_factor:沉着≥85→1.08 / 胆识≥85→1.05(10 平后)
大赛发挥big_match 时 form ×(1+大赛/100×0.1)
伤病倾向每场受伤率 = 倾向/100×0.05;受伤 form×0.85

3. 显示标尺(scale.gd / rating.gd)

3.1 单项属性双标尺(绝对为引擎唯一标尺)

业余 → 绝对:           绝对 → 业余:
 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

专业 → 绝对(2025 新标定):  绝对 → 专业:
 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
锚点:专业30=绝对61(2300)  专业50=绝对75(2500)  专业70=绝对85(2700)
     95+仅马龙 95.5(专业91);樊振东/张继科/老瓦 93(专业86)

3.2 开球网/业余/专业评分(ELO 底层锚点)

业余分段:400→1 600→8 800→15 1000→22 1200→30 1400→40 1600→50 1800→60 2000→70 2200→78 2300→85 2500→95
专业分段:2300→30 2400→39 2500→49 2600→59 2700→69 2800→79 2900→89 3000→100(2300 以下不显示"—")
ELO: E=1/(1+10^((Rb−Ra)/400)), K=32
CAP_TABLE(开球网→绝对属性上限):400→10~14 段、800→20~24、1200→30~34、1600→40~43、
  2000→50~52、2200→56~58、2300→61、2500→75、2700→85、3000→100(用户新标定)

4. 技术规格(stroke.gd TECHS 全表)

技术基础球速 m/s顶级转速 rad/s旋转基础失误率进攻性 aggr
正手拉前冲11.0900top0.040.85
正手拉高吊8.0820top0.020.50
正手侧身爆冲12.5940→封顶900top0.040.95
正手攻球(奠基)10.5160none0.020.70
正手拍击13.090none0.080.75
正手快带10.0600top0.020.60
正手反拉11.0880top0.040.70
正手挑打8.5200none0.020.60
正手抹/晃撇6.5450/420side0.020.40
撇拉8.0600side0.020.50
反手攻球(奠基)9.5150none0.020.65
反手弹击12.0110none0.080.80
反手撕9.5720top0.040.70
反手拉前冲10.0850top0.040.80
反手拉高吊7.5800top0.020.55
反手拧拉8.5750side0.050.70
反手侧拧8.0700side0.050.70
反手挑打8.0180none0.020.60
反手侧喇7.5520side0.020.50
反手抹6.5430side0.020.40
反手反拉10.5850top0.040.65
扣杀高球15.0250none0.081.00
摆短3.2500back0.010.30
劈长6.5600back0.010.35
晃搓4.5480back0.010.30
兜球5.5400side0.020.40
翻挑7.5200none0.010.50
晃撇6.5430side0.010.40
削球5.5650back0.030.30
侧切5.5500back0.030.35
吸短3.0300back0.020.20
放高球5.5450top0.030.20
防守(奠基)7.5120none0.0150.25
快带9.0600top0.020.50
防回头(自动)9.0260none0.0150.50
直拍推挡8.0100none0.0150.40
直拍横打9.5220top0.040.60
旋转轴混合(OMEGA_MIX):反手拧拉(上旋+侧0.5)、撕(0.6)、侧喇(侧1.0)、撇拉(0.7)、正/反手抹、晃撇(纯侧)、兜球(纯侧)、晃搓/劈长/削球(下旋+侧0.3)。y 分量随出球方向翻转。

4.1 发球类型(match.gd SERVE_TYPES,10 类)

类型旋转轴基础转速球速档风险(失误率加)
下旋-Y5500.900
上旋+Y4001.100
奔球+Y4001.300.02
左侧上旋+Y+Z(归一)4801.000.01
左侧下旋-Y+Z4800.950.01
右侧上旋+Y-Z4801.000.01
右侧下旋-Y-Z4800.950.01
转不转-Y5500.900.01
高抛-Y7000.900.03
下蹲砍式+Y+Z6201.050.03

5. 属性 → 物理映射(每条公式)

5.1 挥拍速度 swing(出球速度主体)

swing = TECHS.speed × (0.6 + 0.6×技术/100) × (0.8 + 0.4×爆发力/100) × 状态系数 sf
  × 接发因素 recv_factor(=0.5+0.5×判断准确率,接发时) × 徽章 × 疲劳惩罚(1−0.25×疲劳)
  × (0.8 + 0.4×risk)  × 连失收力(≥2 次下网/出界 ×0.88) × 扣杀求稳(0.85+0.15×risk)
  → 接发 clamp 7.5 m/s;全局 clamp 16 m/s(扣杀/拍击/弹击 20,stroke 内与 match 内双保险)
侧切卸力:×(0.5+0.5×侧切/100);吸短减力:×(0.4+0.6×吸短/100)
状态系数 sf = 手感 feel(正态1.0±0.08,clamp[0.8,1.2]) × 压力(1−0.05×总评差/10,clamp[0.85,1.15])
           × 关键分(沉着≥85→1.08;胆识≥85→1.05) × 疲劳(1.0=不乘,疲劳在 quality_penalty)
战斗有效出球速度由 _launch_ball 反推,tf 决定:快带/弹击/拍击 0.22s;常规 0.30s;高吊/放高/削球/高球 0.46s

5.2 目标旋转 ω

ω = TECHS.omega × (技术/100) × (0.8+0.4×手腕/100),clamp ≤ 900 rad/s(≈143 转/秒,现实顶级)
洗下旋:拉上旋打来球下旋时 ω.y −= 0.2×|来球ω.y|,保底 0.25×原目标(强下旋+低技术 → 弧线平,物理裁决)
出球 = 0.3×物理碰撞 + 0.7×目标(混合)

5.3 落点散布 σ(拍面误差,决定"打得多准")

σ = 0.02 + 0.28×(1 − 技术/100)²  rad,clamp [0.02, 0.35]
   × (1 + 0.4×来球旋转强度)   × (1 − 手腕/100×0.25)   × 徽章(err_mult)
   × 机会球 0.7(来球质量<0.25)
→ 目标落点 = 区域中心 ± 散布:纵深 ×3.2 米,横向 ×3.2×1.4
参考:技术 90 → σ≈0.023(±7cm);61 → 0.063(±19cm);30 → 0.157(±47cm)
安全阈值:σ_min 0.02 rad = 现实高手落点精度极限(±6cm/3m)

5.4 主动失误率 unforced_prob(非受迫,上限 70%)

p = 技术基础失误率 base_mistake × (1 − 技术/100)^1.5 × 心理 × 体能 × 冒险
   + 绝对属性差距项 gap_miss_rate(对手总评 − 自己总评)
心理 mental = 1 + (1 − 沉着/100)×0.3;体能 fatigue = 1+疲劳度;冒险 risk_mult = 0.6+0.8×risk
特例:扣杀 = 0.08×…^1.5 × (0.3+1−沉着/100);放高球 = 0.03×…^1.5 × (0.3+1−核心腰腹/100)
clamp [0.003(下限,现实记录), 0.70(全局上限,平衡机制)]
【属性差距分段系数】自己绝对 ≥61:0.85%/分;50-60:1.0%/分;40-50:1.25%/分;0-40:1.5%/分
例:61 打 62 → +0.85%;61 打 60 → −0.85%(打强加、打弱减)

5.5 质量系数 Q(回球质量,机会球/受迫判定)

Q = (0.35+0.65×技术/100) × (0.35+0.65×爆发力/100) × (0.35+0.65×手腕/100) × 手感 × rand(0.9~1.1)
参考:老瓦 91 → ≈0.79;青训 61 → ≈0.57;2200 54.8 → ≈0.50;新手 20 → ≈0.28
用途:①下一拍 incoming_q(受迫压制 −0.5×max(Q−0.30,0):Q<0.30 的机会球零受迫,强球按超出段压制 → 发球/回球质量正传导)
 ②机会球识别(来球 Q<0.45 → 抢攻:软球=机会球,接发同样直接起板) ③失误分类(≥0.45 受迫)

5.6 接发属性(发球威胁完整传导)

发球威胁 threat = 隐蔽性×0.50 + 发球旋转×0.30 + 发球变化×0.20(判断"看不出来"是主项)
判断准确率 judge = 接发球判断/100 × (1 − threat×0.5) × rand(0.9~1.1)
吃发球(直接接飞)率 = 0.30 × (1−judge) × (0.35+0.75×threat) × (1−接发技术/100) × 心理(1+(1−沉着)×0.5)
  → 作者(29判断)接木鱼(52/52/54):≈12%/分;木鱼(53)接作者(33/22/20):≈5%/分
冒高率 popup = (1−技术/100)×(1−judge)×发球旋转系数
  → 冒高 = 吃发球的主要形态:回球质量×0.45(菜球),上台概率再 −0.20,被对手直接冲
接发回球质量:QQ × (1 − 0.5×max(发球质量−0.30, 0))(发球越凶,接发回球越软)
回球软 factor = 0.5 + 0.5×judge(进 swing);接发上台惩罚 = (0.5−(2×factor−1)) × (0.20+0.45×发球质量)
接发首拍反应窗口:−隐蔽性×0.5×0.5m(看不出→判断滞后→够球窗口缩短)

5.6b 目标落点反推(修正说明)

落点 = 双方半台:先将 zone.x(已含方向符号)折算为"远离中线距离",clamp[0.35,1.30] 后乘回方向
  —— 防止旧写法把负侧落点全部钳成 0.35(进攻方球全扎网前短球,物理必下网)
反推初速:弹道满足过网约束(上旋下坠/下旋上浮,有效重力 g_eff=G±a_mg,由 ω×v̂ 真实方向判定)且不低于过网最低 vz;
  迭代 5 次 RK4 校准至目标落点(误差 <0.04m),误差按飞行方向取符号(未达目标→提高 vz,过头→降低)

5.7 防守相关

防守成功率 = 0.6 + 0.4×防守/100;防守质量 = 0.7 + 0.4×防守/100
防回头(自动):对手上一拍含"爆冲"且 防回头≥30 → 概率 0.15+0.45×防回头/100 触发(回空当,不属主动技术)
E-R-L:E = 技术×1.0×1.0×1.0;R = 对手防守 × 站位罚 × 反应系数
  站位罚 = (1−0.2×球距/2.5) × (0.9+0.2×移动精度/100),clamp[0.7,1.1]
  反应系数 = 0.9+0.2×启动/100;escore = E−R+rand(−15,15):>10 → swing×1.06;<0 → p_on×0.94

6. 比赛引擎(match.gd)

6.1 发球(独立模型)

成功率:serve_miss = 0.12×(1−发球旋转/100)^1.5 × (1−发球隐蔽性/100×0.4)
   + 属性差距×0.5 + 类型风险;× (1+疲劳×0.5);clamp[0.003,0.70];roll 失败 = 发球失误(2 次=双误)
出球速度 = 5.5基础 × (0.8+0.4×爆发力/100) × 类型球速档 × sf,最低 5.2(物理无法过网的下限)
落点精度 err = (1−place_acc)×0.05 + (1−隐蔽性/100)×0.02
  place_acc = (移动精度×0.5 + 发球变化×0.5)/100
转速 = 类型基础 × (发球旋转/100) × (0.7+0.3×变化/100) × rand(0.9~1.1);转不转 50% 概率 ×0.12
落点:玩家点选任意(x∈[0.15,1.30], y∈[−0.68,0.68]);AI 用战术(深度 0.4-1.3 × 弱侧 y)
发球质量(对手接发难度)_last_opp_q = 发球旋转×0.7 + 隐蔽性×0.3
发球后落点判定:深度(近网<0.35 / 半出台<0.95 / 底线) × 侧(反手<−0.25 / 正手>0.25 / 中路)

6.2 回合主循环(每帧 dt=0.0005s)

1. RK4 步进球
2. 站位:横向跟随 ms = 2+4×启动/100×(1−0.3×疲劳);纵向退台:球速>8 → 退台,退速 1.5+2.5×启动/100
3. 判定顺序:网(|x|<0.02 且 z<网上沿)→ 台(首跳/二跳)→ 未触台落地面(擦边 _last_erl>10 或出界)
   → 触台后落地(未接住)→ 越底线(未触台=击球方出界;已触台=按可达性判漏球)→ 够球窗口
4. 够球窗口:bounced 且 球在接球方半台 >−0.05 且 t_since≥反应延迟 且 (vel.z<0.5 或 z>1.0) 且 z∈(0.45,1.5)
   反应延迟 = (0.05+0.15×(1−启动/100)) × (1+0.4×疲劳)
5. 够球判定:dist ≤ 0.8 + ms×t_since 且 roll < reach_p
   来球难度 diff = 速度分0.3 + 旋转分0.3 + 落点分0.4(速度/20、旋转/900、y偏差/0.7625,各归一×100)
   步法分 = 启动0.3 + 移动精度0.5 + 还原0.2,× (1−0.35×疲劳)
   reach_p = 1/(1+e^(−(步法分−diff+100)/80))(偏移100、坡度80:整体高、属性差温和)
6. 击球(目标导向,见 §7)→ 交换 striker/receiver,bounced=false,t_since=0
7. 相持上限 40 拍 → E-R-L 兜底(±15 掷骰)
每分硬上限 40 拍;发球轮:每 2 分交换,10 平后每分交换;双误规则

6.3 得分/失误分类

kind:unforced(非受迫,来球质量<0.45)/ forced(受迫,≥0.45)/ forced_opp(接方触球仍丢)/ winner(未触球制胜)
一发失误:对手得分;双误:两次发球失败 → 对手得分
统计 stats:points/points_lost/winners/unforced/forced/serve_won/serve_total/receive_won/
  rally_pts(≥5拍)/clutch_pts(10平后得分)/quality_sum/shots
发球轮换:swap 每分+1,swap%2==0 或 deuce 时换发

6.4 赛后评分(0-10)

base = 6 + (得分差)×0.2 + 制胜×0.05 − 非受迫×0.1 − 受迫×0.03
     + (发球得分率−0.5)×4 + (接发得分率−0.5)×4 + 相持得分×0.02 + 关键分×0.1
最终 = base × (1 + (对手总评−80)/200),clamp[0,10]
评语:≥8.5 统治级 / ≥7.5 出色 / ≥6.5 中规中矩 / ≥5.5 状态平平 / 低迷

7. 目标导向击球(每板两步,用户批准模型)

7.1 ① 判定阶段(属性驱动)

目标落点区域:depth = 0.55+0.35×(0.5+0.5×risk)(安全区,不贴底线)
  控制型技术(摆短/侧切/吸短/晃搓/兜球/正反手抹/晃撇/翻挑/劈长):depth = 0.22+0.35×技术/100
  y(横向):战术 target_zone(backhand −0.35 / forehand +0.35 / middle 0 / move 随机 ±0.35 / 其余 ±(−0.2~0.2))
  进攻技术默认大角 ±0.3
散布 σ(§5.3)→ 目标点 = 区域 ± σ(纵 ×3.2m、横 ×3.2×1.4),clamp x∈[0.35,1.30] y∈[−0.62,0.62]
上台概率 p_on = 0.85 + 0.15×(技术/100) − 0.25×来球质量 − unforced_prob
   接发 ×(0.75+0.25×recv_factor);E-R-L 被压制 ×0.94;clamp [0.30, 0.997]
   roll 失败 → 下网/出界(50/50),回合结束(kind 按 _error_kind)

7.2 ② 物理生成(反推 + RK4 裁决)

飞行时间 tf:快带/弹击/拍击 0.22s;常规 0.30s;高吊/放高/削球/高球 0.46s
水平速度 vh = min(水平距离/tf, swing×0.95 且 ≥3.5);竖直 vz = (台高−起点z+½g·tf²)/tf
过网约束:跨网时 vz ≥ (网上沿+球半径+0.012 − 起点z + ½·g_eff·t_net²)/t_net
  g_eff = 9.81 ± 0.0558×(vh²+vz²)(上旋下压/下旋上浮)
迭代:最多 3 次 RK4 短模拟(_sim_land)修正 vz(×0.45),残差 < 5cm 停止;vz 不低于过网约束
出球 ω = 目标旋转(§5.2,含洗下旋)
物理裁决:球飞出拍后由主循环 RK4/碰撞判定出界/下网/漏球(不保证上台,失误概率已由 p_on 定)
校准点:① p_on 线性项(0.85+0.15t)—— 决定"同级失误率";② gap_miss_rate 系数 —— 跨级别压制坡度; ③ 受迫 0.25×Q —— 对手高质量回球的压制强度;④ reach 偏移 100/坡度 80 —— 够不到的比例; ⑤ tf 与 swing cap —— 球速手感。5 个旋钮即"每 1 分差距"敏感度的全部来源。

8. 思维链 AI(brain.gd)

8.1 战略层(局间 setup_strategy)

风格 → 主基调:intent = attack(进攻/快攻/弧圈)/ defend(防守反击/削球)/ control(台内/变化)
总评差 → 进攻比例:>15 → 0.7;<−10 → 0.3;否则 0.5;碾压局(差>25)→ 0.55 + 风险基线×0.55(求稳)
战术大师(算球≥90 且 变化≥90):target_zone=move、进攻比例≥0.6、发球多变≥0.9(老瓦式)
对手弱点 → 压制区域:对手正手攻 < 反手攻−5 → 压正手;反之压反手;否则 mixed
比分 → 风险基线:落后≥2 分 → 0.7;领先≥2 分 → 0.35;否则 0.5;× (0.7+0.6×胆识/100),clamp[0.1,0.9]
发球多变 = 发球变化/100;快攻型+启动≥80 → pace=fast

8.2 心理状态(每分 update_after_point)

信心:得 +0.05 / 失 −0.08
疲劳 = 0.012 × (1.5 − 耐力/100)/分(耐力越低累越快),惩罚:失误率 ×(1+疲劳)、质量 ×(1−0.25×疲劳)
士气波动 volatility = 0.08 × (1−沉着/100×0.6) × (1−稳定性/100×0.5)
  得 +v×0.7;主动失误 −v×2.2(波动最大);被压失分 −v×1.0;连得3分且士气<0.6 → +v×0.8
士气效果:风险 ×(0.35+0.65×士气);士气<0.3 → 失误率再 ×1.15

8.3 战术层

回合意图:连失≥2 且信心<0.5 → control;热手(连得3)且 attack 基调 → attack;
  attack 基调按攻击比例掷骰;defend 基调 70% defend;control 基调变化≥80 时 30% 偶发抢攻
risk_adjust = 基线 + 比分(落后3分 +0.2 / 领先4分 −0.15) + 热手+0.1 / 连失−0.1
  + 关键分(沉着≥85 −0.1 / 胆识≥85 +0.1),clamp[0.05,0.95]
发球战术:对手接发判断<60 → 50% 多变(侧旋/下旋);否则按发球多变率随机[下旋/侧旋/上旋];
  落点 = target_zone 弱侧 y(±0.35);深度 0.4-0.7(短)/0.9-1.3(长) 各 50%

8.4 执行层技术决策

score = (技术/100)×aggr − 基础失误率×0.6 + 博弈预测×0.6
博弈 = 我方质量Q→对手失误概率(Q − 对手防守启动×0.55 + 0.35, clamp[0.05,0.85]) − 自己失误概率
AI 选择:70% 最优(±0.04 抖动),30% 按属性加权随机

9. 可用技术矩阵(玩家/AI 均可选池)

来球条件可用技术(奠基技术不出现)
高球 z>1.25 且 距网<1.5扣杀高球、正手侧身爆冲
快而刁(速度>13 或 落点>1.25)快带、侧切、吸短、放高球、削球
台内短球(<0.55)下旋摆短、劈长、反手拧拉、正手挑打、正手晃撇、晃搓、翻挑、兜球、正手抹、反手抹
台内短球 上/不转正手挑打、反手弹击、反手拧拉、翻挑、兜球、正手晃撇
出台长球(>1.2)下旋正手拉前冲、拉高吊、反手拉前冲、拉高吊、劈长、削球、侧切
出台长球 上旋正手快带、正手反拉、反手反拉、反手撕、快带、侧切
出台长球 侧/不转正手拉前冲、反手拉前冲、正手快带、反手撕、撇拉、正手晃撇
半出台 下旋拉前冲/高吊(正反)、劈长、正手挑打、反手拧拉
半出台 上旋快带/反拉(正反)、反手撕、拉前冲(正反)
半出台 侧旋正手快带、快带、撇拉、正手晃撇、反拉(正反)、拉前冲
半出台 不转拉前冲、反手拉前冲、快带、撕、反拉、撇拉、晃撇
阶段过滤:≤3 板(前三板)收窄为发球抢攻池:摆短/劈长/正手挑打/反手拧拉/拉前冲/拉高吊(正反)/侧身爆冲/正手快带/撇拉/正手晃撇/反手撕/反手弹击;算球或变化 ≥90 的非常规强手破例开放全池。>3 板(相持)全池。属性 <30 的技术不出现在池中。

10. 徽章(badges.gd,12 枚)

徽章稀有度触发效果
霸王拧拧拉,接发/台内30%:旋转+30%/球速+25%;8% 直接得分
正手杀板侧身爆冲/拉前冲,相持/接发25%:球速+20%/旋转+15%
前三板大师接发全技术 +20%
铁壁防守/放高/快带/防回头,相持25%:失误率−50%/防守+10%
大心脏关键分(10 平后)沉着/胆识+20%、失误−30%
发球机器发球发球旋转+20%/隐蔽+15%
飞毛腿相持/接发启动速度+10%
绝地反击大比分落后(局差≥1 且本局差≥4)全技术+10%、失误−15%
冷静大师连失 2 分后下一板失误−20%
吸短大师吸短吸短+15%
削球铁闸削球/侧切下旋+15%
游击队长(老瓦)相持/接发拍面误差−30%(落点控制/变线)
防守大师(老瓦)防守类技术防守属性+20%
魔术师(老瓦)前三板(本分 ≤3 拍)全属性+30%(发力/转速)

开局赠送:进攻→正手杀板;快攻→飞毛腿;弧圈→铁壁;台内→吸短大师;防守反击→冷静大师;削球→削球铁闸;变化→前三板大师;所有开局+大心脏。

11. 生涯/赛事(career.gd / tournament.gd / rating.gd)

训练成长/日 = 0.2(心理类0.25) × 侧重(重点3/一般0.5/其他0.1) × 年龄(≤19:1.2 / ≤24:1.0 / ≤29:0.8 / 30+:0.5)
  × 潜力(0.4+0.2×星级) × 瓶颈(当前/100:<70 全速;70-85 0.6;85-95 0.25;≥95 0.05)
  × 体能(1.0/0.85/0.6/0.3) × 多样(1.05/0.9/0.7) × 随机
比赛消耗:state −0.15;休息:state +0.1×天数;受伤:倾向/100×5% 每场,form×0.85
WTT 六层:支线(排名0+,积分250,对手300-500)→ 常规挑战(300+,400,150-300)→ 球星(150+,600,50-150)
  → 冠军赛(50+,1000,20-50)→ 大满贯(20+,2000,4-20)→ 总决赛(16+,1500,1-8)
世界排名与开球网完全分离(专业 vs 业余两套);国内邀请赛对手显示开球网(业余)

12. 平衡实测参考(当前默认参数)

对阵结果(10 场/组)说明
老瓦(90.3) vs 青训(60)85% 分、20:0 场次总评差 30(+三金徽章)碾压
老瓦 vs 2200 业余(54.8)84%、20:0
老瓦 vs 王楚钦(90)/樊/张(93)/马龙(95.5)78-79%(徽章加成≈97 级)其他传奇未配徽章,配卡后自然平衡
青训(60) vs 2200(54.8)71%(差距 ±5.2×1%)跨级别压制(用户口径 6:4 为旧模型)
总评差 1 分≈ 胜率+1.5~2 分点由 gap_miss/受迫/reach 共同合成
平衡旋钮(按灵敏度):① gap_miss_rate 系数 ② p_on 受迫 0.25 ③ unforced_prob 指数 1.5 ④ reach 偏移 100/坡度 80 ⑤ swing cap / tf。改任一后必跑 6:4 与传奇两套基准测试。

13. 测试套件

套件覆盖检查数
run_tests物理内核(飞行/碰撞/回跳)37 项解析对照37
run_match_tests总评/失误率/计分/整场/质量 vs 30 总评52
run_rating_test开球网/业余/专业映射 + CAP_TABLE + ELO19
run_state_testform/器材/奠基修正/隐藏属性26
run_career_test训练成长/赛季/徽章19
run_interactive_test回合制挂起/注入恢复3
run_ui_testUI 流程(创建→训练→比赛)8
run_scale_test双标尺四段换算22
run_tour_testWTT 层级/排名/邀请赛17

运行:godot --headless --path . --script res://tests/run_XXX.gd。改参数后全量回归共 203 项

14. 常用公式速查(按属性)

属性作用点(公式位置)+1 分的典型效果
单项技术 tswing(5.1)/转速(5.2)/σ(5.3)/失误(5.4)/Q(5.5)球速+0.6%、转速+1%、σ−1.5%、失误−(相对3~10%)
爆发力swing f2 = 0.8+0.4t/100球速+0.4%
手腕柔韧性转速 f2;σ ×(1−t/100×0.25)转速+0.4%、σ−0.25%
启动速度ms=2+4t/100;get 反应延迟(6.2);步法分×0.3移速+0.04m/s、反应−0.0015s
移动精度步法分×0.5(最大项);发球落点精度够球率约+1.5 分点
还原节奏步法分×0.2够球率约+0.6 分点
耐力疲劳累积 0.012×(1.5−t/100)疲劳满场时间延后约+1.3%/分
沉着mental(5.4);clutch≥85→1.08;士气波动;risk 关键分失误−(相对)0.3~0.5%;情绪波动−0.6%
胆识risk_base×(0.7+0.6t/100);clutch≥85→+0.1 risk发力+约0.15%、失误+约0.4%(搏杀倾向)
算球能力博弈预测精度(score/expect_advantage);前三板破例(≥90)决策质量(间接)
变化serve_variety=t/100;rotate 强度(0.7+0.3t/100);≥90 破例+战术大师发球多变+1%;旋转+0.3%
发球旋转发球转速(4.1);失误(6.1);质量系数×0.7发球转速+1%;双误率−0.15 分点
发球隐蔽性对手 judge ×(1−t/100×0.5);发球失误;质量×0.3对手判断−0.5%
发球变化旋转强度 0.7+0.3t/100;落点精度×0.5旋转+0.3%;落点误差−0.5%
接发球判断judge = t/100×(1−隐蔽×0.5)×rand;接发失误;回球软系数判断+1%(被隐蔽打折)
防守防守成功率/质量;E-R-L 的 R;奠基(防守类×0.85+防守×0.15)防守成功率+0.4%/分
核心腰腹放高球失误项(0.3+1−t/100);横拍+2放高失误−(相对)0.5%