4×4のまるばつ新作をAIと試作:CPUの強さは1000局の自動対戦で決めた

iOSのボードゲームアプリに、新しいゲーム「おすそわけ まるばつ」の試作を足しました。決まりは考えてあっても、操作の形やCPUの強さは、作ってみないと決められません。この記事では、Claude Code に何を頼み、CPUの強さを数字でどう決め、何が確かめられずに残ったかを書きます。

作りたかったもの

「おすそわけ まるばつ」は、4×4の盤で遊ぶ、まるばつの変わり種です。1回の手番で、隣り合う空きマス2つを選びます。片方に自分の印、もう片方に相手の印を置きます。

勝ち負けの決まりも少し変わっています。誰が置いたかは関係なく、並んだ印の持ち主の勝ちです。自分の手番で、うっかり相手の印を並べてしまうこともあります。

引き分けは2つあります。1つは、自分と相手の並びが同時にできたとき。もう1つは、隣り合う空きマスが残っておらず、置けなくなったときです。

試作でできてほしいことは、次のとおりでした。

  • 4×4の盤で、印を置く操作が動く。
  • 2人で対戦できる。CPUとも「やさしい」「つよい」の2段階で対戦できる。
  • どの遊び方でも、最後まで遊べる。
  • CPUの「つよい」がどのくらい先を読むかは、自動対戦で測った数字を根拠に決める。
  • 子どもに遊んでもらうときの、試遊の記録用紙も用意する。

AIへの頼み方

作業は Claude Code に任せました。頼むときに、「できた」と言える条件を先に書いて渡しました。たとえば次のような条件です。

  • 隣り合う2マスに置く操作は、2回のタップで行う。同じマスをもう一度タップしたら取り消せる。
  • 勝ち・引き分けの決まりが、上に書いたとおりに動く。
  • ゲームの決まり、CPU、画面のそれぞれに、自動のテストを書いて全部通す。
  • 画面を行き来できること、勝ちになることを、画面の自動テストで確かめる。
  • 「つよい」の読みの深さは、自動対戦で実際に測って、根拠を書き残す。

ここで言うテストは、プログラムが決まりどおりに動くかを、人の代わりに自動で確かめる仕組みです。条件を先に決めておくと、AIの「できました」が本当かどうかを、テストの結果で見分けられます。

Claude Code は、ゲームの決まりを判定する部分、CPU、画面を、それぞれ分けて作りました。アプリには前から別のゲームが入っていて、新しいゲームはタイトル画面の4番目に並びます。

つまずいたところ

1手に2回のタップが要る

ふつうのまるばつは、1回タップすれば1手が終わります。このゲームは2マスを選ぶので、操作が1段増えます。どこまで選んだのか、次に何をすればよいのかを、画面で分かるようにする必要がありました。

「つよい」CPUを深く読ませると、測り終わらなかった

CPUの「つよい」には、ミニマックス法という、先の手を読んで手を選ぶ方法を使いました。「深さ」は、何手先まで読むかを表す数です。深くするほど強くなりそうですが、そのぶん調べる手の数が増えます。

このゲームでは、1つの局面(ある時点の盤の状態)で選べる手が48通りあります。4×4の盤には、隣り合う2マスの組が横に12組、縦に12組あります。どちらのマスに自分の印を置くかで2通りになるので、24組×2で48通りです。

深さを2以上にすると、自動対戦での計測が終わりませんでした。そのため、深さ2以上の強さは測れていません。

手で触って確かめられなかった

作業をしていた間、Mac の画面がロックされていました。そのため、シミュレーター(Mac の上で iPhone の画面を動かす道具)で、手で対局して確かめることができませんでした。文字をいちばん大きくしたときの見え方や、iPad を横向きにしたときの見え方も、目では確かめていません。

どう判断したか

操作は「仮置き」と「案内文」で迷わせない

2回タップの操作は、次の形にしました。

  • 1回目のタップで、その場所に印を薄く仮置きする。
  • 置ける候補のマスを、破線の枠で示す。
  • 同じマスをもう一度タップすると、取り消せる。
  • 隣でない空きマスをタップすると、仮置きがそちらへ移る。
  • 画面の案内文で、次にする操作をいつも表示する。

選んでいるマスの流れを図にすると、次のようになります。

stateDiagram-v2
  [*] --> 何も選んでいない
  何も選んでいない --> 仮置き中 : 空きマスをタップ
  仮置き中 --> 何も選んでいない : 同じマスをタップ
  仮置き中 --> 仮置き中 : 隣でない空きマスをタップ
  仮置き中 --> 置いて確定 : 破線の枠のマスをタップ
  置いて確定 --> [*]

隣でない空きマスで仮置きが移るので、別の場所に置き直したいときも、取り消しを挟まずに選び直せます。

CPUの「つよい」は深さ1にした

「やさしい」は、次の順で手を選びます。

  1. 自分が勝てる手があれば、それを打つ。
  2. 相手を勝たせてしまう手は避ける。
  3. 残りから、でたらめに選ぶ。

「つよい」は、深さ1のミニマックス法に、「あと少しで並びそうな形」の見積もりを足しました。見積もりとは、盤の形を見て、どちらに有利かを点数にすることです。

自動対戦では、ゲームそのものの様子も測りました。「やさしい」同士を1000局戦わせると、996局で勝ち負けがつき、引き分けは4局でした。ほとんどの対局で、最後には勝ち負けがつく遊びになっています。

そのうえで、深さ1の「つよい」を「やさしい」と戦わせました。「つよい」の勝つ割合は96.5%でした。深さ1で、「やさしい」とはっきり差がつく強さになっています。深さ2以上は測れなかったので、数字で根拠を示せる深さ1を選びました。

できたもの

確かめたことと、まだ確かめていないことを分けて書きます。

確かめたことは次のとおりです。

  • ゲームの決まりやCPUなど、部品ごとに動きを確かめるテスト(ユニットテスト)が177件、全部通った。そのうち新しく足したのは31件。内訳は、ゲームの決まり11件、CPU11件、画面とゲームの決まりをつなぐ部分9件。CPUの11件のうち、強さを測る1件は、ふだんは実行しない設定にしてある。
  • 人の代わりに画面を操作して確かめるテスト(UIテスト)は、iPhone 16 で36件が全部通った。新しく足したのは4件。iPad 専用の3件は、iPhone では実行しなかった。
  • UIテストの結果に添付された画面で、仮置きしている途中の画面と、勝負がついたあとの画面を、目で見て確かめた。
  • 試遊の記録用紙を作った。

まだ確かめていないことは次のとおりです。

  • シミュレーターで手で対局すること。
  • 文字をいちばん大きくしたときと、iPad を横向きにしたときの見え方。いまあるUIテストで確かめているのは、前からあるゲームだけ。
  • 子どもに遊んでもらう試遊。

まとめ

  • 決まりが変わったゲームは、操作の形が肝になります。仮置き・候補の枠・案内文で、「次に何をするか」を画面に出し続ける形にしました。
  • CPUの強さは、感覚ではなく自動対戦の数字で決めると、根拠を説明できます。測れなかった深さは、測れなかったと書き残しました。
  • AIに頼むときは、「できた」と言える条件を先に書いて渡すと、確かめた範囲とまだの範囲がはっきり分かれます。

次は、手での対局と見え方の確認を済ませてから、記録用紙を使って子どもに試遊してもらいます。

参考にした資料

この記事は、筆者の開発記録をもとにAI(Claude)が下書きし、筆者が確認して公開しています。