Mopuru Gamesで公開している「ウソつきギャラリー」を、3〜8人で遊べるオンライン対戦に対応しました。

もともとは、1台のスマホやPCをみんなで回しながら遊ぶパーティーゲームとして作った作品です。

今回はそこから、

「それぞれが自分のスマホやPCを使って、同じルームに参加して遊べる形」

まで作り直しました。

アプリのインストールは必要ありません。

ブラウザでルームを作り、ルームコードや招待リンクを共有すれば、そのまま参加できます。

ウソつきギャラリーってどんなゲーム?

ウソつきギャラリーは、お題とイラストカードを使った会話・推理系のパーティーゲームです。

各プレイヤーにはお題が配られ、そのお題に合いそうなカードを1枚選びます。

全員のカードが公開されたら、自分が選んだカードについて順番に説明します。

ただし、プレイヤーの中には他の人と違うお題を渡されている「少数派」がいることがあります。

会話を聞きながら、

「この人、ちょっと説明がおかしくない?」 「もしかして自分がお題を勘違いしている?」

と考え、最後に少数派だと思うプレイヤーへ投票します。

3人プレイでは、そもそも少数派が存在しないラウンドもあります。

そのため、

「本当にウソつきがいるのか?」

まで考えるのがこのゲームの特徴です。

最初は「1台で遊ぶゲーム」でした

最初に作ったバージョンは、1台の端末をプレイヤー同士で回して遊ぶ方式でした。

自分のお題を確認したら次の人へスマホを渡す。

全員が確認したらカードを選ぶ。

この形でも遊べますが、3〜8人で遊ぶゲームなので、人数が増えるほど端末を回す時間も増えます。

そこで、1台プレイ版を残したまま、オンライン版を追加することにしました。

現在は、

  • オンラインで遊ぶ
  • 1台で遊ぶ

の2つから選べます。

オンライン化で一番気を使ったのは「秘密情報」

ウソつきギャラリーでは、他人に見えてはいけない情報がかなりあります。

たとえば、

  • 自分のお題
  • 各プレイヤーの手札
  • 結果発表前の少数派情報
  • 投票中の他人の投票先

などです。

オンライン版では、サーバー側にゲーム全体の状態を持たせながら、各プレイヤーには「その人が見てもいい情報だけ」を送る設計にしました。

カード選択中なら、自分には「自分のお題」と「自分の手札」が届きます。

一方、他のプレイヤーについて分かるのは「カードを提出したかどうか」だけです。

他人が選んだカードそのものは、全員が提出するまで送られません。

投票も同じで、結果が確定するまでは他人の投票先を送りません。

ブラウザ側で見えないようにするだけではなく、

「そもそも見せてはいけないデータをブラウザへ送らない」

という形にしています。

ルームコード方式にしました

オンライン版では、ホストがルームを作ると6文字のルームコードが発行されます。

他のプレイヤーは、そのコードを入力するか招待リンクから参加できます。

3〜8人が参加でき、全員がREADYになったらホストがゲームを開始します。

通信部分には Cloudflare Workers、Durable Objects、WebSocket を使っています。

サーバー側で、

  • ゲームの進行
  • プレイヤー
  • カード
  • 得点
  • 投票
  • 切断状態

などを管理しています。

クライアント側は操作を送るだけで、重要なゲーム判定はサーバー側で行うようにしています。

スマホゲームなので「切断」は避けられない

オンライン化してから特に重要だったのが再接続処理です。

スマホでは、

  • 画面をロックする
  • 別のアプリを見る
  • 通信環境が変わる
  • Safariが一時的に通信を切る

といったことが普通に起こります。

一度切断しただけでゲームから追い出される仕様では遊びにくいため、通信が切れても3分間は席を保持するようにしました。

3分以内に戻れば、

  • 同じプレイヤー
  • 同じ席
  • 同じ手札
  • 同じゲーム状態

に復帰できます。

3分を超えた場合は不在として扱います。

不在者が出ても3人以上残っていればゲームを続けられ、2人以下になった場合は試合中止になります。

ホストがいなくなった場合は、別のプレイヤーへ自動でホスト権限を引き継ぎます。

再戦も同じルームで

最終結果のあとには再戦機能も入れました。

参加者が「もう一度遊ぶ」を押し、対象プレイヤー全員が再戦を希望すると、同じルームコードのままロビーへ戻ります。

プレイヤー名やゲーム設定は維持し、

  • 得点
  • READY状態
  • ゲーム状態

などをリセットします。

何試合か続けて遊ぶ場合でも、毎回ルームを作り直す必要はありません。

かなりテストしました

今回のオンライン化は、一気に全部作るのではなく段階を分けて進めました。

ロビー → ゲーム開始 → カード選択 → 一斉公開 → スピーチ → 投票 → 得点 → 次ラウンド → 最終結果 → 再接続 → 不在処理 → 再戦

という形で、少しずつ機能を追加しました。

特に重点的に確認したのが、

「結果発表前に秘密情報が漏れていないか」

という部分です。

画面表示だけではなく、実際にWebSocketで送られるデータも確認し、

  • 他人のお題
  • 他人の手札
  • 少数派情報
  • 未公開の投票先

などが混ざっていないことをテストしました。

3人・4人・8人や、1・3・5ラウンドでも確認しています。

既存の1台プレイ版も残しています

オンライン対応したからといって、以前の遊び方をなくしたわけではありません。

友達が同じ場所にいて、

「スマホ1台あれば十分」

という場合は1台プレイ版を使えます。

一方で、

「各自のスマホで秘密のお題を見たい」 「Discordなどで通話しながら遊びたい」

という場合はオンライン版が向いています。

遊ぶ状況に合わせて選べる形にしました。

AI開発支援もかなり使いました

今回の開発では、CodexなどのAI開発支援も使っています。

ただ、一度に全部作るのではなく、

実装 → テスト → 確認 → commit

を機能ごとに繰り返しました。

オンラインゲームの場合、

「画面上では正常に見えるけれど、実は他人の秘密情報まで通信されている」

といった問題も起こり得ます。

そのため、見た目だけではなく通信内容やサーバー側の状態までテストするようにしました。

AIを使うことで実装速度はかなり上がりますが、

  • どこまでをサーバーで管理するか
  • どの情報をプレイヤーへ送るか
  • どこをテストするか

といった設計は重要だと感じました。

正式公開しました

ウソつきギャラリーは、Mopuru Gamesで正式公開しました。

現在は3〜8人で、

  • オンラインで遊ぶ
  • 1台で遊ぶ

のどちらかを選べます。

オンライン版はスマホ・PCのブラウザだけで遊べます。

友達と集まったときや、Discordなどで通話しているときに遊んでもらえたら嬉しいです。

今後もMopuru Gamesでは、短時間で遊べるブラウザゲームを少しずつ増やしていく予定です。

ウソつきギャラリーを遊ぶ(紹介ページ)