龍神録のボスについて

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

龍神録のボスについて

#1

投稿記事 by aguroq » 12年前

初投稿になります。

現在、こちらの龍神録を参考にC言語、また、考え方などを勉強しています。

そこで、とりあえずはプレイしてみよう・・・と思い、一括でファイルをダウンロードして、BGMまでついている状況である48章を実行してました。
(なぜ完成形をダウンロードしなかったかについては触れないでください。)

普通にプレイしてたのですが、1つ、疑問がわいてきました、というより、ここの設定だけ直したいという箇所がありました。

それは、「ボスのHPが0にならなくても一定時間を過ぎると死んでしまう」というところです。

弾幕を避けまくって攻撃しないでいたら、勝手に死んでしまい、次の弾幕に移ってしまいました。

龍神録のボスの章の説明を見たのですがわかりませんでした・・・
初心者故に理解できないところも所々ありました。

そこで、皆さんに、僕の疑問に思ってる(直したいと思っている)箇所は、どのcppファイル、またhファイルに記述されていて、どのような仕組み(引数などの引き渡しがあればですが・・)になっているか、教えてください。

「ボスのHPが0になるまで勝手に死なない」ようにしたいのです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 龍神録のボスについて

#2

投稿記事 by softya(ソフト屋) » 12年前

そんなに難しいところとは思えませんので、C言語やゲームプログラミングを勉強したいのなら自分で調べるべきだと思います。
ちなみに、今死ぬ条件は理解されていますか? 45章の赤い部分のコメントを読んで見てください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

aguroq

Re: 龍神録のボスについて

#3

投稿記事 by aguroq » 12年前

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

すみませんが本当にわかりません。

おそらくここのことを言っているのだとは思うのですが

コード:

 se_flag[1]=1;//敵のピチュリ音
                se_flag[11]=1;
                input_phy(30);//30カウントで定位置に戻す
                memset(&boss_shot,0,sizeof(boss_shot_t));//ボスの弾幕情報を初期化
                memset(&lazer,0,sizeof(lazer_t)*LAZER_MAX);//ボスのレーザー情報を初期化
                flash.flag=0;//フラッシュを消す
                if(boss.knd==boss.danmaku_num[0] || boss.knd==boss.danmaku_num[1]){//弾幕をだしきったら
                        boss.flag=0;//消す
                        enter_dn(10,40);//(45)ドガーン処理
                        se_flag[9]=1;//ボスが死んだ音
                        return ;
                }
                else
                        enter_boss(1);//次の弾幕を登録
ここにある「boss.danmaku_num[]」というやつで、たくさん作った弾幕からどれを出すか決めるのだと思うのですが、

例えばfunc.hの中の登録した弾幕の0番目(最初)がdanmaku001で1番目がdanmaku002だとします。以下どんどん書いていく(003,004・・・)
そしてini.cppで決めたboss.danmaku_num[0](ここでは中ボスの場合)に1と入れれば、0番目と、1番目の2つが登録されて・・・
まず0番目の弾幕を出してHPが0になったら消滅音がなって次の弾幕にいって、登録した最大の数(ここでは1(正確には2番目の弾幕))をうってる最中にHPが0になったらボスが消えるということを意味していると理解してしまったのですが・・・・

僕が聞きたいのは、1つ目の弾幕は、弾幕を作成した際にdefineで設定した周期の間隔で弾幕を出しますよね、しかし、ずっと避けていて、何もしないとHPが0にもなっていないのに消滅音がなり、HPも再びセットされて、次の弾幕になってしまうのを直してみたいのです。


自分で調べるべきとか、言われてしまいますと、ただ、勉強前にやってみたいだけなのにそれで何日もかかってしまいます。C言語は本もしっかり買って、それも参考にしながらやっています。

章で言えば、ボスの設置なんてまだまだ先です・・・ただ、遊びたくて、そこの値だけを直してしまえばいいので、どこをどのように直せばいいのか教えてください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 龍神録のボスについて

#4

投稿記事 by softya(ソフト屋) » 12年前

ここの処理に詳しくないので、aguroqさんの意図する通りに直る保証はできませんが
ちょっと勘違していた部分も合わせて説明します。
赤い部分のちょっと上のところみたいです。
if(boss.state==2 && (boss.hp<=0 || boss.endtime<=0)){//弾幕中で体力が無くなったら
ここで終了時間を聞いているので無視すりゃ良んじゃないかと思います。
ただ、全体の整合性が取れるのか保証出来ません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

aguroq

Re: 龍神録のボスについて

#5

投稿記事 by aguroq » 12年前

自己解決したかもしれません!!

少し上にあった、ボスの登録の場所に

コード:

//ボスをセット
void enter_boss(int num){
        if(num==0){//中ボス開始時の時は
                memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//雑魚敵を消す
                memset(shot,0,sizeof(shot_t)*SHOT_MAX);//弾幕を消す
                boss.x=FMX/2;//ボスの初期座標
                boss.y=-30;
                if(stage_count==boss.appear_count[0])//最初なら
                        boss.knd=-1;//弾幕の種類
        }
        boss.phy.flag=1;
        boss.flag=1;
        boss.hagoromo=0;//扇を広げるかどうかのフラグ
        boss.endtime=99*60;//残り時間
        boss.state=1;//待機中状態に
        boss.cnt=0;
        boss.graph_flag=0;//描画フラグを戻す
        boss.knd++;
        boss.wtime=0;//待機時間を初期化
        input_phy(60);//60カウントかけて物理的計算で定位置に戻す
}
boss.endtime=99*60;//残り時間・・・というのがありました・・・おそらくこれが原因だったのかもしれません・・・
ここの値をかえればできるかもしれません!!!

弾幕ごとに時間を変えたかったらini.cppで弾幕数と同じだけの要素数を持つ配列をつくればいいのではないかと思いつきました!!(HPとにたような感じに!!)


一応、解決にしておきます!!
返信してくれた方、ありがとうございます!!!!!!!!

閉鎖

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