MCPcopy Index your code
hub / github.com/battlecode/battlecode-2018 / run_game_ansi

Function run_game_ansi

battlecode-engine/src/controller/mod.rs:1437–1492  ·  view source on GitHub ↗

Run a test game between two rust bots.

(mut r: R, mut b: B, turns: usize, delay: u32)

Source from the content-addressed store, hash-verified

1435
1436/// Run a test game between two rust bots.
1437pub fn run_game_ansi<R, B>(mut r: R, mut b: B, turns: usize, delay: u32)
1438 where R: FnMut(&mut GameController) -> Result<(), failure::Error>,
1439 B: FnMut(&mut GameController) -> Result<(), failure::Error> {
1440
1441 // A filler time that doesn't matter for this test game.
1442 let time = 10000;
1443 let mut map = GameMap::test_map();
1444
1445 map.earth_map.is_passable_terrain[5][16] = false;
1446 map.earth_map.is_passable_terrain[12][0] = false;
1447
1448 let mut master = GameController::new_manager(map);
1449 let players: [Player; 4] = [
1450 Player { team: Red, planet: Earth },
1451 Player { team: Blue, planet: Earth },
1452 Player { team: Red, planet: Mars },
1453 Player { team: Blue, planet: Mars }
1454 ];
1455 let mut pcs: Vec<_> = players.iter().map(|p| GameController::new_player(master.start_game(*p))).collect();
1456
1457 let mut lastturn: Option<StartTurnMessage> = None;
1458
1459 for i in 0..turns*4 {
1460 let p = i % 4;
1461 if lastturn.is_some() {
1462 let mut nx = None;
1463 mem::swap(&mut lastturn, &mut nx);
1464 pcs[p].start_turn(&nx.unwrap());
1465 } else {
1466 pcs[p].start_turn(&master.initial_start_turn_message(time).start_turn);
1467 }
1468
1469 if players[p].team == Red {
1470 r(&mut pcs[p]).expect("player errored");
1471 } else {
1472 b(&mut pcs[p]).expect("player errored");
1473 }
1474
1475 println!("round: {:?} team: {:?} planet: {:?} karbonite: {:?}",
1476 pcs[p].round(), pcs[p].team(), pcs[p].planet(), pcs[p].karbonite());
1477
1478 let TurnApplication { start_turn, .. } = master.apply_turn(&pcs[p].end_turn(), time);
1479 lastturn = Some(start_turn);
1480
1481 println!("-- master view --");
1482 master.print_game_ansi();
1483 println!("-- player view --");
1484 pcs[p].print_game_ansi();
1485 use std::{thread, time};
1486 thread::sleep(time::Duration::from_millis(delay.into()));
1487 if let Some(team) = master.is_game_over() {
1488 println!("Winner: {:?}", team);
1489 return;
1490 }
1491 }
1492}
1493
1494#[cfg(test)]

Callers 1

mainFunction · 0.85

Calls 7

print_game_ansiMethod · 0.80
start_gameMethod · 0.45
start_turnMethod · 0.45
apply_turnMethod · 0.45
end_turnMethod · 0.45
is_game_overMethod · 0.45

Tested by

no test coverage detected