館14章において

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

館14章において

#1

投稿記事 by yusha » 11年前

コード:

void shot_bullet_H004(int n){
	int t=shot[n].cnt;
	int k;
	if(t>=0 && t<120 && t%20==0){
		double angle=shotatan2(n);
		for(int i=0;i<20;i++){
			if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
				shot[n].bullet[k].knd	=enemy[shot[n].num].blknd2;
				shot[n].bullet[k].angle	=angle+PI2/20*i;
				shot[n].bullet[k].flag	=1;
				shot[n].bullet[k].x		=enemy[shot[n].num].x;
				shot[n].bullet[k].y		=enemy[shot[n].num].y;
				shot[n].bullet[k].col	=enemy[shot[n].num].col;
				shot[n].bullet[k].cnt	=0;
				shot[n].bullet[k].spd	=4;
			}
			se_flag[0]=1;
		}
	}
}
のところでなぜ「angle+PI2/20*i;」という記述で円周状に20発の弾が出るようになるのですか??

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

Re: 館14章において

#2

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

これまでの質問も同じですがわからない所が整理されていない印象です。
1.angle自体の意味がわからない。atan2が理解出来ていない。
2.ラジアン角が分かっていない。PI2/20の意味が不明。
3.式が単にわからない。angle+PI2/20*i;の計算結果が想像できない。
4.sin、cos、tanやatanなど三角関数が意味不明。
ですが、どれでしょうか?
本来はご本人が整理すべき事なんですよ。

【補足】 厳しい言い方っぽくなってしまったので補足します。
怒っているのではなく、こういう考え方をしないと理解するのが困難ですよって事を言いたいだけです。
ただ眺めていたり打ち込むだけでは整理されて頭のなかに再構築されませんので模倣したプログラムを書くことも出来ません。
つまり、勉強が勉強にならない状況が発生します。

yusha さんは熱心に勉強されていると思いますので、うまく整理するすべを身につけてくださいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

yusha

Re: 館14章において

#3

投稿記事 by yusha » 11年前

今までも今回も迷惑ばかりかけて申し訳ありません。

3.angle+PI2/20*i;の計算結果が想像できない。

が該当します。

「angle」と「PI2/20」の意味はそれぞれわかるのですが、「PI2/20」に「i」をかける意味、結果と式の途中にある加算の演算子を使用するとどういう理由があるのかがわかりません。

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

Re: 館14章において

#4

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

for(int i=0;i<20;i++){は分かりますよね。
であれば、angle+PI2/20*iがどういう値のバリエーションを取るか想像できると思います。
値のバリエーションがわかるのに、意味が分からないならPI2/20が持つ意味(=ラジアン角)がよく分かっていない可能性があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

yusha

Re: 館14章において

#5

投稿記事 by yusha » 11年前

「angle」が相手から見た自分の角度で、「PI2/20」で18度と思ってます。であるならば「PI2/20」に変数「i」をかけた値のバリエーションは、
i=0の時、自機から18度ずれた場所
i=1の時、自機から36度ずれた場所
i=2の時、自機から54度ずれた場所
i=3の時、自機から72度ずれた場所



ということになります。

また、「angle+PI2/20*i」においては、「angle」では敵から見た自分の方向。つまり自機狙いであり、そこに先述した「for(int i=0;i<20;i++)」の値を代入された「PI2/20*i」を追加したという解釈で合っているでしょうか??

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

Re: 館14章において

#6

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

言葉の選び方に不安を覚えるのと計算が違っています。
i=0の時、自機から180度ずれた場所角度
0を掛けたら0ですよ。

>また、「angle+PI2/20*i」においては、「angle」では敵から見た自分の方向。つまり自機狙いであり、そこに先述した「for(int i=0;i<20;i++)」の値を代入された「PI2/20*i」を追加したという解釈で合っているでしょうか??

ここの解釈が不安ですね。その結果としてどんな事が起きるの?って視点が欠けています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

yusha

Re: 館14章において

#7

投稿記事 by yusha » 11年前

また計算ミスしてしまいました。

結果は自機狙いをベースに18度ずつ弾が打たれるということで有っていますでしょうか?

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

Re: 館14章において

#8

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

では、プログラムコードと実際の動きのイメージは一致しましたか?

>円周状に20発の弾が出るようになるのですか??

これを例えば15発で円周状とかに書き換えできれば理解したと思って良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

yusha

Re: 館14章において

#9

投稿記事 by yusha » 11年前

コード:

void shot_bullet_H004(int n){
	int t = shot[n].cnt;
	int k;
	if (t >= 0 && t<120 && t % 20 == 0){
		double angle = shotatan2(n);
		for (int i = 0; i<15; i++){
			if (shot[n].flag != 2 && (k = shot_search(n)) != -1){
				shot[n].bullet[k].knd = enemy[shot[n].num].blknd2;
				shot[n].bullet[k].angle = angle + PI2 / 15 * i;
				shot[n].bullet[k].flag = 1;
				shot[n].bullet[k].x = enemy[shot[n].num].x;
				shot[n].bullet[k].y = enemy[shot[n].num].y;
				shot[n].bullet[k].col = enemy[shot[n].num].col;
				shot[n].bullet[k].cnt = 0;
				shot[n].bullet[k].spd = 4;
				se_flag[0] = 1;
			}
		}
	}
}
と書きました。

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

Re: 館14章において

#10

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

正解です。これで小細工できるにようになればなお良いでしょう。
角度が前と後ろで違うとか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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