授業/C言語基礎/数当てゲーム のバックアップソース(No.1)

*数当てゲーム [#j1e784ae]

これまでに勉強したことを使って、次のような簡単な数当てゲームを作ります。
  コンピューターがある数を一つ決め、プレイヤーがその数を当てます。
  コンピューターは、プレイヤーが答えた数が正解よりも大きいか小さいかだけを教えます。


*考え方 [#e134d110]

プログラムを作るときは、まず、プログラムを書き始める前に、アルゴリズムまたはフローチャートを考えます。

このプログラムは、二つの部分に分けることができます。
+コンピューターがある数(正解)を一つ決める
+プレイヤーが答える

最初の、コンピューターがある数(正解)を一つ決めるところは、[[計算ゲーム>授業/C言語基礎/計算ゲーム]]と同じように、乱数を使えばできます。
乱数の使い方がわからない場合は、プログラム中に正解の値を自分で指定してもかまいません。

その次の、プレイヤーが答えるところは、これまでに勉強した制御構造(条件分岐と繰り返し)を組み合わせて作ります。

この部分の中心は、ユーザーが答えて、それが正解よりも大きいか小さいかを教えるというものですから、キーボードからの入力と条件分岐を組み合わせると、次のようになります。
+scanf関数でキーボードから入力する
+if文で入力された数と正解を比べる
--入力された数が正解よりも大きいならば、「大きすぎる」と表示する
--入力された数が正解よりも小さいならば、「小さすぎる」と表示する

これを、正解が入力されるまで繰り返します。





*プログラム [#k81d93b9]


ここでは、正解は1から100までの整数にします。
#geshi(c){{
  srand((unsigned int) time(NULL));
  r = rand() % 100 + 1;
}}
rand関数、srand関数、time関数の使い方については、[[計算ゲーム>授業/C言語基礎/計算ゲーム]]を復習しましょう。


#geshi(c){{
  printf("1から100までの整数を入力してください:\n");
  scanf("%d", &a);
  if (a > r) {
    printf("大きすぎます\n");
  } else if (a < r) {
    printf("小さすぎます\n");
  }
}}



これを実現する方法は、いくつかあります。

まず、最初はwhile文の条件が必ず満たされないようにして、前置判定する方法。
#geshi(c){{
  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");
}}

次に、無限ループにして、break文で無限ループを中断する方法。
#geshi(c){{
  while (1) {
    printf("1から100までの整数を入力してください:\n");
    scanf("%d", &a);
    if (a > r) {
      printf("大きすぎます\n");
    } else if (a < r) {
      printf("小さすぎます\n");
    } else {
      break;
    }
  }
  printf("正解!\n");
}}

最後に、do-while文で、後置判定する方法。
#geshi(c){{
  do {
    printf("1から100までの整数を入力してください:\n");
    scanf("%d", &a);
    if (a > r) {
      printf("大きすぎます\n");
    } else if (a < r) {
      printf("小さすぎます\n");
    }
  } while (a != r);
  printf("正解!\n");
}}
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS