You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏击杀效果Web应用:144种assassins组合批量匹配方案问询

解决方案:用组合映射表替代大量条件判断

当然可以用组合列表/映射表来解决这个问题,完全不用写144个函数。核心思路是把所有击杀组合的规则统一存在一个数据结构里,通过查询这个结构来获取对应结果,具体实现如下:

1. 定义击杀组合规则

推荐用对象映射表来存储规则,查询效率更高(O(1)),结构也更清晰:

// 键格式为 "攻击者类型-受害者类型",值为对应的击杀结果
const killOutcomeMap = {
  "Classic-Oxford": "No special effect",
  "Classic-Poison": "Victim is eliminated, the attacker receives 2-day death countdown",
  // 在这里补充剩下的142种组合...
};

如果觉得键的拼接不够直观,也可以用数组存储对象的形式:

const killOutcomes = [
  { attacker: "Classic", victim: "Oxford", outcome: "No special effect" },
  { attacker: "Classic", victim: "Poison", outcome: "Victim is eliminated, the attacker receives 2-day death countdown" },
  // 补充其他组合...
];

2. 重构查询函数

根据上面的规则结构,修改checkSelection函数,直接查询匹配的结果:

用对象映射表的版本(推荐)

function checkSelection() {
  // 直接获取下拉框当前选中值
  const attacker = attackerSel.value;
  const victim = victimSel.value;
  const resultElement = document.querySelector('#outcome');
  
  // 拼接查询键,找不到结果时显示默认文本
  const ruleKey = `${attacker}-${victim}`;
  resultElement.textContent = killOutcomeMap[ruleKey] || "Unknown outcome";
}

用数组的版本

function checkSelection() {
  const attacker = attackerSel.value;
  const victim = victimSel.value;
  const resultElement = document.querySelector('#outcome');
  
  // 在数组中查找匹配的组合
  const matchedRule = killOutcomes.find(rule => 
    rule.attacker === attacker && rule.victim === victim
  );
  
  // 显示结果,找不到则用默认文本
  resultElement.textContent = matchedRule ? matchedRule.outcome : "Unknown outcome";
}

3. 修正原代码的问题

原代码里的作用域、事件监听和setInterval用法都有问题,直接替换成下面的完整代码即可:

// 1. 定义所有击杀规则
const killOutcomeMap = {
  "Classic-Oxford": "No special effect",
  "Classic-Poison": "Victim is eliminated, the attacker receives 2-day death countdown",
  // 补充剩余组合...
};

// 2. 获取DOM元素
const attackerSel = document.querySelector('#attackerSel');
const victimSel = document.querySelector('#victimSel');

// 3. 定义结果查询函数
function checkSelection() {
  const attacker = attackerSel.value;
  const victim = victimSel.value;
  const resultElement = document.querySelector('#outcome');
  
  const ruleKey = `${attacker}-${victim}`;
  resultElement.textContent = killOutcomeMap[ruleKey] || "Unknown outcome";
}

// 4. 绑定事件:下拉框选项变化时更新结果
attackerSel.addEventListener('change', checkSelection);
victimSel.addEventListener('change', checkSelection);

// 5. 页面加载时默认执行一次,显示初始选中项的结果
checkSelection();

关键修正点:

  • 去掉了无效的setInterval:不需要定时轮询,监听下拉框的change事件就能实时响应
  • 解决了作用域问题:直接通过DOM元素获取当前选中值,不用在回调里维护变量
  • 事件监听逻辑简化:两个下拉框都绑定同一个查询函数,代码更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:32:10