首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 網頁遊戲開發學習:Xnova (OGame) 源碼深度解讀(七)基礎數值 vars.php 完整數據字典與遊戲平衡設計

     編輯:PHP 相關知識

vars.php:遊戲數據的「元數據」中心

vars.php 以 PHP 陣列形式定義了遊戲中所有實體的靜態屬性:單位類型映射、前置條件、建造成本、戰鬥屬性、資源產出公式、啟用清單。理解此文件等於掌握了遊戲的「基因密碼」,是新增單位、調整平衡、開發模組的基石。

五大核心數據結構

1. $messfields - 消息類型映射

$messfields = array(
    0   => "mnl_spy",        // 間諜報告
    1   => "mnl_joueur",     // 玩家消息
    2   => "mnl_alliance",   // 聯盟消息
    3   => "mnl_attaque",    // 攻擊報告
    4   => "mnl_exploit",    // 掠奪報告
    5   => "mnl_transport",  // 運輸報告
    15  => "mnl_expedition", // 遠征報告
    97  => "mnl_general",    // 一般消息
    99  => "mnl_buildlist",  // 建築隊列通知
    100 => "new_message"     // 總未讀計數字段
);

2. $resource - 所有遊戲單位類型定義(數據庫字段名)

涵蓋四大類共 80+ 單位,ID 區間分配規律:

類別ID 範圍代表單位
建築 1-44 金屬礦(1)、晶體礦(2)、重氫合成器(3)、太陽能電廠(4)、核能電廠(12)、機器人工廠(14)、納米工廠(15)、船廠(21)、資源倉庫(22-24)、研究實驗室(31)、地球改造器(33)、聯盟倉庫(34)、月球基地(41)、感測陣列(42)、跳躍門(43)、導彈發射井(44)
科技 106-199 間諜科技(106)、電腦科技(108)、武器科技(109)、防禦科技(110)、護盾科技(111)、能源科技(113)、超空間科技(114)、燃燒引擎(115)、脈衝引擎(117)、超空間引擎(118)、雷射科技(120)、離子科技(121)、電漿科技(122)、星系間研究網絡(123)、遠征科技(124)、引力波(199)
艦隊 202-215 小運輸船(202)、大運輸船(203)、輕型戰機(204)、重型戰機(205)、巡洋艦(206)、戰艦(207)、殖民船(208)、回收船(209)、間諜衛星(210)、轟炸機(211)、太陽能衛星(212)、毀滅者(213)、死星(214)、戰鬥艦(215)
防禦 401-503 火箭發射器(401)、輕雷射(402)、重雷射(403)、高斯砲(404)、離子砲(405)、電漿砲(406)、小護盾(407)、大護盾(408)、反導彈(502)、星際導彈(503)
專家 601-615 地質學家(601)、提督(602)、工程師(603)、技術官(604)、建築師(605)、科學家(606)、儲備官(607)、防禦官(608)、地堡官(609)、間諜官(610)、指揮官(611)、毀滅官(612)、將軍(613)、掠奪官(614)、皇帝(615)

3. $requeriments - 前置升級條件(科技樹邊)

格式:目標ID => array(前置ID => 所需等級, ...)

// 範例:納米工廠需要機器人工廠10級 + 電腦科技10級
15 => array(14 => 10, 108 => 10),

// 範例:死星需要船廠12級 + 超空間引擎7級 + 超空間科技6級 + 引力波1級
214 => array(21 => 12, 118 => 7, 114 => 6, 199 => 1),

// 範例:將軍需要掠奪官1級 + 地堡官1級
613 => array(614 => 1, 609 => 1),

此結構驅動前端科技樹渲染與後端升級驗證邏輯。

4. $pricelist - 完整建造成本與屬性參數

統一結構:

ID => array(
    'metal'       => 基礎金屬成本,
    'crystal'     => 基礎晶體成本,
    'deuterium'   => 基礎重氫成本,
    'energy'      => 能源消耗/產出(負值=消耗,正值=產出),
    'factor'      => 成本增長因子(每級成本 = 基礎 * factor^級別),
    
    // 僅艦隊單位擁有:
    'consumption' => 燃料消耗(單程),
    'consumption2'=> 燃料消耗(往返),
    'speed'       => 基礎速度,
    'speed2'      => 衝刺速度,
    'capacity'    => 載貨量,
    
    // 僅專家單位擁有:
    'max'         => 最高等級上限
)

成本計算公式

第 n 級成本 = 基礎成本 × factor^(n-1)

例:金屬礦 factor = 1.5,10 級成本 ≈ 60 × 1.5^9 ≈ 23,000 金屬

