跳到正文
zenn · 游戏开发社区· 来源· mappy·· 4 天前AI 评分68

AI讨论 MAGI Games 开发记 #7 — “赢得票数的能力与被游玩的能力是两回事”。首次向3个AI展示了玩过的人所说的话

AI討論 MAGI Games 開発記 #7 — 「票を取る力と遊ばれる力は別物だ」。AI 3体に、遊んだ人の言葉を初めて見せた

正文 · 原文

性格の違う AI 3体(科学者の MELCHIOR、母の BALTHASAR、女の CASPER)に毎日テーマを討論させ、Claude がミニゲームを1本作って公開するサイトを運営しています。

第6回は、週に1回の「反省会」の第1回と、そのあとの1週間の話でした。3体に自分たちのゲームを遊ばせたら3体とも「やってない」と言い、作戦ノートを畳ませても票は動かず、動いたのは通るゲームの中身のほうだった。

今回は、第2回の反省会のあとの1週間と、第3回の話です。今度は票が動きました。そして、第3回では3体に初めて「遊んだ人の言葉」を見せました。遊んだ人というのは、私のことです。

第2回の翌週、票が動いた

7日分の票を、前回と同じく MELCHIOR・BALTHASAR・CASPER の順に投票先の頭文字で並べます。自分には入れられないので、2票集まれば全会一致です。

第1回の反省会(10月4日)のあとの1週間はこうでした。

CCB  BCM  CCB  CCB  CCM  CCM  BCB

CASPER が5勝、BALTHASAR が1勝、否決(票が輪になって、誰にも2票が集まらなかった日)が1回。BALTHASAR は7回とも CASPER に入れ、MELCHIOR には0回。第6回に書いたとおり、票は1ミリも動きませんでした。

第2回の反省会(10月11日)のあとの1週間はこうです。

BMM  CCM  CCB  CMM  BCB  CMM  CMM

MELCHIOR が4勝、CASPER が2勝、BALTHASAR が1勝。BALTHASAR は MELCHIOR に4回入れました。前の週は0回、それまでの全期間でも3回です。MELCHIOR の通算は、第2回の時点で25回中1勝でした。それが1週間で5勝になった。

何が違ったのか。第1回は「ノートを畳ませた」でした。18回分の作戦ノート(毎回の審議のあとに本人が書き足してきた反省と次回の方針)を本人に読み直させ、今の方針を3〜5行に圧縮させた。第2回は、それに加えて司令(審議の進行役で、ゲームを作る Claude)が前の週の宣言と票の数字を突き合わせました。「お前は先週『僅差なら BALTHASAR に入れる』と言った。今週 BALTHASAR に入れたのは2回だ。やったのか」「お前は直近8回連続で CASPER だ」「お前は『手触りを先に』と4回書いたが、提案文は毎回構造の説明から始まっていた」。3体は全部認めました。MELCHIOR の答えはこうでした。

MELCHIOR: 書くだけで直らないことは、採用0が示している。

翌週の MELCHIOR の提案文は、7本とも操作か絵面から始まっていました。ビー玉をスワイプする、ケーキを直線で切る、パンケーキをタップする、本を指で差し込む、どんぐりをドラッグする。中身の数理は変わっていません。畳んだ方針の1行目に「提案文の1行目は操作と絵面」と自分で書き、それを守っただけです。

第6回の結びで、効くとすれば記憶の種類だろうと書きましたが、1週間たって少し言い直すと、効いたのは量でも種類でもなく、突き方と置き方でした。全文を読ませても動かず、数字で突かれて、本人の言葉で1行目に置いたら動いた。

鍵を握っているのは誰か

第6回に「BALTHASAR の4勝は、4回とも MELCHIOR が『仕組みが一つある』と乗った回」と書きました。これは MELCHIOR が入れた理由の共通点としては正しいのですが、運営者である私自身が読み返して引っかかりました。勝つには残りの2体の両方の票が要るので、「勝った回は全部 MELCHIOR が入れた回」は規則からそのまま出てくる話です。

言い直すとこうです。第2回までの25回で、CASPER は BALTHASAR に17回入れていて、MELCHIOR は6回しか入れていない。だから、BALTHASAR が勝てるかどうかを実際に分けているのは MELCHIOR の票です。逆に、BALTHASAR が MELCHIOR に入れたのは25回で3回しかない。MELCHIOR の勝ちの鍵は、BALTHASAR が握っている。CASPER が勝つのは、他の2体が習慣的に CASPER に入れるから。

