汎用パズルエディタの夢
開発中のpuzz.link互換プレイヤー・ソルバー・解析・エディタ一体型ツール。
もしそんなツールが作れるとすればどんな構成になるか検討する。
ツール基盤考察
「ペンシルパズル」の盤面描画ツールとしては、
2013年〜 ぱずぷれ、puzz.link
2019年〜 penpa-edit、penpa+
などが知られている。
これらは方眼をベースとしたツールであるが、
ぱずぷれは個別のパズルルールに特化したエディタ/プレイヤーを量産できるシステム。
penpa-editは任意のパズルを表現可能なエディタ/プレイヤーとなっている。
現在は、個別のパズルはぱずぷれで、ぱずぷれに存在しなかったり、オリジナルのパズル考案はpenpa-editでなされている。
(どちらも抽象的なツールであるが)さらに抽象化することで、両者を統合できるのではないか。
さらに、拡張性を手にいれるには、「まず方眼」という発想を捨て、
グラフィックソフトにパズル特化の要素、制約を追加するという発想で作ることで、
UIの複雑さに立ち向かうことができるかもしれない。
謎解きなど、デザイン要素の高いパズルにも対応できるのではないか。
table: それぞれのツールの機能
penpa-edit puzz.link デザインツール ソルバーツール リアルタイムソルバー GridKit
パズル系オブジェクトの表示 ◯ ◯ × ◯ ◯ ◯
パズル系オブジェクトの自由配置 ◯ × × × × ◯
任意の要素の表示 × × ◯ × × ◯
任意の要素の自由配置 × × ◯ × × ◯
パズル特化の書き込み操作 ◯ ◯ × × ◯ ◯
ルールのバリデーション × ◯ × ◯ ◯ ◯
ルールによるソルバー × × × ◯ ◯ ◯
デザインのカスタマイズ △ × ◯ × × ◯
penpa-editや、puzz.linkは問題編集、解答書き込み、と2つのモードがあるが、
これはグラフィックソフトの「レイヤー」に対応すると見做せる。
----
グラフィック表現の考察
グラフィックツールはドロー型、ベクタ型の2種類に分かれる。
Webでは、Canvas, SVGがそれぞれ対応する。
このうち、パズルと相性がいいのはベクタ型である。
謎解き問題のデザインはイラレなどのベクタツールが主流
印刷などの需要にSVGでの書き出し
ぱずぷれ/puzz.linkはSVGで書き出される。penpa-editはCanvas(ドローツール)だが、SVGへの移行が検討されたことがある。
よって、GridKitはSVGツールとして作成されるのが望ましい。
パズル表現の考察
ペンシルパズルは変形盤面など、正方形以外の盤面もあり、
実際にpenpa-editはいくつかの変形盤面にも対応している。
GridKitが様々な変形盤面に対応することを考えると、
正方格子のような二次元配列は拡張性に欠ける
通常の隣接マスグラフや平面グラフはパズルのルールを表現するには不十分
双対を導入した二重グラフを
双対を導入した二重グラフ
G1 = {V1, E1}
G2 = {V2, E2}
// Vはグラフの頂点, Eはグラフの辺
G1はマスおよびマスを結ぶ線のグラフ
G2は格子点および格子点を結ぶ辺のグラフ
E1とE2は対応する。
V1に対する「周囲のV2」
V2に対する「周囲のV1」
という関連付けを行う。
V2は「外側に隣接しているか」という属性があり、
外側隣接属性のV2同士を結ぶE2は外側枠として扱う
マスの中心の表現
V1の周囲のV2の算術平均、つまりマスの重心点を中心とする
中心を結ぶ線 (線)
格子点を結ぶ線(辺、自由線、領域分割)
辺によって囲まれた領域 (塗りつぶし)
方向(矢印など)も中心から隣のマスの中心へのベクトルで算出可能
十字→マスの中心から辺の中心へ伸びる線
シャカシャカ → {マスの中心, マス周囲の頂点, 辺の中心}からいくつかを選び、それによって囲まれる領域を塗りつぶす操作
数字や記号の書込みはV2を囲む長方形の中央に書くのが良さそう
パズルの属性
座標
列