対戦ゲームの「読み合い」はどこで発生するか:情報の非対称
遊びを見つける執筆にClaudeを使用しています。

じゃんけんで、相手が出す手を完全に当てる方法はありません。それでも「次はグーを出しそうだ」と考え、「そう読まれているならパーを出されるかもしれない」と考え直す場面は生まれます。読み合いが成り立つ理由は、手の強さよりも、相手に見えていないものがあることにありそうです。 ただし、オセロやチェスのように盤面が両者に丸見えのゲームでも、読み合いという言葉はよく使われます。見えない情報がないのに駆け引きが起きるなら、「情報の非対称」とは何を指すのでしょうか。この記事は、その答えを読者自身の記録で確かめる分析の手順として書いています。結果の数値は載せません。お手元のゲームを数えて、初めて答えが出る形にしています。
読み合いが生まれる条件を先に決める
記録を始める前に、何を「読み合い」と呼ぶのかを固定します。ここでは次の三つがそろった局面を、読み合いの候補とします。
- 自分の結果が、相手の選択によって変わる。
- その選択(または選択の材料)が、自分には分かっていない。
- 相手も同じ状況に置かれている、と自分が想定できる。
一つ目が欠けると、読む意味がありません。たとえば、どの相手にも通用する最善手が一つだけある局面では、相手を読まなくても手が決まります。二つ目が欠けると、読むまでもなく計算で済みます。三つ目が欠けると、相手は考えない仕掛けのようなものになり、駆け引きではなく攻略になります。
この定義には、見えない情報があるだけでは足りない、という含みがあります。見えない情報があっても、自分の最善手が相手に左右されなければ、読み合いにはなりません。一方で、盤面が全部見えていても、相手の狙いが読めなければ条件は満たされえます。記録では、この二つを分けて見ていきます。
非対称を四つに分けて考える
「相手に見えないもの」はひとまとめにすると曖昧です。ここでは便宜上、次の四種類に分けます。これは分析のための仮の分類で、他の分け方もありえます。
- A、種類:隠れた持ち物、見えないものの例:伏せた手札、非公開の駒や資源
- B、種類:同時の選択、見えないものの例:同時に出す手、相手が決める前に自分も決める場面
- C、種類:相手の意図、見えないものの例:なぜその手を選んだか、どんな方針で進めているか
- D、種類:相手の読みの深さ、見えないものの例:どこまで先を読んでいるか、見落としはないか
Aは、カードゲームのように持ち物そのものが隠れている場合です。Bは、じゃんけんのように、互いに相手の選択を見られないまま選ぶ場合です。Cは盤面が公開されていても残り、相手の頭の中にある「狙い」です。Dは、相手が三手先を読んでいるのか目の前の手だけを見ているのかが分からない状態です。
オセロやチェスのように盤面と手順が公開されるゲームは、AとBがほぼ空になり、CとDが残るはずです。この見立てが正しいかどうかも、次の記録で確かめられます。
記録シートと手順
調べるゲームを一つ決め、人間の相手との対戦を最低3戦、同じ条件で記録します。1戦だけでは、たまたま起きた局面に引きずられます。手順は次のとおりです。
- 対戦中に「自分が手を選ぶ場面」を一つずつ番号付きで書き出します。これを意思決定点と呼びます。観戦記録や棋譜があれば、後から振り返って作っても構いません。
- 合法な選択肢が一つしかない場面は、記録から除外します。選べないので、読む余地がないためです。
- 各点について、次の質問に答えます。
- 自分の結果は、相手の選択で変わりますか(はい/いいえ)。
- 自分に見えていない材料は、A〜Dのどれですか(なし、または複数可)。
- 相手にとっても同じことが言えますか(はい/いいえ)。
- 三つの質問のうち、一つ目が「はい」で、かつ見えない材料がA〜Dのいずれかにあり、三つ目も「はい」の点を「読み合い候補」に印を付けます。
記録用紙は、紙の表で十分です。列は「番号/相手の選択で結果が変わる/A/B/C/D/相手も同様/候補」とします。
手計算が面倒なら、ブラウザの開発者ツールのコンソールで動く次の短い集計を使えます。rows の中身は書式を示すためのダミーで、実際の記録に差し替えて使います。
// 意思決定点ごとの記録。depends: 相手の選択で結果が変わるか
// both: 相手も同様か。types: 見えない材料の種類
const rows = [
{ no: 1, depends: true, both: true, types: ["B"] },
{ no: 2, depends: false, both: true, types: [] },
{ no: 3, depends: true, both: true, types: ["C", "D"] },
];
const count = { A: 0, B: 0, C: 0, D: 0 };
let candidates = 0;
for (const r of rows) {
r.types.forEach((t) => count[t]++);
if (r.depends && r.both && r.types.length > 0) candidates++;
}
console.log("種類別の点数:", count);
console.log("読み合い候補:", candidates, "/", rows.length);
console.log("候補の割合:", (candidates / rows.length).toFixed(2));出力に出てくる数値は、このダミーの入力から機械的に出ただけで、どのゲームの結果でもありません。
結果の読み方と起こりやすい誤り
集計したら、次の三つを見ます。
- 候補の割合:候補の点数を、除外後の意思決定点の総数で割った値です。1戦あたりの点数はゲームや試合展開で変わるため、点数ではなく割合で比べます。複数のゲームを比べるときも同じです。
- 種類の偏り:A〜Dのうちどれに点が集まっているかを見ます。AとBに集まるなら、情報が物理的に隠されたことで駆け引きが生じているタイプです。CとDに集まるなら、公開情報の下で相手の頭の中を読むタイプです。
- 候補なのに迷わなかった点:候補と印を付けたのに、振り返ると悩まずに選べた場面があれば、そこは再点検します。相手に左右されない手が実は存在していた可能性があります。三つの条件の一つ目を見直してください。
起こりやすい誤りも挙げておきます。
- 結果論で判定する:相手が思いどおりに動いたから「読んだ」と書いてしまう誤りです。判定は、その手を選ぶ前に自分が何を見ていたかだけで行います。
- 自分に見えないものを数え忘れる:Cは意識しないと記録から漏れます。「なぜこの手なのか分からない」と感じた点は、必ずCかDに印を付けます。
- 対戦相手の種類を混ぜる:人間の相手とコンピュータ相手では、CとDの現れ方が違う可能性があります。同じ表に混ぜず、別の表で記録します。
- 戦数が少ない:1戦の結果で種類の偏りを語らないでください。少なくとも3戦、できれば相手を替えて比べます。
潮目のオセロと灯りのチェスで確かめる
アソバースの公式作品では、「潮目のオセロ」と「灯りのチェス」の二つが、友達との招待リンク対戦に対応しています。盤面が両者に見える二人対戦のため、先ほどの見立て(AとBが空で、CとDが残る)を確かめる題材に向いています。
設計から読み取れることがいくつかあります。「灯りのチェス」は、取った駒と全棋譜を表示します。つまり、過去の手順は両者にとって公開された情報です。ここで見えないのは、盤面の外、相手の頭の中だけです。また、「潮目のオセロ」のヒントと一手戻すは、ひとり対局でのみ使えます。友達とのオンライン対局では使えません。この違いが、記録のCやDの数え方にどう影響するかは、読者が両方の形式で記録して比べられます。
試す手順の一例です。
- 同じ作品で、ひとり対局(難しさを一つ固定)を3戦、友達との対局を3戦行い、それぞれ同じ記録シートで意思決定点を書きます。
- Aに印が付く点があるかを確かめます。公開された盤面だけで進むなら、Aは空のままのはずです。もし付いたら、何を隠れた情報と感じたのかを書き残します。
- CとDの点の数と候補の割合を、ひとり対局と友達との対局で比べます。
どちらの形式で候補の割合が高く出るかは、実際に記録するまで分かりません。作品内にある画面の細部は、ここでは書きません。必要な表示や操作は、作品を開いて確かめてください。
次の行動
まず、よく遊ぶ対戦ゲームを一つ選び、1戦分だけ意思決定点を書き出してみてください。次に、「相手の選択で結果が変わるか」の列だけを埋めて、候補が何点残るかを見ます。そのうえで、潮目のオセロか灯りのチェスで、ひとり対局と友達との対局を各3戦記録し、CとDの偏りを比べてみてください。
参考資料
- ゲーム理論の入門書で扱われる「完全情報」「不完全情報」「同時手番ゲーム」の基本概念
