いちばんやさしいゲームの作り方

文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ

数値の内容によって分岐するためには switch 文を使います。

たとえば enum 型は取りうる値が決まっているデータ型ですが、その正体は数値です。 enum 型変数の内容(数値)によって分岐する際に switch 文は力を発揮します。

typedef enum GameMode {
  Opening,
  GameMain,
  GameOver,
  Ending
} GameMode;

GameMode current = Opening;

switch (current) {
case Opening:
  // オープニングの処理
  break;
case GameMain:
  // メインループの処理
  break;
case GameOver:
  // ゲームオーバー時の処理
  break;
case Ending:
  // エンディングの処理
  break;
}

switch 文には重要なポイントがふたつあります。

  • break を書かないと、その下の行が実行されてしまう
  • switch 句の数値が case に該当しない場合は default: というラベルへジャンプする

実は switch 文というのはラベルジャンプに他ならないのです。ですので、もし break を書き忘れると後に続く処理も実行されてしまいます。これは当然です。プログラムは上から下へ実行されるからです。

switch (current) {
case GameMain:
  // 痛恨の break 書き忘れ
case GameOver:
  // おいおい current が GameMain の時にここも実行されちゃうぞ!?
  break;
}

しかし、 break の書き忘れが常に間違いかというとそうではなく、この動作を逆に利用して「違うラベルで同じ処理をさせる」ことができます。

switch (current) {
case GameStage1:
case GameStage2:
case GameStage3:
  // ステージ1~3の場合の処理
  break;
case GameStage4:
case GameStage5:
case GameStage6:
  // ステージ4~6の場合の処理
  break;
}

また、該当しない場合に default: へジャンプするというのは納得のいく仕様かと思われます。コンピュータを使っているとよく「デフォルト値」とか言うと思いますが、あれです。

switch (current) {
case Opening:
  // オープニングの処理
  break;
case Ending:
  // エンディングの処理
  break;
default:
  // 該当しない債務不履行な処理(債務不履行=デフォルト)
  break;
}

ちなみに if 文でも同じことができるのですが enum 型と連携しての分岐はイディオム的な部分がありますので覚えておきましょう。

Contributions




Trackback URL

メルマガ登録・解除
 
挫折不可能!初級ゲームプログラミング完全マニュアル
RSS track feedいちばんやさしいゲームの作り方 カウンター
ブログSEO対策:track word あわせて読みたい SEO STATUS