サッカーゲームをRustで書く

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