記憶力MAXの相手に、人間は何を覚えていられるか。Claude Codeと作る軍人将棋【第2回】

記憶力MAXの相手に、人間は何を覚えていられるか。Claude Codeと作る軍人将棋【第2回】 ゲームを作らせてみた

前回は、相手の駒が見えない軍人将棋で、観測から推理するCPUをClaude Codeに作らせました。最初の版1.0.0では、CPUの頭の中を思考モニターで丸ごと見られます。

ただ、それは研究用の画面です。普通に遊ぶには情報が多すぎました。

今回は、遊ぶための対戦モードを作った1.1.0と、その受け入れ確認から生まれた1.1.1の話です。遊んでいるうちに気になってきたのは、CPUと人間の「覚えていられる量」の違いでした。そして1.1.1の修正は、思わぬAIが担当することになります。

※Claude Codeは、ファイルの作成やコードの実装・テストなどをAIに任せられるAnthropicの開発ツールです。今回はモデルにClaude Opus 5.5を使いました。詳しくはClaude Codeとは、CodexについてはAstraとCodexとはをご覧ください。

遊ぶ画面と、観察する画面を分けた

1.1.0で頼んだのは、表示を2つのモードに分けることです。

起動すると、まず対戦モードになります。上にタイトルとTURN、手番、「あそびかた」「設定」「新規対局」。中央に盤があり、左右に取られた駒を並べます。Seed、評価値、推定確率など、研究用の情報は出しません。

AF-MilitaryShogi 1.1.0の対戦モードの初期配置画面。右側にCPUの強さ(弱・中・強)と戦い方(かなり攻撃的〜かなり防御的)の選択、おまかせ配置、対局開始のボタンがある

1.1.0の対戦モードです。ロゴは外部チャットで作った画像を使いました。対局前にCPUの強さと戦い方を選べます。

1.1.0で追加で渡したロゴとアイコンの原本3点。背景込みのロゴ、文字だけのロゴ、大将の駒を描いたアプリアイコン

1.1.0で追加で渡した原本です。これも外部チャットの画像生成機能で作りました。ゲームでは文字だけのロゴからタイトル文字を切り出して使い、アイコンはWindowsのアプリアイコンに変換しています。背景込みのロゴは参考用で、ゲームには使っていません。

1.0.0の画面は研究モードとして残しました。対局の途中でも行き来でき、切り替えても盤面や手番、CPUの推定、乱数の状態は変わりません。Claude Codeは、対局の状態を画面とは別のまとまりにして、モードは表示側だけが持つように作っていました。自動検証では、毎手モードを切り替えながら最後まで対局し、切り替えない対局と終局時の状態が一致することを確かめています。

新しく付いた「あそびかた」は、かなり良い仕上がりでした。

「あそびかた」で飛行機を選んだ画面。勝てる駒、相打ち、負ける駒を駒の画像で示し、右に実際の盤の形での移動図がある

駒を選ぶと、戦闘の相性と動き方が出ます。飛行機は縦に何マスでも動けて、途中の駒を飛び越せます。

この相性表と移動図は、ゲームの勝敗判定と移動処理と同じコードから作られています。ヘルプに書いてあることと、実際のゲームの動きが食い違わない作りです。

CPUの強さは弱・中・強の3段階。どの強さでも相手の駒の推定は同じで、違うのは手の選び方です。「中」は1.0.0のCPUとまったく同じ手を指すことを、テストで確認しています。戦い方は評価の重みと、CPUの初期配置の思想の選ばれやすさに反映されます。ただ、Claude Codeの報告では、実際の対局での差は控えめでした。攻撃する割合は「かなり攻撃的」で44.9%、「かなり防御的」で40.5%です。

1.1.0で遊んだ対局では、TURN 47の時点で自軍の損失21枚に対して敵の損失7枚。

そして敗色濃厚w

この対局は、TURN 66でCPUに総司令部を占領されて終わりました。

飛び越えたのに「正体不明」?

別の対局で、研究モードのまま敵の駒にマウスを合わせてみました。

1.1.0の研究モード。敵駒#28のツールチップに「TURN 2 移動 e5→e1(3枚飛び越え)」「TURN 2 戦闘:自軍中佐(#4)と → 自軍敗北」とあるが、見出しは「正体不明」

