123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- use UbongoTrigoSolver::*;
- use std::io::Read;
- use std::io::Write;
- use console::Key;
- const B: Cell = Cell::Barrier;
- const E: Cell = Cell::Empty;
- fn main() {
- console::set_colors_enabled(true);
- let mut t = console::Term::stdout();
- let mut running = true;
- let mut map : Map = [
- [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
- [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
- [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
- [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
- [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
- ];
- let mut cursor_x : i8= 0;
- let mut cursor_y : i8= 0;
- let mut unused_piece = 1;
- while running {
- t.clear_screen();
- let mut map_clone = map.clone();
- map_clone[cursor_y as usize][cursor_x as usize] = Cell::Occupied(1);
- print_map(&mut t, &map_clone);
- write!(&mut t, "\nUnused piece: {}\nW, A, S, D to navigate.\nSpace bar to toggle between empty and barrier.\n1-7 to choose unused piece.\nEnter to start calculation.\nq to quit.\n", unused_piece);
- let pressed_key = t.read_key().expect("Input error");
- match pressed_key {
- Key::Char('d') => {
- if cursor_x == MAP_WIDTH -1 {
- cursor_y = (cursor_y + 1).rem_euclid(MAP_HEIGHT);
- }
- cursor_x = (cursor_x + 1).rem_euclid(MAP_WIDTH);
- },
- Key::Char('w') => {
- cursor_y = (cursor_y - 1).rem_euclid(MAP_HEIGHT);
- },
- Key::Char('s') => {
- cursor_y = (cursor_y + 1).rem_euclid(MAP_HEIGHT);
- },
- Key::Char('a') => {
- if cursor_x == 0 {
- cursor_y = (cursor_y - 1).rem_euclid(MAP_HEIGHT);
- }
- cursor_x = (cursor_x - 1).rem_euclid(MAP_WIDTH);
- },
- Key::Char(' ') => {
- let current_cell = &mut map[cursor_y as usize][cursor_x as usize];
- let updated_cell = match current_cell {
- Cell::Empty => Cell::Barrier,
- _ => Cell::Empty
- };
- *current_cell = updated_cell;
- if cursor_x == MAP_WIDTH -1 {
- cursor_y = (cursor_y + 1).rem_euclid(MAP_HEIGHT);
- }
- cursor_x = (cursor_x + 1).rem_euclid(MAP_WIDTH);
- },
- Key::Char('q') => {
- running = false;
- },
- Key::Char('1') => { unused_piece = 1; println!("Unused: {}", unused_piece); }
- Key::Char('2') => { unused_piece = 2; println!("Unused: {}", unused_piece); }
- Key::Char('3') => { unused_piece = 3; println!("Unused: {}", unused_piece); }
- Key::Char('4') => { unused_piece = 4; println!("Unused: {}", unused_piece); }
- Key::Char('5') => { unused_piece = 5; println!("Unused: {}", unused_piece); }
- Key::Char('6') => { unused_piece = 6; println!("Unused: {}", unused_piece); }
- Key::Char('7') => { unused_piece = 7; println!("Unused: {}", unused_piece); }
- Key::Enter => {
- running = false;
- let mut used_parts = vec!();
- for (part_id, part) in generate_parts() {
- if part_id != unused_piece {
- used_parts.push((part_id, part));
- println!("Adding {}", part_id);
- }
- }
- let result = solve(&mut map, &used_parts[..]);
- print_map(&mut t, &map);
- }
- _ => {}
- };
- }
- //let mut map : Map = [
- // [B, B, E, E, E, B, B, B, E, E, E, B, B, B, B, B],
- // [B, E, E, E, E, E, B, B, B, E, E, E, B, B, B, B],
- // [E, E, E, E, E, E, B, B, E, E, E, E, E, E, B, B],
- // [E, E, E, B, E, B, B, B, E, E, E, E, E, B, B, B],
- // [B, B, B, B, B, B, B, B, B, B, B, E, B, B, B, B],
- //];
- //let parts : Vec<(PartID, Part)> = generate_parts();
- //print_map(&map);
- //let result = solve(&mut map, &parts[1..7], true);
- //assert!(result.is_some());
- //print_map(&map);
- //
- }
|