練習問題

サイコロゲーム

1から6までの面を持つサイコロの、どの目が出たか当てるゲームを作りました。 ソースコードのファイル名はdice.cで、ソースコードは以下の通りでした。とりあえずこれを書いてください。コメントは飛ばして良いです。

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
 * stdlib.hはsrand()関数を使うために必要。
 * time.hはtime()関数を使うために必要。
 * srand()関数で乱数の種を設定し、rand()関数で乱数が出せる。
 * 1〜6の数字がほしいので、 rand() % 6 + 1 をしている。
 */

int main(void)
{
        int answer;
        int input = 0;

        srand((unsigned)time(NULL)); // 乱数の種を設定

        answer = rand() % 6 + 1; // answerに1〜6の値をランダムに設定

        printf("--> ");
        scanf("%d", &input);
        if (answer != input) {
                printf("残念!\n");
        } else {
                printf("正解!");
        }

        return 0;
}

問題1. ヒントをあげる

さて、上にあるサイコロゲームですが、正解か不正解かしかわからない、というのは少し不親切です。

入力された値が不正解だった場合、正解の値のほうが大きければ「残念!もっと大きいです。」と、反対に小さければ「残念!もっと小さいです。」と表示するようにdice.cを作り変えてください。

問題2. 何度でも挑戦できるようにする

上のプログラムだと、1度しかゲームに挑戦できませんでした。人生がそうであるように、たった一度の失敗ですべてを終わらせてしまうのはよくありません。

dice.cを、正解するまで何度でも挑戦できるように作り変えてください。

問題3. 正解までの回数を教えてあげる

問題2で、何度でもゲームに挑戦できるようにしましたが、やはり少ない回数で正解できるプレイヤーの方がそうでないプレイヤーに比べて素敵な存在だといえます。

dice.cを、プレイヤーが何回で正解したか教えてあげるように作り変えてください。

問題4. 2つのサイコロを振る

問題4までで、素敵なサイコロゲームが完成しました。でも、出る値が1から6まで、というのは少しつまらないですね。

サイコロを2つ振って、その和を当てるゲームに作り変えてみましょう。ファイル名は、dice2.cとします。(dice.cをコピーしてから作り変えるとよさそうです。)