Skip to content

战斗系统详解

战斗是《星环之路》中玩家互动的核心方式,采用群体作战模拟机制,回合制进行。双方舰队和防御设施每一回合互相攻击,直至一方被消灭或达到最大回合数。

1. 战斗系统概述

1.1 战斗基本机制

  • 回合制:战斗最多进行6回合(可通过配置修改)
  • 同时攻击:双方在每个回合同时发动攻击
  • 群体作战:所有参战单位同时参与战斗
  • 自动结算:战斗系统自动计算伤害和损失

1.2 战斗流程

整个战斗流程可分为战斗前准备战斗进行中战斗结束后三个主要阶段。

2. 战斗前准备

2.1 参战单位确定

攻击方舰队构成:

  • 攻击发起的舰队
  • 联合攻击舰队(如有)

防御方舰队构成:

  • 星球上的舰队
  • 星球上的防御设施(视为特殊舰队单位)
  • 驻守舰队(如有)

2.2 战斗变量初始化

  • 回合计数器 round = 1
  • 攻击方剩余单位数量统计
  • 防御方剩余单位数量统计
  • 战斗日志和损失记录初始化

2.3 核心战斗概念

2.3.1 攻击与护盾类型

攻击类型:

  • 普通攻击
  • 激光攻击
  • 离子攻击
  • 等离子攻击
  • 引力攻击

护盾类型:

  • 轻型护盾
  • 中型护盾
  • 重型护盾

武器-护盾交互表:

攻击类型对轻型护盾对中型护盾对重型护盾
激光武器极低
离子武器
等离子武器极低
引力武器

2.3.2 暴击机制

  • 基础暴击率:5%
  • 暴击伤害倍率:1.5倍
  • 暴击判定:随机数 ≤ (5% + 单位暴击加成)时触发暴击
  • 暴击伤害:攻击力 × 暴击倍率 × (1 + 科技加成/100)

暴击计算公式:

暴击伤害 = 基础伤害 × 1.5 × (1 + 科技加成/100)

3. 战斗进行中(回合制流程)

战斗在每个回合中,双方会同时作为攻击方和防御方进行攻击:

Round 1:
- A方舰队 → B方舰队(计算B方损失)
- B方舰队 → A方舰队(计算A方损失)
- 同时结算双方损失

Round 2:
- 损失后的A方 → 损失后的B方
- 损失后的B方 → 损失后的A方
- 同时结算双方损失

... 重复直至条件满足

战斗结束条件:

  • 一方所有战斗单位被消灭
  • 达到最大回合数(默认6回合)

3.1 单回合战斗流程

每个回合的战斗包含攻击力计算护盾抵消伤害计算损失结算四个步骤:

3.1.1 攻击力分类计算

攻击方的攻击力按攻击类型分类汇总:

typescript
// 代码片段:计算攻击方攻击力
const attackerAttack = FleetUtil.calcObjAttack(
  universe,
  attackerFleetObj,
  isAttacker,
)

3.1.2 护盾值分类计算

防御方的护盾值按护盾类型分类汇总:

typescript
// 代码片段:计算防御方护盾值
const defenderShield = FleetUtil.calcObjShield(
  universe,
  defenderFleetObj,
  isAttacker,
)

3.1.3 攻击-护盾交互与伤害计算

根据武器-护盾交互表,计算每种攻击类型对每种护盾类型的实际伤害:

typescript
// 代码片段:攻击-护盾交互计算
AttackTypeList.forEach((attackType) => {
  const attackValue = attackerAttack[attackType]
  if (!attackValue) return

  ShieldTypeList.forEach((shieldType) => {
    const shieldValue = defenderShield[shieldType]
    if (!shieldValue) {
      totalDamage += attackValue
      return
    }

    // 计算护盾能承受的伤害
    const shieldHoldDamage =
      shieldValue / AttackToShield[attackType][shieldType]
    // 计算经过护盾后能造成的伤害
    const damageAfterShield = Math.max(0, attackValue - shieldHoldDamage)
    // 累加总伤害
    totalDamage += damageAfterShield
  })
})

3.1.4 伤害随机波动

最终总伤害会受到随机因素影响,波动范围为基础伤害的80%-120%:

