# 游戏数值模型文档 本文档详细描述了游戏中所有数值计算的核心公式和设计理念。 ## 目录 1. [设计原则](#设计原则) 2. [角色属性系统](#角色属性系统) 3. [装备属性系统](#装备属性系统) 4. [词缀系统](#词缀系统) 5. [怪物属性系统](#怪物属性系统) 6. [经验与升级系统](#经验与升级系统) 7. [战斗伤害计算](#战斗伤害计算) 8. [经济系统](#经济系统) --- ## 设计原则 ### 1. 线性与指数平衡 - **低等级(1-20)**:使用线性增长,确保新手体验平滑 - **中等级(21-50)**:引入指数增长,增加挑战 - **高等级(51+)**:指数加速,突出后期成就 ### 2. 边际收益递减 - 属性越高,继续提升的成本越大 - 防止某一项属性无限堆叠 ### 3. 有意义的多样性 - 不同属性有不同用途,避免单一最优解 - 词缀系统提供随机性和惊喜 --- ## 角色属性系统 ### 基础属性 | 属性 | 符号 | 默认值 | 说明 | |------|------|--------|------| | 力量 | STR | 10 | 影响攻击力 | | 敏捷 | AGI | 8 | 影响闪避、防御 | | 灵巧 | DEX | 8 | 影响暴击 | | 智力 | INT | 10 | 影响品质、魔法 | | 体质 | VIT | 10 | 影响生命、回复 | ### 派生属性计算 ```javascript // 基础生命值 HP = 100 + VIT × 10 + Level × 5 // 基础耐力 Stamina = 80 + VIT × 5 + Level × 3 // 基础精神 Sanity = 100 + INT × 3 // 基础攻击力 Attack = STR × 1.0 + Level × 2 // 基础防御力 Defense = AGI × 0.3 + VIT × 0.2 + Level // 基础暴击率 (%) CritRate = 5 + DEX × 0.3 // 基础闪避率 (%) DodgeRate = AGI × 0.5 ``` ### 属性效果示例 | 属性值 | 效果 | |--------|------| | STR 10 → 20 | 攻击力 +10 | | AGI 10 → 20 | 闪避 +5%,防御 +3 | | DEX 10 → 20 | 暴击 +3% | | VIT 10 → 20 | HP +100,回复 +0.5/秒 | | INT 10 → 20 | 装备品质期望 +5 | --- ## 装备属性系统 ### 装备品质 品质范围:0-250,影响装备属性的百分比加成。 | 品质范围 | 名称 | 倍率 | 颜色 | |----------|------|------|------| | 0-49 | 垃圾 | 0.5x | 灰色 | | 50-89 | 普通 | 1.0x | 白色 | | 90-129 | 优秀 | 1.2x | 绿色 | | 130-159 | 稀有 | 1.5x | 蓝色 | | 160-199 | 史诗 | 2.0x | 紫色 | | 200-250 | 传说 | 3.0x | 橙色 | ### 装备最终属性计算 ```javascript // 品质倍率 QualityMultiplier = 1 + (Quality - 100) × 0.01 // 等级倍率(每级 +2%) LevelMultiplier = 1 + (ItemLevel - 1) × 0.02 // 综合倍率 TotalMultiplier = QualityMultiplier × LevelMultiplier // 最终伤害 FinalDamage = BaseDamage × TotalMultiplier // 最终防御 FinalDefense = BaseDefense × TotalMultiplier ``` ### 装备品质示例 以攻击力20的基础武器为例: | 品质 | 等级 | 最终攻击力 | |------|------|------------| | 100 (普通) | 1 | 20 | | 150 (优秀) | 1 | 30 | | 200 (史诗) | 1 | 40 | | 100 (普通) | 10 | 24 | | 150 (优秀) | 10 | 36 | | 200 (史诗) | 10 | 48 | --- ## 词缀系统 ### 词缀稀有度 每件装备最多3个词缀,词缀数量和稀有度受品质影响。 | 品质范围 | 最大词缀数 | 词缀稀有度倾向 | |----------|------------|----------------| | 0-89 | 0 | 无 | | 90-129 | 1 | 普通60%,稀有30% | | 130-159 | 2 | 稀有为主 | | 160-199 | 3 | 史诗为主 | | 200-250 | 3 | 传说9% | ### 词缀属性 词缀属性随物品等级缩放: ``` 词缀最终值 = 词缀基础值 × (1 + (物品等级 - 1) × 0.1) ``` ### 武器词缀示例 | 名称 | 类型 | 基础值 | 稀有度 | |------|------|--------|--------| | 锋利 | 攻击+5% | 5 | 普通 | | 残暴 | 攻击+12% | 12 | 稀有 | | 弑神 | 攻击+25% | 25 | 传说 | | 锐利 | 暴击+3% | 3 | 普通 | | 致命 | 暴击+8% | 8 | 稀有 | | 烈焰 | 火伤+10 | 10 | 史诗 | ### 防具词缀示例 | 名称 | 类型 | 基础值 | 稀有度 | |------|------|--------|--------| | 坚固 | 防御+5% | 5 | 普通 | | 强化 | 防御+12% | 12 | 稀有 | | 铁壁 | 防御+25% | 25 | 史诗 | | 灵活 | 闪避+3% | 3 | 普通 | | 耐久 | 耐力+15 | 15 | 稀有 | | 不朽 | 生命+100 | 100 | 传说 | --- ## 怪物属性系统 ### 怪物等级缩放 ```javascript // 生命值缩放(每级 +12%) MonsterHP = BaseHP × 1.12^(Level - 1) // 攻击力缩放(每级 +8%) MonsterAttack = BaseAttack × 1.08^(Level - 1) // 防御力缩放(每级 +6%) MonsterDefense = BaseDefense × 1.06^(Level - 1) // 经验奖励缩放(每级 +10%) MonsterEXP = BaseEXP × 1.10^(Level - 1) ``` ### 怪物等级范围 怪物实际等级在基础等级 ±20% 范围内浮动: ```javascript LevelVariance = BaseLevel × 0.2 MinLevel = Max(1, BaseLevel - LevelVariance) MaxLevel = BaseLevel + LevelVariance ``` ### 难度系数 ```javascript // 基础难度 Difficulty = 1.0 // 精英怪 Elite: Difficulty = 1.5 // Boss Boss: Difficulty = 2.0 // 弱小怪 Weak: Difficulty = 0.7 ``` ### 怪物属性示例 以基础攻击10的怪物为例: | 等级 | HP | 攻击 | 防御 | 经验 | |------|-----|------|------|------| | 1 | 100 | 10 | 5 | 20 | | 5 | 157 | 14 | 7 | 29 | | 10 | 278 | 20 | 10 | 47 | | 20 | 872 | 43 | 17 | 122 | | 50 | 18403 | 184 | 74 | 5851 | --- ## 经验与升级系统 ### 角色升级经验 ```javascript // 所需经验 = 基础值 × 增长系数^(等级-1) ExpNeeded = 100 × 1.15^(Level - 1) ``` | 等级 | 所需经验 | 累计经验 | |------|----------|----------| | 1 | 100 | 0 | | 5 | 174 | 674 | | 10 | 352 | 2261 | | 20 | 1458 | 12674 | | 50 | 84049 | 424058 | ### 战斗经验计算 ```javascript // 等级差调整 LevelDiff = MonsterLevel - PlayerLevel if (LevelDiff > 5) { // 怪物高5级以上,额外奖励 ExpMultiplier = 1 + (LevelDiff - 5) × 0.1 } else if (LevelDiff < -5) { // 怪物低5级以上,大幅衰减 ExpMultiplier = Max(0.1, 0.5 + (LevelDiff + 5) × 0.1) } else { // 等级相近,正常或小幅衰减 ExpMultiplier = 1 + LevelDiff × 0.05 } // 实际经验 ActualExp = BaseExp × ExpMultiplier ``` ### 经验衰减表 | 玩家等级 vs 怪物等级 | 经验倍率 | |---------------------|----------| | +5级或更高 | 100%+ | | 相同等级 | 100% | | -3级 | 85% | | -5级 | 50% | | -10级 | 10% | ### 技能经验 ```javascript // 技能经验衰减(等级越高越难升级) Decay = 0.95^(SkillLevel - 1) ActualExp = ActionExp × Decay ``` | 技能等级 | 经验衰减 | 获得100经验实际得到 | |----------|----------|-------------------| | 1 | 100% | 100 | | 5 | 81% | 81 | | 10 | 63% | 63 | | 20 | 36% | 36 | --- ## 战斗伤害计算 ### 普通伤害 ```javascript // 基础伤害 BaseDamage = Attack - Defense × 0.5 // 最小伤害保证(攻击力的20%) MinDamage = Attack × 0.2 // 实际伤害 ActualDamage = Max(MinDamage, BaseDamage) ``` ### 暴击系统 ```javascript // 暴击判定 IsCrit = Random(0, 100) < CritRate // 暴击伤害 if (IsCrit) { CritDamage = BaseDamage × 1.5 // 基础暴击倍率 // 可通过装备/技能提升 } ``` ### 命中系统 ```javascript // 实际命中率 ActualHitRate = Clamp(5, 95, HitRate - DodgeRate) // 命中判定 IsHit = Random(0, 100) < ActualHitRate ``` ### 伤害示例 | 攻击 | 防御 | 基础伤害 | 最小伤害 | 实际伤害 | |------|------|----------|----------|----------| | 20 | 5 | 17.5 | 4 | 17-18 | | 50 | 10 | 45 | 10 | 45 | | 50 | 30 | 35 | 10 | 35 | | 100 | 50 | 75 | 20 | 75 | | 30 | 40 | 10 | 6 | 10 | --- ## 经济系统 ### 物品价值 ```javascript // 出售价格 SellPrice = BaseValue × QualityMultiplier × (1 + AffixCount × 0.15) // 购买价格(商人倍率) BuyPrice = SellPrice × MerchantRate // 商人收购价 BuybackPrice = SellPrice × 0.3 ``` ### 商人类型 | 商人 | 出售倍率 | 收购倍率 | |------|----------|----------| | 普通商人 | 200% | 30% | | 黑市商人 | 250% | 50% | | 特殊商人 | 150% | 40% | ### 价值示例 以基础价值100的物品为例: | 品质 | 词缀 | 出售价 | 购买价(普通) | 购买价(黑市) | |------|------|--------|-------------|-------------| | 100 | 0 | 100 | 200 | 250 | | 150 | 1 | 145 | 290 | 362 | | 200 | 2 | 250 | 500 | 625 | | 200 | 3 | 287 | 574 | 717 | --- ## 平衡性检查 ### 攻击期望 玩家攻击期望 = 基础攻击 × (1 + 暴击率 × 暴击倍率) 例如:攻击100,暴击率20%,暴击倍率1.5 ``` 期望伤害 = 100 × (1 + 0.2 × 0.5) = 100 × 1.1 = 110 ``` ### 生存期望 玩家有效生命 = HP × (1 + 闪避率 / (1 - 闪避率)) 例如:HP 1000,闪避30% ``` 有效生命 = 1000 × (1 + 0.3 / 0.7) = 1000 × 1.43 = 1430 ``` ### DPT(每回合伤害) ```javascript PlayerDPT = PlayerAttack × PlayerHitRate MonsterDPT = MonsterAttack × (1 - PlayerDodgeRate) // 生存回合 SurvivalTurns = PlayerHP / MonsterDPT // 击杀回合 KillTurns = MonsterHP / PlayerDPT // 战斗评价 if (KillTurns < SurvivalTurns) { // 玩家优势 } else { // 怪物优势 } ```