- 5x5盤面のオセロ風対戦ゲームを、ログイン・ロビー・ルームの3画面で提供する
- ルーム入室者は観戦・対局・チャットが可能
- ルーム: 対局とチャットを行う仮想空間
- 座席: 黒席/白席(各1名)
- 観戦者: 座席未着席の入室者
- ページアイコンは
icon.pngを使用
- メールアドレス/パスワードでログイン
- アカウント作成(メールアドレス/パスワード)
- 入力バリデーション(空/形式)
- ログイン失敗時のエラー表示
- ルーム一覧表示(可変。後から増設可能)
- ルームごとに入室可否/人数/座席状況を表示
- ルーム選択で入室
- 盤面表示(5x5、画像は
board.svgを使用) - 黒席/白席の着席ボタン
- CPU対戦の設定(黒/白にCPUを着席、解除)
- 観戦状態表示
- 対局開始/進行/終了の状態表示
- 参加者全員が発言できるチャット
- メールアドレス/パスワードでログイン
- 新規アカウント作成(メールアドレス/パスワード)
- ログイン状態を維持(セッション/トークン)
- ユーザーはニックネームを設定可能
- ルーム一覧取得
- ルーム選択・入室
- ルームは後から増設可能
- 入室時は観戦状態
- 黒席/白席に着席可能
- CPU席の設定が可能(黒/白のいずれか、強い思考ルーチン)
- 両席が埋まり、両者が開始ボタンを押すと対局開始
- 対局中の石配置/反転ロジック(5x5オセロ準拠)
- 手番管理(黒→白の交互)
- パス/終局判定
- 退室・切断時の扱い
- 入室者全員が発言可能
- ルーム単位でチャット履歴表示
- 盤面は5x5。四隅と中央のデザインマスは中立(どちらの色でもない)
- 黒マスの数が少ないため、先手は黒
- 各プレイヤーは持ち駒6個を持つ
- 1手につき「駒を打つ」または「駒を動かす」を選ぶ
- 駒を打つ: 盤上のどのマスにも配置可能
- 駒を動かす: 縦・横・斜めいずれかに1マス移動可能
- 斜めに延びた自分の色のマスは、そのマスの終わりまで移動可能
- 自分や敵の駒を飛び越して移動することはできない
- 駒を動かして敵の駒を挟むと、挟まれた駒は自分の色に反転
- 手を行った結果、自分の色の駒が縦・横・斜めのいずれかで4目並べば勝ち
- 5目並べると負け
- ルーム状態: 待機/対局中/終了
- 座席状態: 空席/着席(ユーザーID)
- プレイヤー状態: 着席/観戦/離脱
- 盤面状態: 5x5のマス配列
- 手番状態: 黒/白
- 着席は空席のみ可能
- 対局中は着席者のみ手を打てる
- 観戦者は盤面/チャット閲覧と発言が可能
- 途中退室は敗北として扱う
- ニックネーム未設定のプレイヤーは「名無しプレイヤー」と表示
- 同時接続: 1ルームあたり観戦者上限なし(システム全体の制約は別途)
- レスポンス: 操作から1秒以内で状態反映(目安)
- セキュリティ: パスワードはハッシュ保管
- 可用性: ルーム状態の整合性が保たれること
- 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
- ログイン → ロビー表示 → ルーム選択 → ルーム入室(観戦)
- 着席 → 両席埋まる → 対局開始 → 終局 → 結果表示
- 再入室/再接続の仕様