typescript
totalDamage *= Math.random() * 0.4 + 0.8

3.1.5 损失计算机制

系统采用随机抽取机制计算防御方的损失:

1. 随机抽取攻击目标:

typescript
// 代码片段:随机抽取舰船
while (totalDamage > 0) {
  const defenderFleetObjLeft = FleetUtil.calcUnitsAfterLoss4Fleet(
    defenderFleetObj,
    lossObj,
  )
  const [pick, pickObj] = FleetUtil.pickoneShip(defenderFleetObjLeft)
  if (pick.length === 0) break

  // 计算选中舰船的装甲值并抵消伤害
  // ...
}

2. 装甲值计算:

typescript
// 代码片段:装甲值计算
let defensiveFactor =
  (1 + bouns.defensive) *
  (1 + (isAttacker ? bouns.defensiveD : bouns.defensiveA))

// 概率触发双倍防御
if (bouns.doubleDefensive > Math.random()) {
  defensiveFactor *= 1 + bouns.doubleDefensive
}

// 计算不同类型装甲的总防御值
armor =
  // 轻型装甲
  (unitDefense[DefensiveType.Light] || 0) *
    (bouns.defensiveSlight + 1) *
    defensiveFactor +
  // 中型装甲
  (unitDefense[DefensiveType.Medium] || 0) *
    (bouns.defensiveSmedium + 1) *
    defensiveFactor +
  // 重型装甲
  (unitDefense[DefensiveType.Heavy] || 0) *
    (bouns.defensiveSheavy + 1) *
    defensiveFactor

3. 损失结算:

  • 如果装甲值小于剩余伤害,该舰船被摧毁,剩余伤害继续攻击下一艘舰船
  • 如果装甲值大于等于剩余伤害,该舰船幸存,本次攻击结束

4. 战斗结束后

当战斗结束条件满足时,系统会进行以下处理:

4.1 战斗结果判定

typescript
// 代码片段:计算战斗结果
const result = FleetUtil.calcBattleResult(attackersLeftSum, defendersLeftSum)

结果判定规则:

  • Win:攻击方剩余单位 > 0 且防御方剩余单位 = 0
  • Lose:攻击方剩余单位 = 0 且防御方剩余单位 > 0
  • Draw:双方都有剩余单位 或 双方都无剩余单位

4.2 资源掠夺(胜利方)

攻击方胜利时,可以掠夺敌方星球资源:

  • 掠夺量受舰队容量限制
  • 资源按比例分配(金属、晶体、氘)
  • 矿物行星有额外资源奖励

资源掠夺计算公式:

掠夺资源 = min(敌方资源 × 掠夺比例, 舰队容量)

4.3 战斗报告生成

系统会生成详细的战斗报告,包括:

  • 双方损失统计
  • 每回合战斗详情
  • 资源掠夺情况
  • 战斗结果

4.4 舰队返还

剩余舰队会返回原星球,包括:

  • 攻击方剩余舰队
  • 防御方剩余舰队和防御设施
  • 联合攻击和驻守舰队的分别返还

4.5 特殊情况处理

  • 矿物行星:攻击胜利后会被重置
  • 废墟生成:战斗结束后可能在星球上生成废墟
  • 月球生成:概率性生成月球(基于战斗规模)

5. 战斗类型

5.1 常规攻击

派遣舰队攻击敌方行星或月球,可掠夺资源并摧毁敌方舰队和防御设施。

攻击任务流程:

  1. 舰队出发:玩家选择要攻击的目标星球,配置舰队和资源,确认后舰队出发
  2. 航行阶段:舰队按照计算的时间前往目标星球,消耗相应的重氢燃料
  3. 战斗开始:舰队到达目标星球后,立即开始战斗
  4. 战斗阶段:双方进行多回合战斗,直到一方全灭或达到最大回合数
  5. 结果处理:计算战斗结果、资源掠夺、废墟生成等
  6. 舰队返航:剩余舰队带着战利品返回出发星球

5.2 侦察任务

派遣侦察舰收集敌方情报,不会触发全面战斗,但有被发现并摧毁的风险。

5.3 殖民攻击

