物理エンジン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発打てるようにロボットをバージョンアップしよう。
今回はここまで.
以上

コメント