敵の増加について

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

敵の増加について

#1

投稿記事 by 華穂 » 16年前

華穂です。
ここ数日なぜかこちらのサイトにつながらなくて、焦りましたが、
今日恐る恐る来てみたらまた観覧できるようになってました。
ちょっと一安心。


今日なのですが・・ちょっと、立てていたスケジュールの進行がかなり遅れていて、
このままだと里帰りできないため、気合い入れて作っているのですが・・やっぱり詰まりました。

えと、前にも似たような(?)質問したと思うのですが、敵の出し方です。
クラスで書いています。(というかこの質問・・しましたっけ?)

まずは・・中途半端なソースコードでも・・(所々分からずひとまずおいてたりしてます)。
今回は、雑魚敵のクラスです。



class EZako
{
    int EZako;
int TEZako;
int EZakoX, EZakoY;
double TEZakoX, TEZakoY;
    //↓はあれです・・当り判定で消滅した時の画像のために用意しましたが・・まだ使わんかも。  
     int BotuEZako, BotuTEZako;
     int EZSpeed;
int EZCounter;
int EZLife;
int TEZ_Set;
float Target_angle;

//自機のXY
int ZikiX, ZikiY;

public:
EZako();
void EZ_move();
void TEZ_move();
};

//雑魚的の初期化
EZako::EZako()
{
//座標設定
EZakoX = 640;
EZakoY = GetRand(300);
TEZakoX = 640;
TEZakoY = GetRand(200);
 EZLife = 1;

//敵の早さ
EZSpeed = 3;

//敵のセット(制御的な?)
TEZ_Set = 0;

//画像ロード
EZako[5] = LoadGraph("EZako.bmp");
TEZako = LoadGraph("EZako.bmp");

}

//波敵
void EZako::EZ_move()
{
//毎フレームに5加算
EZCounter += 3;

//雑魚敵の座標を移動している方向に移動
//Y = y方向中心位置 + 振幅 * sin( π/周期 * e.cnt );
EZakoX -= 1;
EZakoY = 100 + 25*sin( PI/100 * EZCounter);

DrawGraph( EZakoX, EZakoY, EZako[5], TRUE);
}

//特攻敵
void EZako::TEZ_move()
{
//もし、特攻Xが320以上ならまっすぐ進む。
if( TEZakoX > 320)
{
TEZakoX -= EZSpeed;
}
//320を過ぎたなら、自分から見た自機の角度を保持して特攻する
else
{
if( TEZ_Set == 0)
{
//自機から見た敵の角度
Target_angle = atan2(TEZakoY - ZikiY, TEZakoX - ZikiX)

TEZ_Set = 1;
}
TEZakoX -= cos(Target_angle) * EZSpeed;
TEZakoY -= sin(Target_angle) * EZSpeed;
}
DrawGraph( TEZakoX, TEZakoY, TEZako, TRUE);
}





です。
ひとまず、今は敵がそれぞれ特攻と波で1体ずつ出ています。
それぞれ名称は違いますが、同じ画像を使用しています。

えと、それで・・今回は少し困ったことが多いのですが・・。



☆問題☆
①敵の体力は設定しているものの、ステージが進むにつれて体力が増えるため、
どうしていいか分からない。

