移動可能範囲、超簡易版とか作ってみた


これ以上作るかどうかも今のところ不明。
しかも、問題になる部分に手をつけていないんで実用性は皆無ー


でもって、まずは動けばいい、ぐらいの適当さでしか作ってないんで汚いですな。
もうちょっと整理してシンプルに書けるとは思う。


とりあえず適当なシナリオにコピペすれば使用可能、なはず。
(Localをほとんど使ってないので変数被りにだけは注意)
==========
ユニットコマンド 範囲確認(超簡略) 全:
出発X = X(対象ユニットID)
出発Y = Y(対象ユニットID)
Center 対象ユニットID
毎座標コスト[出発X,出発Y] = 0
消費移動力[「マップ外」] = 9999

i = 0
Call チェックセット (出発X + 1) 出発Y 対象ユニットID
Call チェックセット (出発X - 1) 出発Y 対象ユニットID
Call チェックセット 出発X (出発Y + 1) 対象ユニットID
Call チェックセット 出発X (出発Y - 1) 対象ユニットID


local j
Local 座標数 調査元x 調査元y
do while (i < Info(ユニット,対象ユニットID,移動力))
# Call 範囲表示
incr i 0.5
if コスト[i] = "" then
skip
endif

標数 = LLength(コスト[i])
for j = 1 to 座標数
調査元x = Lindex(Lindex(コスト[i],j),1)
調査元y = Lindex(Lindex(コスト[i],j),2)
Call チェックセット (調査元x + 1) 調査元y 対象ユニットID
Call チェックセット (調査元x - 1) 調査元y 対象ユニットID
Call チェックセット 調査元x (調査元y + 1) 対象ユニットID
Call チェックセット 調査元x (調査元y - 1) 対象ユニットID
next
Unset コスト[i]


loop

Call 範囲表示
clearpicture
Unset 出発X
Unset 出発Y
Unset i



Unset 消費移動力
Unset 毎座標コスト
Unset コスト


refresh
exit


チェックセット:
#Args(1):X座標
#Args(2):Y座標
#Args(3):対象ユニットID
Local 地形名称
if 毎座標コスト[Args(1),Args(2)] != "" then
return
endif

if Info(マップ,Args(1),Args(2),"地形名") = "" then
地形名称 = 「マップ外」
else
地形名称 = Info(マップ,Args(1),Args(2),"地形名")
if 消費移動力[地形名称] = "" then
Call コストチェック Args(1) Args(2) 地形名称 Args(3)
Endif
Endif
毎座標コスト[Args(1),Args(2)] = i + 消費移動力[地形名称]
コスト[i + 消費移動力[地形名称]] = "$(コスト[i + 消費移動力[地形名称]])($(Args(1)) $(Args(2))) "
return



範囲表示:
#表示だけ。移動はできない。表示範囲の変更もできない


#中央:224,224(pic) = 出発X,出発Y
Local j
Local 表示座標 表示ピクセルx 表示ピクセルy 移動限界

移動限界 = Info(ユニット,対象ユニットID,移動力) //仮設定
#移動限界 = max(10,Info(ユニット,対象ユニットID,移動力))

foreach j in 毎座標コスト
表示座標 = Replace(j,","," ")
表示ピクセルx = (Lindex(表示座標,1) - 出発X + 7) * 32
表示ピクセルy = (Lindex(表示座標,2) - 出発Y + 7) * 32
if (表示ピクセルx >= 0) and (表示ピクセルy >= 0) and (毎座標コスト[j] <= 移動限界) then
paintstring 表示ピクセルx 表示ピクセルy 毎座標コスト[j]
elseif 毎座標コスト[j] > 移動限界 then
paintstring 表示ピクセルx 表示ピクセルy "×"
endif
Next
wait click
clearpicture
return





#
コストチェック:
#移動コストチェック
#消費移動力[地形名] = そのユニットがそのマスに進入する時の消費移動力
#Args(1):地形のX座標
#Args(2):地形のY座標
#Args(3):地形名
#Args(4):ユニットID



#超簡易版。 地上のみ考慮。特殊能力やZOC、ユニットは無視。
#要するにユニットIDの意味ナシ
#ここが複雑でめんどくさい

消費移動力[Args(3)] = Info(マップ,Args(1),Args(2),移動コスト)






return
==========