C言語

【C言語】第10章第1回:数当てゲームの作成

C言語を使って、楽しい数当てゲームを作ってみましょう。本記事では、ゲームの基本構造から完成までの手順を解説します。

0. 記事の概要

この記事を読むメリット

  • 基本的なプログラミング構造の理解:ゲームロジックの作成を通じて、プログラミングスキルを向上させます。
  • ユーザーインタラクションの実装:ユーザー入力と応答の処理を学べます。
  • 実践的な応用力:ゲーム開発の基本を学び、他のプロジェクトへの応用が可能です。

この記事で学べること

  • 乱数の使用方法
  • 条件分岐とループの活用
  • ユーザー入力の処理

1. 数当てゲームの基本設計

1.1 ゲームの流れ

数当てゲームの基本的な流れは以下の通りです。

  1. コンピュータが1から100のランダムな数を選びます。
  2. ユーザーが数を予想して入力します。
  3. コンピュータが「もっと大きい」または「もっと小さい」とヒントを出します。
  4. 正解するまで繰り返します。

1.2 必要なプログラム構造

このゲームでは以下の要素を実装します。

  • 乱数生成
  • ユーザー入力
  • 条件分岐とループ
  • 終了条件のチェック

2. コード例と詳細解説

2.1 基本コード例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int secret, guess, attempts = 0;

    srand(time(0)); // 乱数の種を初期化
    secret = rand() % 100 + 1; // 1から100のランダムな数

    printf("数当てゲームへようこそ!1〜100の間の数を当ててください。\n");

    do {
        printf("あなたの予想を入力してください: ");
        scanf("%d", &guess);
        attempts++;

        if (guess < secret) {
            printf("もっと大きいです。\n");
        } else if (guess > secret) {
            printf("もっと小さいです。\n");
        } else {
            printf("正解です!%dが正しい数字でした。\n", secret);
            printf("試行回数: %d\n", attempts);
        }
    } while (guess != secret);

    return 0;
}
動作解説
  1. 乱数の生成:`srand`と`rand`を使用して1〜100の範囲でランダムな数を生成します。
  2. ユーザー入力の取得:`scanf`でプレイヤーの予想を入力します。
  3. 条件分岐によるヒント提供:入力値が秘密の数より小さいか大きいかでヒントを表示します。
  4. ゲームの終了:正解するとループを終了し、結果を表示します。

3. 練習問題

以下の課題に挑戦して、数当てゲームを拡張してみましょう。

  1. 試行回数に制限を追加してください(例:10回以内に当てる)。
  2. ゲーム終了後に、再度プレイするかどうかを尋ねる機能を追加してください。
  3. 難易度を選択できるようにし、それに応じて数値の範囲を変更してください。

4. 練習問題の解答と解説

問1の解答例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int secret, guess, attempts = 0, max_attempts = 10;

    srand(time(0));
    secret = rand() % 100 + 1;

    printf("数当てゲーム(試行回数制限あり)へようこそ!\n");
    printf("1〜100の間の数を当ててください。\n");

    do {
        printf("あなたの予想を入力してください: ");
        scanf("%d", &guess);
        attempts++;

        if (guess < secret) {
            printf("もっと大きいです。\n");
        } else if (guess > secret) {
            printf("もっと小さいです。\n");
        } else {
            printf("正解です!%dが正しい数字でした。\n", secret);
            printf("試行回数: %d\n", attempts);
            break;
        }

        if (attempts >= max_attempts) {
            printf("ゲームオーバー!正しい数字は%dでした。\n", secret);
            break;
        }
    } while (1);

    return 0;
}

このプログラムでは、試行回数を10回に制限し、それを超えた場合にゲームオーバーを表示します。

5. まとめ

本記事では、数当てゲームの作成手順を解説しました。プログラムを拡張して、さらに面白いゲームに進化させてみましょう。