JS增量游戏实现点击关联声望增长及数值缩放的方案咨询
实现方案
逻辑拆解
- 基础声望获取:逐次提升获取声望所需的点击门槛,首次50次点击得1点声望,后续每次门槛提升10次,符合动态增量要求
- 大数值缩放:采用对数平方函数做平滑效率加成,累计点击量越高,单位点击获得的声望越多,500万点击时效率可达初始值的100倍左右,适配全阶段数值体系
完整可运行代码
let score = 0; let reputation = 0; // 状态配置变量,可根据游戏平衡调整 let lastRepCheckScore = 0; // 上次结算声望时的累计点击数 let baseRepReq = 50; // 首次获取1点声望需要的点击数 let repReqIncrement = 10; // 每获得1点声望,下次门槛提升的数值 let efficiencyScale = 2.2; // 效率缩放系数,数值越大后期声望增长越快 function addToScore(amount) { score += amount; document.getElementById("score").innerHTML = formatNumber(score); const newClickSinceLastCheck = score - lastRepCheckScore; if (newClickSinceLastCheck <= 0) return; // 计算当前效率乘数,点击量越高效率越高,平滑增长无跳变 const efficiencyMultiplier = 1 + Math.pow(Math.log10(Math.max(1, score)), 2) * efficiencyScale; // 计算本次可获得的声望 const repGain = Math.floor(newClickSinceLastCheck / baseRepReq * efficiencyMultiplier); if (repGain > 0) { reputation += repGain; // 保留未满足门槛的剩余点击量,不会浪费玩家点击 lastRepCheckScore = score - (newClickSinceLastCheck % baseRepReq); // 同步提升后续声望获取门槛 baseRepReq += repReqIncrement * repGain; document.getElementById("reputation").innerHTML = formatNumber(reputation); } } // 可选:大数格式化工具,避免页面显示超长数字 function formatNumber(num) { if (num >= 1e9) return (num / 1e9).toFixed(2) + 'B'; if (num >= 1e6) return (num / 1e6).toFixed(2) + 'M'; if (num >= 1e3) return (num / 1e3).toFixed(2) + 'K'; return num.toString(); }
参数调整说明
- 调大
repReqIncrement可以放慢前期声望获取速度,调小则加快 - 调大
efficiencyScale可以提升后期声望获取效率,可根据实际游戏体验调整到合适的数值 - 剩余点击量保留逻辑保证玩家不会因为单次点击量不足门槛而损失进度,体验更友好
内容的提问来源于stack exchange,提问作者Dominick
相关产品推荐
相关产品推荐

