真だんごチェック
この「真だんごチェック」では、だんご何個分までサーチするかと、一番最初の基点となるユニットを選択できるようにしました。
後は、各だんごを構成するユニット数と、それらのユニットのIDをそれぞれ配列変数に保存してあります。「Check_DANGO:」関数内でならいくらでも参照できますし、「Local Chain_UnitNum」と「Local Chain_Unit」を削除すれば、関数外でも参照できます。(ただし、変数の競合に注意を
「Chain_UnitNum」にユニット数、「Chain_Unit」にユニットIDを格納しています。おまけで抽出方法ものっけてあるのでソース参照。
※1/21 tonkatiさんの指摘を受け、一部修正。ご指摘ありがとうございます。
以下、ソース。
マップコマンド 真だんごチェック関数起動: 真だんごチェック Exit # 書式: Check_DANGO サーチ回数 基点ユニット # サーチ回数を指定しなかった場合、-1を指定した場合、全塊をリストアップ # 指定した場合、指定した数分のだんごをリストアップ 真だんごチェック: Check_DANGO Return Check_DANGO: Local Select_UnitID Local 出撃味方数 Local Loop_Max = Args(1) Local Loop_Num Local DANGO_Num Local Chain_UnitNum Local チェック済 Local i j k Local Chain_Unit Local だんごソート Local Max_Num ForEach 味方 出撃 Select_UnitID = 対象ユニットID Incr 出撃味方数 Next If Args(1) = "" Then Loop_Max = -1 Endif If Args(2) != "" Then Select_UnitID = Args(2) Endif Do Incr Loop_Num Chain_Unit[Loop_Num,0] = Select_UnitID Set チェック済[Select_UnitID] Incr Chain_UnitNum[Loop_Num] For k = 0 to 出撃味方数 If Chain_Unit[Loop_Num,k] = "" Then Break Endif For i = 1 to 2 For j = 1 to 2 Select_UnitID = Info(マップ,(X(Chain_Unit[Loop_Num,k]) + i - j),(Y(Chain_Unit[Loop_Num,k]) + 3 - i - j),ユニットID) If (チェック済[Select_UnitID] = 0) And (Party(Select_UnitID) = "味方") Then Set チェック済[Select_UnitID] Chain_Unit[Loop_Num,Chain_UnitNum[Loop_Num]] = Select_UnitID Incr Chain_UnitNum[Loop_Num] Endif Next Next Next Incr DANGO_Num Chain_UnitNum[Loop_Num] ForEach 味方 出撃 If チェック済[対象ユニットID] = 0 Then Select_UnitID = 対象ユニットID Break Endif Next Loop While (((Loop_Max = -1) Or (Loop_Num < Loop_Max)) And (DANGO_Num != 出撃味方数)) Ask Chain_UnitNum "各だんごのユニット数 一覧" For i = 0 to (Chain_UnitNum[選択] - 1) だんごソート[Chain_Unit[選択,i]] = Nickname(Chain_Unit[選択,i]) Next Ask だんごソート "選択しただんごのユニット 一覧" キャンセル可 For i = 1 to Loop_Num If Chain_UnitNum[i] > Max_Num Then Max_Num = Chain_UnitNum[i] Endif Next Talk システム 全出撃ユニット$(出撃味方数)の内、$(Max_Num)機がだんご状態にあります End Return