SRC質問掲示板Mk2
(現在 過去ログ56 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■10776 / inTopicNo.1)  上下に分割されたフィールドに存在する敵の標的設定
  
□投稿者/ 龍神 -(2003/10/19(Sun) 19:42:31)
     お世話になります。龍神です。
     現在、Y座標、13を境界とした、上下に分割されたマップのシナリオを作成しています。
     境界線を越えて互いのユニットは行き来できない、という設定になっているので、敵のユニットも、それそれ境界から上側に存在するなら上側のプレイヤーユニットを、下側なら下側のプレイヤーユニットを狙うよう設定したいのですが、上手くいきません。
     下記のようにソースを書いたのですが、どこか間違いがあるのでしょうか?

    *ターン 全 敵:
    ############################
    #上と下のフィールド別にターゲットを設定
    ############################
    Foreach 敵
    Set TempID 対象ユニットID
    #現在のターゲット
    Set TempL 999
    #現在のターゲット候補
    Changemode 対象ユニットID 固定

    Foreach 味方
    Set 上下判定値 Eval(((Y(TempID) - 13) * (Y(対象ユニットID) - 13)))
    TALK システム
    $(対象ユニットID)の上下判定値、$(上下判定値)
    END

    If (上下判定値 > 0) then
    SET NTempL Eval((abs(X(対象ユニットID) - X(TempID)) + abs(Y(対象ユニットID) - Y(TempID))))

    If NtempL < TempL then
    Changemode TempID 対象ユニットID
    Set TempL NTempL
    SET TEMPtgt 対象ユニットID
    EndIF
    EndIF
    Next

    TALK システム
    $(TempID)のターゲット、$(Status(TempID,思考モード))
    END

    Next
    Exit

引用返信/返信 削除キー/
■10777 / inTopicNo.2)  Re[1]: 上下に分割されたフィールドに存在する敵の標的設定
□投稿者/ ハク -(2003/10/19(Sun) 20:12:36)
    ハクというものです。
    開発版Helpの「ForEachコマンド」項より抜粋。

    >ForEachのループ内でForEachコマンドを使うことはできません

    これのせいで上手くいかないのではないでしょうか。
    他に原因となりそうなものは見当たりませんでした。
解決済み!
引用返信/返信 削除キー/
■10779 / inTopicNo.3)  実装に関する質問
□投稿者/ 龍神 -(2003/10/19(Sun) 21:19:15)
     ご指摘の程、ありがとうございました。
     ForEachの入れ子って、駄目だったのですね。 見落としていました。
     それでは、実装を行うにあたり、何か良い方法は無いものでしょうか?
     行動終了後ラベルを用いて、無理やり設定できないこともないと思いますが・・・。 なんかスマートじゃないので・・・。

     お知恵がありましたら、どなたかお貸しください。
引用返信/返信 削除キー/
■10786 / inTopicNo.4)  作ってみました。
□投稿者/ ハク -(2003/10/19(Sun) 23:41:53)
    ハクです。作ってみました。
    ・ForEachをForに無理やり変換。
    ・境界線を越えての攻撃を防ぐため攻撃不能も付加。
    ・SET TEMPtgt 対象ユニットID は何なのかわからないので割愛。

    *ターン 全 敵:
    Set 味方の数 0
    ForEach 味方
     Incr 味方の数
     Set 味方X[味方の数] X()
     Set 味方Y[味方の数] Y()
     Set 味方名[味方の数] 対象ユニットID
    Next
    Set 敵の数 0
    ForEach 敵
     Incr 敵の数
     Set 敵X[敵の数] X()
     Set 敵Y[敵の数] Y()
     Set 敵名[敵の数] 対象ユニットID
    Next
    For i = 1 To 敵の数
     Set 最短ユニット間距離 999
     SetStatus 敵名[i] 攻撃不能 -1
     ChangeMode 敵名[i] 固定
     For j = 1 To 味方の数
      If ((味方Y[j] - 13) * (敵Y[i] - 13)) > 0 Then
       ClearStatus 敵名[i] 攻撃不能
       Set 今回のユニット間距離 (Abs(敵X[i] - 味方X[j]) + Abs(敵Y[i] - 味方Y[j]))
       If 今回のユニット間距離 < 最短ユニット間距離 Then
        ChangeMode 敵名[i] 味方名[j]
        Set 最短ユニット間距離 今回のユニット間距離
       EndIf
      EndIf
     Next
    Next
    Exit

    ※Y=13の敵は動作せず。

    もっと簡単にできると思いますがとりあえずこれで動作しますのでこの辺で。
    参考になれば幸いです。では。
解決済み!
引用返信/返信 削除キー/
■10798 / inTopicNo.5)  報告
□投稿者/ 龍神 -(2003/10/20(Mon) 20:41:10)
     わざわざありがとうございました。
     当シナリオにて、動作確認してみましたところ、ちゃんと動作しました。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -