物理エンジンODEを使い,ゲームを作りながらC言語をマスターすることを目指して連載します。ODEのバージョンは0.13に対応しています。落ち物系パズルゲームの2回目です.
今回はswtich文を使ったブロックのキーボードによる移動,壁を表示します.
該当するソースコードは次のとおりです.
/* step2 */ #include "dm2.h" #include <time.h> #include <stdlib.h> double R[12] = {1,0,0,0, 0,1,0,0, 0,0,1,0}; // 回転行列が格納される配列, 位置(x,y,z)[m] double wall_p[3] = {0.0, 0.0, 0.5}; // 位置(x,y,z)[m] double block[100][3] ; // ブロックの位置 double sides[3] = {1.0, 1.0, 1.0}; // 直方体のサイズ(x, y, z)[m] double start_x = 0.0, start_y = 0.5, start_z = 0.0; // 初期位置 int now = 0; // 現在、操作可能なブロック番号 void command(int cmd) { float xyz; unsigned char key; switch (cmd) { case 'a': block[now][0] -= 1.0; break; case 'd': block[now][0] += 1.0; break; case 'x': block[now][1] -= 1.0; break; case 'w': block[now][1] += 1.0; break; case 32: // blank block[now][1] = -8.5; break; default: printf("Input %c (%d)\n",(char)cmd, 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 - num/2.0; // 位置のx成分 wall_p[1] = j + start_y - num/2.0; // 位置のx成分 wall_p[2] = 0.5; // 位置のz成分 dsDrawBox(wall_p,R,sides); // 直方体の表示 } } } } void simLoop(int pause) /*** シミュレーションループ ***/ { int i; float red = 1.0, green = 0.0, blue = 0.0; // 赤,緑,青成分 static int dir =1; // ブロックの表示 dsSetColor(1.0, 1.0, 0.0); // 黄色 for (i=0; i < now + 1;i++) { dsDrawSphere(block[i], R, 0.5); } // 壁の表示 drawWall(); } int main() /*** main関数 ***/ { int i; block[0][0] = 0.5; block[0][1] = 7.5; block[0][2] = 0.5; srand(time(NULL)); // 乱数の初期化 dmLoop(800, 600, simLoop, command); // シミュレーションループ ウインドウの幅,高 return 0; }
ここではswitch文を使ったキー処理の方法を学びます.キーボード入力の処理にswitch文はうってつけです。 ゲームではキーボード入力によりレーザービームを発射したり,車を操縦しますね.switch文を使って,キーボードからのキー入力を処理する方法を学びます.
switch文とキー処理
新しく登場したのが12行目のcommand関数です.これは,キーボードからのキー入力を引数cmdとして受け取ります.このサンプルプログラムではswitch文を使いキー入力の値に応じて分岐させ違う処理をさせています.aまたはdが入力されるとブロックを表す黄色の球を左または右へ1[m]移動します.wまたはxならブロックを上または下へ1[m]移動させます.
その他のキーを入力するとdefaultにあるprintf文でcmdで入力された文字を表示します. なお、switch文の代わりにif文でもできますが、キー入力が増え分岐が多くなるとswitch文の方がすっきりした読みやすいプログラムを書けます。
では,演習をしながら落ち物系パズルゲームを作っていきましょう.
- 演習
- step2-140626.zipをダウンロードし,実行してください.
- ブロックが壁から飛び出さないようにしましょう.
- ブロックが自動的に下に落ちるようにしましょう.
- ブロックが下の壁に到着したら、新しいブロックを登場させましょう.
- 新しいブロックが古いブロックを通り抜けないようにしましょう。
今回はここまで.
以上
コメント