main.rs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. use UbongoTrigoSolver::*;
  2. use std::io::Read;
  3. use std::io::Write;
  4. use console::Key;
  5. const B: Cell = Cell::Barrier;
  6. const E: Cell = Cell::Empty;
  7. fn main() {
  8. console::set_colors_enabled(true);
  9. let mut t = console::Term::stdout();
  10. let mut running = true;
  11. let mut map : Map = [
  12. [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
  13. [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
  14. [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
  15. [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
  16. [E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E],
  17. ];
  18. let mut cursor_x : i8= 0;
  19. let mut cursor_y : i8= 0;
  20. let mut unused_piece = 1;
  21. while running {
  22. t.clear_screen();
  23. let mut map_clone = map.clone();
  24. map_clone[cursor_y as usize][cursor_x as usize] = Cell::Occupied(1);
  25. print_map(&mut t, &map_clone);
  26. 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);
  27. let pressed_key = t.read_key().expect("Input error");
  28. match pressed_key {
  29. Key::Char('d') => {
  30. if cursor_x == MAP_WIDTH -1 {
  31. cursor_y = (cursor_y + 1).rem_euclid(MAP_HEIGHT);
  32. }
  33. cursor_x = (cursor_x + 1).rem_euclid(MAP_WIDTH);
  34. },
  35. Key::Char('w') => {
  36. cursor_y = (cursor_y - 1).rem_euclid(MAP_HEIGHT);
  37. },
  38. Key::Char('s') => {
  39. cursor_y = (cursor_y + 1).rem_euclid(MAP_HEIGHT);
  40. },
  41. Key::Char('a') => {
  42. if cursor_x == 0 {
  43. cursor_y = (cursor_y - 1).rem_euclid(MAP_HEIGHT);
  44. }
  45. cursor_x = (cursor_x - 1).rem_euclid(MAP_WIDTH);
  46. },
  47. Key::Char(' ') => {
  48. let current_cell = &mut map[cursor_y as usize][cursor_x as usize];
  49. let updated_cell = match current_cell {
  50. Cell::Empty => Cell::Barrier,
  51. _ => Cell::Empty
  52. };
  53. *current_cell = updated_cell;
  54. if cursor_x == MAP_WIDTH -1 {
  55. cursor_y = (cursor_y + 1).rem_euclid(MAP_HEIGHT);
  56. }
  57. cursor_x = (cursor_x + 1).rem_euclid(MAP_WIDTH);
  58. },
  59. Key::Char('q') => {
  60. running = false;
  61. },
  62. Key::Char('1') => { unused_piece = 1; println!("Unused: {}", unused_piece); }
  63. Key::Char('2') => { unused_piece = 2; println!("Unused: {}", unused_piece); }
  64. Key::Char('3') => { unused_piece = 3; println!("Unused: {}", unused_piece); }
  65. Key::Char('4') => { unused_piece = 4; println!("Unused: {}", unused_piece); }
  66. Key::Char('5') => { unused_piece = 5; println!("Unused: {}", unused_piece); }
  67. Key::Char('6') => { unused_piece = 6; println!("Unused: {}", unused_piece); }
  68. Key::Char('7') => { unused_piece = 7; println!("Unused: {}", unused_piece); }
  69. Key::Enter => {
  70. running = false;
  71. let mut used_parts = vec!();
  72. for (part_id, part) in generate_parts() {
  73. if part_id != unused_piece {
  74. used_parts.push((part_id, part));
  75. println!("Adding {}", part_id);
  76. }
  77. }
  78. let result = solve(&mut map, &used_parts[..]);
  79. print_map(&mut t, &map);
  80. }
  81. _ => {}
  82. };
  83. }
  84. //let mut map : Map = [
  85. // [B, B, E, E, E, B, B, B, E, E, E, B, B, B, B, B],
  86. // [B, E, E, E, E, E, B, B, B, E, E, E, B, B, B, B],
  87. // [E, E, E, E, E, E, B, B, E, E, E, E, E, E, B, B],
  88. // [E, E, E, B, E, B, B, B, E, E, E, E, E, B, B, B],
  89. // [B, B, B, B, B, B, B, B, B, B, B, E, B, B, B, B],
  90. //];
  91. //let parts : Vec<(PartID, Part)> = generate_parts();
  92. //print_map(&map);
  93. //let result = solve(&mut map, &parts[1..7], true);
  94. //assert!(result.is_some());
  95. //print_map(&map);
  96. //
  97. }