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

Node.js中能否将数组项作为布尔值使用以追踪游戏解锁结局?

原实现可行性说明

你当前的实现无法达到预期效果,存在几处明显问题:

  • 数组仅存储布尔值,没有绑定对应结局的名称标识,遍历过程中无法输出end1这类结局名称
  • 判断逻辑中误用赋值运算符=替代了相等判断运算符===,会强制将所有结局状态改为true,导致统计完全错误
  • 完成度计算时额外给总长度加了1,会导致总结局数统计错误,总数量直接取endings.length即可
推荐实现方案

方案1:对象数组存储(扩展性最优)

适合需要后续给结局加描述、解锁提示、成就奖励等附加信息的场景,是游戏开发中最常用的实现方式:

// 预先配置所有结局基础信息
const endings = [
  { id: 'end1', unlocked: true },
  { id: 'end2', unlocked: true },
  { id: 'end3', unlocked: false },
  { id: 'end4', unlocked: true },
  { id: 'end5', unlocked: false }
]

function listEndings() {
  console.log("You have found these endings:")
  const unlockedList = endings.filter(item => item.unlocked)
  unlockedList.forEach(item => console.log(item.id))
  const completeRate = Math.round((unlockedList.length / endings.length) * 100)
  console.log(`\nIn total you have ${unlockedList.length}/${endings.length} endings. (${completeRate}%)`)
}

需要解锁对应结局时,直接修改对应项的unlocked值即可:

// 解锁end3
endings.find(item => item.id === 'end3').unlocked = true

方案2:Set存储(轻量简洁)

如果不需要存储结局附加信息,只需要基础的解锁记录功能,可以用Set实现,代码更精简:

// 存储所有已解锁的结局ID
const unlockedEndings = new Set(['end1', 'end2', 'end4'])
// 固定总结局数
const TOTAL_ENDINGS = 5

function listEndings() {
  console.log("You have found these endings:")
  unlockedEndings.forEach(endId => console.log(endId))
  const completeRate = Math.round((unlockedEndings.size / TOTAL_ENDINGS) * 100)
  console.log(`\nIn total you have ${unlockedEndings.size}/${TOTAL_ENDINGS} endings. (${completeRate}%)`)
}

解锁新结局时调用add方法即可,天然支持去重,不会重复统计:

// 解锁end3
unlockedEndings.add('end3')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:48:04