關鍵平衡參數速覽

單位factor關鍵屬性
金屬礦(1)1.5基礎產出公式見 $ProdGrid
納米工廠(15)2.0極高基礎成本(100萬/50萬/10萬),建築加速核心
地球改造器(33)2.0需晶體5萬+重氫10萬+能源1千,擴展星球欄位
死星(214)1.0成本500萬/400萬/100萬,護盾5萬、攻擊20萬、超高速射
引力波(199)3.0無資源成本,需能源30萬,解鎖死星

5. $CombatCaps - 戰鬥屬性與速射表

每單位定義:shield(護盾)、attack(攻擊)、sd(速射目標映射)

// 死星:極高屬性 + 全單位速射
214 => array(
    'shield' => 50000,
    'attack' => 200000,
    'sd' => array(
        202 => 250, 203 => 250, 204 => 200, 205 => 100,
        206 => 33, 207 => 30, 208 => 250, 209 => 250,
        210 => 1250, 211 => 25, 212 => 1250, 213 => 5,
        214 => 1, 215 => 15,
        401 => 200, 402 => 200, 403 => 100, 404 => 50,
        405 => 100, 406 => 1, 407 => 1, 408 => 1
    )
)

速射機制:攻擊方對特定目標有 N% 機率在消滅該目標後立即再次攻擊(不切換目標),N = 100 * (1 - 1/sd)。死星對小運輸船 sd=250 → 99.6% 連射機率。

6. $ProdGrid - 資源產出與能源公式

採用字串形式的 PHP 代碼片段,運行時 eval() 執行(安全風險極大,建議重構為閉包/類方法):

// 金屬礦
1 => array(
    'formule' => array(
        'metal'     => 'return (30 * $BuildLevel * pow((1.1), $BuildLevel)) * (0.1 * $BuildLevelFactor);',
        'crystal'   => 'return "0";',
        'deuterium' => 'return "0";',
        'energy'    => 'return - (10 * $BuildLevel * pow((1.1), $BuildLevel)) * (0.1 * $BuildLevelFactor);'
    )
),

// 太陽能衛星 - 產出與星球溫度相關
212 => array(
    'formule' => array(
        'energy' => 'return (($BuildTemp / 4) + 20) * $BuildLevel * (0.1 * $BuildLevelFactor);'
    )
)

變量說明:$BuildLevel(建築等級)、$BuildLevelFactor(宇宙加速倍率)、$BuildTemp(星球溫度,影響重氫/太陽能衛星)。

7. $reslist - 功能分類啟用清單

控制前端介面顯示與後端邏輯生效範圍:

$reslist['build']     = array(1,2,3,4,12,14,15,21,22,23,24,31,33,34,44,41,42,43);
$reslist['tech']      = array(106,108,109,110,111,113,114,115,117,118,120,121,122,123,124,199);
$reslist['fleet']     = array(202,203,204,205,206,207,208,209,210,211,212,213,214,215);
$reslist['defense']   = array(401,402,403,404,405,406,407,408,502,503);
$reslist['officier']  = array(601,602,603,604,605,606,607,608,609,610,611,612,613,614,615);
$reslist['prod']      = array(1,2,3,4,12,212);  // 產出型建築

新增單位必須同時在 $resource、$pricelist、$requeriments、$CombatCaps、$reslist 中登記才會生效。

擴展開發指南:新增自定義單位

  1. 在 $resource 分配新 ID(避開現有區間)
  2. 在 $pricelist 定義成本與屬性
  3. 在 $requeriments 設定前置條件
  4. 若為艦隊/防禦,在 $CombatCaps 定義戰鬥屬性
  5. 若為產出型建築,在 $ProdGrid 定義公式
  6. 在對應 $reslist 分類中加入新 ID
  7. 更新前端模板、語言包、資料庫結構

安全與維護警示

  • eval() 風險:$ProdGrid 字串公式使用 eval() 執行,若配置被竄改可導致 RCE。必須改用沙箱或預編譯函數
  • 魔術數字:大量硬編碼 ID,建議定義常量類或 Enum
  • 數據熱更新:修改 vars.php 需重新部署,建議遷移至資料庫/配置中心支援熱更

系列總結:七篇文章完整覆蓋 Xnova 核心架構、安裝、註冊、登錄、主界面、公共流程、基礎數值。掌握此代碼庫可快速上手瀏覽器策略遊戲開發,亦可作為重構練習素材。

系列導航:第一部分 | 第二部分 | 第三部分 | 第四部分 | 第五部分 | 第六部分 | 第七部分:基礎數值

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved