【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
3T

【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#1

投稿記事 by 3T » 15年前

こんにちは。
お世話になります。

テンプレートを使わせていただきます。



[1] 質問文
 [1.1] 自分が今行いたい事は何か
STGにおける敵(・自機弾・敵弾)の行動パターンの記述の仕方について。どのような記述方法がいいのか(適しているのか)

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
1.ソースに直接書くべきなのか
(速度が良い、導入が簡単。反面、調整する毎にコンパイル時間がかかる)
2.BulletMLのような弾幕専用の言語を用いるべきなのか
(行動の記述が楽、調整が楽。反面、導入が難しい(?)、出来ることに制約がかかりそう(?)、速度は未知数)
3.Luaなどのスクリプト組み込みでやるのがいいのか
(最初の導入に苦労しそうだが、出来れば1と2の良いとこ取り?(調整が楽・制約なし。ただし、速度は未知数))
について検討

 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)

 [1.4] 今何がわからないのか、知りたいのか
各方法に長所短所があるとは思われるが、例えばDixqさんの龍神録のようなものを1からそのまま作る場合とすると、どれが一番適切であるか


[2] 環境  
 [2.1] OS : Windows Vista
 [2.2] コンパイラ名 : VC++ 2008

[3] その他
 ・どの程度C言語を理解しているか
龍神録の館の内容は理解できる程度

 ・ライブラリを使っている場合は何を使っているか
DXライブラリ





よろしくお願いします。

Dixq (管理人)

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#2

投稿記事 by Dixq (管理人) » 15年前

3Tさん、こんにちは^^

携帯なので手短ですがカキコします。

何が適切かは知りませんが、私はスクリプトにしてます。
エクセルデータ。
詳しくは龍神録プログラミングの館参照で

ソースに直接かくのはあまりよくないのでは?

読み込みが早いってのは少し誤解なんじゃないでしょうか。
完全に問題にならない時間で読み込めますよ。
後、変更したファイルだけならコンパイルも数秒かと

読み込み用プログラム作るのが面倒かもしれませんが、そこは勉強がてら組んでみては

BulletMLは使った事ないですが、私はなるべくCで書きたいです。
自由度が違いますし。やりたいこと、改造など、Cならなんでも出来ます。ハードルは高くないですし。

1.2の意味が少しわからないのですが、1.4についてはこの3択で回答すべきなんでしょうか?

館をご覧になってるのなら館の方法はダメですか?

3T

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#3

投稿記事 by 3T » 15年前

ご返信ありがとうございます。


確認したいのですが、龍神録のやり方というのは
http://dixq.net/rp/11.html
この辺りですよね?

行動パターンの識別だけを外部データ(この場合はエクセル)というのではなく、行動の中身そのものを外部データ(BulletMLなど)で記述したいと思っております。


>BulletMLは使った事ないですが、私はなるべくCで書きたいです。
自由度が違いますし。やりたいこと、改造など、Cならなんでも出来ます。ハードルは高くないですし。

BulletMLで書ける部分(弾の動きなど)だけは任せ、画像が回転するだとか言ったことはCで記述するようにすれば、自由度は変わらないと思われます。


>1.2の意味が少しわからないのですが、1.4についてはこの3択で回答すべきなんでしょうか?

すいません、書き方が悪かったですね。
この3択以外にも方法があれば、お教えいただきたいです。
また、意味が分かりづらくて申し訳ございません。
もしよろしければ、どこら辺が意味不明なのかお教え下さい。

KEYONN_

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#4

投稿記事 by KEYONN_ » 15年前

unsigned char script[MAX_INST][2]={
{ENEMY_DOWN,32},
{ENEMY_SHOT,1},
{ENEMY_RESET,0}
};

こんな感じで32フレーム下降して、1フレームだけショットを打つみたいなのは
どうでしょうか?

まあ、例としては甘いですが、命令を加えれば高度な処理も出来そうです。

3T

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#5

投稿記事 by 3T » 15年前

確かに、そういうのもありますね。
組み合わせ次第で面白くなりそうです。
参考にさせていただきます。
ありがとうございます。

Justy

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#6

投稿記事 by Justy » 15年前


> 例えばDixqさんの龍神録のようなものを1からそのまま作る場合とすると、どれが一番適切であるか

 龍神録のようなもの、といってもいろいろ違うところはあるでしょうから
どういう STGなのか、ゲームの規模、制作期間、自機・敵機・弾などのゲーム仕様、
それから仮にどの程度の練度の人間を何人アサインできるのか、などによって
変わってきます。

 ただ、どういうものであれ 3Tさんにとって調整が楽であること、
