Newer
Older
PixelPaintWar / docs / 04_SPEC / SPEC_03_ゲームプレイ仕様.txt
========================================================================
ゲームプレイ仕様 (Gameplay Specification)
========================================================================


1. ゲーム進行 (Game Progression)
------------------------------------------------------------------------

1-1. タイムライン
    ・開始カウントダウン: ゲーム開始通知から5秒間のカウントダウン後にプレイ開始
    ・通常フェーズ: 0〜120秒(残り180〜60秒)
    ・フィーバータイム: 残り60秒から発動,ボムクールダウンが短縮される
    ・ハリケーン出現: 残り120秒から出現する(ゲーム開始60秒経過後)
    ・塗り率非表示: 残り30秒からチーム塗り率が隠される
    ・ゲーム終了: 残り0秒でサーバーがゲーム終了を通知する

1-2. 勝敗判定
    ・制限時間終了時のチーム別塗りセル数で順位を決定する
    ・塗りセル数が最も多いチームが1位となる


2. フィールド仕様 (Field Specification)
------------------------------------------------------------------------

2-1. マップ構造
    ・グリッドベースのセル構造
    ・各セルはチームIDを保持する
        - 未塗装: -1
        - チーム塗装: 0〜3(チームIDに対応)
    ・座標系: 浮動小数点のグリッド座標(左上が原点)

2-2. フィールドサイズプリセット
    フィールドの実グリッドサイズは AOIセル数 × AOIセルサイズ(3)で算出される.

    | プリセット | AOIセル数 | 実グリッドサイズ | 推奨人数     |
    | :--------- | :-------- | :--------------- | :----------- |
    | SMALL      | 8×8       | 24×24            | 4〜20人      |
    | MEDIUM     | 12×12     | 36×36            | 20〜40人     |
    | LARGE      | 15×15     | 45×45            | 40〜70人     |
    | XLARGE     | 18×18     | 54×54            | 70〜100人    |

2-3. セル塗り処理
    ・プレイヤーが移動するとそのセルが自チームの色で塗られる
    ・競合処理: 同一セルに複数チームのプレイヤーが同時に存在する場合,そのセルは塗られない
    ・既に他チームが塗ったセルは上書きできる


3. プレイヤー操作 (Player Controls)
------------------------------------------------------------------------

3-1. 移動
    ・入力方式: 画面左側のバーチャルジョイスティック(タッチ操作)
    ・方向: 360度全方位入力
    ・移動速度: 3グリッド/秒
    ・プレイヤー半径: 0.5グリッド
    ・座標管理: 浮動小数点で管理し,滑らかな移動を実現する
    ・カメラ: 自プレイヤーを常に画面中央に追従する

3-2. ボム設置
    ・入力方式: 画面右側のボムボタンをタップ
    ・設置位置: プレイヤーの現在座標
    ・爆発までの時間(信管): 1000ms
    ・爆発半径: 1.5グリッド(円形判定)
    ・クールダウン:
        - 通常時: 4000ms
        - フィーバータイム時: 2000ms

3-3. フィーバータイム
    ・発動条件: ゲーム残り時間が60秒以下になった時点
    ・効果: ボムのクールダウンが4000msから2000msに短縮される
    ・画面表示: 「!Fever Time!」通知が表示される


4. 被弾・リスポーン (Hit & Respawn)
------------------------------------------------------------------------

4-1. 被弾判定
    ・ボム爆発時,爆発半径内にいるプレイヤーに被弾判定が発生する
    ・自チームのボムでは被弾しない
    ・被弾したプレイヤーの被弾カウントが1増加する

4-2. 被弾スタン
    ・被弾時に1000msの間,入力が無効化される(スタン状態)
    ・スタン中はプレイヤーが点滅する視覚エフェクトが表示される

4-3. リスポーン
    ・条件: 被弾カウントが5に達した場合にリスポーンが発生する
    ・リスポーンスタン: 2000msの間,入力が無効化される
    ・リスポーン位置: ゲーム開始時の初期スポーン地点
    ・被弾カウントはリスポーン後にリセットされる


5. ハリケーン (Hurricane Hazard)
------------------------------------------------------------------------

5-1. 出現条件
    ・ゲーム残り時間が120秒以下になった時点で出現する
    ・同時出現数: 最大5個

5-2. ハリケーンの挙動
    ・直径: 2.2グリッド
    ・移動速度: 1.5グリッド/秒
    ・移動方式: 直線移動し,フィールドの壁に当たると反射する
    ・回転: 2.6 rad/秒で視覚的に回転する

5-3. プレイヤーへの影響
    ・ハリケーンの範囲内に入ったプレイヤーはリスポーンが発生する
    ・同一プレイヤーへの連続被弾クールダウン: 3000ms
    ・画面表示: 出現時に「WARNING: ハリケーン出現」警告が表示される


6. Bot(AI プレイヤー) (Bot AI)
------------------------------------------------------------------------

6-1. 行動パターン
    ・移動: 未塗装のセルを優先的に目標として移動する
    ・ボム設置: 1ティック(50ms)あたり約6%の確率でボムを設置する
    ・被弾時: 人間プレイヤーと同じスタン・リスポーン処理が適用される

6-2. 補充ルール
    ・目標人数に対して人間プレイヤーが不足する場合,Botが自動補充される
    ・チームバランスを考慮して各チームに均等に配置される


7. サーバー同期 (Server Synchronization)
------------------------------------------------------------------------

7-1. ゲームループ
    ・サーバーのティックレート: 20Hz(50ms間隔)
    ・各ティックで実行される処理:
        1. ハリケーンの位置更新と衝突判定
        2. Bot AIの行動決定
        3. マップの塗り処理と競合判定
        4. ボムの爆発判定(Bot向け)
        5. 差分データの組み立てとブロードキャスト

7-2. 位置同期
    ・クライアントからサーバーへ: 50ms間隔でプレイヤー座標を送信する
    ・サーバーからクライアントへ: 変化があったプレイヤーの座標のみを差分送信する
    ・座標の量子化: Float座標をスケール100で整数化し,帯域を削減する

7-3. 時刻同期
    ・Ping/Pongベースのクロック同期でクライアント・サーバー間の時刻差を推定する
    ・推定オフセットはスムージングされ,急激な変動を抑制する