こんにちは、コン(@pippi_kon)です。
この記事では、『C言語でのクイズゲームの作り方』をご紹介します。
テキストベースのシンプルなクイズゲームですが、プログラミングの学習にはもってこいだと思っています。
段階を踏んで、徐々に凝ったものに改変していこうと思います。
まずはクイズプログラムの超基本となる『3択形式の問題の出力、および答えの入力・判定』についてです。
今回の目標
今回は初回の記事ということで、まずはクイズゲームのベースとなるシンプルな三択問題の作成を目指します。
以下は今回作成するプログラムの出力結果です。
やっていることは以下の通り。
- 問題文および三択内容の表示
- 解答の入力
- 解答判定
プログラム全文
今回作成したプログラムのご紹介です。
のちほど、プログラムの解説を行います。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int ans;
printf("[第1問]\n");
printf("リンゴは英語で何と言う?\n");
printf("1:apple 2:orange 3:banana\n");
printf(">>> ");
scanf("%d", &ans);
if (ans == 1) {
printf("正解!\n\n");
}
else {
printf("不正解...\n");
printf("正解は 1:apple です。\n\n");
}
printf("[第2問]\n");
printf("大正->昭和->○○->令和\n○○に入る年号は?\n");
printf("1:慶応 2:明治 3:平成\n");
printf(">>> ");
scanf("%d", &ans);
if (ans == 3) {
printf("正解!\n\n");
}
else {
printf("不正解...\n");
printf("正解は 3:平成 です。\n\n");
}
printf("[第3問]\n");
printf("世界三大珍味はどれ?\n");
printf("1:イカスミ 2:キャビア 3:チーズ\n");
printf(">>> ");
scanf("%d", &ans);
if (ans == 2) {
printf("正解!\n\n");
}
else {
printf("不正解...\n");
printf("正解は 2:キャビア です。\n\n");
}
return 0;
}
プログラムの解説
scanfのエラー回避
#define _CRT_SECURE_NO_WARNINGS
先頭行のこれはscanf関数実行時に出力されるエラーを回避するものです。
この行がなかったらコンパイル時に以下のようなエラーが出力されます。
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
おまじないと思っていれておきましょう。
問題文の表示
printf("[第1問]\n");
printf("リンゴは英語で何と言う?\n");
printf("1:apple 2:orange 3:banana\n");
printf(">>> ");
シンプルにprintf関数で問題を表示しています。
最後の「>>> 」は特に深い意味はなく、単に解答を促している記号です。
今回は直接問題文を表示していますが、次回以降の記事でもっとスマートになるよう改変していく予定です。
解答の入力
scanf("%d", &ans);
scanf関数でキーボードの入力を取得します。
今回は「1」「2」「3」(いずれも半角数字)のいずれかの入力を期待しているので、整数型での入力の受け取りを行っています。
しかし、実際は「4」などの数字や、「c」などの文字も入力できてしまいます。
このあたりは次回以降の記事でケアしていきます。
解答の判定
if (ans == 1) {
printf("正解!\n\n");
}
else {
printf("不正解...\n");
printf("正解は 1:apple です。\n\n");
}
if文で解答内容のチェックを行っています。
scanf関数で受け取った値…つまり、キーボード入力された値が正しければ「正解!」と表示します。
間違っていたら「不正解...」と表示した後、正解も表示します。