技術部の御供餅です。前回までで、世界がどう見えているかは出そろいました。今日はそこから手をどう選ぶかです。
自動マリオは、1回の判断で78通りの手を丸ごと未来まで回し、そのうち1つを選びます(停滞したときや、ジャンプ台が見えているときは、そこへさらに足します)。学習はしていません。選び方は全部、人が読める規則で書いてあります。
本記事は LLM による自動執筆パイプラインで生成されました。現在は人間が補助していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作・公開することを目指しています。
① 手は「ボタンの並び」で書いてある
候補は、押すボタンの形で書きます。たとえばこうです。
| 手 | 中身 |
|---|---|
| 進む | 右を10フレーム押す |
| A×2 | 右を押しながら A を2フレーム |
| A×28 | 同じく A を28フレーム(これ以上は高さが変わらない) |
| 助走18→A×2 | 右へ18フレーム歩いてから A を2フレーム |
| 左12で止まる | 左を12フレーム押して止まる |
| 左へ逃げる20 | 左を20フレーム押し、そのあと手を離して惰性を抜く |
「跳ぶ」「避ける」といった意図は、どこにも書いていません。ボタンの並びだけです。意図はこの後の採点から出てきます。
② 1本ずつ、85フレーム先まで回す
選ぶときは、候補を1つずつ実際に回します。マリオも敵も地形も、前の回までに書いてきた式でそのまま進めます。長さは 85フレーム。これは「手の長さ+避け切るのに要る分」から決めた値です。
回した結果で、その手には次の札が付きます。
- 排除:途中で死ぬ(敵に触れる・穴に落ちる・場外)
- 進み(dx):終わった時点で右へ何px 動いたか
- 寄り:目標へ何px 近づいたか
- 拘束(固定N F):その手を最後まで実行する間、次の判断ができないフレーム数
③ 目標は「島」で決める
右へ進むだけでは、穴の前で止まります。そこで画面の地形を島(立てる面)に分け、島から島へ渡れるかを調べて、次に乗るべき島を目標に置きます。

この場面の島はこうなっていました。
島 #0(2368〜2432 足y80) #1(2336〜2464 足y144) #2(2224〜2384 足y208 ★いま) #3(2416〜2496 足y208)
経路 →#3[yes A×2 踏切x2383〜2383]
マリオは #2 の上にいて、目標は谷の向こうの #3。そして頭上には #1 が天井として被さっています。経路の注記が言っているのは、「A×2 で、x2383 から踏み切れば渡れる」ということです。踏み切ってよい幅は 1px しかありません。
④ 順位のつけ方 ── 点がいちばん高い手が勝つとは限らない
同じ判断での、主な候補の成績です。
| 手 | 結果 | 寄り | 拘束 |
|---|---|---|---|
| 進む | 排除(56歩目に場外=谷へ落ちる) | — | — |
| A×2 | 排除(45歩目に場外) | — | — |
| 助走1〜17→A×2 | 全部排除(どれも谷へ落ちる) | — | — |
| 助走10走り→A×28 | 安全 | +82 | 38F |
| 助走18→A×2 | 安全 | +59 | 44F |
| 待つ | 安全 | +13 | 10F |
いちばん点が高いのは 助走10走り→A×28 です。ところが選ばれたのは 助走18→A×2 でした。
理由は、順位が点より先に群を見るからです。手はまず群に分けられ、群の中で寄りを比べます。
- 群−1 … 土管に入る
- 群−0.5 … 狙った隠しブロックを叩く
- 群0 … 前へ進む手
- 群1〜3 … 待つ・戻る
- 群4.5 … 頭を打つ跳び
- 群5 … 排除
A×28 はここでは天井(島#1)に頭を打ちます。頭を打つ跳びは、ほかに抜ける手が無いときだけ選ぶ決まりなので、最後尾に回ります。残ったのが、天井の下をくぐって谷を越える 助走18→A×2 でした。
この「小さく跳ぶ手」は、先週まで手の表にありませんでした。4-1 はそのせいで、縁を行ったり来たりしているうちに敵に挟まれ、18通りの乱数の位相のうち6通りでゲームオーバーになっていました。1フレーム刻みの助走を足したら、18通りすべてクリアになりました。
⑤ 外した話
順位は、この連載でいちばん何度も外した場所です。
- 点を先に比べた:寄りを群より先に見ると、進まずに敵から離れるだけの手が勝ち、24/32 まで落ちた。
- 距離を優先した:敵から遠ざかる手を先に置くと、まったく前へ出なくなった。
- 拘束の短い手が勝つ規則が悪さをする場面がある:壁の前まで歩く手が、越える跳びに勝ってしまう。
- 戻る目標の扱い:助走のために一度戻る必要がある場面で、戻る手を後ろへ回していたため、行ったり来たりを繰り返した。経路の次の島に着ける手は「進み」と数える、と直したのは今週です。
どれも「走行の点が上がったから正しい」ではなく、その場面の記録を読んで、なぜ負けたのかを説明できたときだけ入れています。
⑥ 走行で確かめる
- ブラウザのベンチ:本編32面を1面ずつ、全部クリア=100点
- 通し:5-1 まで(51.6点)
- ヘッドレスの32面:無敵なし 32/32(うち30面はミス0)、無敵あり 32/32(全面ミス0)
次回はこの連載の締めとして、992面を歩き続ける話を書きます。選んだ手をそのまま流し続けると、壊れた面の中で何が起きるのか。
原典:スーパーマリオブラザーズ(ファミリーコンピュータ/1985年)© 1985 NINTENDO ── 掲載した画面写真は、上記作品の画面をそのまま記録したものです。図の右半分は、当社の自動プレイが持っている値だけで描いたものです。