extern crate tcod;
use tcod::pathfinding::AStar;
fn create_path() -> AStar<'static> {
let chess_board: [[i32; 8]; 8] = [
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
];
let can_move = move |from: (i32, i32), to: (i32, i32)| -> f32 {
let (fx, fy) = from;
let (tx, ty) = to;
if chess_board[fy as usize][fx as usize] == chess_board[ty as usize][tx as usize] {
1.0
} else {
0.0
}
};
AStar::new_from_callback(8, 8, can_move, 1.0)
}
fn main() {
let mut path = create_path();
assert_eq!(path.find((0, 0), (1, 1)), true);
assert_eq!(path.len(), 1);
assert_eq!(path.is_empty(), false);
assert_eq!(path.find((0, 0), (0, 1)), false);
assert_eq!(path.len(), 0);
assert_eq!(path.is_empty(), true);
assert_eq!(path.find((0, 0), (0, 6)), true);
assert_eq!(path.len(), 6);
assert_eq!(path.origin(), (0, 0));
assert_eq!(path.destination(), (0, 6));
assert_eq!(path.get(0), Some((1, 1)));
assert_eq!(path.get(1), Some((0, 2)));
assert_eq!(path.get(2), Some((1, 3)));
assert_eq!(path.get(3), Some((0, 4)));
assert_eq!(path.get(4), Some((1, 5)));
assert_eq!(path.get(5), Some((0, 6)));
assert_eq!(path.get(-1), None);
assert_eq!(path.get(6), None);
assert_eq!(path.get(7), None);
for pos in path.walk() {
println!("Walking to {:?}", pos);
}
assert_eq!(path.len(), 0);
assert_eq!(path.is_empty(), true);
assert_eq!(path.origin(), (0, 6));
assert_eq!(path.destination(), (0, 6));
assert_eq!(path.get(0), None);
}