アルゴリズム…昔はGガンのアルゴを連想していt

僕のはてなダイアリーが、ハクさんという方のアンテナに登録されてることを知って以来、密かにハクさんの日記をヲチしていたのですが、興味をそそられる記事があったので、勝手に言及。しかしトラックバックはしないのが、シャイな僕クオリティ。
で、その興味をそそられた記事というのが、

"全ての味方が誰かとくっついていて、全体としてひとつの塊になっている"
という状態を判定するにはどうしたらいいか…

あとコレ。

こういうのを考えるのが大好き。

うは、かなり気が合うかもっ。(無論、僕が勝手に思ってるだけですががが
んで、"全ての味方が誰かとくっついていて、全体としてひとつの塊になっている"というのを判別するのに、こんなものを作ってみた。

マップコマンド だんごチェック関数起動:
Call だんごチェック
Exit

だんごチェック:
Local Select_UnitID
Local 出撃味方数
UnSet チェック済
UnSet Chain_UnitNum

ForEach 味方 出撃
	Select_UnitID = 対象ユニットID
	Incr 出撃味方数
Next

Talk システム
全出撃ユニット$(出撃味方数)、$(Select_UnitID)が連鎖のスタート
End

Check_Chain Select_UnitID

Talk システム
全出撃ユニット$(出撃味方数)の内、$(Chain_UnitNum)機がだんご状態にあります
End
Return

Check_Chain:
Local Select_UnitID
Incr Chain_UnitNum
Incr チェック済[Args(1)]

# Args(1)の右側
Select_UnitID = Info(マップ,(X(Args(1)) + 1),Y(Args(1)),ユニットID)
If (チェック済[Select_UnitID] = 0) And (Party(Select_UnitID) = "味方") Then
	Check_Chain Select_UnitID
EndIf

# Args(1)の左側
Select_UnitID = Info(マップ,(X(Args(1)) - 1),Y(Args(1)),ユニットID)
If (チェック済[Select_UnitID] = 0) And (Party(Select_UnitID) = "味方") Then
	Check_Chain Select_UnitID
EndIf

# Args(1)の上側
Select_UnitID = Info(マップ,X(Args(1)),(Y(Args(1)) - 1),ユニットID)
If (チェック済[Select_UnitID] = 0) And (Party(Select_UnitID) = "味方") Then
	Check_Chain Select_UnitID
EndIf

# Args(1)の下側
Select_UnitID = Info(マップ,X(Args(1)),(Y(Args(1)) + 1),ユニットID)
If (チェック済[Select_UnitID] = 0) And (Party(Select_UnitID) = "味方") Then
	Check_Chain Select_UnitID
EndIf
Return

※制作時間:10分程
※1/12 17:00 修正
※1/14 15:04 If文に無駄な条件までかませてたのを修正
これは多分本体側のバグだろうけど、"Info(マップ, ...)"系が機能していないようで、まともに動いてくれない。
しかし、再帰関数がSRCでも使えることは確認できたので、このバグが直れば動いてくれると思う…。思う………。
ぁー、だれかバグ報告しないかな。(他力本願
しばらく待って、バグ報告が出てないようなら僕がするしかないか…。

ただの書式ミスが発覚。デバッグも兼ねて修正。ちゃんと動いてくれた。
とりあえず勢いで書いてみた。後悔はしていない。以上。