物理エンジンODEを使い,ゲームを作りながらC言語をマスターすることを目指して連載します。ODEのバージョンは0.13に対応しています。シューティングゲームの2回目です.
今回はswtich文を使ったキーボードによる戦闘機の移動と標的を表示します.
該当するソースコードは次のとおりです.
/* step2 */ /* step2 switch文とキー処理関数 */ #include "dm2.h" #include <time.h> #include <stdlib.h> int fire = 0; // 発射 double start_x = 0.0, start_y = 0.5, start_z = 0.5; // 初期位置 double R[12] = {1,0,0,0, 0,1,0,0, 0,0,1,0}; // 回転行列が格納される配列, 位置(x,y,z)[m] double target[3] = {0.0, 0.0, 0.5}; // 位置(x,y,z)[m] double robot[3] = {start_x, start_y, start_z}; // ロボットの位置 double bullet[3] = {start_x, start_y, start_z}; // 弾の位置; double sides[3] = {1.0, 0.5, 1.0}; // 直方体のサイズ(x, y, z)[m] void command(int cmd) { switch (cmd) { case 'a': robot[0] -= 1.0; if (fire == 0) bullet[0] -= 1.0; break; case 'd': robot[0] += 1.0; if (fire == 0) bullet[0] += 1.0; break; case 'x': robot[1] -= 1.0; break; case 'w': robot[1] += 1.0; break; case 32: fire = 1; break; default: printf("Input %c (%d)\n",(char)cmd, cmd); } } void drawTarget() { int i, j, num =10; for (i = 0; i < num; i++) { dsSetColor(1.0, 0.0, 0.0); // 色の設定 target[0] = 2 * i + start_x - num + 1; // 位置のx成分 target[1] = start_y + 10; // 位置のx成分 target[2] = 0.5; // 位置のz成分 dsDrawBox(target,R,sides); // 直方体の表示 } } void drawBullet() { dsSetColor(0.0, 0.0, 1.0); // 色の設定 dsDrawSphere(bullet,R,0.1); // 直方体の表示 } void simLoop(int pause) { /*** シミュレーションループ ***/ // ロボットの表示 dsSetColor(1.0, 1.0, 0.0); // 黄色 dsDrawSphere(robot, R, 0.5); if (fire) bullet[1] += 0.01; drawBullet(); // 弾の表示 drawTarget(); // 標的の表示 } int main() { /*** main関数 ***/ robot[1] = bullet[1] = start_y - 10; dmLoop(800, 600, simLoop, command); // シミュレーションループ ウインドウの幅,高 return 0; }
ここではswitch文を使ったキー処理の方法を学びます.キーボード入力の処理にswitch文はうってつけです。 ゲームではキーボード入力により弾丸を発射したり,車を操縦しますね.switch文を使って,キーボードからのキー入力を処理する方法を学びます.
switch文とキー処理
新しく登場したのが15行目のcommand関数です.これは,キーボードからのキー入力を引数cmdとして受け取ります.このサンプルプログラムではswitch文を使いキー入力の値に応じて分岐させ違う処理をさせています.aまたはdが入力されるとロボットを表す黄色の球を左または右へ1[m]移動します.wまたはxならロボットを上または下へ1[m]移動させます.
その他のキーを入力するとdefaultにあるprintf文でcmdで入力された文字を表示します. なお、switch文の代わりにif文でもできますが、キー入力が増え分岐が多くなるとswitch文の方がすっきりした読みやすいプログラムを書けます。
では,演習をしながらシューティングゲームを作っていきましょう.
- 演習
- step2-150625.tgzをダウンロードし,実行してください。
- ロボットの形や色を自分な好きに変えよう。
- 弾の発射速度を変更しよう。
- ロボットを左右にキーで動かしても、弾は移動しません。ロボットと弾を同時に動かすように変更しよう。
- 弾が1発しか発射できません。100発打てるようにロボットをバージョンアップしよう。
今回はここまで.
以上
コメント