Appearance
战斗
战斗系统概述
战斗是《星环之怒》中玩家互动的核心方式,采用群体作战模拟机制,回合制进行。双方舰队和防御设施每一回合互相攻击,直至一方被消灭或达到最大回合数。
战斗准备
舰队配置
发起攻击前,在舰队界面选择派遣的舰船:
- 战斗舰船:如轻型战机、重型战机、战列舰等,用于攻击敌方舰队和防御设施
- 运输舰船:运输资源
- 殖民船:殖民无主行星
- 回收船:回收战斗后产生的废墟
目标选择
可攻击的目标:
- 敌方行星:主行星或殖民星
- 敌方月球:月球基地
- 敌方舰队:移动中的舰队
战斗流程
战斗系统采用回合制机制,最多进行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.81.5 损失计算机制
系统采用随机抽取机制计算防御方的损失:
随机抽取攻击目标:
typescript// 代码片段:随机抽取舰船 while (totalDamage > 0) { const defenderFleetObjLeft = FleetUtil.calcUnitsAfterLoss4Fleet(defenderFleetObj, lossObj) const [pick, pickObj] = FleetUtil.pickoneShip(defenderFleetObjLeft) if (pick.length === 0) break // 计算选中舰船的装甲值并抵消伤害 // ... }装甲值计算:
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 )损失结算:
- 如果装甲值小于剩余伤害,该舰船被摧毁,剩余伤害继续攻击下一艘舰船
- 如果装甲值大于等于剩余伤害,该舰船幸存,本次攻击结束
三、战斗结束后
当战斗结束条件满足时,系统会进行以下处理:
1. 战斗结果判定
typescript
// 代码片段:计算战斗结果
const result = FleetUtil.calcBattleResult(attackersLeftSum, defendersLeftSum)结果判定规则:
Win:攻击方剩余单位 > 0 且防御方剩余单位 = 0Lose:攻击方剩余单位 = 0 且防御方剩余单位 > 0Draw:双方都有剩余单位 或 双方都无剩余单位
2. 资源掠夺(胜利方)
攻击方胜利时,可以掠夺敌方星球资源:
- 掠夺量受舰队容量限制
- 资源按比例分配(金属、晶体、氘)
- 矿物行星有额外资源奖励
3. 战斗报告生成
系统会生成详细的战斗报告,包括:
- 双方损失统计
- 每回合战斗详情
- 资源掠夺情况
- 战斗结果
4. 舰队返还
剩余舰队会返回原星球,包括:
- 攻击方剩余舰队
- 防御方剩余舰队和防御设施
- 联合攻击和驻守舰队的分别返还
5. 特殊情况处理
- 矿物行星:攻击胜利后会被重置
- 废墟生成:战斗结束后可能在星球上生成废墟
- 月球生成:概率性生成月球(基于战斗规模)
战斗流程图解
战斗开始
└─ 战斗前准备
├─ 确定参战单位
├─ 初始化战斗变量
└─ 加载战斗配置
├─ 战斗进行中(最多6回合)
├─ 第1回合
│ ├─ A方 → B方(计算B方损失)
│ ├─ B方 → A方(计算A方损失)
│ └─ 同时结算双方损失
├─ 第2回合
│ ├─ 损失后的A方 → 损失后的B方
│ ├─ 损失后的B方 → 损失后的A方
│ └─ 同时结算双方损失
├─ ... 重复直至条件满足
└─ 战斗结束判定
└─ 战斗结束后
├─ 确定战斗结果
├─ 资源掠夺(胜利方)
├─ 生成战斗报告
├─ 剩余舰队返还
└─ 特殊情况处理(废墟、月球等)4. 最终伤害计算
- 总伤害 = 攻击方总攻击力 × 暴击系数 - 防御方总护盾值
- 若总伤害为负数,则不造成任何伤害
5. 随机波动
- 除激光武器对重型护盾外,其他攻击类型的伤害比例均采用随机数生成
- 激光武器对重型护盾采用固定衰减:0.0000015
舰船损毁计算
采用按比例分配损毁机制:
- 计算平均装甲值:防御方所有单位装甲值的平均值
- 计算总损失数量:防御方损失数 = Math.floor(总伤害 / 防御方平均装甲值)
- 按比例分配损失:
- 对每种舰船类型,损失数量 = 总损失数 × (该类型舰船数量 / 防御方舰船总数)
- 损失数量四舍五入取整
- 确保每种类型舰船损失数不超过实际数量
装甲类型差异
| 装甲类型 | 基础值 | 技能加成上限 | 典型单位 |
|---|---|---|---|
| 轻型 | 100 | +15% | 战斗机、侦察机 |
| 中型 | 250 | +30% | 驱逐舰、巡洋舰 |
| 重型 | 500 | +45% | 战列舰、星际要塞 |
注意:装甲类型主要用于技能加成上限,与攻击类型无直接作用关系
战斗顺序
每回合攻击顺序:
攻击阶段:攻击方发起攻击
- 分别计算四种武器类型的攻击力
- 应用暴击机制
- 计算总伤害
- 计算并分配防御方损失
防御阶段:攻防双方互换角色,防御方发起反击
- 重复攻击阶段的计算流程
回合定义:攻防互换一次为一个回合
战斗持续至:
- 一方所有单位被消灭
- 达到最大回合数
战斗结束处理
胜负判定:
- 攻击方全灭:防御方胜利
- 防御方全灭:攻击方胜利
- 双方均有剩余单位且达到最大回合数:平局
资源与废墟:
- 计算战斗双方的资源损失
- 根据损失生成废墟(金属和晶体资源)
- 部分防御设施有恢复机制
月球生成:
- 大规模战斗后可能生成月球
- 概率取决于战斗规模、残骸大小和随机因素
战报生成:
- 记录每回合的数据(单位数量、伤害、护盾等)
- 生成详细战斗报告
- 剩余舰队开始返航
战斗类型
1. 常规攻击
派遣舰队攻击敌方行星或月球,可掠夺资源并摧毁敌方舰队和防御设施。
选择目标星球后,点击攻击按钮,选择要派遣的舰队和携带的资源。确认后,舰队将出发前往目标星球。到达后,战斗会自动进行,战斗结束后,剩余舰队会带着战利品返回基地。
攻击任务的结果会以战斗报告的形式发送到消息中心,包括双方损失、获得的资源等信息。
攻击任务详细机制
6.1 攻击任务流程
- 舰队出发:玩家选择要攻击的目标星球,配置舰队和资源,确认后舰队出发
- 航行阶段:舰队按照计算的时间前往目标星球,消耗相应的重氢燃料
- 战斗开始:舰队到达目标星球后,立即开始战斗
- 战斗阶段:双方进行多回合战斗,直到一方全灭或达到最大回合数
- 结果处理:计算战斗结果、资源掠夺、废墟生成等
- 舰队返航:剩余舰队带着战利品返回出发星球
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% (随机) |
计算规则:
- 每种武器类型独立计算对不同护盾的伤害
- 随机比例通过
rand()函数生成 - 重型护盾对激光武器采用固定衰减系数:
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 战斗回合与胜负判定
战斗回合:
- 攻防双方完成一次攻击和防御视为一个回合
- 每个回合记录单位数量、伤害、护盾等信息
- 战斗持续到一方全灭或达到最大回合数(通常为10回合)
胜负判定:
- 如果攻击方全灭,防御方胜利
- 如果防御方全灭,攻击方胜利
- 如果达到最大回合数,双方仍有剩余单位,视为平局
6.5 战斗结果处理
6.5.1 资源掠夺
攻击方获胜后,可以掠夺防御方的资源:
- 掠夺数量受攻击方载货量、防御方剩余资源和掠夺科技等级限制
- 通常可掠夺防御方总资源的10%-30%
6.5.2 废墟生成
战斗结束后,会在目标星球生成废墟:
废墟资源 = (战斗中损失舰船的资源价值 × 废墟转化率)- 废墟转化率:金属和晶体通常为30%-50%
- 重氢不会生成废墟
- 废墟可由回收船回收
6.5.3 卫星产生概率
激烈的战斗有一定概率在目标星球轨道生成卫星:
- 卫星产生概率与战斗规模(双方损失的资源价值)相关
- 生成的卫星类型包括观测卫星、通讯卫星等
- 卫星可提供额外的资源或功能
6.6 战斗报告
战斗结束后,系统会生成详细的战斗报告:
- 双方参战单位和数量
- 每个回合的战斗数据
- 双方损失情况
- 资源掠夺和废墟生成情况
- 战斗结果和胜负判定
战斗报告将发送到攻击方和防御方的消息中心,可随时查看。
2. 侦察任务
派遣侦察舰收集敌方情报,不会触发全面战斗,但有被发现并摧毁的风险。
3. 殖民攻击
使用殖民船占领无主行星,若有其他玩家同时尝试殖民,将触发殖民战斗。
4. 回收任务
派遣回收船回收战斗后产生的废墟,收集其中的金属和晶体资源。
战斗结果
胜负判定
- 胜利:敌方所有单位被消灭
- 失败:己方所有单位被消灭
- 平局:双方都有剩余单位,但达到最大回合数
资源掠夺
攻击胜利后可掠夺敌方资源,数量取决于:
- 敌方行星资源数量
- 运输舰船载货能力
- 敌方防御设施等级
废墟生成
战斗损失的舰队和防御设施转化为废墟,包含金属和晶体资源,可通过回收船收集。
月球生成
大规模战斗后可能生成月球,概率取决于战斗规模、残骸大小和随机因素。月球可建造特殊设施。
战斗策略
1. 舰队组合
- 多样化:混合不同类型舰船,应对不同防御组合
- 数量优势:尽可能以数量压倒敌方
- 针对性:根据敌方防御类型选择合适攻击舰船
2. 科技升级
- 军事技术:提高攻击伤害
- 防御技术:提高防御能力
- 护盾技术:提高护盾强度
- 引擎技术:提高舰队速度,影响战斗顺序
3. 侦察先行
攻击前侦察:
- 了解敌方防御配置
- 评估敌方舰队规模
- 确定攻击可行性
4. 时机选择
- 敌方在线时:可能有额外防御措施
- 敌方离线时:防御较弱,但可能触发自动防御
战斗报告
战斗结束后,你将收到详细战斗报告,包含:
- 双方单位损失
- 资源掠夺情况
- 废墟和月球生成情况
在"战斗报告"页面可查看所有战斗记录。
注意事项
- 战斗中损失的舰船无法恢复,需重新建造
- 部分防御设施有恢复机制,可恢复部分损失
- 所有战斗记录系统会保存
- 废墟可通过回收船收集其中的资源
- 大规模战斗后可能生成月球,月球可建造特殊设施
希望这份指南能帮助你在《星环之怒》中取得更多战斗胜利!