現在、C言語の勉強として竜神録をまったくアレンジしないでつくっています。(もちろんみながら)
そして、みょん弾幕と、ミシャグジさま弾幕のところまできたのですが、実行結果と異なってしまいます。
何が違うのかというと、みょん弾幕とミシャグジさま弾幕のページの実行結果は全ての弾が画面外に消えるまで残っていますが、
私の作ったのだと、途中で弾が消えてしまいます。
ためしに、コピペしてやったのですが、結果は同じでした。
エクセルのデータもダウンロードしましたしどこshotH.cpp以外に直すところはあるのでしょうか?
コピペしてできなかったのでコードは載せませんが、他にどのcppファイルが関与しているか教えてください。
龍神録のみょん弾幕とかについて
Re: 龍神録のみょん弾幕とかについて
どういう風に消えるのかが分からないので何が原因かはわかりません。
とりあえず、shot.cppの画面外に出た弾を消す処理の部分を見直してみてはどうでしょうか?
とりあえず、shot.cppの画面外に出た弾を消す処理の部分を見直してみてはどうでしょうか?
-
mi_l
Re: 龍神録のみょん弾幕とかについて
返信ありがとうございます。
一応変更点を見つけて直しましたら大丈夫になりましたが、
そこでのコードの質問もあります
問題だったコードはここ!のshot.cppの以下の部分でした。
ここを私は以下のように書いていました。
このように書くと弾幕(全ての弾)が途中でパッと消えてしまいます・・・・
違いはfor文のところで「{}」をつけるかつけないかなのですが、この二つの書き方でどのような違いがあるのでしょうか?
一応変更点を見つけて直しましたら大丈夫になりましたが、
そこでのコードの質問もあります
問題だったコードはここ!のshot.cppの以下の部分でした。
//現在表示中の弾が一つでもあるかどうか調べる
for(i=0;i<SHOT_BULLET_MAX;i++)
if(shot[n].bullet[i].flag>0)
return;
if(enemy[shot[n].num].flag!=1){
shot[n].flag=0;//終了
enemy[shot[n].num].flag=0;
}//現在表示中の弾が1つでもあるかどうか調べる
for(i=0 ; i < SHOT_BULLET_MAX ; i++)
{
//表示されてたら
if(shot[n].bullet[i].flag > 0)
return;
//n番目の弾幕を持つ敵のフラグが「オン」でなかったら
if(enemy[shot[n].num].flag != 1)
{
//終了
shot[n].flag = 0;
//オフにする
enemy[shot[n].num].flag = 0;
}
}
}
違いはfor文のところで「{}」をつけるかつけないかなのですが、この二つの書き方でどのような違いがあるのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 龍神録のみょん弾幕とかについて
{}の有る無いの違いは大変重要です。
C言語以外のブロック構造を持つ例えばJavaなど多くの言語で同じ痛い目に会います。
大抵の入門書には、はじめに重要と書いてあるはずなのですが。
まぁ簡単に言うとfor文やif文の影響範囲は後ろの1ステートメントか{}の1ブロックだけだと言うことです。
間違っている方のforの影響範囲は直後のif文だけとなります。正解の方は{}なので、カッコが閉じるまでがループ範囲です。
C言語以外のブロック構造を持つ例えばJavaなど多くの言語で同じ痛い目に会います。
大抵の入門書には、はじめに重要と書いてあるはずなのですが。
まぁ簡単に言うとfor文やif文の影響範囲は後ろの1ステートメントか{}の1ブロックだけだと言うことです。
間違っている方のforの影響範囲は直後のif文だけとなります。正解の方は{}なので、カッコが閉じるまでがループ範囲です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。