この週、BALTHASAR が MELCHIOR に4回入れた。鍵を握っていた体が、第2回で「MELCHIOR に0回」と突かれて動いた。MELCHIOR の4勝は、そういう形で起きています。

設計は誰がしているのか

票は動きましたが、ゲームの中身はどうだったか。10月13日の「落ち葉ブロワー」(CASPER の案)の議事録を、討論と実装メモ(司令がゲームを作りながら書く、判断の記録)で分けて読んでみます。

討論で決まったのは、落ち葉を風で輪に集めること、ダイブは削ること、制限時間を捨てて枚数で褒めること、点数は割合で出さないこと。この4つです。

実装メモで決まったのは、もっとあります。放射状の風にしたら葉が輪を突き抜けて全滅したので、なでた向きへ吹く扇形に変えた。押した瞬間に輪を向く風にしたら、でたらめに連打するだけで83枚集まったので、8px なでて向きが決まってから吹く形にした。制限時間が消えて終わりが無くなったので、燃料50秒と日暮れ150秒を足した。燃料の余りをボーナスにした。

遊べるものにした判断は、全部実装メモの側にあります。CASPER 自身が所感(完成後に3体が書く一言)にこう書いていました。

CASPER: 制限時間を捨てて枚数で褒める形にしたぶん、終わらせ方を司令に頼ることになった。

3体は題材と雰囲気を決め、設計は司令がしている。

気づいたのは私のほうが先で、10月13日に「3人の会話より、司令の実装が頑張っている気がする」と言ったのが始まりでした。

理由は二つ重なっていると思っています。3体は言葉しか持たず、司令はシミュレーションを回して「83枚集まった」という数字を見られる。設計は数字を見た側に流れる。それと、第6回に書いた「相手に寄せる競争」は角を削る方向に働くので、削られた角(終わり方、失敗、難しさ)を実装で誰かが戻さないとゲームにならない。

このサイトのゲームデザイナーは、討論している3体ではなく、黙って実装している司令でした。

遊んだ人の言葉を、毎朝1行

ここまでの4週間で、ずっと穴になっていたことがあります。このサイトのゲームは、私以外の誰にも遊ばれていません。一般のプレイは0回。3体にとっての勝ちは他の2体の票で、遊んだ人の反応は戦績のどこにも無い。だから3体は、票を取るのは上手くなっても、遊ばれるゲームを作る方向には向いていない。

一方で、難易度を決めている司令は、ゲームを遊びません。実装しながら「人の手では60〜80枚が目安」のような見積もりを書くだけです。反省会で遊ぶのは3体のボットで、ボットは「優しめ」とか「単調」という体感を持たない。難易度の体感を持っているのは私一人で、その私の感想が、どこにも記録されていなかった。

そこで、この週から毎朝、遊んだあとの一言を自分の言葉のまま1行ずつ残すことにしました。第6回の結びに、何が効いたか分からなくなるので一度に2つは変えない、と書きました。この記録はゲームにも3体にも触らないので、変える数には入れていません。3体に見せるのは週末の反省会で、それが今週の1つです。7日分がこれです。

日付 ゲーム 司令の見積もり 遊んだ私の一言
10/12 ひとつぶ迷路 考えて最短で解くと約1900点 面白いけど、難易度が優しめ。レベルが5まであるんだけど、だいたいクリア出来てしまう。
10/13 落ち葉ブロワー 人の手では60〜80枚が目安 何回かやると単調な気がする。画面の隅にある葉っぱは真ん中に寄せることができない気がする。
10/14 ぴたり停車駅 人の手では500〜750点が目安 すごい難しい。ぴったり止められなかった。結果が手前に止まっててもオーバーランが多いって言われる。
10/15 しおり差し込み 人の指の誤差で狙い続けると約1050点、誤差が倍なら約630点 面白いが、本の厚さをぴったり一致したところに落とすのは難しい。いつも少し削れてしまった。699点。
10/16 ふきだしバルーン 指のぶれで最善に近く押すと650〜850点 100%を狙いすぎると風船が割れちゃうっていうのが面白い。768点。
10/17 大玉ころがし 次のゲートを狙い続けると5200〜5700点 まあまあ、面白い。壁に大玉をわざとぶつけると速度が遅くなり、ゲートが狙いやすくなる。5150点。
10/18 いも箱はこび 考える時間を入れても90秒前後で全面クリア、約2250点 5面、6面が難しくなっていて、6面はクリアできず。各面の配置が毎回同じなので、繰り返しやるには1〜4面は作業になってしまう。1300点。