使用殖民船占领无主行星,若有其他玩家同时尝试殖民,将触发殖民战斗。

5.4 回收任务

派遣回收船回收战斗后产生的废墟,收集其中的金属和晶体资源。

6. 战斗结果

6.1 胜负判定

  • 胜利:敌方所有单位被消灭
  • 失败:己方所有单位被消灭
  • 平局:双方都有剩余单位,但达到最大回合数

6.2 资源掠夺

攻击胜利后可掠夺敌方资源,数量取决于:

  • 敌方行星资源数量
  • 运输舰船载货能力
  • 敌方防御设施等级

6.3 废墟生成

战斗损失的舰队和防御设施转化为废墟,包含金属和晶体资源,可通过回收船收集。

废墟生成计算公式:

废墟资源 = (战斗中损失舰船的资源价值 × 废墟转化率)
  • 废墟转化率:金属和晶体通常为30%-50%
  • 重氢不会生成废墟

6.4 月球生成

大规模战斗后可能生成月球,概率取决于战斗规模、残骸大小和随机因素。月球可建造特殊设施。

7. 战斗策略

7.1 舰队组合

  • 多样化:混合不同类型舰船,应对不同防御组合
  • 数量优势:尽可能以数量压倒敌方
  • 针对性:根据敌方防御类型选择合适攻击舰船

7.2 科技升级

  • 军事技术:提高攻击伤害
  • 防御技术:提高防御能力
  • 护盾技术:提高护盾强度
  • 引擎技术:提高舰队速度,影响战斗顺序

7.3 侦察先行

攻击前侦察:

  • 了解敌方防御配置
  • 评估敌方舰队规模
  • 确定攻击可行性

7.4 时机选择

  • 敌方在线时:可能有额外防御措施
  • 敌方离线时:防御较弱,但可能触发自动防御

8. 常见问题解答

Q: 战斗中如何计算伤害?

A: 涉及武器攻击力和数量、攻击类型与护盾类型的伤害比例、科技/军官/联盟加成以及暴击机制。

详细伤害计算请参考战斗系统详解

Q: 战败后舰船会全部损失吗?

A: 部分舰船会被摧毁,部分会以废墟形式留在战场上,可通过资源回收中心或派遣舰队回收废墟资源。

Q: 如何提高舰队的战斗力?

A: 可以通过以下方式:

  • 建造高级舰船
  • 研究武器、护盾和装甲科技
  • 任命军事型军官
  • 加入联盟获得联盟科技加成

Q: 武器类型与护盾类型的关系是什么?

A: 不同武器类型对不同护盾类型有不同的伤害效果:

  • 激光武器:对轻型护盾伤害高,对重型护盾伤害极低
  • 离子武器:对中型护盾伤害高,对轻型护盾伤害中
  • 等离子武器:对重型护盾伤害高,对轻型护盾伤害极低
  • 引力武器:对重型护盾伤害高,对轻型护盾伤害低

Q: 暴击机制如何工作?

A: 攻击有一定概率触发暴击,造成额外伤害:

  • 基础暴击率:5%
  • 暴击伤害倍率:1.5倍
  • 暴击判定:随机数 ≤ (5% + 单位暴击加成)时触发暴击

Q: 战斗最多进行多少回合?

A: 默认最多进行6回合,可通过配置修改。达到最大回合数后,如果双方都有剩余单位,则判定为平局。

Q: 如何查看战斗报告?

A: 战斗结束后,系统会生成详细的战斗报告,发送到攻击方和防御方的消息中心。可以在"战斗报告"页面查看所有战斗记录。

9. 总结

战斗系统是《星环之路》中最核心的玩法之一,掌握好战斗机制和策略是成为星际霸主的关键。

记住以下几点:

  1. 情报先行:攻击前侦察,了解敌方情况
  2. 合理搭配:根据敌方防御类型选择合适的攻击舰船
  3. 科技支撑:研究军事科技,提升舰队战斗力
  4. 灵活应变:根据战场情况及时调整战术
  5. 损失控制:在战斗不利时及时撤退,减少损失

通过合理的战斗策略,你将能够在星际战争中占据优势,建立强大的星际帝国!

现在,开始你的星际征战吧!

Released under the MIT License.