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

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

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

■21087 / inTopicNo.1)  最も近い目標に攻撃する
  
□投稿者/ 正面戦士 -(2008/07/19(Sat) 14:46:22) [ID:TV4dmTbR]
http://syoumen.blog37.fc2.com/
    HN27改め正面戦士です。

    単純に最も近い敵を狙うという思考を敵にやってもらいたくなりました。
    しかし思考が通常の場合“一撃で破壊できる可能性のある攻撃目標を最優先します。”となり、瀕死の少し遠い目標と密接してる元気な目標では瀕死の目標を狙ってしまいます。

    敵ターンに毎回味方の座標を記録して一番近い味方にChangeModeをするという手段が思い浮かびましたが、どういう文を書くべきでしょうか?
    単純思考をしてほしい敵と、味方の座標をX,Yともに減算し、解が0に近いモノを狙うという風にしたらいけるかな? といった程度しか思いつきません。
    何かお勧めの方法などがありましたらよろしくお願いします。
引用返信/返信 削除キー/
■21088 / inTopicNo.2)  Re[1]: 最も近い目標に攻撃する
□投稿者/ 明けの明星 -(2008/07/19(Sat) 16:14:05) [ID:hjqav0M1]
http://etarnalcatacomb.iaigiri.com/
    考え方は間違っていないと思います。
    自分にもそれしか思いつきませんし。
    
    ヘルプのLocalとReturnのページに『ユニット間距離』というサブルーチンが書かれています。
    これをインクルードに書いた上で、
    メインパイロットが特殊能力『単純思考』を持っている場合を対象としたモノが以下です。
    
    *ターン 全 全:
    foreach フェイズ
    	if condition(対象ユニットID,"混乱") = 1 then
    		skip
    	endif
    	if skill(pilotid(対象ユニットID),"単純思考") = 1 then
    		if condition(対象ユニットID,"暴走") = 1 then
    			call 単純思考サブルーチン 対象ユニットID 無差別
    		elseif party(対象ユニットID) != "味方" then
    			call 単純思考サブルーチン 対象ユニットID 通常
    		endif
    	endif
    next
    exit
    
    単純思考サブルーチン:
    local UID = args(1)
    local unit_buf = ""
    local min_buf = 999
    local mode i buf EID
    if args(2) = "無差別" then
    	set mode "全"
    else
    	switch party(UID)
    	case "NPC"
    		set mode "敵 中立"
    	case "敵"
    		set mode "味方 中立 NPC"
    	case "中立"
    		set mode "味方 敵 NPC"
    	endsw
    endif
    for i = 1 to llength(mode)
    	foreach lindex(mode,i) 出撃
    		set EID 対象ユニットID
    		if EID != UID then
    			set buf ユニット間距離(UID,EID)
    			if min_buf > buf then
    				set min_buf buf
    				set unit_buf EID
    			elseif min_buf = buf then
    				if damage(unit_buf) > damage(EID) then
    					set min_buf buf
    					set unit_buf EID
    				elseif damage(unit_buf) = damage(EID) then
    					if random(2) = 1 then
    						set min_buf buf
    						set unit_buf EID
    					endif
    				endif
    			endif
    		endif
    	next
    next
    if unit_buf != "" then
    	changemode UID unit_buf
    endif
    return
    
    以上で問題なく動くと思います。
    混乱状態や暴走状態に対する修正や対ザコ判定等は適宜行って下さい。

引用返信/返信 削除キー/
■21089 / inTopicNo.3)  Re[2]: 最も近い目標に攻撃する
□投稿者/ 正面戦士 -(2008/07/19(Sat) 16:29:09) [ID:TV4dmTbR]
http://syoumen.blog37.fc2.com/
    なんと丁寧な回答、ルーチン本体まで書いてくださるとはありがとうございます。

    確かに宇宙怪獣のサンプルにユニット間距離がありました。
    完全に失念していましたがとりあえずは間違っていないようでしたので安心です。
    必要なところを抜き出すか、またはそのまま使用させていただきます。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -