文字列配列について説明しましたので、それを使ったゲームを作りましょう。
文字列配列が使えるようになると、文字列をいくつも扱えるようになります。
配列に登録しておいた英単語をランダムで表示することで、タイピングソフトのようなものが作れそうです。
まずは文字列配列answerを作り、英単語を登録しましょう。
サンプルでは、5つの単語を登録します。
#defineでMAX_WORDを5、MAX_STRINGで10を設定します。
※MAX_STRINGが10ということは、半角文字で9文字までの単語しか使えないということです。
初期値として次の5つの単語を設定します。
"orange" "apple" "grape" "banana" "peach"
また、乱数を使いますので、種を設定するところまで作っておきましょう。
解答例です。
<sample program 098-01>
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_WORD 5 #define MAX_STRING 10 int main(void) { char answer[MAX_WORD][MAX_STRING] = { "orange", "apple", "grape", "banana", "peach", }; srand((unsigned int)time(NULL)); return 0; } |
この配列の中からランダムで英単語を表示するため、0から4までの乱数が必要です。
int型の変数indexを作成し、乱数を設定してください。
解答例です。
<sample program 098-02>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_WORD 5
#define MAX_STRING 10
int main(void)
{
char answer[MAX_WORD][MAX_STRING] = {
"orange",
"apple",
"grape",
"banana",
"peach",
};
int index;
srand((unsigned int)time(NULL));
index = rand() % MAX_WORD;
return 0;
}
|
単語が5つなので、MAX_WORDを使って乱数を計算します。
次に、計算したindexを添え字に使って配列answerの該当する単語を表示してください。
解答例です。
<sample program 098-03>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_WORD 5
#define MAX_STRING 10
int main(void)
{
char answer[MAX_WORD][MAX_STRING] = {
"orange",
"apple",
"grape",
"banana",
"peach",
};
int index;
srand((unsigned int)time(NULL));
index = rand() % MAX_WORD;
printf("%s\n", answer[index]);
return 0;
}
|
<実行結果>
orange 続行するには何かキーを押してください・・・
実行する度に異なる単語が表示されることを確認してください。
後は入力し、単語が同じかどうか調べれば良いですね。
入力用の配列はinputにしましょう。
<実行結果>
orange orange 正解! 続行するには何かキーを押してください・・・
<実行結果>
orange apple 不正解 続行するには何かキーを押してください・・・
このように作成してください。
解答例です。
<sample program 098-04>
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define MAX_WORD 5 #define MAX_STRING 10 int main(void) { char answer[MAX_WORD][MAX_STRING] = { "orange", "apple", "grape", "banana", "peach", }; char input[MAX_STRING]; int index; srand((unsigned int)time(NULL)); index = rand() % MAX_WORD; printf("%s\n", answer[index]); scanf("%s", input); if (strcmp( input, answer[index]) == 0) { printf("正解!\n"); } else { printf("不正解\n"); } return 0; } |
<実行結果>
orange orange 正解! 続行するには何かキーを押してください・・・
<実行結果>
orange apple 不正解 続行するには何かキーを押してください・・・
これで基本形は出来ました。
後は、プラスアルファの工夫です。
まずは繰り返しを組み込みましょう。
無限に続いても困りますので、回数を5回と決めます。
#defineでMAX_QUESTIONを5に設定し、5回繰り返すfor文を追加してください。
解答例です。
<sample program 098-05>
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define MAX_WORD 5 #define MAX_STRING 10 #define MAX_QUESTION 5 int main(void) { char answer[MAX_WORD][MAX_STRING] = { "orange", "apple", "grape", "banana", "peach", }; char input[MAX_STRING]; int index; int i; srand((unsigned int)time(NULL)); for (i = 0; i < MAX_QUESTION; i++) { index = rand() % MAX_WORD; printf("%s\n", answer[index]); scanf("%s", input); if (strcmp( input, answer[index]) == 0) { printf("正解!\n"); } else { printf("不正解\n"); } } return 0; } |
<実行結果>
orange orange 正解! grape grapu 不正解 apple apple 正解! peach peach 正解! banana bannaa 不正解 続行するには何かキーを押してください・・・
最後に正解数をカウントし、得点として表示するプログラムを追加しましょう。
正解数はpointというint型の変数を追加してください。
<実行結果>
orange orange 正解! grape grapu 不正解 apple apple 正解! peach peach 正解! banana bannaa 不正解 5問中 3問正解でした。 続行するには何かキーを押してください・・・
解答例です。
<sample program 098-06>
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define MAX_WORD 5 #define MAX_STRING 10 #define MAX_QUESTION 5 int main(void) { char answer[MAX_WORD][MAX_STRING] = { "orange", "apple", "grape", "banana", "peach", }; char input[MAX_STRING]; int index; int i; int point; srand((unsigned int)time(NULL)); point = 0; for (i = 0; i < MAX_QUESTION; i++) { index = rand() % MAX_WORD; printf("%s\n", answer[index]); scanf("%s", input); if (strcmp( input, answer[index]) == 0) { printf("正解!\n"); point++; } else { printf("不正解\n"); } } printf("%d問中 %d問正解でした。\n", MAX_QUESTION, point); return 0; } |
<実行結果>
orange orange 正解! grape grapu 不正解 apple apple 正解! peach peach 正解! banana bannaa 不正解 5問中 3問正解でした。 続行するには何かキーを押してください・・・
この手のソフトは時間を計測するものが多いですが、時間の計り方はまだやっていませんので、正解数を表示させました。
問題数を増やしたり、正解するまで何度も入力させるなど、各自で拡張してみてください。
次回はこのプログラムを少し改良してもらいます。