サッカーゲームというより、単なる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