敵の#28は、2手目で3枚の駒を飛び越えてこちらの陣の奥まで入り、中佐を倒しています。

敵さん初手と2手目でヒコーキフル活用w しかしこれ正体不明なのか?

駒を飛び越えられるのは飛行機だけです。人間が見ても飛行機と分かります。CPUの側なら、この観測だけで飛行機に確定させます。ところが、プレイヤー向けの表示は「正体不明」のままでした。

別の駒の表示も見ました。こちらの大尉と戦って勝ったこと、まだ一度も動いていないこと。

こちらはよい。自軍の誰に勝った、動いてないは客観的事実だ。

表示されていたのは、プレイヤーが盤上で見た事実の記録です。そこから何が言えるかの推理は、人間に任されていました。

CPUは、全部覚えている

一方、CPUの推理はどこまで進むのか。飛行機に飛び込まれたこの対局に勝ったあと、研究モードで「CPUから見た自軍の駒」を開きました。

1.1.0の終局後の研究モード。CPUの推定一覧で、自軍の大将を「大将 100%」、撃破された少将を「少将 100%」、中将を「中将 56%」としている

TURN 67で勝った直後です。右の一覧は、CPUがこちらの駒をどう見ていたかで、括弧の中はこちらだけが知っている本当の種類です。大将は「大将100%」、撃破された少将も「少将100%」、中将は「中将56%」まで絞り込まれています。

わからせてやったw

とは書きましたが、CPUはこちらの大将の正体を見抜いていたわけです。

CPUは、対局の最初から全部の移動と戦闘の結果を覚えていて、そのたびに31枚すべての候補を計算し直します。忘れることがありません。人間は、30手前にあの駒が何に勝ったかを覚えていられるでしょうか。

実は1.0.0の自動検証の画面を見た時点で、外部チャットにこう書いていました。

あなたが知り得る情報ってのもおもろい。記憶力込みでガチるか駒の動きから判明したことを視覚化するか

人間の記憶力も含めた勝負にするか、盤上の事実から確定したことを画面に出して助けるか。実際に「飛び越えたのに正体不明」を見て、後者にしました。

ただし、線は引きました。CPUのような確率は出しません。公開された移動と戦闘だけから、候補が1種類に絞れたときだけ「判明:駒名」と出します。CPUの推定は使いません。人間が注意深く記録していれば、自力でたどり着けることだけを表示する、という考え方です。

その修正は、別のAIが担当した

1.1.0を遊んで見つかった点を、修正の指示にまとめました。判明表示のほか、ツールチップの位置、盤の配置、取られた駒の並べ方、ロゴなどです。

ツールチップの位置は、私の環境の事情もあります。

次の修正でマウスポインタ位置とチップ表示位置の調整をさせたい。わしのカーソルかなりでかいんだ。4kモニタ3枚で迷子になるから

1.1.0のツールチップはカーソルのすぐ横に出るため、大きなカーソルで隠れてしまっていました。

さて、この修正指示を、私は送る先を間違えました。Claude Codeに送るつもりで、Codexの別のスレッドに貼り付けてしまったのです。そのスレッドは、第1回で書いた、個人開発のバージョン管理やGitHubの運用などの規約をファイルに集約する作業を、昼に頼んでいたものでした。

Codexのスレッド。12:22の規約集約の依頼と回答の下に、18:27に貼られたAF-MilitaryShogi 1.1.0の修正指示と、14分31秒の作業後の「1.1.1の改修・Releaseビルド・自動検証が完了しました。」という報告が続いている

規約を整理していたスレッドに、いきなり軍人将棋の修正指示が届いた形です。外部チャットには、こう書きました。

規約運用ルール詰めるスレで突然の無茶振り。Codexさん顔色一つ変えずに作業続行w

