File size: 1,734 Bytes
463f868
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9bd4ce5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use engine_rust::core::heuristics::OriginalHeuristic;
use engine_rust::core::logic::{GameState, Phase};
use engine_rust::core::mcts::{SearchHorizon, MCTS};
use engine_rust::test_helpers::load_real_db;

fn main() {
    println!("=== MCTS AI Verification ===");
    let db = load_real_db();

    // Decks
    let p_main: Vec<i32> = db.members.keys().take(50).cloned().collect();
    let energy_ids: Vec<i32> = db.energy_db.keys().take(10).cloned().collect();

    let mut sim = GameState::default();
    sim.initialize_game(
        p_main.clone(),
        p_main.clone(),
        energy_ids.clone(),
        energy_ids.clone(),
        Vec::new(),
        Vec::new(),
    );
    sim.ui.silent = true;
    sim.phase = Phase::Main;

    let mut mcts = MCTS::new();
    let heuristic = OriginalHeuristic::default();

    let mut steps = 0;
    while !sim.is_terminal() && steps < 500 {
        let (stats, _) = mcts.search(&sim, &db, 200, 0.0, SearchHorizon::GameEnd(), &heuristic);

        if stats.is_empty() {
            println!("No legal actions! Phase: {:?}", sim.phase);
            break;
        }

        // Take best action
        let action = stats[0].0;
        let _ = sim.step(&db, action);

        if steps % 10 == 0 {
            println!(
                "Step {}: Phase={:?}, P0 Score={}, P1 Score={}",
                steps, sim.phase, sim.players[0].score, sim.players[1].score
            );
        }

        steps += 1;
    }

    println!("\n=== Final Result ===");
    println!("Winner: {}", sim.get_winner());
    println!("P0 Score: {}", sim.players[0].score);
    println!("P1 Score: {}", sim.players[1].score);
    println!("Steps: {}", steps);
}