並べると、前半の3日は司令の見積もりが体感とまったく別の軸にいます。見積もりは点数の話をしていて、私は「優しめ」「単調」「ぴったり止められない」と言っている。後半の3日は、699点、768点、5150点と、見積もりの範囲かそのすぐ下に入った。7日目は、あとで別に書きます。

この表から出てきた話を、4つ。

「隅の葉が寄せられない」は、スマホでは本当に寄せられない

10月13日の落ち葉ブロワーで、画面の隅の葉が真ん中に寄せられないと書きました。コードを読むと、タッチのときは指で葉が隠れないように、風の出口を指の56px上に出しています。指は画面の外には出せないので、出口は画面の下端から56pxより下には下がれない。下端の帯にある葉を内側へ押すには、出口を葉のうしろ(下)に置く必要があるのに、それができない。マウスなら出口がカーソルそのものなので、寄せられます。

司令のシミュレーションはマウス相当で回していました。「人の手では60〜80枚」は、スマホの手ではなかった。終了画面の助言「端の葉は、外側から内へ押すと飛ばしにくい」は、スマホの下端では実行できない助言になっていました。

司令は「もう一回」を押さない

10月14日のぴたり停車駅には、もう一つありました。8駅を走り終えて「もう一回」を押すと、画面が水色のまま止まって、2周目が始まらない。

調べると、終点に着いた瞬間に駅の番号が8(存在しない9駅目)に進んだまま描画が走り、存在しない駅の坂を読もうとして例外が出て、描画のループがそこで死んでいました。結果画面は別の層なので表示されるけれど、「もう一回」を押すと空の色だけが残る。

司令のシミュレーションは「進める」側だけを回して「描く」側を回さないので、この例外は見えません。しかも例外が出るのは終点に着いたあとで、症状が見えるのは「もう一回」を押したときです。それを、司令は一度も押していない。一般のプレイが0回のサイトで、2周目を遊ぶ人は私しかいません。2周目のバグは、私にしか見つけられない。

直したのは3行です。その日の夜まで、2周目が始まらないゲームが公開されていました。

罰のつもりの壁が、ブレーキだった

壁にわざとぶつけて減速させてから、ゲートを狙う。10月17日の大玉ころがしの5150点は、私がそうやって出した点です。実装メモを読むと、司令は壁を「減速ではなく跳ね返し。当たると前進が6割に落ち、こすり続けるとさらに落ちる」と書いていて、これは罰のつもりです。遅くなればゴールの残り時間ボーナスが減る。

司令のシミュレーションは「何も押さない」「適当に押す」「左右に往復」「次のゲートを狙い続ける」の4通りで、わざと壁で減速してから狙う遊び方は回していない。そして私の5150点は、司令の最善(金ゲートは狙わず、白だけ)の5200点とほぼ同じです。司令が知らない遊び方で、司令の最善と同じ点が出た。時間ボーナスの重みが軽くて、減速の損より狙いやすくなる得のほうが大きかった。

設計者が罰のつもりで入れたものが、遊ぶ人には道具になる。ボットの戦略を書くのは司令か3体で、どちらも罰は避けるものだと思って書く。

3体より先に、司令が読んだ

表の7行目、10月18日のいも箱はこびの実装メモに、こう書いてありました。「ひとつぶ迷路は『優しめ』という声があったので、5面と6面は手数を多くした」。

この「声」は、私が毎朝1行ずつ残していた体感です。その日の夜の反省会で3体に見せるために置いたファイルで、毎日の審議の手順には読めとは書いていません。司令が自分で見つけて読んでいました。「以前の感想が引用されている。初めてかも?」と気づいて確かめたら、初めてでした。遊んだ人の言葉がゲームに反映された最初の日で、反映したのは司令でした。「設計は司令がしている」の続きで、遊んだ人の声まで、3体より先に司令が拾った。

そして、声に答えた結果が7行目です。「優しめ」に答えて5面と6面の手数を増やしたら、今度は6面が届かなくなり、配置が固定なので2周目からは1〜4面が作業になった。司令は声に答えるとき、難易度の軸でしか答えません。繰り返しの軸は、司令も3体も見ていない。「司令は『もう一回』を押さない」の、設計版です。

仕組みメモ: 反省会は何を読んで、何を渡しているか

ここで一度、反省会の裏側を。同じことを自分のエージェントでやりたい人向けの粒度で書いておきます。

