Stage06は「ぷよを消す」処理です。
前回から少し時間が空いてしまったので、思い出しつつ進めました。最近は Obsidianでメモを取りながら作業を進める ようにしています。
今回は、自由落下で敷き詰められたぷよを実際に消す処理を実装します。前回と同様にステート遷移に「ぷよを消す」ステートを追加し、その処理を関数として定義していく流れです。
ポイントは、ぷよ同士がつながっているかをどう判定するか。ここは実装者ごとにアルゴリズムが変わりそうですが、今回は本の内容に沿って勉強しました。
「ぷよを消す」処理の流れ
-
最初に探索するぷよを決定する
-
そのぷよをいったん盤から取り除き、退避用の配列に入れる
-
そこから上下左右に同じ色のぷよを探索
-
同じ色のぷよがあれば同じように削除 → 退避配列へ
-
同じ色が見つからなくなるまでこの探索を繰り返す
-
退避配列に4つ以上あれば消去対象、3つ以下なら盤に戻す候補として保存
-
全マス探索後、盤に戻すぷよだけを配置すると「消えた」ようになる
つまり、自由落下 → 連結探索 → 消去 → 再落下 を、消えるぷよがなくなるまで繰り返す仕組みです。
なかなか複雑な処理ですが、ステート分解・関数分解していくことでアルゴリズムの流れがだんだん見えてきました。引き続き学習を進めていきたいと思います。
