Skip to content

Latest commit

 

History

History
179 lines (120 loc) · 3.44 KB

File metadata and controls

179 lines (120 loc) · 3.44 KB

🎮 遊戲速度配置說明

概述

遊戲速度由兩個主要參數控制,都在 server/config.js 中定義。

速度參數

1. FRAME - 遊戲主循環頻率

FRAME: 20, // 每 20ms 渲染一次
  • 作用: 控制遊戲主循環執行的頻率
  • 單位: 毫秒 (ms)
  • 預設值: 20ms (相當於每秒 50 次更新)
  • 影響:
    • 數值越小 = 遊戲更新越頻繁 = 更流暢
    • 數值越大 = 遊戲更新越慢 = 較卡頓

建議值:

  • 超流暢: 10-15ms (適合高性能)
  • 標準: 20ms (預設,平衡效能和流暢度)
  • 省資源: 30-50ms (適合低性能環境)

2. ACTION_INIT_TIME - 方塊下落速度

ACTION_INIT_TIME: 15, // 方塊自動下落的初始時間
  • 作用: 控制方塊自動下落的速度
  • 單位: 遊戲循環次數 (ticks)
  • 預設值: 15 (表示每 15 個遊戲循環才下落一次)
  • 計算公式:
    實際下落時間 = ACTION_INIT_TIME × FRAME
    例如: 15 × 20ms = 300ms = 每 0.3 秒下落一格
    

影響:

  • 數值越小 = 方塊下落越快 = 遊戲越難
  • 數值越大 = 方塊下落越慢 = 遊戲越簡單

建議值:

  • 非常快 (困難): 5-8 (約 0.1-0.16 秒/格)
  • 快速 (有挑戰): 10-12 (約 0.2-0.24 秒/格)
  • 標準 (預設): 15 (約 0.3 秒/格)
  • 慢速 (簡單): 20-25 (約 0.4-0.5 秒/格)
  • 新手模式: 30+ (約 0.6+ 秒/格)

速度組合建議

🎯 標準模式 (預設)

FRAME: 20,
ACTION_INIT_TIME: 15,
  • 適合一般玩家
  • 平衡難度和流暢度

⚡ 快速模式

FRAME: 15,
ACTION_INIT_TIME: 10,
  • 適合熟練玩家
  • 高難度,需要快速反應

🐢 休閒模式

FRAME: 20,
ACTION_INIT_TIME: 25,
  • 適合新手或休閒玩家
  • 有更多時間思考

🏃 競速模式

FRAME: 10,
ACTION_INIT_TIME: 8,
  • 適合專業玩家
  • 極高難度

如何調整速度

方法 1: 直接編輯配置檔

  1. 打開 server/config.js
  2. 找到以下行:
    FRAME: 20,
    ACTION_INIT_TIME: 15,
  3. 修改數值
  4. 重啟伺服器

方法 2: 使用環境變數 (未來實作)

可以考慮將這些參數改為環境變數,方便調整:

FRAME: process.env.GAME_FRAME || 20,
ACTION_INIT_TIME: process.env.GAME_SPEED || 15,

然後在啟動時指定:

GAME_FRAME=15 GAME_SPEED=10 npm start

其他相關設定

玩家手動加速

當玩家按下 鍵時,actionTime 會立即設為 0,使方塊立刻下落一格。

快速下落 (Space)

玩家按 Space 時,方塊會持續下落直到碰撞,實現瞬間落地。


注意事項

⚠️ 效能考量:

  • FRAME 太小 (< 10ms) 可能導致伺服器負載過高
  • 多人遊戲時建議維持 FRAME >= 15ms

⚠️ 遊戲平衡:

  • ACTION_INIT_TIME 太小 (< 5) 會讓遊戲幾乎無法操作
  • ACTION_INIT_TIME 太大 (> 30) 會讓遊戲失去挑戰性

⚠️ 同步問題:

  • 所有玩家使用相同的速度設定
  • 修改配置後需要重啟伺服器

測試建議

  1. 先使用預設值測試基本功能
  2. 逐步調整 ACTION_INIT_TIME,找到合適難度
  3. 根據伺服器效能調整 FRAME
  4. 測試多人遊戲時的流暢度

相關檔案

  • 配置檔: server/config.js
  • 遊戲邏輯: server/gameLogic.js
  • 遊戲狀態: server/gameState.js
  • 主循環: server/socketHandlers.js (startGame 函數)