ぷよぷよ練習アプリを自作することにした
市販ソフトでは届かない「自分の弱点を測る」を実現したかった。練習アプリを作るに至るまでの設計メモ。
負けた翌週、わたしは机の前で「自分が何でつまずいているのか測りたい」と考えていた。市販のぷよぷよには対戦やとことんモードがあるが、 「土台を組むスピード」「初手 4 手から伸びる連鎖の上限」のような 粒度の細かい指標は計測できない。なら作るしかない。
仮説: 上達のボトルネックを言語化したい
練習を進めるなら、こういう問いに答えたい。
- 同じ初手でわたしと息子の連鎖最大値はどれくらい違うのか
- 1 連鎖目を置く位置の癖は何か
- 折り返しの形をどれくらい安定して作れるのか
これらは 数値で見えれば改善できる 種類の課題だ。 ぷよぷよ的に言えば「いつ、どの位置に、何色を置いたか」のログを 全部取って、後から眺めるだけで気付きがある。
最小機能から始める
「アプリを作る」と言うと壮大に聞こえるが、最初に作ったのはほぼ盤面エディタだった。
- 6 列 × 13 段の盤面に手で色を置ける
- 連鎖シミュレーション(消去・落下・連鎖カウント)が動く
- 「いま組んでいる土台の名前」を当てるクイズが出る
ここまでで 1 週間。最初の 1 週間で動くものが出来てしまうと、 あとは欲しい機能を継ぎ足していくだけになる。 次に作ったのは「ツモ表示つきの落とし込み練習モード」だった。
作る側になると、見える景色が変わる
実装を進める過程で、わたしは初めてぷよぷよの消去ロジックの厳密な順序を理解した。 4 つ以上連結した同色を全部消す → 落下 → 再判定、の繰り返しだ。 知識としては知っていても、コードに落とすと印象が違う。
さらに、土台の判定を実装するために GTR や階段の構造を「コンピューターに見せる形」で表現せざるを得なかった。 この作業が結果的に自分の脳内モデルを作り直してくれた。
結果: 息子に対して 1 勝した
練習開始から 3 週間、はじめて息子に 1 勝した。 2 連鎖の催促を打って相手を崩し、土台から 7 連鎖を発火する。 練習アプリで何百回も繰り返した動きそのままだった。
次の記事では、このアプリの中身 — 特に最強ぷよ AI「ama」を組み込んで推奨手を表示する という看板機能を中心に紹介する。 AI 評価関数を自分でゼロから書くという無理筋に踏み込まずに済んだのは、 ama が OSS で公開されていたからだ。