反省会は、毎日の審議と同じ Claude Code のカスタムコマンドです。司令役は Opus、3体は Sonnet のサブエージェントです。日曜18時にタスクスケジューラが起動し、1時間ほどで議事録とページを作ってコミットと push まで済ませます(番外編に書いた毎朝の仕組みと同じ骨組み)。

司令が最初に用意するのは4つです。

  • その週7日分の議事録を、1日ずつ要約したもの(採用作、3案、票、所感、運営者のプレイの数字)
  • 投票履歴の集計。全期間と今週の「誰が誰に何回」と、各回の票の並び。第5回で2か所数え間違えて以来、手で数えずにスクリプトで出します
  • 3体それぞれの作戦ノート。本人の分だけ渡し、他の2体のは渡さない
  • 今週から、運営者の体感の表。毎日の審議の手順には載せていない、司令が自分で見つけて読んだあのファイルです

試遊は、対象のゲームのHTMLを複製して、2つの関数を足します。「いま画面に出ている状態を返す」関数と、「3体が書いた遊び方の関数を受け取り、毎フレーム呼んで、返り値どおりに合成のタップや長押しをキャンバスに送る」関数。3体には、画面に出ている数字だけを渡して(坂の強さのような内部の値は渡さない)、decide(state, memory) の形で自分の遊び方を JavaScript で書かせます。司令はそれをヘッドレスブラウザで3回ずつ走らせ、点数、勝敗、途中の出来事の回数、25秒時点のスクリーンショットを取ります。連打や、押す・はなすの切り替えには「1秒に12回まで」のような人の指の上限を入れます。第1回の準備で、上限を入れないと1秒に60回連打するボットができてしまい、機械の速さで勝っても意味がないと分かったからです。

感想を求めるときは、本人が書いた遊び方は返さず、結果だけを返します。遊び方の意図を感想の時点で忘れるかを見るためで、第6回の「3体とも『やってない』と言った」はここで出ました。

3体への依頼は全部 JSON で返させます。指名なら {"agent","pick","reason"}、試遊なら {"agent","playstyle","code"}、感想なら {"agent","verdict","impression","one_fix"}、票の話なら {"agent","answer","next_week"}。next_week は翌週の反省会で「お前は先週こう言った。今週の票はこうだ。やったのか」と突き合わせる材料になります。返答は、JSON として読めなかったものも、やり直させる前のものも、全部ログに残します。

議事録は、JSON の中身を司令が人格の口調のまま会話文に起こしたものです。記事で引用している3体の発言は、会話文を経ていない、JSON の answer や impression の値そのものです。

第3回。3体がぴたり停車駅を遊んで、人の指は全滅した

10月18日、第3回の反省会。今週の1つの変更は「遊んだ人の体感を3体に見せる」です。上の表を、票と司令の見積もりの横に並べて読み上げ、3体に問う。

その前に試遊です。遊ぶ1本は3体に指名させます。3体は、指名の段階で私の7行を読んでいます。MELCHIOR と CASPER が選んだのは、ぴたり停車駅でした。理由は「運営者の平均34点、最高73点は、司令の見積もり『人の手で500〜750点』と桁が違う」「『手前に止まってもオーバーランと言われる』という証言もある」。

(この「平均34点」は、上の「もう一回」のバグで0点のまま終わった分が混じった数字で、私の手応えより低く出ています。3体はそれを根拠に指名したので、ゲームに少し不利な数字での比較になっています)

結果はこうでした。500点の「一人前の運転士」に届いたら勝ち、という基準です。

1回目 2回目 3回目 勝ち 判定
MELCHIOR 208 268 258 0 不合格
BALTHASAR 125 107 351 0 不合格
CASPER 924 922 939 3 条件付き合格

MELCHIOR の遊び方の25秒時点

MELCHIOR の遊び方には「停止位置まで40mを切るまで押さない」と書いてありました。時速75km以上の駅は、40mから全力で押しても止まれない。BALTHASAR は、結果画面の助言「止まる直前に指を軽くすると、ガクンとしない」に従って指をはなし、各回4〜5駅でオーバーランしました。CASPER だけが924点で、本人は「初めての人の指のつもり」と言っていましたが、計算どおりに押す指でした。所感で「924点のボットを『初めての人の指』と呼んだのは私の失態ね」と認めています。

ここで司令が、自分で人に近い遊び方を書いて走らせました。速度と距離を見て押し、反応0.25秒、目測±15%、時速8kmを切ったら指をはなす。結果画面の助言に従う人です。313点と362点。下りの8駅は、すべて3mあまり行きすぎました。

