一人で遊べば、4つの城のうち3つは機械が守ります。どのコンピュータ武将も同じ短いループを回しています。恐れるに値するボールを見つけ、それが自分の壁のどこを横切るかを推測し、滑って迎え撃つ。そして、赤子の手をひねるような相手と真の脅威との差は、4つの数字に行き着くのです。
英語で執筆・編集されました。この日本語版は機械翻訳によって作成されたものです。正確さが重要な箇所については、英語の原文が正式なものです。 英語の原文を読む →
武将の最初の仕事は、1秒に120回のトリアージです。アリーナには最大2個のボールが放たれているので、AIはどちらに盾を向けるべきかを決めなければなりません。AIは、保持されていない有効なボールすべてを自分の王からの距離で採点し、そのうえで、実際に隅へ向かってきているボールからは一律250単位のボーナスを差し引きます。遠ざかっているボールは、実際より250単位遠くにあるかのように扱われるわけです。1 最も点の低いものが盾の注意を勝ち取ります。
その結果できあがるのは、害なく通り過ぎていくボールに慌てず、それでいて、より近くかつ向かってくるボールにはぱっと食いつく守り手です。これは、人間が考えもせずにやっていることの粗いモデルです。自分に向かってくるものを見て、去っていくものは無視する。判断のすべては、ボールの速度と王への方向とのあいだの単一の内積です。正なら「自分を狙っている」を意味し、それで十分なのです。
脅威を選んだら、武将は自分の斜めのレール上のどこにいるべきかを決めなければなりません。跳ね返りの経路を完全に解くことはしません。反射の追跡も、壁からの跳ね返りの予測もありません。ボールの位置を取り、現在の速度に沿って少しだけ先へ進め(0.12秒の見越し)、その未来の点をレールへまっすぐ射影して、0から1のあいだの目標位置の比を得ます。1
これは意図的に浅い予測であり、だからこそこのAIは打ち負かせます。見越すのは8分の1秒だけで、跳ね返りを予期することは決してないので、壁で跳ねて到来するボールはAIを欺きます。AIは、ボールが今向いている先に身を委ねてしまうのです。アリーナの縁でショットを跳ねさせる人間は、まさにこの盲点を突いています。機械はわずかな先読みを添えて現在に反応しているだけで、計画はしていません。
コンピュータはボールの未来を計算しません。8分の1秒だけ前へ身を傾け、何にも邪魔されなければボールがいるはずの場所へ盾を向け、そして邪魔をするものすべてを、あなたの好機にしてくれるのです。
3つの難度は、まったく同一のコード本体を共有しています。かんたん、ふつう、むずかしいのあいだで変わるのは、4つの調整値が並んだ一行だけです。1 ぶれは盾の目標にランダムな誤差を加えるもので、かんたんの武将の狙いはレールの5分の1近くまでさまようのに対し、むずかしいの武将はほぼ正確です。反応距離は、武将がわざわざ追いかけ始めるまでにボールがどれだけ近づかねばならないかを定めます。かんたんの武将は自分の王から420単位より遠いものをすべて無視します。これは盤面の幅の半分をわずかに下回る値です。むずかしいの武将はアリーナ全体にわたって追跡します。キャッチ確率は、盾で捕まえられるほど近づいたボールを実際につかむ見込みです。そして対戦相手を狙うかどうかは、武将がそもそも攻めに出るかを決める単一のスイッチです。
| つまみ | かんたん | ふつう | むずかしい |
|---|---|---|---|
| 狙いのぶれ(レール比) | 0.18 | 0.07 | 0.015 |
| 反応距離(単位) | 420 | 700 | 2,000 |
| キャッチ確率 | 0% | 25% | 55% |
| 対戦相手を狙うか | いいえ | いいえ | はい |
4つの値はいずれも、Bulwarkのゲームエンジン内部にある小さな調整表から来ており、段階ごとに一行ずつあります。むずかしいの反応距離はアリーナの幅の2倍と書かれており、アリーナは一辺1,000単位の正方形なので、2,000単位とは「常に追跡」を意味します。1
かんたんやふつうの武将は、討ち取るつもりでキャッチすることは決してありません。かんたんの武将はそもそも一度もキャッチせず、ふつうの武将もときおりつかむだけで、つかんだボールをどうするかの腹づもりは持っていません。対戦相手を狙うスイッチ、むずかしいの段階だけが持つそれを入れると、AIは純粋な受け身であることをやめます。ボールを保持しているとき、AIは盤面の向こうを見渡し、最も傷ついた相手(残りのブロックが最も少ない相手)を選び、そこを狙うのです。1
これを経路探索なしでやってのけます。自分のレールに沿った11個の候補位置を標本として取り、そのそれぞれについてエンジンのリリース計算を再現して、そのショットがどの方向へ飛ぶかを調べ、飛び出すベクトルが選んだ標的を最も直接に指す位置を採ります。1 賢さというより、いくつかの選択肢に対する総当たりですが、それに辛抱強くあたります。場所を選んだら、武将は盾が実際にそこへ滑り着くまでボールを保持し、到着したとき、あるいは待つことがそのショットの価値を上回るほど長く握り続けたときに、はじめて手を離すのです。その意図はまぎれもなく戦略的で、楽な獲物を狙う人間がするのとまったく同じことです。標的を「残りのブロックが最も少ない」ことで選ぶということは、3人の独立した守り手が、すでに負けつつある者へそろって狙いを定めるということでもあります。
武将がする「ランダム」なことはすべて、狙いのぶれも、キャッチするかどうかのコイン投げも、シード付きの生成器から引かれています。それはmulberry32として知られる小さなルーチンで、一つの初期値を、長く再現可能な擬似乱数の流れに変えるものです。2 同じシードを与えれば、いつまでも同じ列を生み出します。実際の対戦はシードを時計から取るので、同じ始まり方の試合は2つとありません。しかし同じシードを渡し直せば、試合はそっくりそのまま再現されます。同じ発射角、同じぶれ、同じキャッチ。
この決定性は見た目だけの細部ではありません。それがゲームを検証可能にしているものであり、テストスイートは固定したシードからコンピュータ対コンピュータの試合をまるごと再生し、毎回同じ結果を期待します。そしてそれは、生成器のカーソルも含めたシミュレーション全体をJSONに詰めて再構築できるようにしているものでもあり、そのおかげでオンラインではホストが自分の状態を配信し、他のプレイヤーそれぞれが同一の盤面を再構築できるのです。武将たちが生きているように感じられるのは、その誤りが人間らしく見えるからです。その下では、彼らの「本能」は、誰でも最初まで巻き戻せる短い算術の漸化式にすぎません。城を守る機械に必要なのは、結局のところ、いくつかの数字と再現可能な運の流れだけなのです。2