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
相关产品推荐
相关产品推荐

