敵を実装…?

アバター
amehirune
記事: 181
登録日時: 11年前
住所: どっか
連絡を取る:

敵を実装…?

投稿記事 by amehirune » 10年前

// これは、アクションゲーム制作の考察日記です。
// プロットとしていろいろと纏めていますが、まとまってないかもしれません。支離滅裂かもしれません。 

困ってます。今、この上なく困ってます。
最近で、自機の基礎部分は完成させました。なので、次は敵の基礎を作らないといけません。

アクションゲームの敵って、種類がたくさんありますよね。。。
今の自分のゲームでは、約200種類を予定しているわけで。
ってなると、構造体は必須だよなぁ…

敵に必要なデータ構造体は2種類。
・敵リスト。全部で200くらい必要。
・実際に出動する敵。MAXで4まで。

あとは、敵の必要なデータを列挙してみる。
[共通]
・最大体力値
・敵名称
[データ]
・ドロップするアイテム的な奴ら
[バトル]
・実際の体力値
・x、y座標
・状態異常
・行動方法
・攻撃方法
・カウンタ

他にもある気がする。

攻撃方法と行動方法は関数ポインタで…かな。
出現する敵の種類の識別番号を構造体配列の添え字にしちゃえ。

敵のアクションプログラムは…

CODE:

for(int i=0;i<4;i++){
    if(eneno[i]==-1)    continue;
    ene_act[i]();
    ene_att[i]();
}
で、いいのかなぁ。。。

体力判定とかは、主人公の攻撃判定あたりで調べればいいよね…?

頭が痛くなってきたので、ひとまず中断。
そろそろテスト勉強、始めなきゃいけないんだけどなー。
こんな調子じゃ、終わりそうにありません。

アバター
usao
記事: 1889
登録日時: 12年前

Re: 敵を実装…?

投稿記事 by usao » 10年前

>攻撃方法と行動方法は関数ポインタで
となったとして,じゃあその関数の型はどうするのか?という点で悩みますね.
というのは,行動方法毎に知りたい情報とかって異なると思うんです.
で,それを引数で渡すとしたら
「俺は何があろうがとにかく前に進もうとするぜ」なら特に何の引数も要らない(?)だろうけど
「プレイヤキャラとの位置関係によってどうの」だと少なくともプレイヤキャラの位置情報が引数として欲しいはず.
賢い敵は穴があったらジャンプで越すかもしれない.その場合は地形の情報が必要.

…こういうのってどうするんでしょう?
1種類以上の敵が必要とする情報全て(にアクセスするための何らかの手段)を渡す?

アバター
amehirune
記事: 181
登録日時: 11年前
住所: どっか
連絡を取る:

Re: 敵を実装…?

投稿記事 by amehirune » 10年前

usaoさん>
ですよねぇ…
龍神録を参考にSTGを作った時と同様に、int 関数(int no);として、
引数:敵の識別ナンバー、戻り値:アクション状態…としてもいいんでしょうがね。
座標関連はグローバルの構造体を使っているので何とかはなりそうですが。
幸いなのは、エンカウント式のアクションRPGなので、地形がいっつも平らってことですね…

問題なのは攻撃と移動のパターンわけをどうするか…
やっぱりフラグ変数を追加する必要がありそうなんですけど、そんなことしたらいろいろとごちゃりそうで。

ISLe
記事: 2650
登録日時: 14年前

Re: 敵を実装…?

投稿記事 by ISLe » 10年前

usao さんが書きました:「プレイヤキャラとの位置関係によってどうの」だと少なくともプレイヤキャラの位置情報が引数として欲しいはず.
賢い敵は穴があったらジャンプで越すかもしれない.その場合は地形の情報が必要.

…こういうのってどうするんでしょう?
1種類以上の敵が必要とする情報全て(にアクセスするための何らかの手段)を渡す?
キャラと地形など干渉しあう組み合わせを見てる第三者の上位オブジェクトが判定します。
#天の声だとか神様だとかって過去ログに何度も出てきてるんですけどね。

プレイヤキャラの位置情報が欲しかったら、上位オブジェクトに位置を問い合わせます。
プレイヤキャラの実装には直接触れず、あらかじめ用意したインターフェースを使って分離します。
ダミーの位置を返せばプレイヤキャラの実装がなくてもデバッグできるし、嘘の位置を返してパニック状態を演出したりすることもできます。
キャラの実装にまったく手を付けることなしに。

当たり判定も上位オブジェクトが判定し、各キャラは『自分が』どんな振る舞いをすべきか知るだけで良い。
相手がどうとか関係なしに振る舞いだけを定義する。

組み合わせで考えると無駄に量ばかり増えます。
組み合わせを排除すれば1000種類の敵を作るのもたったの10パターンですよ。