Skip to content

战斗

战斗系统概述

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

战斗准备

舰队配置

发起攻击前,在舰队界面选择派遣的舰船:

  • 战斗舰船:如轻型战机、重型战机、战列舰等,用于攻击敌方舰队和防御设施
  • 运输舰船:运输资源
  • 殖民船:殖民无主行星
  • 回收船:回收战斗后产生的废墟

目标选择

可攻击的目标:

  • 敌方行星:主行星或殖民星
  • 敌方月球:月球基地
  • 敌方舰队:移动中的舰队

战斗流程

战斗系统采用回合制机制,最多进行6回合(可通过配置修改),双方在每个回合同时发动攻击。整个战斗流程可分为战斗前准备战斗进行中战斗结束后三个主要阶段。


一、战斗前准备

在战斗正式开始前,系统会完成以下准备工作:

1. 参战单位确定

攻击方舰队构成

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

防御方舰队构成

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

2. 战斗变量初始化

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

3. 核心战斗概念

在了解战斗流程前,先掌握几个关键的战斗概念:

3.1 攻击与护盾类型

攻击类型

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

护盾类型

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

不同攻击类型对不同护盾类型有不同伤害效果(武器-护盾交互表):

攻击类型对轻型护盾对中型护盾对重型护盾
激光武器极低
离子武器
等离子武器极低
引力武器
3.2 暴击机制
  • 基础暴击率:5%
  • 暴击伤害倍率:1.5倍
  • 暴击判定:随机数 ≤ (5% + 单位暴击加成) 时触发暴击
  • 暴击伤害:攻击力 × 暴击倍率 × (1 + 科技加成/100)

二、战斗进行中(回合制流程)

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

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

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

... 重复直至条件满足

战斗结束条件

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

1. 单回合战斗流程

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

1.1 攻击力分类计算

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

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

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

typescript
// 代码片段:计算防御方护盾值
const defenderShield = FleetUtil.calcObjShield(universe, defenderFleetObj, isAttacker)
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
  })
})
1.4 伤害随机波动

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

typescript
totalDamage *= Math.random() * 0.4 + 0.8
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. 损失结算

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

三、战斗结束后

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

1. 战斗结果判定

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

结果判定规则

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

2. 资源掠夺(胜利方)

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

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

3. 战斗报告生成

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

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

4. 舰队返还

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

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

5. 特殊情况处理

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

战斗流程图解

战斗开始
  └─ 战斗前准备
      ├─ 确定参战单位
      ├─ 初始化战斗变量
      └─ 加载战斗配置
  
  ├─ 战斗进行中(最多6回合)
      ├─ 第1回合
      │   ├─ A方 → B方(计算B方损失)
      │   ├─ B方 → A方(计算A方损失)
      │   └─ 同时结算双方损失
      ├─ 第2回合
      │   ├─ 损失后的A方 → 损失后的B方
      │   ├─ 损失后的B方 → 损失后的A方
      │   └─ 同时结算双方损失
      ├─ ... 重复直至条件满足
      └─ 战斗结束判定
  
  └─ 战斗结束后
      ├─ 确定战斗结果
      ├─ 资源掠夺(胜利方)
      ├─ 生成战斗报告
      ├─ 剩余舰队返还
      └─ 特殊情况处理(废墟、月球等)

4. 最终伤害计算

  • 总伤害 = 攻击方总攻击力 × 暴击系数 - 防御方总护盾值
  • 若总伤害为负数,则不造成任何伤害

5. 随机波动

  • 除激光武器对重型护盾外,其他攻击类型的伤害比例均采用随机数生成
  • 激光武器对重型护盾采用固定衰减:0.0000015

舰船损毁计算

采用按比例分配损毁机制:

  1. 计算平均装甲值:防御方所有单位装甲值的平均值
  2. 计算总损失数量:防御方损失数 = Math.floor(总伤害 / 防御方平均装甲值)
  3. 按比例分配损失
    • 对每种舰船类型,损失数量 = 总损失数 × (该类型舰船数量 / 防御方舰船总数)
    • 损失数量四舍五入取整
    • 确保每种类型舰船损失数不超过实际数量

装甲类型差异

装甲类型基础值技能加成上限典型单位
轻型100+15%战斗机、侦察机
中型250+30%驱逐舰、巡洋舰
重型500+45%战列舰、星际要塞

注意:装甲类型主要用于技能加成上限,与攻击类型无直接作用关系

战斗顺序

每回合攻击顺序:

  1. 攻击阶段:攻击方发起攻击

    • 分别计算四种武器类型的攻击力
    • 应用暴击机制
    • 计算总伤害
    • 计算并分配防御方损失
  2. 防御阶段:攻防双方互换角色,防御方发起反击

    • 重复攻击阶段的计算流程

回合定义:攻防互换一次为一个回合

战斗持续至:

  • 一方所有单位被消灭
  • 达到最大回合数

战斗结束处理

  1. 胜负判定

    • 攻击方全灭:防御方胜利
    • 防御方全灭:攻击方胜利
    • 双方均有剩余单位且达到最大回合数:平局
  2. 资源与废墟

    • 计算战斗双方的资源损失
    • 根据损失生成废墟(金属和晶体资源)
    • 部分防御设施有恢复机制
  3. 月球生成

    • 大规模战斗后可能生成月球
    • 概率取决于战斗规模、残骸大小和随机因素
  4. 战报生成

    • 记录每回合的数据(单位数量、伤害、护盾等)
    • 生成详细战斗报告
    • 剩余舰队开始返航

战斗类型

1. 常规攻击

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

