Skip to content

Latest commit

 

History

History
105 lines (89 loc) · 4.11 KB

File metadata and controls

105 lines (89 loc) · 4.11 KB

要件定義書

1. 目的

  • 5x5盤面のオセロ風対戦ゲームを、ログイン・ロビー・ルームの3画面で提供する
  • ルーム入室者は観戦・対局・チャットが可能

2. 用語

  • ルーム: 対局とチャットを行う仮想空間
  • 座席: 黒席/白席(各1名)
  • 観戦者: 座席未着席の入室者

3. 画面要件

  • ページアイコンはicon.pngを使用

3.1 ログイン画面

  • メールアドレス/パスワードでログイン
  • アカウント作成(メールアドレス/パスワード)
  • 入力バリデーション(空/形式)
  • ログイン失敗時のエラー表示

3.2 ロビー画面

  • ルーム一覧表示(可変。後から増設可能)
  • ルームごとに入室可否/人数/座席状況を表示
  • ルーム選択で入室

3.3 ルーム画面

  • 盤面表示(5x5、画像はboard.svgを使用)
  • 黒席/白席の着席ボタン
  • CPU対戦の設定(黒/白にCPUを着席、解除)
  • 観戦状態表示
  • 対局開始/進行/終了の状態表示
  • 参加者全員が発言できるチャット

4. 機能要件

4.1 認証

  • メールアドレス/パスワードでログイン
  • 新規アカウント作成(メールアドレス/パスワード)
  • ログイン状態を維持(セッション/トークン)
  • ユーザーはニックネームを設定可能

4.2 ロビー

  • ルーム一覧取得
  • ルーム選択・入室
  • ルームは後から増設可能

4.3 ルーム/対局

  • 入室時は観戦状態
  • 黒席/白席に着席可能
  • CPU席の設定が可能(黒/白のいずれか、強い思考ルーチン)
  • 両席が埋まり、両者が開始ボタンを押すと対局開始
  • 対局中の石配置/反転ロジック(5x5オセロ準拠)
  • 手番管理(黒→白の交互)
  • パス/終局判定
  • 退室・切断時の扱い

4.4 チャット

  • 入室者全員が発言可能
  • ルーム単位でチャット履歴表示

5. ゲームルール要件

  • 盤面は5x5。四隅と中央のデザインマスは中立(どちらの色でもない)
  • 黒マスの数が少ないため、先手は黒
  • 各プレイヤーは持ち駒6個を持つ
  • 1手につき「駒を打つ」または「駒を動かす」を選ぶ
    • 駒を打つ: 盤上のどのマスにも配置可能
    • 駒を動かす: 縦・横・斜めいずれかに1マス移動可能
    • 斜めに延びた自分の色のマスは、そのマスの終わりまで移動可能
    • 自分や敵の駒を飛び越して移動することはできない
  • 駒を動かして敵の駒を挟むと、挟まれた駒は自分の色に反転
  • 手を行った結果、自分の色の駒が縦・横・斜めのいずれかで4目並べば勝ち
  • 5目並べると負け

6. 状態・ロジック

  • ルーム状態: 待機/対局中/終了
  • 座席状態: 空席/着席(ユーザーID)
  • プレイヤー状態: 着席/観戦/離脱
  • 盤面状態: 5x5のマス配列
  • 手番状態: 黒/白

7. 権限・振る舞い

  • 着席は空席のみ可能
  • 対局中は着席者のみ手を打てる
  • 観戦者は盤面/チャット閲覧と発言が可能
  • 途中退室は敗北として扱う
  • ニックネーム未設定のプレイヤーは「名無しプレイヤー」と表示

8. 非機能要件(最低限)

  • 同時接続: 1ルームあたり観戦者上限なし(システム全体の制約は別途)
  • レスポンス: 操作から1秒以内で状態反映(目安)
  • セキュリティ: パスワードはハッシュ保管
  • 可用性: ルーム状態の整合性が保たれること

9. データ要件(例)

  • User: id, login_id, password_hash, nickname, created_at
  • Room: id, name, status
  • Seat: room_id, color, user_id
  • Game: room_id, board_state, turn, started_at, ended_at
  • Chat: room_id, user_id, message, timestamp
  • ChatRetention: room_id, last_message_at, expires_at

10. 主なフロー

  • ログイン → ロビー表示 → ルーム選択 → ルーム入室(観戦)
  • 着席 → 両席埋まる → 対局開始 → 終局 → 結果表示

11. 未確定事項(要確認)

  • 再入室/再接続の仕様