Column
ハイ・アンド・ローを作る 第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度しかありません。 次回は「反復」を活用して、プレイヤーが何度も数値を入力できるようにしてみましょう。