エンジニアとしてデビューしよう。

Column

ハイ・アンド・ローを作る 第2回

ハイ・アンド・ローを作る 第2回

さて、今回は第1回目に続き、ハイ・アンド・ローの制作に挑戦します。

前回はコンピュータが無作為に答えを決定する部分を作成しました。 次はプレイヤーが任意の数値を入力する部分から作成しましょう。

※ キーボード入力を行う関数は様々ありますが、今回はscanfを採用します。

int main(void)
{
int inputNum;
printf("input:");
scanf("%d",&inputNum);
printf("inputNum = %d\n" , inputNum);
return 0;
}

無事にキーボード入力を確認できました。

続いて、答えと入力値を比較します。 本来であれば、不正解の時にヒントを表示しますが、まずは正解/不正解だけを判断してみます。

int main(void)
{
int inputNum;
int answer;
srand( time(NULL) );
answer = (rand() % 100) + 1;
printf("answer = %d\n" , answer);
printf("input:");
scanf("%d",&inputNum);
printf("inputNum = %d\n" , inputNum);
if( answer == inputNum )
{
printf("正解!\n");
}
else
{
printf("不正解\n");
}
return 0;
}

始めてif文が登場しました。 ifの下に続く波括弧の範囲(ブロック)が、条件が正しい時に実行されます。 elseは条件が正しくないときに実行されるブロックになります。

分岐に慣れないうちは、複雑な条件になると難しく感じてしまいます。 そんなときは「複雑な分岐は単純な分岐の組み合わせ」と考えてみましょう。 1度に全ての条件を考えるのではなく、上記のように主となる条件だけ先に動かして確認します。

ここまで動作させることができれば、後は不正解の時にヒントを出すだけですね。 分岐を入れ子にして、ヒントを表示します。

int main(void)
{
int inputNum;
int answer;
srand( time(NULL) );
answer = (rand() % 100) + 1;
printf("answer = %d\n" , answer);
printf("input:");
scanf("%d",&inputNum);
printf("inputNum = %d\n" , inputNum);
if( answer == inputNum )
{
printf("正解!\n");
}
else
{
if( answer > inputNum )
{
printf("答えの方が 大きい です\n");
}
else
{
printf("答えの方が 小さい です\n");
}
}
return 0;
}

これでヒントの表示まで実現できました。

分岐に苦手意識を持っているのであれば、今回実践したように、少しずつ分岐を増やすやり方もお薦めです。 慣れてくると、今回の分岐は以下のように短縮して書けるようになってきます。

if( answer == inputNum )
{
printf("正解!\n");
}else if( answer > inputNum ){
printf("答えの方が 大きい です\n");
}else{
printf("答えの方が 小さい です\n");
}

else if文を使うことで、入れ子が無くなりソースコードがスマートになりましたね。 無理に使う必要はありませんが、入れ子が増えてくると必然的にソースコードが見づらくなってしまうので、知っておきたい文法です。

さて、今のままではプレイヤーが入力するチャンスは1度しかありません。 次回は「反復」を活用して、プレイヤーが何度も数値を入力できるようにしてみましょう。