こんにちは、コンジ(@pippi_kon)です。
この記事では、『C言語でのクイズゲームの作り方』をご紹介します。
テキストベースのシンプルなクイズゲームですが、プログラミングの学習にはもってこいだと思っています。
段階を踏んで、徐々に凝ったものに改変していこうと思います。
まずは『基本となる3択形式の問題の出力、および答えの入力・判定』についてです。
今回の目標
今回は初回の記事ということで、まずはクイズゲームのベースとなるシンプルな三択問題の作成を目指します。
以下は今回作成するプログラムの出力結果です。
[第1問]
リンゴは英語で何と言う?
1:apple 2:orange 3:banana
>>> 1
正解!
[第2問]
大正->昭和->○○->令和
○○に入る年号は?
1:慶応 2:明治 3:平成
>>> 2
不正解…
正解は 3:平成 です。
[第3問]
世界三大珍味はどれ?
1:イカスミ 2:キャビア 3:チーズ
>>> 2
正解!
やっていることは以下の通り。
- 問題文および三択内容の表示
- 解答の入力
- 解答の判定
プログラム全文
今回作成したプログラムのご紹介です。
のちほど、プログラムの解説を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#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のエラー回避
1 |
#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.
おまじないと思っていれておきましょう。
問題文の表示
8 9 10 11 |
printf("[第1問]\n"); printf("リンゴは英語で何と言う?\n"); printf("1:apple 2:orange 3:banana\n"); printf(">>> "); |
シンプルにprintf関数で問題を表示しています。
最後の「>>> 」は特に深い意味はなく、単に解答を促している記号です。
今回は直接問題文を表示していますが、次回以降の記事でもっとスマートになるよう改変していく予定です。
解答の入力
12 |
scanf("%d", &ans); |
scanf関数でキーボードの入力を取得します。
今回は「1」「2」「3」(いずれも半角数字)のいずれかの入力を期待しているので、整数型での入力の受け取りを行っています。
しかし、実際は「4」などの数字や、「c」などの文字も入力できてしまいます。
このあたりは次回以降の記事でケアしていきます。
解答の判定
13 14 15 16 17 18 19 |
if (ans == 1) { printf("正解!\n\n"); } else { printf("不正解...\n"); printf("正解は 1:apple です。\n\n"); } |
if文で解答内容のチェックを行っています。
scanf関数で受け取った値…つまり、キーボード入力された値が正しければ「正解!」と表示します。
間違っていたら「不正解…」と表示した後、正解も表示します。
最後に
今回は、『基本となる3択形式の問題の出力、および答えの入力・判定』についてご紹介しました。
とても愚直でシンプルなプログラムですが、次回以降、徐々にパワーアップさせていきます。
では今回はここまで。おつかれさまでした!
(2021/01/20 23:21:17時点 Amazon調べ-詳細)
(2021/01/20 23:21:18時点 Amazon調べ-詳細)