友だちとオンラインで遊べるようにする
ゲーム向け。 AIエージェントに 「オンラインで対戦できるようにして」(または「友だちと遊べるようにして」)と頼みます。エージェントは全テンプレートに入っているmultiplayerのSkill(.claude/skills/multiplayer/と.agents/skills/multiplayer/)に沿って、KUMODeckのマルチプレイのルームの上に組み立てます。サーバーのコードを書く必要はありません。
最初に 1 回だけ質問します(料金つき)#
オンラインの遊び方に「これが正解」はないので、エージェントは作る前に 1 回だけ、ふつうの言葉で聞きます。番号で答えても、「おまかせ」と言うだけでもかまいません。
- 誰と遊ぶ? 友だち(6文字の番号を送って同じ部屋に入る)/知らない人とも(自動で組み合わせる)/両方
- ゲームの速さは? 順番に動かす・会話が中心/のんびりリアルタイム(協力・パーティー)/速いアクション
- ずる(ありえない点数など)を止めたい? 気にしない(仲間うちで遊ぶだけ)/止めたい(順位に残るスコアや賞品がある)
- おまかせ:ゲームに合う中でいちばん安いやり方をエージェントが選びます
どのやり方も、まず料金を出します。4人で30分遊んだ1回あたり、前払いの残高から原価どおりです(数字は目安で、約束ではありません)。
| やり方 | 1回あたりの料金 | あきらめること |
|---|---|---|
| リンクかQRを送り、返事のリンクを送り返してもらう(友だち) | 完全に0セント(KUMODeckを通りません) | やり取りが2回になります。回線によっては直接つながらず、遊べないことがあります(そのときは6文字の番号で) |
| 6文字の番号を1回伝える | 部屋に入る分:100万回で約50セント(目安)+下のどれかのやり方の料金 | — |
| KUMODeckを通して届ける | 順番に動かす 約0.31セント($5で約1,600回)・のんびりリアルタイム 約0.39セント(約1,280回)・速いアクション 約0.47セント(約1,060回) | ほかの人に見えるものはありません。ゲームのルールの判定まではしません(下の表) |
| プレイヤーどうしを直接つなぐ | ゲーム中のやり取り 0セント・部屋に入る分 0.01セント未満(目安・まだ計測していません) | 相手に住んでいる地域の目安が見えます。ずるは止められません。最大8人 |
| 直接つなぎ、必要なときだけKUMODeckを通す | 直接の料金+通した分(送った量で計算・1 GBあたり$0.05):順番に動かす0.01セント未満・のんびり約0.2セント・速いアクション約0.3セント(目安) | ずるは止められません。通したときは住んでいる地域は隠れます |
| 直接だけ(KUMODeckを通さない) | やり取り 0セント・部屋に入る分 0.01セント未満 | 直接つながらない組み合わせの人どうしは、いっしょに遊べません |
答えからエージェントが選ぶ設定:
| 答え | エージェントが書く設定 |
|---|---|
| ずるを止めたい、または9人以上 | "transport": "server"(既定) |
| 友だちだけ+おまかせ | リンクかQRで招待(部屋を使わない・SDKのリンクでつなぐ道具)。つながらないときは6文字の番号 |
| 友だちだけ | "transport": "p2p"、"p2p": { "relay": "fallback" }(まず直接、つながらないときだけ通す) |
| 知らない人とも、または両方 | "transport": "p2p"、"p2p": { "relay": "always" }(知らない人に住んでいる地域を見せない) |
| おまかせ | 合う中でいちばん安いもの:"p2p": { "relay": "fallback" }。順位に残るスコアや賞品があるゲームならserver |
| 通す料金を0にしたいと頼んだとき | "p2p": { "relay": "never" }(つながらない人が出ることがあります) |
エージェントがすること#
- ルームをONにし、答えに合うモードを足します(たとえば1対1なら2人)。 ``
sh kumodeck features on multiplayer kumodeck config push # 開発用``json { "multiplayer": { "modes": [{ "key": "duel", "minPlayers": 2, "maxPlayers": 2, "fillTimeoutSeconds": 20 }] } }`` - オンラインで遊ぶボタンを足します。知らない人とのクイックマッチか、6文字の部屋コードと招待リンクで友だちだけを呼ぶプライベートルームです(
kumo.rooms.quickMatch、kumo.rooms.create(mode, { private: true })、kumo.rooms.join(code))。 - 手を
room.sendで送り、全員がそろえるべきもの(誰の番か・盤面・スコア)は共有状態(room.setState)に置きます。つなぎ直した人にも同じ試合が見えます。 - つなぎ直しを生かします。SDKが自分でつなぎ直し、サーバーは切れた人の席を20秒残します(ページを読み込み直しても同じ)。
- 開発用に出し(
kumodeck deploy --env development)、試し方を伝えます。URLを2つのタブで開き、2つ目に?player=2を付けます。本番に出すのは頼んだときだけです。
期待してよいこと・よくないこと#
| サーバーが守ること | 誰がどのルームにいるか、部屋コード、ホスト、全員に同じ順で届く共有状態、大きさと回数の上限、BANした人は入れない |
| ゲームの役目 | ルール(手・当たり・勝敗)。改造したクライアントは何でも送れます。ホストに決めさせ、ずるをする価値のあるもの(順位に残るスコア・報酬)は自分のFunctionsとデータベースで確かめます |
| 上限 | 1ルーム最大64人、1人あたり毎秒30通、1通16 KB、共有状態64 KB |
| 向いている | ターン制・ボードゲーム・カードゲーム、クイズ、パーティーゲーム、協力プレイ、少人数のカジュアルなリアルタイムのゲーム |
| 向いていない | サーバーがゲームを動かす必要のある速い対戦(FPS、ロールバックのある格闘ゲーム、ラグの補正) |
ルームは全員が抜けると何も残しません。進み具合はクラウドセーブに、履歴のあるチャットはリアルタイムの部屋(chatのSkill)を使います。利用料は前払いの残高から原価どおりです(料金に例があります)。