!!!enemy.h 8< #include #include #pragma once #define MAXENEMY 10 /*同エリアに存在できる最大敵数*/ #define RUNNER 0 #define GUNNER 1 #define HEAVIER 2 #define BOSS 3 typedef struct { int species; /*敵種*/ int direction; /*方向*/ double x; /*x座標*/ double y; /*y座標*/ double beforeX; /*前回のx座標*/ double beforeY; /*前回のy座標*/ int status; /*状態(0−>回収済み、1−>正常 2−>気絶) int attackSta; /*boss(状態(0->移動 1-> 発射準備、2ー>発射、3ー>雑魚敵召喚準備、 4ー>雑魚敵召喚5ー>梨汁準備、6ー>梨汁放出、*/ int hp; /*HP*/ double r; /*接触範囲(半径)*/ int len; /*配列の長さ*/ }enemy; /*ゲーム開始時に敵情報を設定する関数引数は敵配列*/ void enemyFirstSet(void); /*気絶した時(HP=0)になっときに状態タイマをスタートさせる関数。引数は気絶した敵配列番号。*/ void enemyTimerStart(int num); /*状態タイマに応じて状態変数を書き換える関数。一定時間ごとに呼び出して欲しい。*/ void enemyTimer(void); /*回収された時に状態変数を書き換える関数。引数は回収された敵配列番号。*/ void collectEnemy(int num); /*敵のHPを−1する。引数はダメージを受けた敵の配列番号。返り値は残りHP*/ int ememyHpDamage(int num); /*敵の動きを決める関数。一定時間ごとに呼び出して欲しい。*/ int enemyAI(void); >8 !!!関数説明等 !!enemyFirstSet enemy型グローバル変数Enemyを初期設定する関数。enemy.c内のenemy型2次元配列の値を代入し初期化。 !!enemyTimerStart コメントにある通り、気絶した時(HP=0)になっときに状態タイマ(enemy.c内の構造体AI型の2次元配列のaiのメンバーkizetuTimer)をスタートさせる関数。引数は気絶した敵配列番号。 !!enemyTimer 状態タイマ(aa.kizetuTimer)に応じて状態変数(Enemy.status)を書き換える関数。気絶してから一定時間経ったらHPを少し回復させて復活させる !!collectEnemy 回収された時に状態変数(Enemy.status)を書き換える(2->0)関数。気絶状態の敵が自機と接触したらこの関数が呼び出され気絶状態から回収済み状態にする。たったそれだけの操作をする関数。他のモジュールに敵モジュールのデータをいじらせたくなかったため作成。 !!ememyHpDamage ダメージを受けた敵のHPを−1するだけの関数。できるだけ他のモジュールに敵モジュールのデータをいじらせたくなかったので、たったそれだけの操作でも関数化した。さらにダメージを受けた場合は活性化(ai.kasseikaCount++)させる。ボスの無敵時間の間はHPを減らさない。 !!!enemyAI 敵4種をそれぞれ動かす関数。 !!enemyAIで使う関数 *Edirect関数  向く方向を決めるだけの関数。下記の図のように決定する。 <<{無題図形描画.png} *GunRunMoveVector関数  gunner(それなり動きながら弾を撃ってくる奴)とrunner(近づいてくるだけの奴)と一応bossの進行方向ベクトル(ai.xsv&ysv)を決定する。実際の動かすのはEmove。基本的にこいつらは近づくだけで、そこに少しランダムに少しぶれる。自機と遠いと近い時より比較的大きくぶれる。この関数が呼びされるたびに進行方向ベクトルを再設定するわけではなく、これは自機が敵から逃げやすくするためである。ai.cmでカウントし、maxcm回までカウントしたら再設定する。 *Emove関数  進行方向ベクトル(aa.xsv&ysv)を基に実際に座標を動かす。壁にぶつかった場合は壁沿いに進むように進行方向ベクトルを再設定する。 *Eback関数  自機が一定範囲内におらず、ダメージを一定時間受けていない場合は所定の位置に戻る(runnerは例外)。この関数で戻る場合の進行方向ベクトルを決定する。 *Eshot関数  敵と自機の位置から方向を決め撃つ。ある程度遠くを狙うと大きくぶれる。 *Ehoming関数  ボスのみが使う関数。ホーミング弾を生成。 *Esummon関数  ボスのみが使う関数。ボスの周りに雑魚敵を召喚する。