🎯 計算ゲーム - 解答と解説
課題1-1の要件
- ランダムな2つの数(1-100)を表示
- その和を当てるゲーム
- 正解・不正解の判定
- 3回まで挑戦可能
- 終了時に正解率を表示
1. 完全な解答例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
system("chcp 65001");
srand((unsigned int)time(NULL));
int correct_count = 0;
const int MAX_TRIES = 3;
printf("=== 計算ゲーム ===\n");
printf("2つの数の和を当ててください!\n\n");
for (int i = 0; i < MAX_TRIES; i++) {
int num1 = rand() % 100 + 1;
int num2 = rand() % 100 + 1;
int correct_answer = num1 + num2;
printf("\n問題 %d: %d + %d = ?\n", i + 1, num1, num2);
printf("答えを入力してください: ");
int user_answer;
scanf_s("%d", &user_answer);
if (user_answer == correct_answer) {
printf("正解です!\n");
correct_count++;
} else {
printf("不正解... 正解は %d でした\n", correct_answer);
}
}
float accuracy = (float)correct_count / MAX_TRIES * 100;
printf("\n=== ゲーム終了 ===\n");
printf("正解数: %d/%d\n", correct_count, MAX_TRIES);
printf("正解率: %.1f%%\n", accuracy);
return 0;
}
2. コードの解説
2.1 必要なヘッダファイル
stdio.h
: 標準入出力関数(printf, scanf_s)用
stdlib.h
: rand関数とsystem関数用
time.h
: 乱数の種の生成用
2.2 重要な変数
correct_count
: 正解数を記録
MAX_TRIES
: 最大試行回数(定数)
num1, num2
: ランダムに生成された2つの数
correct_answer
: 正解(num1 + num2)
accuracy
: 正解率(float型で%表示)
2.3 主要な処理の流れ
- 初期設定
- メインループ(3回)
- ランダムな数の生成
- 問題の表示
- ユーザー入力の受付
- 正誤判定と結果表示
- 最終結果の表示
3. 発展的な改良案
- 難易度設定の追加
- 数値の範囲を変更可能に
- 演算子を選択可能に(足し算以外も)
- タイマーの追加
- ハイスコアの記録
よくある間違い
- 乱数の初期化忘れ
- scanf_s使用時のエラーチェック漏れ
- 正解率計算時の整数除算
- バッファのクリア忘れ