プログラミング

Rustで作る数字当てゲーム

ゲーム「数字当て」の作成をRust言語で行う方法について、以下に完全かつ包括的な記事を提供します。このゲームは、コンピュータがランダムに選んだ数字をプレイヤーが当てるというシンプルなものです。Rustを使って、ゲームのロジック、ユーザーインターフェース、エラーハンドリングなどを含んだ完全なコードを紹介します。

Rustで数字当てゲームを作成する方法

1. プロジェクトの作成

まず、Rustのプロジェクトを作成します。ターミナルを開いて、次のコマンドを入力してください。

bash
cargo new number_guessing_game cd number_guessing_game

このコマンドにより、「number_guessing_game」という名前のRustプロジェクトが作成されます。

2. 依存関係の設定

ゲームに必要な外部クレート(ライブラリ)として、randクレートを使用してランダムな数字を生成します。Cargo.tomlファイルを開き、以下を追加します。

toml
[dependencies] rand = "0.8"

randクレートを使うことで、ランダムな整数を生成することができます。次に、このクレートを使ってコードを書く準備が整いました。

3. ゲームのロジック

src/main.rsファイルに、実際のゲームロジックを記述します。以下がそのコードです。

rust
use rand::Rng; use std::io; fn main() { // ゲームのタイトル println!("数字当てゲームへようこそ!"); // 1から100までのランダムな数字を生成 let secret_number = rand::thread_rng().gen_range(1..=100); // プレイヤーの試行回数をカウント let mut attempts = 0; loop { // プレイヤーに入力を求める println!("1から100までの数字を予想してください:"); // ユーザーの入力を取得 let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("入力の読み込みに失敗しました"); // 入力値を整数に変換 let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => { println!("無効な入力です。数字を入力してください。"); continue; } }; // 試行回数を増加 attempts += 1; // ゲームの判定 if guess < secret_number { println!("もっと大きな数字です!"); } else if guess > secret_number { println!("もっと小さな数字です!"); } else { println!("おめでとうございます!正解は {} でした。試行回数は {} 回でした。", secret_number, attempts); break; } } }

4. コードの説明

  • rand::thread_rng().gen_range(1..=100): 1から100までの範囲でランダムな整数を生成します。
  • io::stdin().read_line(&mut guess): ユーザーからの入力を取得します。
  • guess.trim().parse(): 入力された文字列を整数に変換します。無効な入力(数字以外)があった場合はエラーメッセージを表示します。
  • if-else: 入力された数字が秘密の数字より大きい、または小さいかどうかを判定し、ユーザーにフィードバックを提供します。
  • break: 正解が入力された場合、ゲームを終了します。

5. ゲームの流れ

  1. ゲームが開始されると、コンピュータはランダムに1から100の間で秘密の数字を生成します。
  2. プレイヤーはその数字を予想して入力します。
  3. 入力された数字が正解であれば、ゲームが終了し、試行回数が表示されます。
  4. プレイヤーが誤った数字を入力した場合、「もっと大きな数字」または「もっと小さな数字」というヒントが表示され、再度入力を求められます。

6. ゲームの実行

プロジェクトディレクトリ内で以下のコマンドを実行すると、ゲームが開始されます。

bash
cargo run

これで、ターミナル上でゲームをプレイすることができます。例えば、以下のようなやり取りになります。

makefile
数字当てゲームへようこそ! 1から100までの数字を予想してください: 50 もっと小さな数字です! 1から100までの数字を予想してください: 30 もっと大きな数字です! 1から100までの数字を予想してください: 40 おめでとうございます!正解は 40 でした。試行回数は 3 回でした。

7. ゲームの改善

  • プレイヤーの名前を入力させる: プレイヤーがゲームを開始する前に名前を入力させ、挨拶を表示するように変更できます。
  • 難易度の設定: プレイヤーに簡単・中級・難しいモードを選ばせ、数字の範囲を変更することもできます。
  • スコアの保存: プレイした回数や最速タイムなどのスコアを保存し、後で確認できるようにすることもできます。

8. まとめ

この数字当てゲームはRustを使ってシンプルかつ効率的に作成できます。randクレートを活用し、ユーザー入力の処理やエラーハンドリング、ゲームの進行管理を行っています。Rustの特性であるメモリ管理の強さを活かし、パフォーマンスも良好なゲームを実装することができました。

Rustでゲームを作成することは、プログラミングの学習にも役立ちますし、より複雑なゲームへと発展させるための良いステップです。

Back to top button