- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/数当てゲーム へ行く。
数当てゲーム †
これまでに勉強したことを使って、次のような簡単な数当てゲームを作ります。
コンピューターがある数を一つ決め、プレイヤーがその数を当てます。 コンピューターは、プレイヤーが答えた数が正解よりも大きいか小さいかだけを教えます。
考え方 †
プログラムを作るときは、まず、プログラムを書き始める前に、アルゴリズムまたはフローチャートを考えます。
このプログラムは、二つの部分に分けることができます。
- コンピューターがある数(正解)を一つ決める
- プレイヤーが答える
最初の、コンピューターがある数(正解)を一つ決めるところは、計算ゲームと同じように、乱数を使えばできます。 乱数の使い方がわからない場合は、プログラム中に正解の値を自分で指定してもかまいません。
その次の、プレイヤーが答えるところは、これまでに勉強した制御構造(条件分岐と繰り返し)を組み合わせて作ります。
この部分の中心は、ユーザーが答えて、それが正解よりも大きいか小さいかを教えるというものですから、キーボードからの入力と条件分岐を組み合わせると、次のようになります。
- scanf関数でキーボードから入力する
- if文で入力された数と正解を比べる
- 入力された数が正解よりも大きいならば、「大きすぎる」と表示する
- 入力された数が正解よりも小さいならば、「小さすぎる」と表示する
これを、正解が入力されるまで繰り返します。
プログラム †
ここでは、正解は1から100までの整数にします。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int r; srand((unsigned int) time(NULL)); // 乱数のシード r = rand() % 100 + 1; return 0; }
rand関数、srand関数、time関数の使い方については、計算ゲームを復習しましょう。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int r; srand((unsigned int) time(NULL)); // 乱数のシード r = rand() % 100 + 1; while (1) { } printf("正解!\n"); return 0; }
これを実現する方法は、いくつかあります。
まず、最初はwhile文の条件が必ず満たされないようにして、前置判定する方法。
printf("1から100までの整数を入力してください:\n"); scanf("%d", &a); if (a > r) { printf("大きすぎます\n"); } else if (a < r) { printf("小さすぎます\n"); }
次に、無限ループにして、break文で無限ループを中断する方法。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int r, a; srand((unsigned int) time(NULL)); // 乱数のシード r = rand() % 100 + 1; while (1) { printf("1から100までの整数を入力してください:\n"); scanf("%d", &a); if (a > r) { printf("大きすぎます\n"); } else if (a < r) { printf("小さすぎます\n"); } } printf("正解!\n"); return 0; }
最後に、do-while文で、後置判定する方法。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int r, a; srand((unsigned int) time(NULL)); // 乱数のシード r = rand() % 100 + 1; a = -1; while (a != r) { printf("1から100までの整数を入力してください:\n"); scanf("%d", &a); if (a > r) { printf("大きすぎます\n"); } else if (a < r) { printf("小さすぎます\n"); } } printf("正解!\n"); return 0; }