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

JavaScript保龄球模拟器开发问题:投球数值超限与剩余瓶数计算

解决保龄球模拟器的投球数值合理性问题

嘿,很高兴看到你在开发保龄球模拟器!这个问题其实是贴合保龄球核心规则的关键点,咱们一步步来把它搞定。

首先得明确保龄球单轮(前9轮)的投球规则:

  • 如果第一次投球就击倒全部10瓶(全中),这一轮直接结束,不需要第二次投球
  • 如果第一次没全中,第二次投球最多只能击倒「10减去第一次击倒数量」的瓶数,这样两次总和绝对不会超过10

基于你已经有生成0-10随机数的函数,咱们可以把投球逻辑改成依赖第一次结果的形式,比如:

假设你原有的随机函数是这样的:

// 生成0到max之间的随机整数(包含max)
function getRandomPinCount(max) {
  return Math.floor(Math.random() * (max + 1));
}

那生成单轮投球结果的函数可以写成:

function generateValidFramePins() {
  const firstRoll = getRandomPinCount(10);
  
  // 全中情况:直接返回第一次的结果,不需要第二次投球
  if (firstRoll === 10) {
    return [firstRoll];
  }
  
  // 非全中情况:第二次投球的上限是10减去第一次击倒的数量
  const secondRoll = getRandomPinCount(10 - firstRoll);
  return [firstRoll, secondRoll];
}

逻辑解释

  • 当第一次投出6瓶时,10 - firstRoll就是4,所以第二次会生成0到4之间的随机数,正好符合你说的合理数值范围
  • 这样生成的两次投球总和永远不会超过10,完美解决了你之前遇到的总和超限问题

另外补充一句:如果之后要处理第10轮的特殊规则(全中或补中可以额外投1-2次),逻辑会稍微复杂一点,但前9轮用上面的代码就完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:05:11