![見出し画像](https://assets.st-note.com/production/uploads/images/158798665/rectangle_large_type_2_a9d7a001f034b8945c67a7cd92364d61.png?width=1200)
【結果】AIを活用したボードゲーム開発への挑戦
この記事は、下記の記事で宣言した挑戦の結果についての報告記事です。
先ほどの記事で宣言した通り、ここ1週間ほどの間、AIを活用して2人対戦のボードゲームを作るチャレンジに取り組んでいました。
ゲームのコンセプトやルールはChatGPTを使って生成し、私がそれを調整し、更なる調整のためにAlphaZeroを活用してテストプレイを行うということを実際に行ってみました。今回はその結果について報告します。
なお、今までの進捗報告は読まなくても大丈夫な構成にしてありますが、読みたい人のために下記にまとめておきます。
1. 【結果】ゲームルールについて
ChatGPTにルールやゲームの基本コンセプトを生成してもらうというステップから始めました。これについては前の記事でも紹介しましたが、ChatGPTが生成した初期ルールを下記に再掲します。
ChatGPT提案のルール: シークエンスバトル
ボード: 7x7のグリッド
トークン: 各プレイヤーは数字1~5のトークンを無制限に持っている
目的: 自分の手番でトークンを配置し、縦・横・斜めのいずれかで合計が「10」になるシークエンスを作る
ゲームプレイ: プレイヤーは交互にトークンを配置し、合計10になるシークエンスを作るとトークンを取り除いて1ポイントを得る
終了条件: ボードが埋まるか、連続でパスが続いた場合に終了し、ポイントの多いプレイヤーが勝利
これを受けて、私はルールを次のように修正しました。
修正後のルール
ボード: 同じく7x7のグリッド
トークン: 各プレイヤーは1~3のトークンを無制限に持つ
目的: 相手に縦・横・斜めのラインで合計が5を超えるシークエンスを作らせること、または4隅のいずれかに自分のトークンを配置すること
ゲームプレイ: プレイヤーは交互に、すでに置かれたトークンに縦横で隣接した空きマスにトークンを配置する。縦横斜めのラインで5を超えるシークエンスができた場合、そのプレイヤーの負け
勝利条件: 4隅のいずれかにトークンを配置し、5を超えるシークエンスが発生しなければ勝利
修正後のルールでは、トークンの数字を少なくすることで戦略性が増し、短時間でシンプルな判断を求められるゲームになりました。プレイヤーが失敗するとその場で負けが確定するため、スリリングな展開が期待できます。
そしてここで私とChatGPTの間でコミュニケーションミスが生じました。
実際にChatGPTが生成したコードは、以下のルールに基づいていました。私は斜めにも5を超えるシークエンスができたら負けというつもりだったのですが、縦横だけになっていました。
ChatGPTの認識に基づいて修正されたルール
ボード: 7x7のグリッド
トークン: 各プレイヤーは1~3のトークンを無制限に持つ
目的: 相手に縦・横のラインで合計が5を超えるシークエンスを作らせること、または4隅のいずれかに自分のトークンを配置すること
ゲームプレイ: プレイヤーは交互に、すでに置かれたトークンに縦横で隣接した空きマスにトークンを配置する。縦横ラインで5を超えるシークエンスができた場合、そのプレイヤーの負け
勝利条件: 4隅のいずれかにトークンを配置し、5を超えるシークエンスが発生しなければ勝利
気づいた段階でやり直してもよかったのですが、コードも生成されているので実際に遊んでみて斜めの条件を追加するかどうかを判断することができます。実際に遊んでみた結果、縦横だけでも十分に複雑であり、これに斜めを加えると複雑になりすぎると思いました。そして、このルールで面白さを感じ取れたため、このルールを最終版としました。
ゲームタイトルは「ラインファイブ」としました。これはChatGPTと相談せずに独断で決めました。わかりやすい名前が良いですよね。
他には、以下のようなルールのゲームも考えましたが、最終版のルールで十分に楽しめそうだったので実装することなく見送りました。
5を超えると負けではなく、7ちょうどを作ると勝ち。駒は1と2の2種類。ゲームタイトルは「ラッキーセブン」(すでに同じタイトルのボードゲームがあるから、このタイトルは駄目。タイトルありきで思いついたルールなので、没。5より7の方が計算が大変になるし。)
1から3の駒を無限に持っているのではなく、ランダムに何個かの駒を持っていて、その中から好きな駒を置く。置いたら、黒い袋からランダムに駒を1個補充する。持っている駒は相手からは見えるというルールも考えられるし、裏向きにしておいて相手からは見えないというルールも考えられる。(変に運の要素を加えなくても十分面白いと思ったので、没。)
2. 【結果】テストプレイでのAI活用
先ほど、実際にプレイしてみたうえでルールを最終版にしたという話をしました。実際にプレイする際には、AIに対戦相手になってもらいました。
対戦相手には最近流行の生成AIではなく、AlphaZeroというAIを活用しました。昔、AIが囲碁でプロに勝利したことが話題になりましたが、その時使われたAIアルゴリズムがAlpahGoです。AlphaZeroはその後継AIアルゴリズムであり、チェスや囲碁のようなゲームを自力で学び、最適な戦略を見つける能力を持っています。今回はMITライセンスの「alpha-zero-general」というGitHubリポジトリを利用し、ChatGPTにその実装を手伝ってもらい、このオリジナルゲームでの戦略をAlphaZeroに学習してもらいました。
AlphaZeroは囲碁で一流プロ棋士に勝てるほどの能力を持っていますが、そこまで学習させるには大量の計算リソースを必要とします。私はそこまで計算環境にお金をかけられないので、学習初期のAIと対戦を行いました。
学習初期なので全然強くないのですが、それはよい点もありました。相手が変な手を打ってくることで、何が悪い手かといったゲームについての理解が進んだ点もありました。ゲームバランスの調整のためにAIを活用するという意味では、最強AIではなくても調整の役に立ったのです。
ゲームについての理解が進んだことで、このルールでゲームとして成立するという判断もできました。つまり、一定程度複雑であり、先手と後手どちらかが一方的に有利ではないという判断ができました。
先手と後手が互角というのは私の判断であり、今後ゲームについての理解が進むと、どちらかが有利という結果になる可能性はあります。これについては、pythonで先手と後手どちらが勝つか完全解析を行うプログラムも組んで確認しました。12時間ほどかかっても解析が終わらなかったので、この結果からもこのゲームの奥の深さは伺えるでしょう。
また、AIとの対戦で得た知見を、ルールベースという形でAIに反映することで、計算環境が限られた中でもそこそこ強いAIを作ることができました。
3. 【結果】公開用ゲームとしての実装
挑戦の結果をみなさまに示すには、実際にAIと対戦できる形にして公開するのが一番だろうと考え、unityroomでゲームを公開することにしました。pythonで書かれたコードをUnityに移植するのは本来とても面倒な作業ですが、ChatGPTのおかげで楽々と進めることができました。
しかし一方で、トラブルも生じました。Unityエディタ上で動作していても、WebGLビルドすると動作しないという事象が発生しました。unityroomで公開するためにはWebGLビルドをする必要があるのですが、ブラウザで動作させるためには色々と制約が強いみたいです。私は事前知識が足りなかったので、自分が苦楽を共にしてきたAlphaZeroをゲームに組み込めないことを公開直前になって知ったのでした。正確には、AlphaZeroの中で使われているニューラルネットワークが大きすぎたようで、ニューラルネットワークをブラウザ動作版に組み込めなかったのです。
ここで、AIにルールベースを導入していたことが役に立ちました。ルールだけでも遊べるレベルの強さのAIが作れていたのです。そこで、ルールベースAIを公開ゲームのAIレベル1として採用しました。これはシンプルなルールに従って、ルールの範囲でランダムに手を決めるAIなので計算負荷が低く実装向きです。
さらに、そのAIをベースにして、AlphaZeroではない旧来のモンテカルロ木探索を実装し、シミュレーション回数に応じて公開ゲームのAIレベル2, レベル3として実装しました。モンテカルロ木探索というのもAIアルゴリズムの一つで、AlphaZeroが出る前は囲碁のAIとして有名だったようです。AlphaZeroも、内部でニューラルネットワークとモンテカルロ木探索を組み合わせて作られたAIです。今回はニューラルネットワークが大きくてブラウザ版に組み込めなかったため、ニューラルネットワークを使わない単なるモンテカルロ木探索を用いたという経緯です。
それでも、スマホではレベル2, レベル3のAIは動作しません。
仕方がないので、今回はスマホ対応のタグを付けていません。
負荷を抑えて強いAIプログラムを書くというのは難しいですね。
このように、テストプレイで用いたAlphaZeroのAIをそのまま公開用ゲームのAIに使うことには失敗しましたが、テストプレイで得た知見をもとに公開用ゲームのAIもスムーズに作り上げることができました。もちろん、実装が爆速で済んだのはChatGPTのおかげです。
4. 【まとめ】今回の挑戦の総括
今回のチャレンジで想定しているボードゲーム制作のフレームワークは以下のようなものでした。
![](https://assets.st-note.com/img/1729497308-o9WLlDxiuzgFvjwfpecVSPNO.png?width=1200)
実際には下記のようになり、おおむね当初想定していたフレームワークの通りにボードゲームを制作することができました。ボードゲームを制作する挑戦としては、成功といってよいでしょう。たったの1週間で形になったのは自分でも驚きです。
![](https://assets.st-note.com/img/1729497439-i7dUkO5Vrajy8vHLxGcQh69f.png?width=1200)
もちろん、制作されたゲームがあまりにもつまらないものであれば、取り組みが成功であったとは言えません。今回の挑戦の結果として得られたゲームがどのようなものであったのか、ぜひ実際にゲームをプレイしてみてみなさま自身が確かめてみてください。
今後は、BGMや効果音、遊び方説明の追加、置ける場所のヒント表示などゲームとしての質をある程度までは上げていく予定ですが、AIの開発やルールの整備についてはこれ以上行う予定はありません。ボードゲームとしてのルールはこれで完成形だと思っています。
5. 【まとめ】今後について
今回、AIを活用したボードゲーム開発というアプローチの可能性は示せました。次は、別のタイプのボードゲームとして、運の要素があるボードゲームをAIと一緒に作りたいと考えています。
すでに着手し始めていますが、今度はAIから出てきたアイデアが、ゲームバランスを取るのが非常に難しそうなものでした。この取り組みについてはある程度進んでから、うまくいきそうならまた語らせて頂くことにします。
6. 【追伸】ボードゲームとは何か
今回のゲーム、実は、ボードも駒もいらない。
紙とペンがあればよい。消しゴムもいらない。
これはボードゲームなのか。
紙ペンゲームなのではないか。
ボードゲームとは何ですか
ボードゲームとは、プレイヤーが物理的なボード(盤)やコマ、カード、サイコロなどの道具を使って楽しむゲームのことです。一般的に、ボード上に描かれたフィールドやルートに沿ってコマを動かし、ルールに従って勝利を目指します。テーマやルールは多様で、戦略性を重視するものや運に左右されるもの、協力してクリアするものなど、さまざまな種類があります。
ボードゲームは家族や友人同士での交流や、コミュニケーションを楽しむことができる娯楽であり、世界中で古くから親しまれています。有名なボードゲームには『モノポリー』や『人生ゲーム』、さらに近年人気の『カタンの開拓者たち』や『ドミニオン』などがあります。
〇×ゲーム(三目ならべ、tic tak toe)もボードゲームに入りますか?
はい、〇×ゲーム(三目ならべ、Tic Tac Toe)もボードゲームに含まれます。ボードゲームの定義には、プレイヤーが物理的なボードやルールに基づいて競い合うゲームが含まれるため、〇×ゲームもこのカテゴリーに該当します。
〇×ゲームは特にシンプルなボードゲームの一例で、3×3のグリッドに〇と×を交互に書き込み、縦・横・斜めのいずれかに同じ記号を3つ並べることを目指すゲームです。その簡単なルールと短時間で遊べる性質から、子供から大人まで楽しむことができるゲームです。
うん。
ChatGPTがこう言っているのだ。
これはボードゲームだ。
五目並べだって紙とペンがあればできる。消しゴムもいらない。
でもボードゲームだ。
だったら、これも、ボードゲームだ。
紙とペンがあれば遊べるから、商業的にはダメな気がするが、
だとしても、これは、ボードゲームだ。
![](https://assets.st-note.com/img/1729498834-Qrc3pTWf9VtzqU5XO1Fuo4g0.png?width=1200)
![](https://assets.st-note.com/img/1729498942-z8EwPB6FZ2WkGOn9T40bHLla.png?width=1200)
![](https://assets.st-note.com/img/1729499037-DPfgnWBOQtLTH69uGUF4M3c1.png?width=1200)
必要なのはボードと駒だけだよ。
プレイエイドもスコアシートも必要ないよ。
最後まで、長文にお付き合いいただきありがとうございました。
内容が面白いと思っていただけましたら、イイネを頂けると励みになります。また、ゲームの感想など、コメントもお待ちしております。
それでは、また別の挑戦で、Noteでお会いしましょう。