设置数组中元素出现的机会



例如,我在一个数组中有3个元素:

public function randomTile():Number
{
var tiles:Array = new Array(fire,ice,water);
var index:Number=Math.floor(Math.random()*tiles.length);
return tiles[index];
}

如何设置火灾(70%)、冰(10%)和水(20%)发生的几率?

这应该适用于任何数量的元素,并且可以指定任何机会值。

var tiles:Array = [
  {"item":"fire", "chance":70 },
  {"item":"ice",  "chance":10 },
  {"item":"water","chance":20}
];
var picked:Object = pickRandomByChance(tiles);
trace(picked.item);
public function pickRandomByChance(options:Array):Object
{
  var copy:Array = [];
  var range:Number = 0;
  for (var i:int = 0; i < options.length; i++) 
  {
    copy.push( { "item":options[i].item, "chance":options[i].chance } );
    range += copy[i].chance;
    if (i > 0)
      copy[i].chance += copy[i - 1].chance;
  }
  var pick:Number = Math.floor(Math.random() * range);
  for (i = 0; i < copy.length; i++)
  {
    if (pick <= copy[i].chance)
      return copy[i];
  }
  return null;
}

有很多方法可以做到这一点,这在很大程度上取决于您的项目范围。如果你只有这三个元素,那么使用switch语句会很容易:

var rand:Number = Math.random();
switch(true){
    case rand >= .3:
        //use fire
        break;
    case rand >= .1
        //use water
        break;
    default:
        //use ice
}

其他人可能有更好的方法,尽管

最新更新