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のミニマックス法に、「あと少しで並びそうな形」の見積もりを足しました。見積もりとは、盤の形を見て、どちらに有利かを点数にすることです。
自動対戦では、ゲームそのものの様子も測りました。「やさしい」同士を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)が下書きし、筆者が確認して公開しています。
