ページ 1 / 1
龍神録のボスについて
Posted: 2013年7月22日(月) 11:21
by aguroq
初投稿になります。
現在、こちらの龍神録を参考にC言語、また、考え方などを勉強しています。
そこで、とりあえずはプレイしてみよう・・・と思い、一括でファイルをダウンロードして、BGMまでついている状況である48章を実行してました。
(なぜ完成形をダウンロードしなかったかについては触れないでください。)
普通にプレイしてたのですが、1つ、疑問がわいてきました、というより、ここの設定だけ直したいという箇所がありました。
それは、「ボスのHPが0にならなくても一定時間を過ぎると死んでしまう」というところです。
弾幕を避けまくって攻撃しないでいたら、勝手に死んでしまい、次の弾幕に移ってしまいました。
龍神録のボスの章の説明を見たのですがわかりませんでした・・・
初心者故に理解できないところも所々ありました。
そこで、皆さんに、僕の疑問に思ってる(直したいと思っている)箇所は、どのcppファイル、またhファイルに記述されていて、どのような仕組み(引数などの引き渡しがあればですが・・)になっているか、教えてください。
「ボスのHPが0になるまで勝手に死なない」ようにしたいのです。
Re: 龍神録のボスについて
Posted: 2013年7月22日(月) 12:52
by softya(ソフト屋)
そんなに難しいところとは思えませんので、C言語やゲームプログラミングを勉強したいのなら自分で調べるべきだと思います。
ちなみに、今死ぬ条件は理解されていますか? 45章の赤い部分のコメントを読んで見てください。
Re: 龍神録のボスについて
Posted: 2013年7月22日(月) 16:30
by aguroq
返信ありがとうございます。
すみませんが本当にわかりません。
おそらくここのことを言っているのだとは思うのですが
コード:
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言語は本もしっかり買って、それも参考にしながらやっています。
章で言えば、ボスの設置なんてまだまだ先です・・・ただ、遊びたくて、そこの値だけを直してしまえばいいので、どこをどのように直せばいいのか教えてください。
Re: 龍神録のボスについて
Posted: 2013年7月22日(月) 16:43
by softya(ソフト屋)
ここの処理に詳しくないので、aguroqさんの意図する通りに直る保証はできませんが
ちょっと勘違していた部分も合わせて説明します。
赤い部分のちょっと上のところみたいです。
if(boss.state==2 && (boss.hp<=0 || boss.endtime<=0)){//弾幕中で体力が無くなったら
ここで終了時間を聞いているので無視すりゃ良んじゃないかと思います。
ただ、全体の整合性が取れるのか保証出来ません。
Re: 龍神録のボスについて
Posted: 2013年7月22日(月) 16:49
by aguroq
自己解決したかもしれません!!
少し上にあった、ボスの登録の場所に
コード:
//ボスをセット
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とにたような感じに!!)
一応、解決にしておきます!!
返信してくれた方、ありがとうございます!!!!!!!!