再起関数と呼ばれているペイントの塗りつぶしに使うアルゴリズムを使うと解決できると思います(`・ω・)ゞ
上下左右のマスの座標と色を取得し、
自分の色じゃなかったら次の上右下左マス
自分の色じゃなかったら次の上右下左マス
自分の色じゃなかったら次の上右下左マス
という動きを繰り返します。
この繰り返しを再起関数と言うらしいです。
範囲外に出た場合はすべてなかったことにします(´・ω・)
すべて自分の色で突き当たった場合はそれまでに取得したマスを
全部自分の色に変えます。
[BP]
・プレイヤーが踏んだ部分の色をプレイヤー固有の色に変更
・上右下左のマスを順番に色と座標を取得
(再起関数とは別に取得します)
・再起関数の実行
[再起関数内部]
→上右下左のマスを順番に色を取得
→マスの範囲外に突き当たった場合、再起関数の終了
→取得した色とプレイヤー固有の色、検索済み色を比較
・プレイヤー固有の色でも検索済みの色でもない場合、
取得できた座標を検索済み用配列と塗用配列へ保存
・マスを検索済み色に変更
→再起関数を再び実行
[関数終了]
・検索終了
・検索済み用配列から色を元のマスの色に変換
・範囲外に1度も突き当たらなかった場合、塗用配列を使い
プレイヤー固有色に塗り替えます。
(配列に何も入っていない場合は隣接マスをプレイヤー固有色に塗り替えます)
・配列の初期化
[BP終わりです]
関数内部で一度コンパイルをすることで自分自身(関数)を呼び出しできるようになります。
よくわからないところがあればコメントください
(*゚∀゚)ノシ