From 2dba25c4eef4d4ad1563b8aa1192221e53b5a500 Mon Sep 17 00:00:00 2001 From: Christopher Date: Sun, 5 Mar 2023 11:05:43 +1300 Subject: [PATCH] fixed calculation for direction --- 84_Super_Star_Trek/rust/src/model.rs | 9 +++++---- 84_Super_Star_Trek/rust/src/view.rs | 6 +++--- 84_Super_Star_Trek/rust/tasks.md | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/84_Super_Star_Trek/rust/src/model.rs b/84_Super_Star_Trek/rust/src/model.rs index dd2b8dd8..1bb5ef8e 100644 --- a/84_Super_Star_Trek/rust/src/model.rs +++ b/84_Super_Star_Trek/rust/src/model.rs @@ -154,16 +154,17 @@ impl Pos { self.0.abs_diff(other.0) + self.1.abs_diff(other.1) } - pub fn dist(&self, other: Pos) -> f32 { + pub fn dist(&self, other: Pos) -> u8 { let dx = other.0 as f32 - self.0 as f32; let dy = other.1 as f32 - self.1 as f32; - (f32::powi(dx, 2) + f32::powi(dy, 2)).sqrt() + (f32::powi(dx, 2) + f32::powi(dy, 2)).sqrt() as u8 } pub fn direction(&self, other: Pos) -> f32 { // this is a replication of the original BASIC code - let dx = other.0 as f32 - self.0 as f32; - let dy = other.1 as f32 - self.1 as f32; + let dy = other.0 as f32 - self.0 as f32; + let dx = other.1 as f32 - self.1 as f32; + // note i actually use x,y, but the calculation assumes y,x so they're flipped above let dx_dominant = dx.abs() > dy.abs(); let frac = if dx_dominant { dy / dx } else { -dx / dy }; diff --git a/84_Super_Star_Trek/rust/src/view.rs b/84_Super_Star_Trek/rust/src/view.rs index 19cc7a57..00598b58 100644 --- a/84_Super_Star_Trek/rust/src/view.rs +++ b/84_Super_Star_Trek/rust/src/view.rs @@ -433,7 +433,7 @@ pub fn long_range_scan(galaxy: &Galaxy) -> Vec { stars = format!("{}", quadrant.stars.len()); } - print!(": {}{}{} ", klingons, stars, star_bases) + print!(": {}{}{} ", klingons, star_bases, stars) } println!(":"); println!("{:-^19}", ""); @@ -482,7 +482,7 @@ pub fn galaxy_scanned_map(galaxy: &Galaxy) { let pos = Pos(x, y); if galaxy.scanned.contains(&pos) { let quadrant = &galaxy.quadrants[pos.as_index()]; - print!(" {}{}{} ", quadrant.klingons.len(), quadrant.stars.len(), quadrant.star_base.as_ref().map_or("0", |_| "1")) + print!(" {}{}{} ", quadrant.klingons.len(), quadrant.star_base.as_ref().map_or("0", |_| "1"), quadrant.stars.len()) } else { print!(" *** "); } @@ -589,7 +589,7 @@ pub fn starbase_report() { println!("From Enterprise to Starbase:'") } -pub fn direction_distance(dir: f32, dist: f32) { +pub fn direction_distance(dir: f32, dist: u8) { println!( "Direction = {dir} Distance = {dist}" diff --git a/84_Super_Star_Trek/rust/tasks.md b/84_Super_Star_Trek/rust/tasks.md index 20f9a5c1..f3350bd6 100644 --- a/84_Super_Star_Trek/rust/tasks.md +++ b/84_Super_Star_Trek/rust/tasks.md @@ -45,3 +45,4 @@ Started after movement and display of stats was finished (no energy management o - [x] defeat due to time expired - [x] intro instructions - [x] victory +- [ ] switch from x,y to y,x \ No newline at end of file