アプリケーション開発論[第2回]

■ 変化あるアプリケーションを作る

前回までで、アプリの実行を存続させることまではできると思います。しかし、
main()
{
  while (TRUE) {
    printf("Hello, World.\n");
  }
}
Hello, World.をずっと表示しつづけるだけのつまらないアプリです。文字を表示することを除けばただハングしたプログラムと同じです。これじゃあ全然芸がないっしょ。ここで、変化を持ったアプリを作ることを考えましょう。一般的には、状態を持ってループのたびに変化させるといったことをするでしょう。
void point(int x, int y, int color);
int x = 0;
main()
{
  init_graph();
  while (TRUE) {
    clear();
    point(x, 0, color_white);
    x++;
    if (x >= 640) {
      break;
    }
  }
  end_graph();
}
このプログラムを見れば白い点が右側に移動していくさまが想像できると思います(想像してちょ)。いわゆる、xがアプリの状態を示します。ループのたびに状態を変えていくことで本処理の結果を変化させていくのです。これは実行するコード(point関数)に与えるパラメータを状態としているのですが、今度は実行されるコードそのものを状態で表わすことを導入します。
int mode;
main()
{
  int flag = TRUE;
  mode = 0;
  while (flag) {
    switch (mode) {
    case 0: /* 初期化 */
      init_graph();
      mode++;
      break;
    case 1: /* 本処理1 */
      clear();
      point(x, 0, color_white);
      mode++;
      break;
    case 2: /* 本処理2 */
      x++;
      if (x >= 640) {
        mode = 3;
      } else {
        mode = 1;
      }
      break;
    case 3: /* 終了処理 */
      end_graph();
      flag = FALSE;
      break;
    }
  }
}
さあさあ、ここで戸惑った人もいるんじゃないですか?このプログラムは前のプログラムとほぼ同等の内容なんです。アプリの状態(mode)ごとに、実行するコード(各case文)を振り分けていく構造になっています。これを理解しないと次のステップに進むことはできません。じっくり自分で考えてみてください。この組み方は今後の組み方に大きな影響を及ぼします。実際のプログラムでは、この構造を階層的に適用します。ちなみに、whileで囲まれた部分をゲームプログラミングの世界ではゲームループと呼んでいるようです。

- 2000年3月10日 -

[戻る]