首页 / 资讯中心 / 文章详情

WarriorJS 计分机制完全指南:得分来源、计算公式与高分策略

WarriorJS 计分机制完全指南:得分来源、计算公式与高分策略 ★ FEATURED ARTICLE
教育CLI【免费下载链接】warriorjs An exciting game of programming and Artificial Intelligence项目地址https://gitcode.com/gh_mirrors/wa/warriorjs点击查看免费下载WarriorJS 是一款编程与人工智能回合制游戏勇士Warrior的最终目标不只是到达楼梯而是在抵达楼梯的同时尽可能获得最高分。本文以官方玩家文档 docs/player/scoring.md 为骨架结合libs/scoring、libs/core等源码与测试完整拆解 WarriorJS 的计分规则哪些行为加分、哪些行为扣分、总分如何由三部分构成、等级Grade如何评定并给出可落地的高分实战策略。一句话总结计分规则你的目标是不仅到达楼梯还要获得你能获得的最高分。每个关卡都有多种得分途径也有可能导致扣分的危险行为通关后本关得分累加到你的总分total score中随你在整座塔Tower中的推进不断累积。一、得分来源Earning Points根据官方文档一个关卡内你可以在以下四类行为中获得分数行为得分规则击败敌人Defeat an enemy将该敌人的**最大生命值max health**加入你的得分营救俘虏Rescue a captive获得该俘虏对应的奖励分reward在奖励时间内通过关卡Pass the level within the bonus time获得剩余奖励时间作为分数每关的奖励时间逐回合递减击败所有敌人并营救所有俘虏Defeat all enemies and rescue all captives获得20% 整体奖励20% overall bonus1. 击败敌人得分 敌人的最大生命值击败敌人得分等于其最大生命值这一规则在源码中有明确体现libs/core/src/Unit.ts中定义了所有单位通用的reward属性其默认值就是最大生命值get reward(): number { return this.maxHealth; }也就是说普通敌人的身价与其最大生命值直接挂钩——血越厚的敌人击败它获得的分越多。以当前仓库libs/units/src中的单位为例SludgemaxHealth 12击败得 12 分Thick SludgemaxHealth 24击败得 24 分ArchermaxHealth 7击败得 7 分WizardmaxHealth 3击败得 3 分。具体加分的时机由Unit.damage()决定见 libs/core/src/Unit.ts当攻击把目标打死后若目标是敌人enemy攻击者earnPoints(receiver.reward)加分对应测试见 libs/core/src/Unit.test.ts。2. 营救俘虏获得固定奖励分俘虏Captive是特殊的友方单位营救它可以获得奖励。注意俘虏的reward被覆写为固定的 20 分与其极低的maxHealth1 点无关见 libs/units/src/Captive.tsclass Captive extends Unit { readonly name Captive; readonly maxHealth 1; readonly enemy false; override bound true; override get reward(): number { return 20; } }营救动作由Unit.release()实现libs/core/src/Unit.ts对非敌人单位先使其vanish()然后earnPoints(receiver.reward)。对应测试 libs/core/src/Unit.test.ts 验证了营救友方单位可获得与 reward 等值的分数。在战斗中触发营救的是 Rescue 能力调用warrior.rescue()即可释放前方被束缚的单位。3. 时间奖励奖励时间逐回合递减每个关卡都有一个初始时间奖励time bonus它随你行动的每个回合递减。通关时剩余的时间奖励全部计入得分。源码实现见 libs/scoring/src/getRemainingTimeBonus.tsfunction getRemainingTimeBonus(turns: ScoringEvent[][], timeBonus: number): number { const turnCount getTurnCount(turns); const remainingTimeBonus timeBonus - turnCount; return Math.max(remainingTimeBonus, 0); }其中getTurnCount就是turns.lengthlibs/scoring/src/getTurnCount.ts即你实际玩了多少个回合。因此使用回合越少剩余时间奖励越多若使用回合数超过初始 time bonus该项为 0不会扣成负数Math.max(..., 0)保证了下限。对应测试见 libs/scoring/src/getRemainingTimeBonus.test.ts初始 10、用了 3 回合得 7 分用了 11 回合则归 0。关卡配置timeBonus是关卡配置项见 libs/core/src/types.ts 中的LevelConfig。以官方塔 towers/the-narrow-path/src/index.ts 为例第 1 关timeBonus: 15第 2 关timeBonus: 20第 3 关timeBonus: 35第 4 关timeBonus: 45——随着难度递进时间奖励也更充裕。4. 全清奖励20% 整体奖励若你击败了所有敌人并营救出所有俘虏即关卡被完全清理地板上除勇士外没有任何单位将获得一份相当于勇士得分 时间奖励之和 20% 的整体奖励。源码实现见 libs/scoring/src/getClearBonus.tsfunction getClearBonus(turns: ScoringEvent[][], warriorScore: number, timeBonus: number): number { const lastEvent getLastEvent(turns); if (!isFloorClear(lastEvent.floorMap)) { return 0; } return Math.round((warriorScore timeBonus) * 0.2); }关键点清理判定isFloorClearlibs/scoring/src/isFloorClear.ts统计最终回合地图上除勇士外的单位数量unitCount 1只允许勇士自己才算清理完成计算基准(勇士得分 时间奖励) × 0.2结果四舍五入取整Math.round未清理则该项为 0即使你照样走到了楼梯、通过了关卡也拿不到这 20%。测试验证见 libs/scoring/src/getClearBonus.test.ts例如勇士得分 3、时间奖励 2、关卡已清理则Math.round((32)*0.2) 1。二、扣分来源Losing Points文档同时提醒你必须小心杀死一名俘虏kill a captive会招来惩罚。扣分的机制与加分共用同一套Unit.damage()逻辑libs/core/src/Unit.ts当你的攻击杀死一个目标时源码会检查目标isEnemy()——目标是敌人this.earnPoints(receiver.reward)加分目标不是敌人即友方例如俘虏this.losePoints(receiver.reward)减去等值分数也就是惩罚。对应测试见 libs/core/src/Unit.test.ts击杀友方单位会losePoints(10)。落实到实战中俘虏maxHealth只有 1 且处于束缚状态bound true任何一次攻击都可能误杀它从而损失 20 分并失去后续的营救奖励因此开战前务必用warrior.feel().getUnit()?.isEnemy()确认目标身份。三、总分构成getLevelScore 的三段式结构通关后本关得分由 libs/scoring/src/getLevelScore.ts 统一汇总返回一个包含三个组成部分的对象function getLevelScore({ passed, turns }: LevelResult, { timeBonus }: LevelConfig): LevelScore | null { if (!passed) { return null; } const warriorScore getWarriorScore(turns); const remainingTimeBonus getRemainingTimeBonus(turns, timeBonus); const clearBonus getClearBonus(turns, warriorScore, remainingTimeBonus); return { clearBonus, timeBonus: remainingTimeBonus, warrior: warriorScore, }; }字段含义来源warrior勇士在本关累计的击杀/营救净得分getWarriorScore.ts 读取最后一回合事件的warriorStatus.scoretimeBonus剩余时间奖励timeBonus - 回合数最低 0getRemainingTimeBonus.tsclearBonus全清 20% 奖励未全清为 0getClearBonus.ts勇士得分的来源getWarriorScore的实现非常直白从最后一回合的最后一个事件中读取勇士状态里的score字段libs/scoring/src/getWarriorScore.ts、libs/scoring/src/getLastEvent.ts。这个score由Warrior实时维护Unit.earnPoints()做this.score pointslosePoints()做this.score - pointslibs/core/src/Unit.ts并通过 Warrior.getStatus() 暴露{ health, score }供事件记录。也就是说你每一回合的击杀加分、误杀扣分都会实时累计进warriorStatus.score。总分的合成与等级评定在 CLI 层apps/cli/src/utils/buildLevelReport.ts 将三部分相加得到本关总分并依据关卡配置的aceScore计算等级const scoreParts getLevelScore(levelResult, { timeBonus: levelConfig.timeBonus ?? 0 })!; const totalScore scoreParts.warrior scoreParts.timeBonus scoreParts.clearBonus; const grade levelConfig.aceScore ? totalScore / levelConfig.aceScore : 0;总分warriortimeBonusclearBonus等级grade 总分 ÷aceScore每个关卡配置的满分基准见 libs/core/src/types.ts。等级字母由 libs/scoring/src/getGradeLetter.ts 映射对应测试见 getGradeLetter.test.ts等级数值字母 1.0S 0.9A 0.8B 0.7C 0.6D 0.6F等级会在结算界面展示apps/cli/src/ui/components/ResultScreen/ResultScreen.tsx并在史诗模式Epic Mode中用于计算平均等级与史诗分数见 apps/cli/src/Profile.ts 的tallyPoints、calculateAverageGrade、getEpicScoreWithGrade。四、实战高分策略综合文档规则与源码逻辑最大化总分可以归纳为四条核心策略少回合、快通关吃满时间奖励时间奖励随回合递减这是看得见的分数。每回合只做一件有意义的事WarriorJS 每回合只能执行一个动作提前规划好行走、攻击、休息的节奏避免无意义的空走与反复试探。通关回合数 ≥ timeBonus 时该项归 0且不影响其他两项所以时间奖励是锦上添花项但往往决定你能否达到 S 级。击败每一个敌人且只击杀敌人敌人身价 最大生命值血厚的 Thick Sludge24 分尤其值得优先击杀而俘虏只有 1 点血一个误击就会losePoints(20)——既丢了分又失去了营救奖励和全清资格双重损失。别漏掉任何俘虏每个俘虏固定 20 分且是触发全清奖励的必要条件之一。用isEnemy()/isBound()识别并rescue()不要用攻击去清场。追求全清拿到 20% 整体奖励全清奖励 (勇士得分 时间奖励) × 20%它是基于前两项的乘法型加成——你击杀越多、通关越快这个 20% 的绝对值就越大。这意味着绕开敌人直奔楼梯虽然能通过关卡却会损失掉全清奖励这最后一块拼图。以 towers/the-narrow-path/src/index.ts 第 1 关为例timeBonus: 15、aceScore: 10假设你 3 回合内击杀 1 只 Sludge 并全清通关则勇士得分 12、时间奖励 12、全清奖励Math.round(24 × 0.2) 5总分 29等级29 / 10 2.9轻松拿下 S 级。反过来如果拖到 16 回合以上且漏掉全清总分会显著缩水。五、小结WarriorJS 的计分体系清晰而克制加分项击杀、营救、时间奖励、全清 20% 加成与扣分项误杀俘虏共同决定了你的单关得分总分 勇士得分 时间奖励 全清奖励除以关卡aceScore得到 S/A/B/C/D/F 等级。理解这套规则后最优解不再是莽到楼梯而是快速、精准、零误伤地清理整个关卡——这正是 WarriorJS 鼓励玩家打磨 AI 决策逻辑的核心所在。相关实现与测试均可在仓库的 libs/scoring 与 libs/core/src/Unit.ts 中直接查阅验证。赞分享教育CLI【免费下载链接】warriorjs An exciting game of programming and Artificial Intelligence项目地址https://gitcode.com/gh_mirrors/wa/warriorjs点击查看免费下载相关推荐Lighthouse 评分机制完全解读Performance、Best Practices、SEO 与 Accessibility 得分究竟如何计算Lighthouse 评分机制完全解读Performance、Best Practices、SEO 与 Accessibility 得分究竟如何计算 Ligh开发工具测试性能测试前端OpenProject 项目属性Project Attributes完全指南创建、分组、格式与公式计算OpenProject 项目属性Project Attributes完全指南创建、分组、格式与公式计算 本文基于 OpenProject 官方系统管理员文后端前端项目管理企业应用协同办公SoapUI终极指南如何用免费开源工具轻松搞定API测试SoapUI终极指南如何用免费开源工具轻松搞定API测试 你是否曾为复杂的API测试而烦恼面对REST、SOAP、GraphQL等各种接口协议需要一个强大上一篇5分钟掌握Just让命令行任务自动化不再繁琐下一篇lazydocker鼠标支持终端环境下的图形化交互体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站