20体の勝手に動いてくれるものがいるとして
それらどうしを闘わせるために一番近いものをロックオンしたい
そういうときにはどういうふうに書いていけばいいでしょうか。
とりあえず1→20の索敵をして2番目に近いもののフラグを立てればいいのか・・・
1→19をしてから一番近いのもありですかね・・・
うまく思いつきません・・・
「一番近いもの」というもののコードの書き方もよくわかりません
ご教授お願いします
開発環境
Visual C++
DXライブラリ
敵が一番近くの敵をロックオンするにはどうしたらよいのか
Re: 敵が一番近くの敵をロックオンするにはどうしたらよいのか
何を言わんとしたいのかは伝わってきますが
もう少し分かりやすいように言葉を選んでくれると答えるほうとしても嬉しいですね
それに開発に使う言語などの情報を書いておくのも、一応フォーラムのルールにあったはずです(推奨事項だったかもしれませんが)
で、本題ですが
一番近い敵を探すなら、自分以外の全員を順番に調べて行くしかないでしょう
おっしゃる通りに、ループ処理で配列の最初から最後まで調べて行くのが良いですね
自分と相手との距離を求める方法に関してですが
C言語ならばsqrt関数と中学校3年生程度の数学の知識があれば求めることが出来ます
具体的には三平方の定理、ですね
もう少し分かりやすいように言葉を選んでくれると答えるほうとしても嬉しいですね
それに開発に使う言語などの情報を書いておくのも、一応フォーラムのルールにあったはずです(推奨事項だったかもしれませんが)
で、本題ですが
一番近い敵を探すなら、自分以外の全員を順番に調べて行くしかないでしょう
おっしゃる通りに、ループ処理で配列の最初から最後まで調べて行くのが良いですね
自分と相手との距離を求める方法に関してですが
C言語ならばsqrt関数と中学校3年生程度の数学の知識があれば求めることが出来ます
具体的には三平方の定理、ですね
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
Re: 敵が一番近くの敵をロックオンするにはどうしたらよいのか
わかりにくい質問で申し訳ありませんでした。
とりあえず書いてみましたがこの先はどうしたらよいでしょう。また、このやり方はあっているのでしょうか?
大きさを比べていくには順番に比べていくのがいいですか?なにかいい方法があれば教えてください。
ほかのソースをはるのが面倒くさいので重要そうなところだけ抜き出します。
平方根につっこむ意味がわからないのですが、必要あるのでしょうか?
2乗した形でも大小が比較できるような気がしますが・・・
とりあえず書いてみましたがこの先はどうしたらよいでしょう。また、このやり方はあっているのでしょうか?
大きさを比べていくには順番に比べていくのがいいですか?なにかいい方法があれば教えてください。
ほかのソースをはるのが面倒くさいので重要そうなところだけ抜き出します。
typedef struct
{
double x,y;
double hp;
int flag;
double angle;
double lockx,locky;
int frd;
double distance[20];
}AI1_t;
AI1_t Enemy[20];
void enemylockon()
{
for(int i=0;i<20;i++)
if(Enemy[i].flag==1)
for(int j=0;j<20;j++)
if(Enemy[j].flag==1)
Enemy[i].distance[j]=((Enemy[i].x-Enemy[j].x)*(Enemy[i].x-Enemy[j].x)+(Enemy[i].y-Enemy[j].y)*(Enemy[i].y-Enemy[j].y));
}
2乗した形でも大小が比較できるような気がしますが・・・
Re: 敵が一番近くの敵をロックオンするにはどうしたらよいのか
ないでしょうね。その通りですなにがし さんが書きました:平方根につっこむ意味がわからないのですが、必要あるのでしょうか?
2乗した形でも大小が比較できるような気がしますが・・・
ところでdistanceを20個保管しておく必要があるのでしょうか?
(別のところで利用するのでしたらごめんなさい)
敵の番号が0~19で管理されているのであれば、
各個体が
①「その個体から現在までに調べた他の個体への最短の距離」
と
②「最短距離となる個体番号」
を記録するような処理を記述し、
新たに別の個体までの距離を調べたときに
その個体までの距離が現在記録されている最短距離よりも短ければ
①と②を更新し、全部調べおわった時の②の個体番号をロック対象とすればよいのではないのでしょうか?
ただロック対象を探すだけならば①「その個体から現在までに調べた他の個体への最短の距離」
これも構造体の変数にする必要がないと思います
ちなみにコードを改善しようと思うのでしたらn^2乗回調べなくても、
総あたりで調べるのなら個体数nに対しn(n-1)/2回調べれば済みます。
(リーグ戦の表を考えてみてください)
あとこのコードのまま行くとしてもi=jなら外すことも必要かと
Re: 敵が一番近くの敵をロックオンするにはどうしたらよいのか
あぁ、別にそこまで正確な距離を求めなくても
大小の比較が正確にできればそれで良いのですね
これは失礼しました
大小の比較が正確にできればそれで良いのですね
これは失礼しました
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
Re: 敵が一番近くの敵をロックオンするにはどうしたらよいのか
だいぶ返信が遅れてしまいました。申し訳ございません。
周りに何機いるかでも分岐したいので20個分(19?)用意したいです。
その場合もひとつづつ比べていく方法でいけますかね・・・?
もっといいやり方はあったり・・・しませんか
周りに何機いるかでも分岐したいので20個分(19?)用意したいです。
その場合もひとつづつ比べていく方法でいけますかね・・・?
もっといいやり方はあったり・・・しませんか