だんごチェック2

単純に、「だんごチェック」関数で再帰関数を使ってやっていたことを、ForやWhileによるループで再現しただけです。
結果として、使用する変数は増えましたが、一つの関数内で全ての処理ができるので、他のインクルードの変数との競合の心配が無いです。…しかし、そこはかとなく処理時間が増加しました。
以下がソース。

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

だんごチェック2:
Local Select_UnitID
Local 出撃味方数
Local Chain_UnitNum
Local チェック済
Local ループ済
Local i
Local j
Local New_Checked = 1

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

Set チェック済[Select_UnitID]
Incr Chain_UnitNum

Do While (New_Checked > 0)
  New_Checked = 0
  ForEach Attach In チェック済
    If ループ済[Attach] = 0 Then
      Set ループ済[Attach]
      For i = 1 to 2
        For j = 1 to 2
          Select_UnitID = Info(マップ,(X(Attach) + i - j),(Y(Attach) + 3 - i - j),ユニットID)
          If (チェック済[Select_UnitID] = 0) And (Party(Select_UnitID) = "味方") Then
            Incr Chain_UnitNum
            Set チェック済[Select_UnitID]
            Set New_Checked
          Endif
        Next
      Next
    Endif
  Next
Loop

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

Return

※制作時間35分程。コレに関しては、しっかり時間をかけてデバッグもしたので、動作に問題は無いはず。
やはり、ForEachで参照中の配列変数の要素数をループの中で増やしても、その増やしたものについては参照してくれませんでした。コレさえできてればもっと行数を減らせたのに…。
やっぱり、こういう、何か出されたお題をプログラムにするのって、凄く楽しいですね。あっという間に時間が過ぎていきます。また何かお題を出してくれないかn(ry