diff --git a/13_Bounce/rust/src/main.rs b/13_Bounce/rust/src/main.rs index f69b2d92..99050227 100644 --- a/13_Bounce/rust/src/main.rs +++ b/13_Bounce/rust/src/main.rs @@ -1,3 +1,11 @@ +/** BOUNCE GAME + * https://github.com/coding-horror/basic-computer-games/blob/main/13_Bounce/bounce.bas + * Direct conversion from BASIC to Rust by Pablo Marques (marquesrs). + * No additional features or improvements were added. As a faithful translation, + * many of the code here are done in an unrecommended way by today's standards. + * 03/03/25 +*/ + use std::io::Write; fn input(msg: &str) -> String { @@ -41,22 +49,22 @@ fn main() { loop { //135 INPUT "TIME INCREMENT (SEC)";S2 - //let s2 = input("TIME INCREMENT (SEC): ").parse::().unwrap(); - let s2 = 0.1f32; + let s2 = input("TIME INCREMENT (SEC): ").parse::().unwrap(); + //let s2 = 0.2f32; //140 PRINT println!(); //150 INPUT "VELOCITY (FPS)";V - //let v = input("VELOCITY (FPS): ").parse::().unwrap(); - let v = 20.0f32; + let v = input("VELOCITY (FPS): ").parse::().unwrap(); + //let v = 20.0f32; //160 PRINT println!(); //170 INPUT "COEFFICIENT";C - //let c = input("COEFFICIENT: ").parse::().unwrap(); - let c = 0.5f32; + let c = input("COEFFICIENT: ").parse::().unwrap(); + //let c = 0.6f32; //180 PRINT //182 PRINT "FEET" @@ -74,56 +82,57 @@ fn main() { } let mut l = 0.0; - let mut l_expected = l; //220 FOR H=INT(-16*(V/32)^2+V^2/32+.5) TO 0 STEP -.5 let mut h = (-16.0 * (v / 32.0).powi(2) + (v.powi(2)) / 32.0 + 0.5).floor(); while h >= 0.0 { + let mut line_content = String::new(); //221 IF INT(H)<>H THEN 225 if h.floor() == h { //222 PRINT H; - print!("{}", h); + line_content.push_str(h.to_string().as_str()); + line_content.push(' '); } //225 L=0 l = 0.0; - l_expected = l; //230 FOR I=1 TO S1 for i in 1..=s1 { - let mut T = 0.0; + let mut t_val = 0.0; //240 FOR T=0 TO T(I) STEP S2 - while T <= t[(i - 1) as usize] { + while t_val <= t[(i - 1) as usize] { //245 L=L+S2 l = l + s2; - l_expected = l_expected + s2; //250 IF ABS(H-(.5*(-32)*T^2+V*C^(I-1)*T))>.25 THEN 270 - let condition = h - (0.5 * (-32.0) * T.powf(2.0) + v * c.powf((i-1) as f32) * T); + let condition = h - (0.5 * (-32.0) * t_val.powf(2.0) + v * c.powf((i-1) as f32) * t_val); if condition.abs() >= 0.25{ - T = T + s2; + t_val = t_val + s2; continue; } // TABS ARE NOT SPACES, BUT A TERMINAL POSITION //260 PRINT TAB(L/S2);"0"; - let spaces = ((l / s2).floor()-1.0) as usize; - print!("{}0", " ".repeat(spaces)); - l = l - spaces as f32; + let spaces = ((l / s2) - 1.0) as usize; + while line_content.len() < spaces { + line_content.push(' '); + } + line_content.push('0'); //270 NEXT T - T = T + s2; + t_val = t_val + s2; } //275 T=T(I+1)/2 if i as usize == t.len() { break; } - T = t[i as usize] / 2.0; + t_val = t[i as usize] / 2.0; //276 IF -16*T^2+V*C^(I-1)*T