複数人でのゲーム進行

異世界衰弱(案C:リアルタイム神経衰弱+種族効果)において、複数人でゲームを進行するための部屋・参加・切断・再接続まわりの製作過程を記録します。

1. 何を実装したか

Phase 1: 基本フロー

  • 部屋作成・参加 … 部屋IDは数字6桁。ニックネームのみで参加可能(ログイン任意)。
  • ゲーム開始・進行 … 2人以上で「ゲーム開始」を押すと、54枚のカードが並ぶ。自分のターンで2枚めくってペアを揃える。
  • ターン制 … 順番制で、ペア成立時は続けて1回だけ追加でめくれる。

Phase 2: 退出・強制終了

  • ゲーム中に1人でも退出すると、残り人数に関係なくゲームを強制終了
  • 残されたプレイヤーには「対戦相手が退室したのでゲームは強制終了となります。」をゲーム画面上でポップアップ表示。
  • ゲーム進行中の部屋には参加させない。

Phase 3: ペア演出・スマホ対応

  • ペア成立時の演出 … 中央へ移動+2回転+300%拡大→グロー→フェードアウト。
  • スマホ表示時 … viewport が 1200px 以下のとき、ゲーム画面を最大化表示。
  • Android での演出 … 全画面・スマホ最大化時はオーバーレイをゲーム内に配置しないと表示されないため、神経衰弱の知見を活かして対応済み。
  • カードレイアウト … 54枚をなるべく大きく表示するようグリッドを動的に最適化。

Phase 4: 部屋猶予・再接続

  • 部屋2分猶予 … 最終退出後、部屋をすぐには削除せず2分間残す。PCとスマホが同時に切断されても、同じ部屋IDで再参加可能。
  • 部屋の定期確認 … 部屋待機中に30秒ごとにサーバーへ問い合わせ。2分経過や参加者でなくなった場合は「部屋の有効期限が切れました。ロビーに戻ります。」でロビーへ。
  • 切断時の処理 … 部屋待機中に接続が切れた場合、ロビーへ戻しつつ部屋IDを入力欄に残す。「接続が切れました。部屋IDを入力して再度参加してください。」で再参加を促す。
  • 参加者リスト・ゲーム開始ボタン … 誰かが参加したら room_updated で参加者リストと「ゲーム開始」ボタンの表示を更新。

2. 起きた問題と対策

問題原因対策
「その部屋は存在しません」 PCとスマホが同時切断され、部屋が即削除されていた 最終退出後2分間部屋を残す猶予を導入
参加者リストが自分だけ表示される 切断で部屋から外れた側が room_updated を受け取れず古い表示のまま 切断検知時にロビーへ戻し、部屋IDを入力欄に残す
ゲーム開始ボタンが出ない room_updated でボタン表示を更新していなかった room_updated ハンドラで参加者2人以上時にボタン表示
Androidでペア演出が見えない オーバーレイが document.body 直下だと、スマホ最大化時の固定レイヤー背面に隠れる 全画面・game-maximized 時はオーバーレイをゲームコンテナ内に配置

3. 現時点の達成状況

  • 完了 … 部屋作成・参加・ゲーム開始・カードめくり・ペア判定・ターン制、退出時強制終了、部屋2分猶予、切断時のロビー戻り、参加者表示・ゲーム開始ボタン更新、ペア演出、スマホ最大化、カードレイアウト最適化。
  • 未実装・保留 … 種族効果(設計のみ)、チャット・DM、ポイントシステム、ログイン連携(現状はニックネームのみ)。

4. 動作確認環境

  • PC(Web) … 想定どおり動作
  • PC スマホ表示(レスポンシブ) … 想定どおり動作
  • Android(Web) … ペア演出・スマホ最大化含め想定どおり動作
  • iPhone(Web) … 神経衰弱と同様、一部想定外の挙動あり(未対応)
ゲームは左メニュー「テスト環境」→「異世界衰弱」からプレイできます。

← 立ち上げストーリー
← プログラム構築の記録
← デプロイの記録
← ボタン1つデプロイの記録
← デプロイでまたハマった話
← ログイン設定の記録
← 改善記録
← ファイル紹介の使い方
← OGP・SEOの記録
← 統合ログインの設計・経緯
← Search Console・サイトマップ
← 環境変数・.env の管理
← Git 入門・インストール
← インストール後に Git で行う設定
← カード神経衰弱の記録
← 異世界シューティングの記録
← 異世界シューティングの難易度
← 異世界戦記(全画面・迷路レイアウト)の記録
← 異世界衰弱(不具合の修正)
← 異世界衰弱(機能別フローチャート)
← 異世界ポイントの活用について
← 異世界ポイント市場の実装記録