【发布时间】:2022-12-12 10:32:00
【问题描述】:
在我学习语言的同时,我正在用 Rust 制作一个石头剪刀布游戏作为一个小项目。我已经制作了下面的代码,但似乎无论我做什么,它总是打印“无效响应”。
我当前的代码:
fn start_next() {
thread::sleep(time::Duration::from_secs(3));
rps();
}
fn rps() {
let rk = String::from("rock");
let pp = String::from("paper");
let sc = String::from("scissors");
let end = String::from("end");
let mut guess = String::new();
println!("Choose one (\"end\" to quit):\n- rock\n- paper\n- scissors");
io::stdin().read_line(&mut guess).expect("Unable to read line");
let aichoice = ["rock", "paper", "scissors"][(rand::random::<u8>() % 3) as usize];
// debug
println!("\nAI chose {}", aichoice);
println!("You chose {}", guess);
if guess.eq_ignore_ascii_case(&rk) {
match aichoice {
"rock" => {
println!("Your moves canceled out.");
}
"paper" => {
println!("Paper defated your rock.");
}
"scissors" => {
println!("You defeated scissors");
}
_ => {}
}
start_next();
return;
}
if guess.eq_ignore_ascii_case(&pp) {
match aichoice {
"rock" => {
println!("You defeated rock.");
}
"paper" => {
println!("Your moves canceled out.");
}
"scissors" => {
println!("Scissors defeated your paper.");
}
_ => {}
}
start_next();
return;
}
if guess.eq_ignore_ascii_case(&sc) {
match aichoice {
"rock" => {
println!("Rock defeated your scissors.");
}
"paper" => {
println!("You defeated paper.");
}
"scissors" => {
println!("Your moves canceled out.");
}
_ => {}
}
start_next();
return;
}
if guess.eq_ignore_ascii_case(&end) {
return;
}
println!("Invalid response");
start_next();
}
(是的,如果链接有点糟糕,我会这样做,但我正在尝试这样做,因为它不适用于 string.to_lowercase() 和匹配)
就像我提到的那样,我之前曾尝试使用 match case 语句来做到这一点,但结果相同。
我以前的代码是这样的:
let mut guess = String::new();
println!("Choose one (\"end\" to quit):\n- rock\n- paper\n- scissors");
io::stdin().read_line(&mut guess).expect("Unable to read line");
let aichoice = ["rock", "paper", "scissors"][(rand::random::<u8>() % 3) as usize];
let guess2: &str = &*guess.to_lowercase();
match guess2 {
case "rock" => {
...
}
case "paper" => {
...
}
case "scissors" => {
...
}
case "end" => {
return;
}
case _ => {
println!("Invalid Response");
}
}
thread::sleep(time::Duration::from_secs(3));
rps();
我的猜测是我两次都犯了一些随机错误,或者我的 Rust 安装有问题。
我还测试了我以前的代码并且 to_lowercase() 正在工作,只是比较我不理解的字符串。
【问题讨论】:
-
哦,是的,我忘记了 trim() 我希望 Rust 开发者能像其他语言一样自动实现