トップ制作ノート > 相手が絶対に勝てないバグ

相手が絶対に勝てないバグを見つけた話

制作ノート / カイテイソナーのルールの穴

この記事の内容
  1. それぞれ正しい2つのルール
  2. 組み合わせると何が起きるか
  3. 「ハズレのマス」が抜け道だった
  4. 直すときに気をつけた4か所
  5. CPUだけ有利にしない
  6. 説明文も直さないと意味がない
  7. まとめ:ルールは単体ではなく組み合わせで壊れる

それぞれ正しい2つのルール

カイテイソナーには、次の2つのルールがあります。 どちらも、それだけを見れば何もおかしくありません。

ルールA一度撃ったマスは、二度と撃てない(同じ場所を無駄撃ちさせないため)
ルールB高速艇は、位置がバレたら隣のマスへ逃げられる(見つかっても立て直せるようにするため)

Aは、プレイヤーが同じマスを何度も撃ってターンを溶かすのを防ぐための、ごく普通の配慮です。 Bは、隠す側にも打つ手を残すための救済策です。どちらも意図は明確で、単体では正しく動きます。

組み合わせると何が起きるか

問題は、この2つが同時に存在するときでした。 高速艇を操る側が、次のように動けてしまったのです。

相手がすでに撃ったマスへ、高速艇を移動させる。

そのマスは、ルールAによって相手が二度と撃てないマスです。 そこに船を置いてしまえば、その船は永久に当たりません

つまり、意図的にやれば相手が絶対に勝てない状態を作れてしまう。 対戦ゲームとして、これ以上ないくらい重大な穴でした。

「ハズレのマス」が抜け道だった

この穴で厄介なのは、抜け道になっていたのがハズレのマスだという点です。

直感的には「命中したマスに逃げ込むのを禁止すればいい」と考えたくなります。 しかし、それでは穴が残ります。相手が撃って外したマスも、二度と撃てないという点では同じだからです。 そして盤面には、命中したマスよりハズレのマスのほうがはるかに多い。 安全地帯は盤面じゅうに散らばっていたことになります。

正しい対策は、命中・ハズレを問わず、相手がまだ一度も撃っていないマスにしか移動できないようにすることでした。 「撃たれた事実があるかどうか」だけを見る、という判定に変えています。

直すときに気をつけた4か所

ルール1つの修正に見えて、直すべき場所は4か所ありました。 どれか1つでも漏らすと、穴が残るか、遊ぶ人が混乱します。

  1. ルール本体:移動可能かどうかの判定に「相手が撃ったマスの記録」を渡し、撃たれ跡には動けないようにする
  2. プレイヤーの画面:動けない向きのボタンを押せない状態にし、「逃げ場なし」と理由まで表示する
  3. CPU:CPU側にも同じ制約を適用する
  4. 遊び方の説明:ルールが変わったので、説明文2か所を書き直す

特に2番目は大事だと考えました。「押しても動かない」だけだと、遊ぶ人にはバグに見えます。 なぜ動けないのかを短く出しておけば、それはルールとして理解されます。 同じ挙動でも、理由が見えるかどうかで受け取られ方がまったく変わります。

CPUだけ有利にしない

3番目のCPUへの適用は、忘れやすいけれど致命的な項目です。

ルールを厳しくするとき、人間側だけに制約をかけてCPUを直し忘れると、 CPUだけが撃たれ跡に逃げ込めるという、今度は逆向きの不公平が生まれます。 プレイヤーからは理不尽そのものです。 ルールを変えたら、そのルールを使っている場所を全部洗い出す必要がありました。

説明文も直さないと意味がない

4番目も軽く見られがちですが、実際にはルール変更の一部です。 説明に「高速艇は隣のマスへ逃げられます」とだけ書いてあると、 遊ぶ人はどこへでも逃げられると理解します。そして動かないボタンを見て混乱する。

コードを直した時点では、まだ半分しか終わっていません。 遊ぶ人の頭の中のルールを更新して、はじめて修正が完了すると考えています。

検証したこと

修正後、12項目の確認を行いました。従来どおりの移動ができるか、 4種類の「撃たれ跡」(命中・ハズレ・ソナーで調べたマスなど)それぞれで移動が止まるか、 盤面の外へ出ようとしたとき、船が損傷しているときの挙動、などです。すべて意図どおりでした。

まとめ:ルールは単体ではなく組み合わせで壊れる

  • 個々のルールが正しくても、組み合わせると成立しない状況が生まれることがある
  • 抜け道を塞ぐときは、目立つケース(命中)だけでなく地味なケース(ハズレ)まで見る
  • 「押せない」だけにせず、押せない理由を出すと、バグではなくルールとして伝わる
  • ルールを変えたら、CPU・UI・説明文まで同じルールを使っている場所を全部直す

このバグは、遊んでくれた人からの指摘で見つかりました。 作った本人は「正しく動くこと」を確認しがちで、「ルールを悪用したらどうなるか」はなかなか思いつきません。 対戦ゲームを作るなら、ずるをする視点で一度触ってみるのが有効だと思います。

実際に遊んでみる

修正後のカイテイソナーは、ひとり(CPU対戦・3段階)でも、ふたりでも遊べます。

📡 カイテイソナーを遊ぶ

ほかの制作ノート

CPUを「ちょうどよく弱く」する方法「指についてこない」の正体は重さではなかった制作ノートの一覧