원클릭으로
match-simulation-system
电竞经理游戏的比赛模拟系统。基于正态分布的战力值比赛结果模拟、BO系列赛逻辑、胜率计算。当需要修改比赛模拟算法、战力影响、赛制逻辑时使用此技能。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
电竞经理游戏的比赛模拟系统。基于正态分布的战力值比赛结果模拟、BO系列赛逻辑、胜率计算。当需要修改比赛模拟算法、战力影响、赛制逻辑时使用此技能。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | match-simulation-system |
| description | 电竞经理游戏的比赛模拟系统。基于正态分布的战力值比赛结果模拟、BO系列赛逻辑、胜率计算。当需要修改比赛模拟算法、战力影响、赛制逻辑时使用此技能。 |
比赛模拟系统使用基于正态分布的概率模型来模拟电竞比赛结果。它支持BO1/BO3/BO5多种赛制,并能计算两队对阵的预测胜率。
文件: src-tauri/src/engines/match_simulation.rs
比赛模拟引擎,基于正态分布实现胜负判定。
pub struct MatchSimulationEngine {
std_dev: f64, // 标准差 (控制发挥波动程度),默认 6.0
}
核心方法:
simulate_game(...) - 模拟单局比赛simulate_match(...) - 模拟BO系列赛(纯战力值)simulate_match_with_traits(...) - 特性感知的BO系列赛模拟calculate_win_probability(...) - 计算胜率calculate_trait_adjusted_power(...) - 计算特性修正后的队伍战力每局比赛中,双方的实际表现基于战力值的正态分布采样:
fn simulate_game(&self, home_power: f64, away_power: f64) -> (f64, f64, u64) {
// 双方分别从 N(power, std_dev²) 分布采样
let home_performance = Normal::new(home_power, self.std_dev).sample(&mut rng);
let away_performance = Normal::new(away_power, self.std_dev).sample(&mut rng);
// 表现值高的一方获胜
let winner_id = if home_performance > away_performance {
home_team_id
} else {
away_team_id
};
(home_performance, away_performance, winner_id)
}
基于正态分布CDF计算理论胜率:
fn calculate_win_probability(&self, team_power: f64, opponent_power: f64) -> f64 {
let diff = team_power - opponent_power;
let z = diff / (self.std_dev * SQRT_2);
0.5 * (1.0 + erf(z)) // 误差函数近似
}
pub enum MatchFormat {
Bo1, // 单局制
Bo3, // 三局两胜
Bo5, // 五局三胜
}
impl MatchFormat {
pub fn wins_needed(&self) -> u8 {
match self {
Bo1 => 1,
Bo3 => 2,
Bo5 => 3,
}
}
}
pub struct Match {
pub id: u64,
pub tournament_id: u64,
pub stage: String,
pub round: Option<u32>,
pub match_order: Option<u32>,
pub format: MatchFormat,
pub home_team_id: u64,
pub away_team_id: u64,
pub home_score: u8,
pub away_score: u8,
pub winner_id: Option<u64>,
pub status: MatchStatus,
}
pub struct MatchGame {
pub id: u64,
pub match_id: u64,
pub game_number: u8,
pub home_power: f64,
pub away_power: f64,
pub home_performance: f64, // 主队实际表现
pub away_performance: f64, // 客队实际表现
pub winner_id: u64,
pub duration_minutes: Option<u32>, // 比赛时长 (30-50分钟)
}
pub struct MatchResult {
pub match_info: Match,
pub games: Vec<MatchGame>,
pub winner_id: u64,
pub home_score: u8,
pub away_score: u8,
}
pub enum MatchStatus {
Pending, // 待进行
Completed, // 已完成
Cancelled, // 已取消
}
| 战力差 | 强队胜率 |
|---|---|
| 0 | 50% |
| 5 | ~60% |
| 10 | ~69% |
| 15 | ~76% |
| 20 | ~82% |
| 25 | ~87% |
| 30 | ~91% |
文件: src-tauri/src/commands/match_commands.rs
| 命令 | 功能 | 返回类型 |
|---|---|---|
simulate_match_detailed | 模拟比赛(详细结果) | MatchResult |
get_match_prediction | 获取比赛预测 | MatchPrediction |
simulate_next_match | 模拟下一场比赛 | SimulateNextResult |
simulate_all_matches | 模拟所有比赛 | u32 (数量) |
update_match_result | 更新比赛结果 | bool |
cancel_match | 取消比赛 | bool |
文件: src/api/tauri.ts
// 模拟详细比赛
export async function simulateMatchDetailed(matchId: number): Promise<MatchResult>
// 获取比赛预测
export async function getMatchPrediction(homeTeamId: number, awayTeamId: number): Promise<MatchPrediction>
// 模拟下一场
export async function simulateNextMatch(): Promise<SimulateNextResult>
// 模拟所有
export async function simulateAllMatches(): Promise<number>
time_simulate_next / time_simulate_all 调用模拟引擎home_performance / away_performance 记录为影响力simulate_match_with_traits 集成特性TraitContext,计算特性修正后再做正态分布采样game_flow.rs 的 load_team_players 批量预加载选手特性trait-system 技能meta-system 技能)stability 通过 traits.rs / condition.rs 影响发挥波动simulate_match_detailed() 在模拟前获取当前 Meta 权重传入generate_team_stats() 使用 MetaEngine::calculate_team_power_weighted() 替代简单平均src-tauri/src/engines/meta_engine.rslet engine = MatchSimulationEngine::default();
let result = engine.simulate_match(
match_id,
tournament_id,
"FINAL",
MatchFormat::Bo5,
t1_id, gen_id,
92.0, 88.0, // 战力值
);
println!("比分: {}:{}", result.home_score, result.away_score);
println!("胜者: {}", result.winner_id);
for game in &result.games {
println!("第{}局: {:.1} vs {:.1} -> 胜者{}",
game.game_number,
game.home_performance,
game.away_performance,
game.winner_id);
}
let engine = MatchSimulationEngine::default();
let win_prob = engine.calculate_win_probability(92.0, 88.0);
println!("T1 胜率: {:.1}%", win_prob * 100.0);
// 输出: T1 胜率: 64.0%
// 低波动 - 强队更稳定获胜
let stable_engine = MatchSimulationEngine::new(3.0);
// 高波动 - 更多冷门可能
let volatile_engine = MatchSimulationEngine::new(10.0);
每局比赛时长随机生成:
duration_minutes = 30 + rand::random::<u32>() % 20 // 30-50分钟
MatchResult 中的 match_info、games、分数应保持一致performance 值代表该局实际发挥,可用于数据中心记录MetaEngine::get_current_weights() 获取电竞经理游戏的数据中心系统。管理选手赛季统计、影响力排行、赛事表现记录、身价变化追踪。当需要修改统计计算、排行榜逻辑、年度评分时使用此技能。
电竞经理游戏的金额单位规范。全项目金额统一以「元」存储和传递,前端使用 formatMoney 系列函数格式化显示。当需要新增金额相关计算、修改身价/薪资/奖金/赞助公式、添加新的金额字段、或排查金额显示异常时使用此技能。
电竞经理游戏的版本更新(Meta)系统。管理20种Meta版本、位置权重、加权战力计算、赛季版本轮换。当需要修改Meta配置、位置权重、战力计算公式、版本轮换规则时使用此技能。
电竞经理游戏的选手系统。管理选手属性、成长曲线、忠诚度、满意度、身价计算。当需要修改选手属性、成长规则、身价公式、忠诚度机制时使用此技能。
电竞经理游戏的时间推进系统。管理赛季阶段、比赛模拟、赛季结算等核心游戏流程。当需要修改游戏进度、阶段推进、比赛模拟逻辑时使用此技能。
电竞经理游戏的选手特性系统。管理14种选手特性的定义、触发条件、修正计算、随机生成、互斥规则。特性影响比赛模拟中选手的ability/stability/condition。当需要修改特性效果、添加新特性、调整触发条件、修改生成规则时使用此技能。