选择目标星球后,点击攻击按钮,选择要派遣的舰队和携带的资源。确认后,舰队将出发前往目标星球。到达后,战斗会自动进行,战斗结束后,剩余舰队会带着战利品返回基地。

攻击任务的结果会以战斗报告的形式发送到消息中心,包括双方损失、获得的资源等信息。

攻击任务详细机制

6.1 攻击任务流程

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

6.2 伤害计算详细说明

6.2.1 攻击方攻击力计算

攻击方的攻击力分为四类:激光攻击、离子攻击、等离子攻击、引力攻击,分别计算攻击力:

攻击力类型 = Σ(舰船武器攻击力 × 舰船数量 × 武器系数)
  • 每种武器类型有不同的基础攻击力
  • 武器系数受科技、军官技能、联盟加成等因素影响

6.2.2 武器类型与护盾类型交互

不同武器类型对不同护盾类型有不同的伤害比例:

武器类型轻型护盾伤害中型护盾伤害重型护盾伤害
激光武器65%-75% (随机)15%-25% (随机)0.00015% (固定)
离子武器55%-65% (随机)65%-75% (随机)0%-10% (随机)
等离子武器0%-2% (随机)35%-45% (随机)50%-60% (随机)
引力武器0%-5% (随机)10%-20% (随机)65%-75% (随机)

计算规则

  1. 每种武器类型独立计算对不同护盾的伤害
  2. 随机比例通过rand()函数生成
  3. 重型护盾对激光武器采用固定衰减系数:0.0000015

6.2.3 暴击机制

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

  • 基础暴击率:5%
  • 暴击伤害倍率:1.5倍
CRIT_CHANCE = 5; // 基础暴击率5%
CRIT_BOOST = 1.5; // 暴击伤害倍率

if (rand(1,100) <= (CRIT_CHANCE + 单位暴击加成)) {
  critFactor = CRIT_BOOST * (1 + 科技加成/100);
}

暴击判定在攻击计算完成后进行,暴击系数应用于总攻击力。

6.2.4 最终伤害计算

总伤害 = (攻击方总攻击力 × 暴击系数) - 防御方总护盾
  • 攻击方总攻击力为四种武器类型攻击力之和
  • 防御方总护盾为所有防御单位和设施的护盾之和
  • 如果总伤害为负数,视为0伤害

6.3 损毁方式详细说明

6.3.1 损失数量计算

防御方损失数 = floor(总伤害 / 防御方平均装甲值)
  • 防御方平均装甲值 = 所有防御单位和设施的装甲值总和 / 防御单位和设施总数
  • 如果防御方平均装甲值为0,需避免除零错误

6.3.2 损失分配机制

损失按舰船和防御设施类型的比例分配:

foreach (type, count) in 防御方单位列表 {
  loss = round(防御方损失数 × (count / 防御方舰船总数));
  defenders[type] = max(0, count - loss);
}
  • 每种类型的损失数量与该类型在防御方总数中的比例成正比
  • 确保每种类型都有合理的损失分配
  • 如果防御方舰船总数较少,需要特殊处理以避免比例分配不合理

6.3.3 防御设施恢复机制

部分防御设施有恢复机制,根据随机比例恢复部分损失:

  • 每个防御设施类型有其恢复概率和恢复比例
  • 恢复计算在战斗结束后进行
  • 只有在战斗中被摧毁的防御设施才有恢复可能

6.4 战斗回合与胜负判定

  1. 战斗回合

    • 攻防双方完成一次攻击和防御视为一个回合
    • 每个回合记录单位数量、伤害、护盾等信息
    • 战斗持续到一方全灭或达到最大回合数(通常为10回合)
  2. 胜负判定

    • 如果攻击方全灭,防御方胜利
    • 如果防御方全灭,攻击方胜利
    • 如果达到最大回合数,双方仍有剩余单位,视为平局

6.5 战斗结果处理

6.5.1 资源掠夺

攻击方获胜后,可以掠夺防御方的资源:

  • 掠夺数量受攻击方载货量、防御方剩余资源和掠夺科技等级限制
  • 通常可掠夺防御方总资源的10%-30%

6.5.2 废墟生成

战斗结束后,会在目标星球生成废墟:

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

6.5.3 卫星产生概率

激烈的战斗有一定概率在目标星球轨道生成卫星:

  • 卫星产生概率与战斗规模(双方损失的资源价值)相关
  • 生成的卫星类型包括观测卫星、通讯卫星等
  • 卫星可提供额外的资源或功能

6.6 战斗报告

战斗结束后,系统会生成详细的战斗报告:

  • 双方参战单位和数量
  • 每个回合的战斗数据
  • 双方损失情况
  • 资源掠夺和废墟生成情况
  • 战斗结果和胜负判定

战斗报告将发送到攻击方和防御方的消息中心,可随时查看。

2. 侦察任务

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

3. 殖民攻击

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

4. 回收任务

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

战斗结果

胜负判定

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

资源掠夺

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

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

废墟生成

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

月球生成

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

战斗策略

1. 舰队组合

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

2. 科技升级

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

3. 侦察先行

攻击前侦察:

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

4. 时机选择

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

战斗报告

战斗结束后,你将收到详细战斗报告,包含:

  • 双方单位损失
  • 资源掠夺情况
  • 废墟和月球生成情况

在"战斗报告"页面可查看所有战斗记录。

注意事项
  1. 战斗中损失的舰船无法恢复,需重新建造
  2. 部分防御设施有恢复机制,可恢复部分损失
  3. 所有战斗记录系统会保存
  4. 废墟可通过回收船收集其中的资源
  5. 大规模战斗后可能生成月球,月球可建造特殊设施

希望这份指南能帮助你在《星环之怒》中取得更多战斗胜利!

Released under the MIT License.