mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-07-09 05:39:02 -07:00
117 lines
3.4 KiB
Rust
117 lines
3.4 KiB
Rust
/** NAME GAME BY GEOFFREY CHASE
|
|
* https://github.com/coding-horror/basic-computer-games/blob/main/63_Name/name.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.
|
|
* 17/02/25
|
|
*/
|
|
|
|
use std::io::Write;
|
|
|
|
fn main() {
|
|
let mut input = String::new();
|
|
|
|
//1 PRINT TAB(34);"NAME"
|
|
//2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
|
//3 PRINT: PRINT: PRINT
|
|
print!("{}{}\n{}{}\n\n\n\n",
|
|
" ".repeat(34),
|
|
"NAME",
|
|
" ".repeat(15),
|
|
"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
|
);
|
|
|
|
//5 DIM B$(40)
|
|
let mut b = [0; 40];
|
|
|
|
//10 PRINT "HELLO.": PRINT "MY NAME IS CREATIVE COMPUTER."
|
|
//20 PRINT "WHAT'S YOUR NAME (FIRST AND LAST";: INPUT A$: L=LEN(A$)
|
|
print!("{}\n{}\n{}",
|
|
"HELLO.",
|
|
"MY NAME IS CREATIVE COMPUTER.",
|
|
"WHAT'S YOUR NAME (FIRST AND LAST)? "
|
|
);
|
|
|
|
let _ = std::io::stdout().flush().unwrap();
|
|
std::io::stdin().read_line(&mut input).unwrap();
|
|
let a = input.trim().to_uppercase();
|
|
let l = a.len();
|
|
|
|
//30 PRINT: PRINT "THANK YOU, ";
|
|
print!("\nTHANK YOU, ");
|
|
|
|
//40 FOR I=1 TO L: B$(I)=MID$(A$,I,1): NEXT I
|
|
for i in 1..=l {
|
|
b[i-1] = a.chars().nth(i-1).unwrap() as u8;
|
|
}
|
|
|
|
//50 FOR I=L TO 1 STEP -1: PRINT B$(I);: NEXT I
|
|
for i in (1..=l).rev() {
|
|
print!("{}", b[i-1] as char);
|
|
}
|
|
|
|
//60 PRINT ".": PRINT "OOPS! I GUESS I GOT IT BACKWARDS. A SMART"
|
|
//70 PRINT "COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!": PRINT
|
|
//80 PRINT "BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER."
|
|
//90 PRINT "LET'S PUT THEM IN ORDER LIKE THIS: ";
|
|
print!("{}\n{}\n{}\n\n{}\n{}",
|
|
".",
|
|
"OOPS! I GUESS I GOT IT BACKWARDS. A SMART",
|
|
"COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!",
|
|
"BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER.",
|
|
"LET'S PUT THEM IN ORDER LIKE THIS: "
|
|
);
|
|
|
|
//100 FOR J=2 TO L: I=J-1: T$=B$(J)
|
|
let mut i;
|
|
let mut t;
|
|
for j in 2..=l {
|
|
i = j - 1;
|
|
t = b[j-1];
|
|
loop {
|
|
//110 IF T$>B$(I) THEN 130
|
|
if i == 0 || t > b[i-1] {
|
|
//130 B$(I+1)=T$: NEXT J
|
|
b[i] = t;
|
|
break;
|
|
} else {
|
|
//120 B$(I+1)=B$(I): I=I-1: IF I>0 THEN 110
|
|
b[i] = b[i-1];
|
|
i = i - 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
//140 FOR I=1 TO L: PRINT B$(I);: NEXT I: PRINT: PRINT
|
|
for i in 1..=l {
|
|
print!("{}", b[i-1] as char);
|
|
}
|
|
print!("\n\n");
|
|
|
|
//150 PRINT "DON'T YOU LIKE THAT BETTER";: INPUT D$
|
|
print!("DON'T YOU LIKE THAT BETTER? ");
|
|
|
|
let _ = std::io::stdout().flush().unwrap();
|
|
input.clear();
|
|
std::io::stdin().read_line(&mut input).unwrap();
|
|
let d = input.trim().to_uppercase();
|
|
|
|
//160 IF D$="YES" THEN 180
|
|
if d == "YES" || d == "Y" {
|
|
//180 PRINT: PRINT "I KNEW YOU'D AGREE!!"
|
|
print!("\nI KNEW YOU'D AGREE!!");
|
|
}
|
|
else {
|
|
//170 PRINT: PRINT "I'M SORRY YOU DON'T LIKE IT THAT WAY.": GOTO 200
|
|
print!("\nI'M SORRY YOU DON'T LIKE IT THAT WAY.");
|
|
}
|
|
|
|
print!("\n\n{}{}.\n{}\n",
|
|
"I REALLY ENJOYED MEETING YOU ",
|
|
a,
|
|
"HAVE A NICE DAY!"
|
|
);
|
|
|
|
//999 END
|
|
}
|