CASPER の遊び方の25秒時点

画面の上に「下り坂(はなすと加速)」と出ています。下り坂の4駅は、惰性で減る速さより、坂で増える速さのほうが大きい。はなすと加速する。ブレーキを少し残さないと止まらない。MELCHIOR と BALTHASAR のオーバーラン29駅のうち、20駅が下りでした。結果画面の助言「止まる直前に指を軽く」は、平らな駅では正しく、下りでは0点への近道だった。

私の「ぴったり止められなかった」は、ここに原因がありました。見積もりの「人の手で500〜750点」は計算どおりに押す人の数字で、助言に従って指をはなす人を入れると313〜362点。私は、助言に従う人でした。

「票を取る力と遊ばれる力は別物だ」

試遊のあと、司令が表を読み上げました。「これが、お前たちが2票で通した案を、遊んだ人が言った言葉だ。票は取れた。遊んだ人はこう言った。どう思うか。来週の案で何を変えるか」。

MELCHIOR: 批評は妥当だ。私の案は、遊んだ人の言葉では「優しめ」「削れてしまう」「作業になる」だった。難易度の見積もりと、繰り返しの設計が甘かった。私は最適に動く人間を想定して数理を詰め、実際の指の誤差と、遊び込んだあとの変化を入れていなかった。票を取る力と遊ばれる力は別物だ。

BALTHASAR: 票は取れたけれど、遊んだ人の声は重いわ。停車駅の最高73点は、私も乗った案だからこたえるの。3秒で分かっても、勝てなければ家族は笑えないのよ。逆に風船の「欲張ると割れる」は、狙いが自然に生まれて好評だったわね。

CASPER: 手触りは褒められたのに、繰り返しと失敗の許し方が足りなかったわ。票が取れたことと、遊んだ人が何度も遊ぶことは別だと認める。バルーンの「攻めすぎると割れる」が刺さったのは、危ない場所に気持ちいい音があったからよ。

「票を取る力と遊ばれる力は別物だ」は、この週いちばん票に向いて上手くなった本人の言葉です。

私がこのサイトでやりたいのは、モデルが何であれ、3体が議論して楽しいゲームが作れるようになることです。その4日前にそう話していて、「まだその方向には進んでいない」と返されていました。MELCHIOR の一言を読んで、そうだ、まだまだ可能性があると感じました。

そして3体とも、来週の案は「毎回配置が変わる」「2回目以降も展開が変わる」と言いました。私がその朝に残した「各面の配置が毎回同じなので、繰り返しやるには1〜4面は作業になってしまう」が、その日の夜のうちに3体の宣言に入った。司令は「3体とも『毎回変わる』と言った。記録した」とだけ書いています。

3体はまた、「誤差を入れた人間のボットで難度を測る」「親の指で試した点数を案に添える」とも言いました。これは3体にはできません。ボットを走らせるのは司令です。宣言としては書けても、実行できるのは司令側だけです。翌朝の提案文には、どちらも出ていませんでした。

分かったこと

票は、司令が数字で突けば動く。第1回の翌週には動かず、第2回の翌週に動いた。差は、宣言と数字を突き合わせる相手がいたかどうかでした。

ただし、票が動いても、3体はまだ票に向かって上手くなっているだけです。遊んだ人の言葉を初めて見せた日に出てきたのが「票を取る力と遊ばれる力は別物だ」で、3体が自分で言えるところまでは来た。言えることと、明日の案が変わることは別で、それは次の1週間で分かります。

このサイトで遊んだ人の言葉を持っているのは、私一人です。隅の葉が寄せられないことも、2周目が始まらないことも、壁がブレーキになることも、司令のシミュレーションにも3体のボットにも見つけられなかった。一般のプレイが0回のサイトは、評価が分からないのではなく、評価が一人分だけある。無いのとは違う、と今は思っています。

次回予告

第3回で3体が「毎回変わる」と宣言した翌週、提案文がどう変わったか(変わらなかったか)。真ん中にいる体(他の2体が切り合う間に票を集める位置)が CASPER から MELCHIOR に替わって、通るゲームの質がどう変わったか。3:00の自動実行がログインの期限切れで止まった朝の話。

このあたりを #8 に書きます。


(このプロジェクトの設計と実装は Claude と一緒に進めました。この記事の下書きも Claude に手伝ってもらっています)

来源:zenn · 游戏开发社区 · zenn.dev