敵を消す

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

敵を消す

#1

投稿記事 by prg » 17年前

ダンジョンゲームで、銃で敵をうっててきを消したいのですが、消し方がわかりません。
どなたか、教えてください。

バグ

Re:敵を消す

#2

投稿記事 by バグ » 17年前

質問があまりにも漠然とし過ぎです。もう少し具体的に書くべきですよ。
一番簡単な方法は背景グラフィックを上書きして、敵グラフィックを消してしまえばいいのではないでしょうか?

prg

Re:敵を消す

#3

投稿記事 by prg » 17年前

しかし、敵の画像を消すだけだったら、x座標、y座標のデータがまだ存在してしまっているので、
画像もなしにダメージをうけてしまいます。敵のデータ自体をけしてしまう方法はないでしょうか?

tk-xleader

Re:敵を消す

#4

投稿記事 by tk-xleader » 17年前

フラグの活用など、つまり、表示しているかしていないかを示す変数を用意するのです。

管理人

Re:敵を消す

#5

投稿記事 by 管理人 » 17年前

作りかけているゲームで、何か詰まったときに人に聞くのは難しいですよね。
こちらはコードも解らないし、かといって、提示されるには長すぎるしと・・。

ダンジョンゲームだろうと、マリオのファイアーだろうと、やってることはシューティングと同じです。
シューティングと同じ要領でやってみましょう。

簡単にコードを紹介します。
typedef struct{
    int flag,cnt;
    double x,y;
}bullet_t;

で、弾の情報を持った構造体を用意します。
フラグ、出現してからのカウンタ、x,y座標
は最低必要でしょう。

bullet_t bullet[100];

で、100個まで画面に一度に表示できる弾を準備します。

今の瞬間、(x,y)=(100,200)の場所から弾を発射する必要があるとしましょう。その時、

    
for(i=0;i<100;i++){//一度に表示できる弾の数だけ
    if(bullt.flag==0){//使える弾があれば
        bullet.flag=1;//フラグをたてて
        bullet.cnt=0;//フラグをたてて
        bullet.x=100;//フラグをたてて
        bullet.y=200;//フラグをたてて
        break;
    }
}


これで弾情報の登録は終わりです。
他の関数で、常にこれを計算しましょう。
例えば、横に直線で飛んでいくなら、xを増やしていけばいいでしょう。

for(i=0;i<100;i++){//一度に表示できる弾の数だけ
    if(bullt.flag==1){//表示中の弾があれば
        bullet.cnt++;//出現してからのカウンタを増加
        bullet.x+=1;//x座標計算
        break;
    }
}

この時、一緒に「画面外にいったら削除(bullet.flag=0;)」と
「○○カウンタ以上になったら削除」も
計算してやりましょう。


後は描画部で、


for(i=0;i<100;i++){//一度に表示できる弾の数だけ
    if(bullt.flag==1){//表示中の弾があれば
        DrawGraph( bullet[i].x, bullet[i].y, .................);
    }
}


描画してやればOKです。
こうして、
「登録」「計算」「描画」を3つにわけてやりましょう。
ベクターとかご存知でしたらそちら使ったほうが効率的かもしれません。

 
難しく考えないで下さい。
ゲームを作るときのコツは、しっかり関数で仕事を分けてやることです。
それでは頑張ってください。

prg

Re:敵を消す

#6

投稿記事 by prg » 17年前

ありがとうございます。
実はまだ、銃のシステムは完成していないんです。ダンジョンとモンスターはできました。

それで、また質問なのですが、モンスターと接触したときにダメージを受けるようにしたいのですが、
kyorifという差の絶対値を取る関数を作って、8ピクセル分重なったらダメージとし、new_atari_flagと
old_atari_flagをたて、old_atari_flag==0,new_atari_flag==1ならダメージ、old_atari_flag=new_atari_flag
とし、old_atari_flag==1,new_atari_flag==1ならば、ループを抜けるとしたい(ダメージなし)としたのですが、なぜかだぁーーとHPがへってしまいます。どうすればいいのでしょうか?

管理人

Re:敵を消す

#7

投稿記事 by 管理人 » 17年前

敵との接触で一番大事なのが無敵時間です。
どんなゲームでも、何かにあたったら、

・あたったものが壊れて無くなる
・自分が死んでいなくなる
・無敵時間になる

のどれかになると思います。
何か障害物にあたってHPが減る機会があるなら一定の無敵時間というものを作ってみてはどうでしょうか。

無敵時間中は自機がピカピカ光ると思いますが、1/30秒消えて、1/30描いて、を繰り返すと丁度無敵時間にみえますよ。
もし、countというカウンタでループさせてるなら
if(count%2==0)
のとき、描画してやるといいと思います。

prg

Re:敵を消す

#8

投稿記事 by prg » 17年前

とりあえず今はモンスターにあたったら、モンスターを死亡させているのですが、
おかしくはないでしょうか?

管理人

Re:敵を消す

#9

投稿記事 by 管理人 » 17年前

prgさんも夜更かしなのやら早起きなのやら^^;
私は徹夜で研究室篭ってます(_ _|||)

さて、モンスターにあたったら、モンスターが死ぬのなら、無敵時間を作らなくても、モンスターがいないのにHPが減り続けるのでしょうか?
それではモンスターがいることになっているのでは・・。
ちょっとその辺はコードを見ないと解りません。
・・・と言っても、コードを読むの慣れて無いので、長いと見てもわからないかもしれませんが^^;

もしよかったら添付してもらえないでしょうか?
公開に差し支えるようなら直で私宛にメールで送ってもらってもいいですし。
もし自力で、とお思いでしたら、
もう少し詳細に教えてもらえると答えやすいです。

prg

Re:敵を消す

#10

投稿記事 by prg » 17年前

いちおう送らせていただきました

閉鎖

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