「AI駆動」という考え方がおもしろかったので、AIに処理を完全に任せてボードゲームを作って遊んでみた。
AI駆動
AI駆動型のシステムとは、AIにシステムの制御を任せることで、柔軟で効率的なアプリ開発を実現する新しいアーキテクチャ。
代表的なのがMVAアーキテクチャで、MVCのコントローラの部分をAIに任せてしまうことで、開発が楽になる上、ユーザーから想定外の入力があっても柔軟に対応できるのが利点。
今回は若干AI駆動とは異なるかもだけど、AIを制御の中心に添えて、何でもできるボードゲームマスターを作ってみた。
構築

今回プロンプトを練る時間があまりなかったので、LLMにはo1を使用。
GPT4oだとうまく動作しなかったけど、プロンプトをもっときちんと考えれば4oでも動くかも。
※特に判定処理がいまいちでループすることも有効な手を無効と判断することも多かった
手順1:ゲーム名の取得



※ここは難しいタスクではないので4o-miniで。

手順2:先手の確認

※1対1のボードゲームのみ想定


手順3:駒の定義、ボードゲームの初期状態生成、初期盤面描画



あたなはボードゲーム「 game_name 」のゲームマスターです。
プレイヤー「 user 」「 AI 」が game_name を開始します。
それぞれのプレイヤーの駒の種類(色など)を定義してください。
先手は「 turn 」です。
# example 1
## input
### ゲーム : オセロ
### プレイヤー : User, AI
### 先手 : User
## output
[{"player":"User", "piece":"黒"}, {"player":"AI", "piece":"白"}]
# example 2
## input
### ゲーム : チェス
### プレイヤー : User, AI
### 先手 : AI
## output
[{"player":"User", "piece":"白"}, {"player":"AI", "piece":"黒"}]


以下の条件で、ボードゲーム「 game_name 」の盤面の状況を、指定のJSONスキーマで出力して。
# 条件
## 1. プレイヤーは「 user 」または「 AI 」とし、先手は「 first_player 」とする
## 2. 各プレイヤーの駒の種類は「 piece_owner 」の通りとする
## 3. 「オセロ」などボードのサイズが決まっていないボードゲームの場合、5分ほどで終わるボードのサイズにすること
# JSON
"board": {
"height": int, // ボードのサイズ、[横, 縦](例:チェスは[8, 8])
"width": int,
"grid": [ // ボードの状態を表現するグリッド
{
"position": "string", // ボード上の位置(例:チェスの「e2」、オセロの「d4」など)
"piece": { // 駒の情報(駒がある場合のみ)
"owner": "string", // 駒の所有者( user or AI )
"type": "string" // 駒の種類(例:「黒石」、「白石」など)
}
}
]
}



手順4:ユーザーまたはAIが手を打つ(駒を進める)




手順5:打った手をチェックする

※この判定が難しいらしく、4oでは全くうまくいかなかった。。。

あなたはボードゲーム「 game_name 」の審判です。 以下のJSONであらわされる盤面において、プレイヤー「 turn 」が一手を打ちました。 この一手が「有効か無効か」を判定してください。 また、この一手により「勝敗が決定したか」も併せて判定してください。 # プレイヤーがプレイ中のボードゲーム game_name # 各プレイヤーが使う駒の種類 piece_owner # 現在の盤面 board # 現在の盤面に対する、プレイヤー「 turn 」の手 move # output isValidMove : その一手が有効(true)か、無効(false)か isDecisiveMove : その一手で勝敗が決したか(true)、否か(false) reason : 有効でない場合の理由を日本語で表記

手順6:勝敗の確認


手順7:盤面を進める

※ここも4oだとうまく動かないことが多かった。。



以上で構築は完了。
動作確認
オセロ




チェス





ということで、こちらも遊べそう。
チェッカー


ということで、限界はあるみたいだけど、ほぼプログラムなしでゲームを作れるのがすごい。
コメント
とても勉強になります。m(_ _)m
記事の内容と外れた質問で申し訳ないのですが処理フロー図はなにかツールを使って作成したものでしょうか。
シンプルでありつつ見やすいフロー図なので作成方法が気になりました。
|˙꒳˙)
コメントありがとうございます!
今回の図はFigmaを使用して作成しました^ ^
ありがとうございます!
使ってみたいと思います。
m(__)m