ページ 11

龍神録のみょん弾幕とかについて

Posted: 2013年5月24日(金) 18:56
by mi_l
現在、C言語の勉強として竜神録をまったくアレンジしないでつくっています。(もちろんみながら)

そして、みょん弾幕と、ミシャグジさま弾幕のところまできたのですが、実行結果と異なってしまいます。

何が違うのかというと、みょん弾幕とミシャグジさま弾幕のページの実行結果は全ての弾が画面外に消えるまで残っていますが、

私の作ったのだと、途中で弾が消えてしまいます。

ためしに、コピペしてやったのですが、結果は同じでした。
エクセルのデータもダウンロードしましたしどこshotH.cpp以外に直すところはあるのでしょうか?

コピペしてできなかったのでコードは載せませんが、他にどのcppファイルが関与しているか教えてください。

Re: 龍神録のみょん弾幕とかについて

Posted: 2013年5月24日(金) 19:27
by Tatu
どういう風に消えるのかが分からないので何が原因かはわかりません。
とりあえず、shot.cppの画面外に出た弾を消す処理の部分を見直してみてはどうでしょうか?

Re: 龍神録のみょん弾幕とかについて

Posted: 2013年5月24日(金) 20:10
by mi_l
返信ありがとうございます。

一応変更点を見つけて直しましたら大丈夫になりましたが、
そこでのコードの質問もあります

問題だったコードはここ!の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文のところで「{}」をつけるかつけないかなのですが、この二つの書き方でどのような違いがあるのでしょうか?

Re: 龍神録のみょん弾幕とかについて

Posted: 2013年5月24日(金) 20:16
by mi_l
すいません、自己解決しました。

お手数かけました。

Re: 龍神録のみょん弾幕とかについて

Posted: 2013年5月24日(金) 20:18
by softya(ソフト屋)
{}の有る無いの違いは大変重要です。
C言語以外のブロック構造を持つ例えばJavaなど多くの言語で同じ痛い目に会います。
大抵の入門書には、はじめに重要と書いてあるはずなのですが。

まぁ簡単に言うとfor文やif文の影響範囲は後ろの1ステートメントか{}の1ブロックだけだと言うことです。
間違っている方のforの影響範囲は直後のif文だけとなります。正解の方は{}なので、カッコが閉じるまでがループ範囲です。