ハイ・アンド・ローを作る 第2回
前回はコンピュータが無作為に答えを決定する部分を作成しました。
次はプレイヤーが任意の数値を入力する部分から作成しましょう。
※ キーボード入力を行う関数は様々ありますが、今回は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度しかありません。
次回は「反復」を活用して、プレイヤーが何度も数値を入力できるようにしてみましょう。