サッカーゲームというより、単なるPK戦だなぁ〜
もう少しリアリティのあるゲームにしたい…
use std::io;
use rand::Rng;
struct Game {
player_score: i32,
cpu_score: i32,
}
impl Game {
fn new() -> Self {
Game {
player_score: 0,
cpu_score: 0,
}
}
fn player_attack() -> i32 {
println!("攻撃! シュートする方向を選んでください:");
println!("1: 左\n2: 中央\n3: 右");
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("入力の読み取りに失敗しました");
let dir: i32 = match input.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("無効な入力です。数字を入力してください。");
return 0;
}
};
return dir;
}
fn cpu_defend() -> i32 {
let mut rng = rand::thread_rng();
return rng.gen_range(1..=3);
}
fn cpu_attack() -> i32 {
let mut rng = rand::thread_rng();
return rng.gen_range(1..=3);
}
fn player_defend() -> i32 {
println!("守備!相手のシュートを読む方向を選んでください:");
println!("1: 左\n2: 中央\n3: 右");
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("入力の読み取りに失敗しました");
let dir: i32 = match input.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("無効な入力です。数字を入力してください。");
return 0;
}
};
return dir;
}
}
fn main() {
let mut game1 = Game::new();
println!("{}", game1.player_score);
for turn in 1..4 {
println!("--- 第{}ターン ---", turn);
let player_dir = Game::player_attack();
let cpu_dir = Game::cpu_defend();
if player_dir != cpu_dir {
println!("ゴール!! 🎉");
game1.player_score += 1;
} else {
println!("セーブされました...🧤");
}
let cpu_dir = Game::cpu_attack();
let player_dir = Game::player_defend();
if player_dir != cpu_dir {
println!("ゴール!! 😱");
game1.cpu_score += 1;
} else {
println!("ナイスセーブ!! 🧤");
}
}
println!("=== 試合終了 ===");
println!("あなた: {}, CPU: {}", game1.player_score, game1.cpu_score);
}
— 第1ターン —
攻撃! シュートする方向を選んでください:
1: 左
2: 中央
3: 右
1
ゴール!! 🎉
守備!相手のシュートを読む方向を選んでください:
1: 左
2: 中央
3: 右
2
ゴール!! 😱
— 第2ターン —
攻撃! シュートする方向を選んでください:
1: 左
2: 中央
3: 右
1
ゴール!! 🎉
守備!相手のシュートを読む方向を選んでください:
1: 左
2: 中央
3: 右
1
ゴール!! 😱
— 第3ターン —
攻撃! シュートする方向を選んでください:
1: 左
2: 中央
3: 右
1
セーブされました…🧤
守備!相手のシュートを読む方向を選んでください:
1: 左
2: 中央
3: 右
1
ゴール!! 😱
=== 試合終了 ===
あなた: 2, CPU: 3