プレイ日記
shoum shoma64
今、タワーディフェンス型(ニャン大的な)ゲームを作っておりまして、どうしてもわからないので、教えてください。 (ニャン大として)タッチしたあと、味方が横に歩いていきます。そして敵とぶつかったら、一番前に位置しているものから攻撃していきますよね?そこで質問なのですが、僕の場合、前に位置しているものではなく、配列変数のそれぞれの番号に攻撃していきます。ちょっと自分でも何いってるかわからないので (画像)公開キーのせておきます。 ニャンだい風に敵を一番前にいるやつにみんなが攻撃してするにはどうしたらいいですか? よろしくお願いします。
6そうだね
プレイ済み
返信[1]
親投稿
すぎのは SUGINOHA
ソースは見ていませんが、敵の配列の中から一番先頭のものを探す処理を攻撃する前に入れたら良いのでは?
0そうだね
プレイ済み
返信[2]
親投稿
shoum shoum0403
一番先頭のもの探す処理か、どのような感じで探したらいいですかね。
0そうだね
未プレイ
返信[3]
親投稿
すぎのは SUGINOHA
配列の数だけループして、先頭の位置の時だけ配列番号と新たな先頭の位置を保持します。ループ終了時に保持されている配列番号が答えです。 AIの初歩なので最初は難しいかもしれません。 ループ 最大取得でググってみてください。いろいろな説明がでてきます。
0そうだね
プレイ済み
返信[4]
親投稿
shoum shoum0403
ループ最大取得とググってみましたが、何も出てきませんでした。どんな命令をつかいますか?
0そうだね
未プレイ
返信[5]
親投稿
shoum shoum0403
こんなことってできますかね? あるスプライトがあるスプライトにあたったとします。そのスプライトにあたった番号を調べることです。 例えばにゃんだいだとしたら、一番最初の敵にあたった猫を調べるという感じです。
0そうだね
未プレイ
返信[6]
親投稿
みなつ tksm372
一番最初の敵のスプライト番号がTに入っているとして、こんな感じでどうかな? H=-1 WHILE 1 H=SPHITSP(T,H+1): IF H==-1 THEN BREAK PRINT H;"とあたってる!" WEND Tとあたっている全てのスプライトについて PRINTのところが実行されるので、PRINTのところに好きな処理に書こう!
0そうだね
プレイ済み
返信[7]
親投稿
すぎのは SUGINOHA
ループと最大取得の間にはスペースが必要です。 配列に位置情報があれば、命令はforとifと代入だけでできます。
0そうだね
プレイ済み
返信[8]
親投稿
shoum shoum0403
みなつさん>>Hという変数は何として考えてますか? みっくさん>>配列に位置情報?もうちょっと詳しくお願いできますか?
0そうだね
未プレイ
返信[9]
親投稿
みなつ tksm372
Hは、Tと衝突しているスプライトの番号を代入する変数と考えてます H=SPHITSP(T,0) とすると、0番目のスプライトから順に検査して、最初にTと衝突しているスプライトの番号がHに入ります で、衝突しているスプライトはまだあるかもしれないので、次は H+1 から再び探します H=SPHITSP(SP,H+1) あとは、これを衝突しているスプライトが見つからなくなるまで繰り返します。見つからなかったときは、SPHITSPは-1を返すので、IFで判別してWHILEループを抜けて、終わりです 1回目は0から探し、2回目以降は前回見つかったHの次から探すのですが、1回目だけ別の処理にするとプログラムがちょっと増えてもったいないので、最初にHに-1を入れてます。そうすると、1回目はH+1が0となるので、ちょうどいいというわけです!
0そうだね
プレイ済み
返信[10]
親投稿
すぎのは SUGINOHA
位置情報が配列に入っていれば、最大、最小いずれかの配列番号をとれば先頭になると思います。
0そうだね
プレイ済み