ギリギリ回避の遊び方
ライフ3つで60秒生き残るゲームです。自分は撃たず、赤い予告線を見て、敵を柱・壁・別の敵へぶつけます。
- 「60秒、やってみる」で開始します。PCはWASDか矢印キー、スマホはフィールド内のドラッグか方向ボタンで移動します。
- 赤い照準線が止まったら、横へ逃げます。Spaceか「ステップ」で短い無敵移動ができます。再使用まで待ち時間がありますが、敵をぎりぎりでかわすとすぐ回復します。
- 柱の裏へ逃げたり、敵どうしをぶつけたりして得点します。近接回避100点、壁・柱への誘導80点、敵どうしは1体160点に、連続得点の倍率が乗ります。緑のかけらは50点とステップ待ち時間の短縮です。
- 「一時停止」かEscapeで時間を止め、カードから再開できます。終了後は得点・ギリギリ回避・ぶつけた数を見て「もう一回、かわす」で再挑戦。このブラウザの端末ベストが残ります。

赤い予告線が止まったら横へ。Spaceのステップは短い無敵移動。

得点の基本は近接回避100点、壁・柱80点、敵同士160点。連続得点には倍率が乗る。
ゲーム上部かカード内の日本語/Englishで切り替えます。ゲームの状態を保ったまま案内と結果表示が変わり、ニックネームやコメントは翻訳されません。サイトの保存データを消すと端末ベストも失われます。
結果には「名前・コメント」と「ランキング」のタブもあります。入力せず再挑戦しても構いません。名前は20文字、コメントは200文字まで。公開版への投稿では名前・コメント・今回のスコアが全員に見えるため、本名・連絡先・URLは入れないでください。端末で計算した得点の参考ランキングで、競技用に検証された記録ではありません。
ローカル試遊では、プレビュー内だけの記録で本番には公開しないことを明示します。送信の応答がない場合は、再読み込みで掲載を確かめてから必要なら再送してください。
今の一回で残す観察を一つ決める
10万点を超えた当時の記録は、誰にでも同じ結果を約束する手順ではありません。最初の一回は高得点を急ぐより、衝突した場面か、ぎりぎりで避けられた場面を一つだけ覚えることを目標にします。
操作を変えて悪くなったときは、すぐに新しい作戦を重ねず、衝突する直前に何が違ったかを思い出します。位置、押したタイミング、避けた方向のうち一つだけを次の試し方にすると、失敗も比べられる記録になります。
このあとに続く探索記録は、そのような観察を積み重ねた過去の例です。現在の一回では、得点だけでなく自分が変えた一点を書き留めると、再挑戦の判断がしやすくなります。
ここからは当時の探索記録
以下の得点やモデル比較は、この記事で紹介した実験の記録です。今回の日英表示の検証で取り直した数値ではありません。
1コマのずれを直したら、10万点を超えた
自作ゲームの記録を、AIに破らせようとした二日間の記録です。作戦を25通り手で書いても伸びず、効いたのは「測る・数える・総当たりする」だけでした。最後は1ステップぶんの数え間違いが、9万点の差でした。
101,280あんどうさん / Qwen 1.5B
104,030本番ブラウザ / 探索
75,544手書きの作戦 25通りの限界
ことのはじまり
ギリギリ回避は、60秒のあいだ迫ってくる敵をすれすれでかわして点を稼ぐ、ブラウザの小さなゲームです。これをAIにクリアさせたら面白いのではと X に書いたところ、あんどうさん(@t_andou)が乗ってくれました。
jevじゃないですが、ローカルのQwenを操作してそこそこ高得点を取れました。こういうルールや環境が分かりやすいのは小型LLMで十分そうな印象です。誰かjevでやってみてあんどう@AI開発者 / 2026-09-18
あんどうさんは福岡在住のAI開発者で、ボートレースや地方競馬の予想AIで生活されている方です。送られてきた動画には Qwen 1.5B × ギリギリ回避 とあり、Mac M3 Ultra 上で判断に31ms、操作が画面に反映されるまで83ms。60秒ノーミスで101,280点。人間の私は79,000点が精一杯でした。
こちらの手札は Jev という判定モデルです。「誰かjevでやってみて」と名指しで振られたので、やってみることにしました。結論から言うと、Jevはプレイヤーとしては一度も使えませんでした。それが何より面白い結果だったので、順番に書きます。
まず、得点の正体を知らなかった
ここを飛ばして作戦を考えていたのが、最初の失敗です。
ゲームのコードを読んで、得点源を分解しました。ギリギリ回避が100点、敵同士がぶつかると160点、敵が壁や柱で勝手に自滅すると80点。すべてコンボ倍率(最大5倍)が乗ります。
| 得点源 | 単価 | 当初の作戦 | 最終形 |
|---|---|---|---|
| 敵同士の衝突 | 160 × 5 | 16 体 | 60体超 |
| 壁・柱で自滅 | 80 × 5 | 79 体 | 30体台 |
| ギリギリ回避 | 100 × 5 | 57 回 | 76 回 |
| ジェム | 50 | 2 個 | 2 個 |
ここで分かったことが決定的でした。1試合に出てくる敵は96〜97体で固定です(生成間隔で決まるので、早く倒しても増えない)。コンボは最初から4.93倍で、伸ばす余地がない。ジェムは1試合で75点にしかならない。
動かせるのは、同じ96体を「壁で勝手に死なせて80点」にするか、「ぶつけ合わせて160点」にするか。それだけでした。
あんどうさんの最終画面(ギリギリ71回・撃破97体・101,280点)から逆算すると、97体のうち60体以上を敵同士でぶつけていることになります。当時のこちらは16体。差はこの一点だけで、他の指標はすべて互角か、こちらが上でした。
失敗したこと
作戦を25通り書いて、1つも効かなかった
敵の進路から一定の帯を保つ、2体から等距離に立つ、到着時刻を揃える双曲線を解く、向かい合った組だけ狙う、狙いが固まるまで居座る、中心から200pxの輪で戦う、衝突点から離れすぎない——どれも理屈は通っていました。そしてどれも「敵同士17〜21件」から1件も動きませんでした。
原因を探して、ようやく分かりました。「狙いを定めている敵が2体そろう」場面は、1試合の1.3%しかない。私が書いた作戦は、全部そこでしか起動しない設計だったのです。理屈が悪かったのではなく、見る場所を間違えていました。
教訓:新しい作戦を思いついたら、理屈を検討する前に「その条件は1試合の何%の時間で成立するか」を測る。
「常にステップを撃つ」で全滅した
相手の動画を1,890コマに分解して自機の軌跡を追ったところ、速度が350px/sを超えている時間が28%ありました。ステップ(無敵つきの高速移動)をほぼ撃ちっぱなしに見えます。真似したら4,232点で全滅しました。ステップは0.18秒のあいだ向きが固定されるので、無闇に撃つと壁や敵に自分から飛び込みます。
位置取りを真似したが、効かなかった
同じ動画から、相手が中心から平均202pxの位置におり、衝突の瞬間には衝突点から121px離れていることも測れました(こちらは中心69px、衝突点から292px)。数字としては綺麗な差でしたが、そこに立つように作っても点は伸びませんでした。位置は結果であって、原因ではなかった。
レイテンシー仮説は、逆だった
あんどうさんは「やはりレイテンシーが重要」「人間でも毎秒16連射するくらいなので、最低でも60msくらいで操作して欲しい」と書かれていました。本番で直接試しました。
| 操作間隔 | 本番の得点 | 結果 |
|---|---|---|
| 25 ms | 43,660 | やられた |
| 50 ms | 48,340 | やられた |
| 100 ms | 96,630 | 生存 |
| 200 ms | 100,050 | 生存 |
速く操作するほど弱くなりました。ステップが0.18秒向きを固定するので、25msごとに判断を変えると、踏み込んだ直後に気が変わって無敵時間を捨てることになる。連射が効くのは人間の話で、機械には迷いが増えるだけでした。
効いたこと
点が動いた順。得点は本番ブラウザでの実測です。
帯を保つだけの単純な作戦敵の進路から44〜56pxを保つ。ここが出発点72,806敵同士 16
ステップを敵の正面へ −95° で踏み込む総当たりで角度を振った。逃げる向き(+105°)は45,000点で全滅寄り。真逆だった75,329敵同士 17
手で作戦を書くのをやめ、探索にした0.2秒ごとに33通りの手を試し、1.8秒先まで転がして選ぶ92,275敵同士 54
先読みを1.1秒 → 1.8秒に伸ばした敵が交差するまで約1.5秒。1.1秒では衝突が起きる前に視界が切れていた+8,700
枝を次の判断に持ち越した選んだ手の下にある枝を捨てずに残す。0.2秒ごとの記憶喪失をやめた96,630幅16
枝の間引き方を変えた位置が近くても得点が違う枝は別物として残す104,030幅64
そして、1コマのずれ
「枝の持ち越し」は、最初に実装したとき760点で即死しました。ローカルでは96,200点出るのに、ブラウザでは壊れる。検算をブラウザの中に仕込んで、持ち越した枝の状態と現実を毎回突き合わせたところ、ずれ幅が 2.04px → 4.08px → 6.05px と一定のペースで増えていました。
2.04px は 245px/s ÷ 120fps、ちょうど1ステップぶんの移動距離です。判断した回それ自体も1ステップ進むのに、そこを数えていませんでした。本番は13ステップ進み、こちらの枝は12ステップで計算していた。毎回1コマずつ現実から遅れていく。
「毎回作り直す版」は毎回現実から出発するのでずれが溜まらず、この間違いは表に出ませんでした。持ち越しを始めた瞬間に牙を剥いた。1行の修正で 6,900点 → 96,630点 になりました。
で、Jevはどこで使えたのか
最初の依頼は「Jevを使ってクリアして」でした。操作には一度も使えていません。理由は速度ではありませんでした。24件同時に投げれば実質44msで、あんどうさんのQwen(31ms)とほぼ互角です。使わなかったのは、入れても弱くなるからです。
答え合わせが即座にできる問題では、どんなモデルも探索に勝てない。答え合わせができない問題でこそ、判定モデルの出番がある。
このゲームには完璧なシミュレータ(ゲーム自身のコード)があります。1手を選ぶのに必要なのは「33通りを1.8秒先まで転がして比べる」という計算であって、言葉で書ける基準の重みづけではない。そもそも判断の問題ではなかった、というのが答えでした。
そのうえで、Jevは設計案の採点では6回中4回当てています。実装して2時間溶かした2案を、失敗を知らせずに最下位・68%/58%で「効かない」と判定しました。決定的なゲームで「複数の未来を試して平均を取る」という無意味な案も見抜きました。外したのは2回で、うち1回は「時間をかければ伸びる」(実際は幅48で崩壊)、もう1回は「幅を広げるだけでは効かない」(序盤は大きく効いた。ただし幅16以降は本当に効かず、途中からはJevが正しかった)。
最後の1,230点を埋めたのも、Jevが1位に置いた「枝の間引き方を変える」でした。
今日いちばんの無駄は、Jevに聞く前に2案を実装したことです。順番を逆にすれば、その2時間は要りませんでした。
正直に書いておくこと
104,030点は、ブラウザ上で本番のコードをそのまま動かして出した数字ですが、画面を見て判断しているわけではありません。ゲームの内部状態を複製して先を試す、総当たりの探索です。あんどうさんのQwenは画面の情報から判断していて、種類が違います。得点で並んだことと、同じことをして勝ったことは別です。
本番は createGame(Date.now()) で毎回ちがう盤面になるため、同じ設定でも96,270〜104,030点とばらつきます。16回連続で走らせた結果は、10回が99,000点超え、3回が10万点超え。10万点前後で安定、という言い方が正確です。
持ち帰ったこと
- 作戦を思いつく前に、点の内訳を分解する。「壁で勝手に死ぬ80点が全体の42%」と分かるまで、私は的外れな作戦を25通り書いていました。
- 新しい作戦は、理屈より先に起動頻度を測る。1.3%でしか動かない設計は、どんなに正しくても効きません。
- 上手い人の数値を真似ても効かない。位置も速度も、結果であって原因ではありませんでした。
- 判定と実測が食い違ったら実測を取る。ただし実測の外挿も外れます(幅を広げる話で、私は外挿して外し、Jevが当てました)。
- 作る前に判定モデルに聞く。外れ案を落とすだけで時間が浮きます。プレイヤーとしてではなく、手を止める役として。
計測環境 Node.js / Playwright(Chromium)。1試合の模擬が約9ms、幅24の探索が約31秒。
相手の動画は1,890コマに分解し、柱3点の座標で校正(誤差0.2px以内)して自機と敵の位置を抽出しました。
ゲーム本体のコードには手を入れていません。内部状態を読む口と、操作を差し込む1行だけを加えています。






