微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用概率并将它们插入到我的其他函数中?

如何解决如何使用概率并将它们插入到我的其他函数中?

//Catchfish
function catchFish() {
  if (character === "steve") {
    // STEVE PROBABILITIES: cod (70%),salmon (20%),tropical (5%),puffer (5%)
    simulateCatch (70%,20%,5%,5%);
  
  } else if (character === "alex") {
    // ALEX PROBABILITIES: cod (10%),salmon (10%),tropical (30%),puffer (50%)
    simulateCatch(10%,10%,30%,50%);

  } else if (character === "villager") {
    // VILLAGER PROBABILITIES: cod (25%),salmon (25%),tropical (25%),puffer (25%)
    simulateCatch(25%,25%,25%);
  }
}

我如何模拟Catch?我不知道怎么做并将概率发送回 catchFish

解决方法

这个想法是生成一个 0 到 1 之间的随机数,然后减去每种鱼的每个连续概率,直到滚动值小于 0。但是请注意,这假定概率在 0 到 1 之间,总和为 1。否则,它将无法正常工作。

// Returns an index of the randomly selected item
function simulateCatch(probabilities)
{
    let roll = Math.random();
  
    for (let i = 0; i < probabilities.length; i++)
    {
      roll -= probabilities[i];
      if (roll <= 0) return i;
    }
    // never gets to this point,assuming the probabilities sum up to 1
}

var fishArray = ["cod","salmon","tropical","puffer"]

//Catchfish
function catchFish(character) {
  if (character === "steve") {
    // STEVE PROBABILITIES: cod (70%),salmon (20%),tropical (5%),puffer (5%)
    return simulateCatch ([0.7,0.2,0.05,0.05]);
  
  } else if (character === "alex") {
    // ALEX PROBABILITIES: cod (10%),salmon (10%),tropical (30%),puffer (50%)
    return simulateCatch([0.1,0.1,0.3,0.5]);

  } else if (character === "villager") {
    // VILLAGER PROBABILITIES: cod (25%),salmon (25%),tropical (25%),puffer (25%)
    return simulateCatch([0.25,0.25,0.25]);
  }
}

function test()
{
  console.log(fishArray[catchFish("steve")])
  console.log(fishArray[catchFish("alex")])
}

test()

,

你可以这样定义函数

PATH

并像这样更新您的 catchFish

function simulateCatch(character,cod,salmon,tropical,puffer){
return `${character.toUpperCase()} PROBABILITIES: cod (${cod}%),salmon (${salmon}%),tropical (${tropical}%),puffer (${puffer})`;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。