ODEで学ぶC言語[Step2:switch文]

step2

物理エンジンODEを使い,ゲームを作りながらC言語をマスターすることを目指して連載します。ODEのバージョンは0.12に対応しています。パックマン風ゲームの2回目です.

今回はswtich文を使ったロボット(球)のキーボードによる移動,おばけ(カプセル)の自動移動,壁を表示します.

該当するソースコードは次のとおりです.

/* step2 */
#include "dm2.h"
void command(int cmd)
{
    float xyz;
    unsigned char key;

    switch (cmd)
    {
    case 'a':
        robot_p[0] -= 1.0;
        break;
    case 'd':
        robot_p[0] += 1.0;
        break;
    case 'x':
        robot_p[1] -= 1.0;
        break;
    case 'w':
        robot_p[1] += 1.0;
        break;
    default:
        printf("Input %c\n",(char) cmd);
    }
}

void drawWall()
{
    int i, j, num =20;
    for (i = 0; i < num; i++)
    {
        for (j = 0; j < num; j++)
        {
            if ((i==0) || (i==num-1) || (j==0) || (j==num-1))
            {
                dsSetColor(1.0, 0.0, 0.0); // 色の設定
                wall_p[0] = i  + start_x; // 位置のx成分
                wall_p[1] = j  + start_y; // 位置のx成分
                wall_p[2] = 0.5;           // 位置のz成分
                dsDrawBox(wall_p,R,sides); // 直方体の表示
            }
        }
    }
}

void simLoop(int pause)        /***  シミュレーションループ ***/
{
    float red = 1.0, green = 0.0, blue = 0.0; // 赤,緑,青成分
    static int dir =1;

    // ロボットの表示
    dsSetColor(1.0, 1.0, 0.0);   // 黄色
    dsDrawSphere(robot_p,R, 0.5);

    // おばけの表示
    dsSetColor(0.1, 0.1, 0.1);  // 黒
    dsDrawCapsule(obake1_p, R, 0.5, 0.5);
    if ((obake1_p[0] > 7.5) ||  (obake1_p[0] < -9.5)) dir *= -1;
    obake1_p[0] += dir * 0.01;

    // 壁の表示
    drawWall();
}

ここではswitch文を使ったキー処理の方法を学びます.キーボード入力の処理にswitch文はうってつけです。 ゲームではキーボード入力によりレーザービームを発射したり,車を操縦しますね.switch文を使って,キーボードからのキー入力を処理する方法を学びます.

switch文とキー処理
新しく登場したのが3行目のcommand関数です.これは,キーボードからのキー入力を引数cmdとして受け取ります.このサンプルプログラムではswitch文を使いキー入力の値に応じて分岐させ違う処理をさせています.aまたはdが入力されるとロボットを表す黄色の球を左または右へ1[m]移動します.wまたはxならロボットを上または下へ1[m]移動させます.

その他のキーを入力するとdefaultにあるprintf文でcmdで入力された文字を表示します. なお、switch文の代わりにif文でもできますが、キー入力が増え分岐が多くなるとswitch文の方がすっきりした読みやすいプログラムを書けます。

おばけの移動
次におばけを表す黒いカプセルの動きを説明します.58,59行目でおばけの動きを制御しています.ここでは簡単に左右に動くだけの処理です.

では,演習をしながらパックマン風のゲームを作っていきましょう.

  • 演習

    1. step2-130701.zipをダウンロードし,実行してください.
    2. おばけの移動量を大きくし,壁に衝突したら反対向きに動くように変更しましょう.
    3. おばけを2体(赤,緑)を追加して,上と同様にうごかしましょう.
    4. サンプルプログラムでは外側の壁だけでしたが,これをパックマンを参考に内部にも壁のある迷路を作りましょう.
      • 迷路を表すのに2次元配列を使うと楽できます.

今回はここまで.

以上

コメントを残す

メールアドレスが公開されることはありません。