2014 ソフトウェア設計及び演習用の班Wiki
gr03:敵モジュール
enemy.h
#include<time.h> #include<gtk/gtk.h> #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);
関数説明等
enemyTimerStart
コメントにある通り、気絶した時(HP=0)になっときに状態タイマ(enemy.c内の構造体AI型の2次元配列のaiのメンバーkizetuTimer)をスタートさせる関数。引数は気絶した敵配列番号。
collectEnemy
回収された時に状態変数(Enemy.status)を書き換える(2->0)関数。気絶状態の敵が自機と接触したらこの関数が呼び出され気絶状態から回収済み状態にする。たったそれだけの操作をする関数。他のモジュールに敵モジュールのデータをいじらせたくなかったため作成。
enemyAI
敵4種をそれぞれ動かす関数。
enemyAIで使う関数
- Edirect関数 向く方向を決めるだけの関数。下記の図のように決定する。
- GunRunMoveVector関数 gunner(それなり動きながら弾を撃ってくる奴)とrunner(近づいてくるだけの奴)と進行方向ベクトル(ai.xsv&ysv)を決定して座標を動かす。実際の動かすのはEmove。基本的にこいつらは近づくだけで、そこに少しランダムに少しぶれる。自機と遠いと近い時より比較的大きくぶれる。この関数が呼びされるたびに進行方向ベクトルを再設定するわけではなく、これは自機が敵から逃げやすくするためである。ai.cmでカウントし、maxcm回までカウントしたら再設定する。
- Emove関数 進行方向ベクトル(aa.xsv&ysv)を基に実際に座標を動かす。壁にぶつかった場合は壁沿いに進むように進行方向ベクトルを再設定する。
- Eback関数 自機が一定範囲内におらず、ダメージを一定時間受けていない場合は所定の位置に戻る(runnerは例外)。この関数で戻る場合の進行方向ベクトルを決定する。
- Eshot関数 敵と自機の位置から方向を決め撃つ。ある程度遠くを狙うと大きくぶれる。
- Ehoming関数 ボスのみが使う関数。ホーミング弾を生成。
- Esummon関数 ボスのみが使う関数。ボスの周りに雑魚敵を召喚する。
- BossMoveVector関数 ボスのみが使う関数。ボスを進行方向を決定して動かす。
最終更新日:2015/02/17 18:10:28