②敵は、最初は8機。2ステ:14機、3ステ:20機、4ステ:40機、5ステ:50機
おり、波と特攻で分かれている(ステ1なら波5・特3)。そこはいいのだが、
これらの数をどうやってステージごとに管理・表示していいかわからない。(ちなみに、
敵は1機倒されるごとに1機増える。(右端からY軸ランダムで出現)

③敵を複数表示するため配列を使い、またそれプラスfor文を使用して敵を
表示したいがうまくいかない。(誰か配列も含め詳しく教えてください)

④③でもし1ステージの敵がそれぞれ表示できても、2ステージからは
どうすればいいのか、アドバイスがほしい。

⑤というか、上記のソースコードではこれらの問題を解決するための
ものがまだ書かれていない・足りていない&あれこれ考えてごちゃごちゃして
手が止まってしまうため、「これとかこのために用意したり、こんな風に使えばいいんじゃね?」
的なアドバイスがほしい。

⑥一応体力など決めてはいるが・・このままの当り判定に関して別のクラスを作ろう
と考えているため、ここで設定しても意味がないような気がするが・・どうでしょう?





が、今のところ困っている雑魚敵の問題です。
てかここで詰まってるとボスで泣きそうな予感がします。
雑魚敵の座標のところで、GetRandを使ってますが、まだ適当に数字を入れているだけです。
(1体しか表示されてないので)本来は画面右端の画面外から画面内に出てくるように設計を立ててます。
というか、座標のX時点で画面内ギリギリ入ってますね、なんか(殴)



なので、どうか詳しいアドバイス・ご指摘・ご指南のほうをよろしくお願いします。

華穂

Re:敵の増加について

#2

投稿記事 by 華穂 » 16年前

上記の投稿、いろいろずれてたりして見にくくなって申し訳ありません。

あと、


//毎フレームに5加算
EZCounter += 3;


と書いて、コメントの数字と実際の数字が違うのはパンチミスです。
『5』ではなく『3』が正しいです。


いろいろと申し訳ありません。

夢夢

Re:敵の増加について

#3

投稿記事 by 夢夢 » 16年前

1.ステージ毎に+α初期HPを加える or 別データに設定しておく。
2.別データに出現データを作る。(csvファイルなどで 出現ステージ,初期X,初期Y,ステージ開始から○カウント後出現するかなどのように記述、読み込んでデータを元に実行する)
3.ステージ数などで敵出現数が変化するので、敵最大出現数を毎回変更する必要がある。
クラスはあまり使ったことがないので、教えることができませんが、
必要敵数生成→値を変更→ステージが終了したら破棄の流れでいいと思います。
当たり判定などは自機と敵機(多数)で行うので、出現している全ての敵と当たり判定をしないといけません。
for(i=0;i<MAX_ENEMY;i++){
   for(ii=0;ii<MAX_P_SHOT;ii++){
     if(自機の弾と敵が当たっていたら){
     //当たった処理
     }
  }
  if(自機と敵が当たっていたら){
  //当たった処理
  }
  //敵の弾も当たり判定
  for(ii=0;ii<MAX_E_SHOT;ii++){
    if(自機と敵の弾が当たっていたら){
    //当たった処理
    }
  }
}

これを毎フレーム確認することになると思います。
(弾が発射しているかを確認する手段・現在出現している敵を確認する手段などの処理も入れる必要があります。)

4~6.一色単に考えず、パーツに分けて関数をつくり、最後につなぎ合わせる方が目で見てわかりやすいと思います。
・CSVファイルに入力したデータを元に敵を動かしてみる。
 ・波敵を1 特攻敵を2と決めて、入力した通りに出現するか
 ・初期座標をCSVに設定して、その場所から出現するか
 ・
・敵をランダム生成して、お互いに当たり判定を作り、ぶつけてみる。(進む方角は360度ランダム、当たったらとりあえず消える・画面外に出たら消える)
・体力を設定し、当たったら体力が減るようにし、体力が0になったら消えるようにする。

一通り作ってしまった後に追加しようとすると、色々不都合が出たりします。
プロットを作り、何が必要なのかを再確認してみるのもいいと思います。

華穂

Re:敵の増加について

#4

投稿記事 by 華穂 » 16年前

返信が遅くなって申し訳ありません、夢夢様!!

なるほど・・そういう流れなら、なんとかなるかもしれませんっ。
助かりました、今日配列を使ってみて、処理をしてみましたが、うまく
いったので、後はステージごとに出すという処理をつくらなければなりませんが・・
なんとか自力で頑張りたいと思います。

夢夢様からのアドバイスも、参考にさせていただきますね!
また、雑魚敵に関してはどうしても最終ステージで50機いる以上構造体を
雑魚敵のクラスで作ることになったため、なんとか・・いけるかなぁと。

いろいろとお世話になって申し訳ありません。
というか、自分が無知すぎるのがはずかしいですが、どうぞこれからもよろしくおねがいします。

閉鎖

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