箱影の怪盗
押せる箱で見張りと警備員の光、レーザーをさえぎり、影を通って宝を盗み出す、1手ずつ進む忍び込みパズル。全8面。登録なし。
所要時間6時間55分
制作メモ
- AIに任せた
- ルールと全8面の設計(Opus):1手ずつの判定、盤・最少手数・見本の解を幅優先探索で解き、箱が必須であること・押し間違いの罠・箱の三役など7つの検証を通した/画面とルールの実装(Sonnet):ルールと面データは設計側の参照実装の写しで、画面は光・影・判定・予告を計算し直さず、結果を描くだけにした(4行目以降を単体テストが参照と突き合わせる)/盤のSVG(光の斜線・レーザー・影のくさび・次の1歩の点線と矢印・巡回の道・見つかった光の二重の枠)、十字ボタンとキー、見つかった・詰み・成功の欄、お手本の再生、窓、盤を文で読む、5つの画面の型、合成音、進み具合の保存/単体テスト、ルールを1か所ずつ壊して試験が落ちるかを見る変異13個、画面の自動試験(画面幅・押す間隔・CPUを遅くした実行)。Safari相当の描画エンジン(WebKit)でも画面の自動試験を流して確認(Playwright の WebKit 版の仕様差による5件を除いて合格)/体験評価と見た目評価(別セッションのOpusが、実際に画面を操作・撮影して採点)、権利・規約・法律の確認(Codexが読み取り専用で実施)/デザイン系スキルを、設計(文言・仕様・部品・アクセシビリティ)、実装(アクセシビリティ・部品の点検)、評価(使いやすさテスト・講評・アクセシビリティ)の各段階で使った
- 自分でやった
- 掛け合わせゲーム200案から081(箱押し×潜入)を選び、Day66として制作を指示した/設計はOpus、実装はSonnetと、役割を決めた
- 失敗と修正
- 横幅が広い画面(1440×900)で、題字の行が盤の下に回り込んだ → 格子の行を明示した(盤の行指定が先に確定し、全幅の題字が後ろへ追いやられていた)
無効な手の一言が盤の幅の半分で折り返し、「進めな/い」と割れた → 吹き出しの幅を中身に合わせた(left:50% で使える幅が半分になっていた)
共有の窓の中で、共通の共有欄が最低幅と上の区切りを持ち、右にはみ出して余白も出た → 窓の中では幅と区切りを打ち消した
あそびかたの1文が「見つか/る」と語の途中で割れた → ひらがなの並びが終わる所に折り返し候補(wbr)を入れ、折り返しの許可は必要な所だけにした
390幅の端末を200%拡大した幅(195px)で、帯が横にあふれ、固定した操作が盤を隠した → 折り返しを許し、操作が画面の半分を超えるときは固定をやめた
面の一覧とあそびかたの窓が、小さい画面で「とじる」が画面の外に出た → 本文だけをスクロールさせ、「とじる」は固定した
375×667 の面6「通り道をふさがない」が、面の帯で2行になった → 名前の字の大きさを、ボタンの幅に9字が収まる大きさまで縮めた(上限17px・下限13px)
状態の行の「お手本」を押しても始まらなかった(失敗の欄の間しか受け付けていなかった) → 遊んでいる間も始められるようにした(E2E を書いていて気づいた)
窓を閉じたあとの焦点戻しを非同期のイベントでしていたため、閉じた直後に別の場所へ移した焦点を奪い返し、Space が効かない場面が出た → 標準の同期の戻しに任せ、自前の閉じる経路は閉じた直後に戻すようにした
測っている間は操作の固定をやめる印を JS が付けていたのに、受ける CSS を書き忘れていた → 規則を足した(design-system の監査で見つけた)。あわせて、line-height・不透明度・font-weight・vh の直書きを、トークンに直した
E2E の「動きを減らす設定」の試験群が、実際は通常の動きで走っていた(この Playwright では test.use({ reducedMotion }) が効かない) → contextOptions に入れ、動きを減らす設定と通常の動きの両方で流すようにした
設計の依頼書にある面7の手順(UUURURDUDDDULLDD)は、10手目で詰みになり、画面は「もう出られない」を出して先へ進めない → 詰みを通らない手順(UUURRURDDDULLLDDR)に置き換えて試験に使い、単体テストで両方の事実を固定して、設計側へ報告した
盤を文で読む(キーボードで届くと見える)が、盤ではなく画面の上端に重なっていた → 盤の入れ物の中に移し、盤の上に重なるようにした
盤を文で読むを開いたまま矢印キーを押すと、読んでいる最中に盤が動いた(長い文を矢印でスクロールすることもできなかった) → 開いている間は盤を動かさず、Esc で閉じるようにした(コードを読み返して見つけた)
PCで、マウスで押した十字ボタンの後に Space を押すと、待つ代わりにそのボタンがもう一度押された(体験評価で発見) → キーボードの Tab で焦点を当てたボタンだけ、そのボタンの動作にし、ほかは「待つ」にした。keydown と keyup の両方で既定の動作を止めた
共有の窓の説明文が、語の途中で折り返せず右の端で切れた(Chromium と WebKit で再現) → 折り返しを許したうえで、語の切れ目に区切りを入れた
Safari(WebKit)では、マウスで開いた窓を Esc で閉じても、開いたボタンへ焦点が戻らなかった → 窓の close の時点で焦点が無いときだけ、開いたボタンへ戻した(別の場所へ移した焦点は奪わない)
面ごとのヒントが、解き方の核心を先に言っていた/面4は待つ方へ誘導していた(体験評価) → ヒントを「ルールは言うが、答えは言わない」形に書き直した
































