try & errorの効率がいいものがいいでしょう。



> 行動の中身そのものを外部データ(BulletMLなど)で記述したいと思っております

 やろうと思えばエネミーの動きや弾の動きをアプリ上で(アプリの再起動することなしに)
簡単に調整できるようなインターフェースを作るとか、デバッガで変数を変えて
即座に試せるような仕組みを作り、パラメータが確定したらメモして(ファイルに書き出してもいい)、
後でソースに反映する、とかでビルド回数を減らす工夫をすれば十分効率は
良かったりする可能性もありますが、この段階で1のソースに埋め込みは
もう選択肢として無いわけですよね。


 だとするともう必然的に2と3になるわけで。
 そうなると、後はどこまでやりたいのか次第です。
 弾幕の動きだけでいいなら2、それ以外もなら3です(或いは2と3の併用)。

 ただ、2・3どちらも既にお気付きのように慣れるまでに少し時間がかかります。
 慣れていないうちに作り始めると意外なトラップに引っかかることもあるので、
慣れた上でそれに合わせて適切なアプリの設計も必要です。

 そのあたりの余力があるかどうか、ですね。



>> こんな感じで32フレーム下降して、1フレームだけショットを打つみたいなのは
>> どうでしょうか?
> 組み合わせ次第で面白くなりそうです

 機能的に簡易スクリプト「命令+パラメータ」で表現できるなら、csvなどで羅列するだけで
目的は果たせそうです。

 TKOZさんの仰っているように命令を増やせば、(プレイヤーとの距離とかなどの)状況を
アプリ本体に問い合わせてそれを元に分岐して処理を変えることもできますしね。

 ただ、敵の移動とかはいいのですが、弾幕はちょっと厳しい気がするのと
直線・円軌道・ホーミングな単純な移動ではなく、「複雑な計算式による動き」を
どこまで命令として落とし込めるが微妙なところです。

3T

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#7

投稿記事 by 3T » 15年前

> 龍神録のようなもの、といってもいろいろ違うところはあるでしょうから
どういう STGなのか、ゲームの規模、制作期間、自機・敵機・弾などのゲーム仕様、
それから仮にどの程度の練度の人間を何人アサインできるのか、などによって
変わってきます。


もちろん龍神録そっくりに作ることはありませんが、規模やゲーム仕様はほぼ同じと考えていただければと思います。
プログラム自体は私が一人でやることになると思いますが、外部データですと弾幕記述を他の人にも頼みやすいかなと思うところもありますね。



>> 行動の中身そのものを外部データ(BulletMLなど)で記述したいと思っております
> やろうと思えばエネミーの動きや弾の動きをアプリ上で(アプリの再起動することなしに)
簡単に調整できるようなインターフェースを作るとか、デバッガで変数を変えて
即座に試せるような仕組みを作り、パラメータが確定したらメモして(ファイルに書き出してもいい)、
後でソースに反映する、とかでビルド回数を減らす工夫をすれば十分効率は
良かったりする可能性もありますが、この段階で1のソースに埋め込みは
もう選択肢として無いわけですよね。


すいません、本音が出てしまってますね 汗
ソースに記述するのでも、そういう工夫によりビルド回数を減らすことができるなら良いとも思ってます。
色々と考えてみたいと思います、ありがとうございます。

KEYONN_

Re:【質問】敵(・自機弾・敵弾)の行動パターンの記述の仕方【STG】

#8

投稿記事 by KEYONN_ » 15年前

ネットカフェから書き込みです。
自分なら、もう1つ方法が思いつきます。

自作スクリプト言語(インタプリタ)を作る事です。
何故、コンパイラじゃないかというと、作るのが難しいというのもありますが、
なんといっても、テキストファイル(スクリプトファイル)を改変するだけで、
実行できるからです。

char ScriptData[10000][50];
long int PCcounter=0;
とグローバル宣言し、
void LoadScript(char filename[/url])
{
    FILE *fp;…
    fp=fopen(filename,"r");
    …
    fclose(fp);
}
でスクリプトを読み込みます。

void ExecuteScript()
{
    if(strcmp(ScriptData[PCCounte],"MOVE");
    {
    }
    PCcounter++;
}
そして、これで、実行します。
といった、感じで非常にエレガントじゃない方法を使って、
自作アドベンチャーゲームを作っています。参考になればいいです。

閉鎖

“C言語何でも質問掲示板” へ戻る