アルゴリズム…昔は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でも使えることは確認できたので、このバグが直れば動いてくれると思う…。思う………。
ぁー、だれかバグ報告しないかな。(他力本願
しばらく待って、バグ報告が出てないようなら僕がするしかないか…。
ただの書式ミスが発覚。デバッグも兼ねて修正。ちゃんと動いてくれた。
とりあえず勢いで書いてみた。後悔はしていない。以上。