★ゲームを作ろう4(タイピング1)★


文字列配列について説明しましたので、それを使ったゲームを作りましょう。

文字列配列が使えるようになると、文字列をいくつも扱えるようになります。

配列に登録しておいた英単語をランダムで表示することで、タイピングソフトのようなものが作れそうです。

まずは文字列配列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問正解でした。
続行するには何かキーを押してください・・・

この手のソフトは時間を計測するものが多いですが、時間の計り方はまだやっていませんので、正解数を表示させました。

問題数を増やしたり、正解するまで何度も入力させるなど、各自で拡張してみてください。


次回はこのプログラムを少し改良してもらいます。


次へ

戻る

目次へ