Codexは14分31秒の作業で、1.1.1を仕上げてきました。報告の要点は次のとおりです。

  • ツールチップは、カーソルではなく駒の画面上の範囲を基準に、右・左・上下へ避けて配置する。画面の端やほかの表示とも重ならないようにし、対象の駒を細い枠で示す。
  • 判明表示は、公開された移動と戦闘だけから候補を絞り、1種類なら表示する。CPUの推定とは別に作り、撃破後も残す。取られた敵の駒は常に裏面のまま。
  • 盤上に出ていた「勝ち」「負け」の文字は廃止。終局の結果表示は残す。
  • 既存と追加のテストで、2,270,801件のチェックがすべて成功。720pから4Kまでの解像度で、全66マスのクリックと、31枚の駒が画面に収まることを確認。CPUの評価指標は1.1.0と一致。

同じ報告で、大型カーソルや、複数のモニターをまたいだ実際の確認はしていないことも書いていました。

CPUの部分には手を入れていません。CPUの判断が変わっていないことは、1.1.0と同じ評価指標と、同じ手順での対局の結果が一致することで確認しています。

誤爆に気付いたあと、次の修正を頼まれたClaude Codeは、作業の最初に「別のエージェントが表示まわりのファイルを変更しているので、1.1.1の現在の版を読む」と判断しました。そして1.1.1を基準点として作業を続けています。別のAIが挟まっても、コミットされたコードと記録から引き継げたわけです。

人間同士なら、こうはいきません。規約や運用を決める会議の最中に、いきなり実装を振られたら慌てるはずです。作業を再開しようとした担当者も、別の誰かがもう終わらせていたら戸惑うでしょう。AIは、そのどちらも顔色一つ変えずにこなしました。すげえ。

スパイが勝って、大将と判明した

1.1.1で遊ぶと、判明表示が効いてきました。

1.1.1の研究モードの戦闘履歴。TURN 40で自軍のスパイがEnemy #23(判明:大将)に勝利している。TURN 19とTURN 38の履歴にも同じ#23が「判明:大将」と表示されている

TURN 40で、こちらのスパイが敵の#23に勝ちました。スパイが勝てる相手は、動く駒の中では大将だけです。この一戦で、#23は大将と確定しました。

面白いのは、履歴の過去の行も書き換わっていることです。TURN 19にこちらの中将が負けた相手、TURN 38にタンクが負けた相手も、同じ#23。そこも「判明:大将」と表示されています。あとから分かった事実で、過去の戦闘の意味が変わる。軍人将棋の記録らしい表示になりました。

研究モードでは、もう一歩踏み込みました。思考モニターには「CPU駒の正体を表示」という研究用のスイッチがあり、盤上のCPUの駒の正体を見られます。その状態なら、ツールチップにも正体を出してよいのではないか。

研究モード中はCPU駒の正体を表示ONはツールチップも表示でいい。モニターじっくり見れば分かることをチップで隠さなくてもいい。勝てない人のチートモードともいえる

これは次の1.2.0で、研究モードだけの例外として入りました。対戦モードでは常に無効で、取られた敵の駒は研究モードでも裏面のままです。Claude Codeは、この機能が「敵駒の表面を見せない」という既存の規約と衝突することを指摘したうえで、条件付きの例外として規約を更新してから実装しています。

人間が遊ぶと、テストにないものが見つかる

CPUは、見たものを全部覚えて推理します。人間は忘れます。そこで、盤上の事実から確定したことだけを画面が肩代わりすることにしました。CPUの頭の中を見せる研究モードと、人間の記憶を補う判明表示。今回の軍人将棋は、この2つで「知り得る情報」を扱うゲームになりました。

一方、1.1.1のテストは200万件を超えて通っていました。それでも遊ぶと、研究モードの「おまかせ配置」が反応しない、といった点が出てきます。

次回は、テストが通っているのに人間が触ると見つかる問題が、立て続けに出てきた話です。効果音は、鳴っているはずなのに一度も鳴っていませんでした。

afさんのAIラボのトップへ

前の記事:見えない駒を、CPUはどう推理するのか。Claude Codeと作る軍人将棋【第1回】

次の記事:テストは通っていた。人間が遊んで見つけたもの。Claude Codeと作る軍人将棋【第3回】

ゲーム制作の一覧へ

ソース一式と最新バイナリー

AF-MilitaryShogiのソース一式と、現在の公開版はGitHubから利用できます。この記事は制作当時の記録で、最新バイナリーの内容とは異なる場合があります。

コメント

タイトルとURLをコピーしました