2014 ソフトウェア設計及び演習用の班Wiki

gr03:敵モジュール         河尻

目的

  • 敵データに対する操作
  • 敵の動きを決定

ヘッダーファイル

//enemy.h

typedef struct {
  int species;           /*敵種*/
  int direction;         /*方向*/
  double x;              /*x座標*/
  double y;              /*y座標*/
  double beforeX;        /*前回のx座標*/
  double beforeY;        /*前回のy座標*/
  int status;            /*状態(0−>回収済み、1−>正常 2−>気絶)*/
  clock_t timer;      /*気絶タイマ*/
  int hp;                /*HP*/
  double r;              /*接触範囲(半径)*/
  int len;               /*配列の長さ*/
}enemy;

/*エリアを移動した時に敵情報を設定する関数。
引数は次のエリア番号、前のエリア番号、敵配列。*/
void enemyEreaChange(int newErea, int oldErea, enemy enemyData[]);

/*ゲーム開始時に敵情報を設定する関数。
引数は敵配列*/
void enemyFirstSet(enemy enemyData[]);

/*状態タイマに応じて状態(status)を書き換える関数。
引数は敵配列。一定時間ごとに呼び出す。*/
void enemyTimer(enemy enemyData[]);

/*気絶した時(HP=0)になっときに状態タイマをスタートさせる関数。
引数は気絶した敵DATA。*/
void enemyTimerStart(enemy *enemyData);

/*回収された時に状態情報(status)を書き換える関数。
引数は回収された敵DATA。*/
void collectEnemy(enemy *enemyData);

/*敵のHPを−1する。ダメージを受けたら呼び出す。
引数は敵DATA、返り値は残りHP*/
int ememyHpDamage(enemy *enemyData);

/*敵の動きを決める関数。
引数はエリア番号、敵DATA、プレイヤ情報。返り値は弾を撃ったか(撃った=1、not=0)
一定時間ごとに呼び出す。*/
int enemyAI(int area, player_chara player);

その他、色々

  • 外に晒す必要のないデータは基本的にstaticでデータ保持(初期データ、AI関連情報)
  • AIについて(今の所のアイデア)
    • ボスはまだ全く考えていない
    • 移動ー>一定時間同じ方向に移動。ガンナー、ヘビーは範囲内に自機がいる時だけ近づき、範囲内にいなければ定位位置に戻る。ランナーはひたすら近づく。
    • 撃つー>常に撃ち続ける。一発撃つごとにクールタイムを挟む。このままだと自機が反撃するの辛そう。改善必要あり。
    • その他に、壁に隠れる、壁に沿って移動、集団AIなど様々な動きが考えられので改善していきたい.......できるかなぁ?


最終更新日:2014/12/10 20:20:19