You need to enable JavaScript to run this app. PHP实现游戏内随从PVP攻击逻辑遇阻,求方向与示例指引
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现游戏内随从PVP攻击逻辑遇阻,求方向与示例指引

攻击结算功能落地逻辑参考

之前跑不通大概率是没有按「先预处理数据→再分配武器→最后进入回合结算」的顺序走,不要把所有逻辑揉在一个循环里写。

第一步:数据标准化预处理

所有原始数组先做清洗,不要带着无效值直接进逻辑:

  • 过滤无效随从:比如测试数据里攻击方随从数组的索引0位置值为0,直接剔除,不参与后续计算
  • 临时给每个有效随从绑定调试属性:固定HP=10
  • 统计有效武器数量:同样过滤掉武器数组里值为0的无效项,只算实际拥有的武器数量,别直接用数组长度当武器数(攻击方武器数组长度是7,但实际有效武器只有2把,按长度算会直接算错)

第二步:按规则做武器分配

双方的武器分配独立计算,不要混在一起:

  • 把己方清洗后的有效随从,按HP从高到低排序,匹配「优先给高HP随从发武器」的规则
  • 按排序顺序给随从发武器,直到有效武器用完为止
  • 没拿到武器的随从直接标记阵亡,移出战斗队列,不参与后续攻击

用提供的测试数据演算这一步的结果:

  • 攻击方有效随从共4个,有效武器共2把,排序后发完2把武器,剩余2个随从无武器直接阵亡,最终2个存活随从进战斗队列
  • 防守方有效随从共5个,有效武器共7把,数量超过随从总数,5个随从全部能拿到武器,无直接阵亡,5个存活随从全进战斗队列

第三步:回合制攻击结算

战斗队列全部准备好后,按「优先攻击对方HP最低随从」的规则走循环:

  • 把双方进战斗的存活随从,统一按HP从低到高排序,队头永远是当前最薄弱的目标
  • 每一轮的出手顺序固定:
    1. 攻击方所有存活随从,依次对防守方队头的最低HP目标造成伤害(调试值为每个随从5点伤害)
    2. 目标HP被打空就从队列移除,自动顺位下一个最低HP的目标
    3. 防守方所有存活随从,用同样的逻辑打攻击方队列的最低HP目标
  • 循环直到某一方没有存活随从,结算战斗结果

最小可落地逻辑参考(伪代码,无需全抄)

// 清洗数据+分配武器的通用函数
function initBattleQueue($followerIds, $gunIds) {
    // 过滤无效随从和无效武器
    $validFollowers = array_filter($followerIds, fn($id) => $id > 0);
    $validGunCount = count(array_filter($gunIds, fn($id) => $id > 0));
    // 给随从绑定临时HP,按HP从高到低排序准备发武器
    $sortedFollowers = array_map(fn($id) => ['id' => $id, 'hp' => 10], $validFollowers);
    usort($sortedFollowers, fn($a, $b) => $b['hp'] <=> $a['hp']);
    // 发完武器后,把存活队列按HP从低到高排序,方便打最薄弱目标
    $aliveQueue = array_slice($sortedFollowers, 0, $validGunCount);
    usort($aliveQueue, fn($a, $b) => $a['hp'] <=> $b['hp']);
    return $aliveQueue;
}

// 初始化双方战斗队列
$attackerQueue = initBattleQueue($attackerFollowers, $attackerGuns);
$defenderQueue = initBattleQueue($defenderFollowers, $defenderGuns);

// 循环结算直到一方队列清空
while (count($attackerQueue) > 0 && count($defenderQueue) > 0) {
    // 攻击方集火打防守方队头的最低HP目标
    $defenderQueue[0]['hp'] -= 5 * count($attackerQueue);
    if ($defenderQueue[0]['hp'] <= 0) array_shift($defenderQueue);
    // 防守方集火打攻击方队头的最低HP目标
    $attackerQueue[0]['hp'] -= 5 * count($defenderQueue);
    if ($attackerQueue[0]['hp'] <= 0) array_shift($attackerQueue);
}

常见踩坑点

  • 不要把武器的强弱排序逻辑混到分配流程里,当前规则只要求武器数量够覆盖高HP随从,没要求武器伤害和随从匹配
  • 不要把无武器的随从留在战斗队列里,规则明确这类随从直接阵亡、不能造成伤害,留到后面结算会混进无效计算
  • 攻击目标的选择不要随机,必须按HP从低到高排序,保证永远先打最薄弱的

内容的提问来源于stack exchange,提问作者xion360

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 02:45:07