ゲーム概要
この記事では、C++を用いて簡単な算数クイズゲームを作成する方法を紹介します。このゲームは、ランダムに生成された算数の問題を出題し、ユーザーの回答をチェックします。このゲームを作成することで、以下のような学びが得られます。
- C++の基本的な概念(変数、ループ、条件文など)
- 乱数の生成と利用方法
- 入力のエラーチェックの方法
- 算数の問題を自動生成するアルゴリズム
ゲームを実行するための環境構築がまだの方は「C++を実行するための環境構築|初心者でも簡単!(Windows)」をご覧ください。
コード一覧
下記のコードをコピーしてVisual Studioで実行してみてください。
実行方法がわからない方は「C++でプログラムを動かしてみよう!」をご覧ください。
※コード欄にカーソルを当てると右上にコピーボタンが表示されます。
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
// 乱数のシードを初期化
std::srand(std::time(0));
int numQuestions = 5; // 出題する問題数
int correctAnswers = 0; // 正解数
for (int i = 0; i < numQuestions; i++) {
int num1 = std::rand() % 10 + 1; // 1から10までの乱数
int num2 = std::rand() % 10 + 1; // 1から10までの乱数
char operators[] = { '+', '-', '*' }; // 除算を除外
char op = operators[std::rand() % 3]; // ランダムに演算子を選択
int correctAnswer;
switch (op) {
case '+':
correctAnswer = num1 + num2;
break;
case '-':
correctAnswer = num1 - num2;
break;
case '*':
correctAnswer = num1 * num2;
break;
}
while (true) {
std::cout << "問題 " << i + 1 << ": " << num1 << " " << op << " " << num2 << " = ?\n";
double playerAnswer;
std::cin >> playerAnswer;
// 入力エラーチェック
if (std::cin.fail()) {
std::cin.clear(); // エラー状態をクリア
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 改行文字が出現するまで入力を無視
std::cout << "無効な入力です。整数を入力してください。\n";
continue;
}
// 小数点チェック
if (playerAnswer != static_cast<int>(playerAnswer)) {
std::cout << "無効な入力です。整数を入力してください。\n";
continue;
}
if (static_cast<int>(playerAnswer) == correctAnswer) {
std::cout << "正解!\n";
correctAnswers++;
}
else {
std::cout << "不正解。正しい答えは " << correctAnswer << " です。\n";
}
break;
}
}
std::cout << "あなたの正解数は " << correctAnswers << " / " << numQuestions << " です。\n";
return 0;
}
コード解説
インクルードステートメント
#include <iostream>
#include <cstdlib>
#include <ctime>
これらの行は、プログラムが必要とする標準ライブラリをインクルードしています。
<iostream>
は入出力ストリーム<cstdlib>
は一般的なユーティリティ関数(この場合は乱数生成)<ctime>
は時間関連の関数
メイン関数の開始:
int main() {
main
関数は、C++プログラムのエントリーポイント(開始点)です。この関数内にプログラムの主要な動作を記述します。
乱数の初期化:
// 乱数のシードを初期化
std::srand(std::time(0));
この行は、乱数生成器のシード(開始点)を現在の時間に設定します。これにより、プログラムを実行するたびに異なる乱数が生成されます。
問題の出題と正解のチェック:
int numQuestions = 5; // 出題する問題数
int correctAnswers = 0; // 正解数
for (int i = 0; i < numQuestions; i++) {
int num1 = std::rand() % 10 + 1; // 1から10までの乱数
int num2 = std::rand() % 10 + 1; // 1から10までの乱数
char operators[] = { '+', '-', '*' }; // 除算を除外
char op = operators[std::rand() % 3]; // ランダムに演算子を選択
int correctAnswer;
switch (op) {
case '+':
correctAnswer = num1 + num2;
break;
case '-':
correctAnswer = num1 - num2;
break;
case '*':
correctAnswer = num1 * num2;
break;
}
このfor
ループは、指定された数の問題を出題します。各問題では、2つの乱数(num1
とnum2
)が生成され、ランダムに選ばれた演算子(op
)を使用して算数の問題が作成されます。その後、ユーザーからの回答(playerAnswer
)が正解(correctAnswer
)と一致するかどうかをチェックします。
入力のエラーチェック:
while (true) {
std::cout << "問題 " << i + 1 << ": " << num1 << " " << op << " " << num2 << " = ?\n";
double playerAnswer;
std::cin >> playerAnswer;
// 入力エラーチェック
if (std::cin.fail()) {
std::cin.clear(); // エラー状態をクリア
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 改行文字が出現するまで入力を無視
std::cout << "無効な入力です。整数を入力してください。\n";
continue;
}
このif
文は、ユーザーからの入力が無効(例えば、数値ではない)場合にエラーメッセージを表示します。その後、std::cin.clear()
とstd::cin.ignore()
を使用して、エラー状態をクリアし、次の入力を待ちます。
小数点のチェック:
// 小数点チェック
if (playerAnswer != static_cast<int>(playerAnswer)) {
std::cout << "無効な入力です。整数を入力してください。\n";
continue;
}
このif
文は、ユーザーからの入力が整数でない(つまり、小数点が含まれている)場合にエラーメッセージを表示します。
正解数の表示:
if (static_cast<int>(playerAnswer) == correctAnswer) {
std::cout << "正解!\n";
correctAnswers++;
}
else {
std::cout << "不正解。正しい答えは " << correctAnswer << " です。\n";
}
break;
}
std::cout << "あなたの正解数は " << correctAnswers << " / " << numQuestions << " です。\n";
return 0;
}
最後に、ユーザーが正解した問題の数(correctAnswers
)と出題された問題の総数(numQuestions
)を表示します。
このコードは、C++の基本的な概念(変数、ループ、条件文、乱数の生成など)を使用しています。これらの概念を理解することは、C++や他のプログラミング言語を学ぶ上で非常に重要です。このコードを通じて、これらの概念がどのように動作するかを見ることができます。
まとめ
コードの流れは以下の通りです:
- 乱数のシードを初期化
- 指定された数の問題を出題
- ユーザーからの回答が正解と一致するかチェック
- 入力が無効(例えば、数値ではない)場合にエラーメッセージを表示
- ユーザーが正解した問題の数と出題された問題の総数を表示
このゲームを作成することで、以下のような学びが得られます。
- C++の基本的な概念の理解と実践
- 乱数の生成と利用方法の理解
- 入力のエラーチェックの方法の理解
- 算数の問題を自動生成するアルゴリズムの理解
このゲームは、C++の基本的な概念を理解し、実践する絶好の機会です。また、乱数の生成と利用、入力のエラーチェック、算数の問題を自動生成するアルゴリズムなど、プログラミングの重要なスキルを身につけることができます。このゲームを通じて、プログラミングの楽しさとその可能性を体験してみてください。
ゲームを実行するための環境構築がまだの方は「C++を実行するための環境構築|初心者でも簡単!(Windows)」をご覧ください。
コメント