利用Math.random()方法实现几率

Math.random()中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数,在种子数的基础上进行一定的交换,从而产生需要的随机数字。在实际的项目开发过程中,经常需要产生一些随机数值,例如网站登录中的校验数字等,或者需要以一定的几率实现某种效果,游戏程序中的物品掉落,抽奖程序等。

废话少说直接上代码:

package
{
	import flash.display.Sprite;
	
	public class RandomTest extends Sprite
	{
		public function RandomTest()
		{
			//50%几率 出现 10,40%几率出现 5,10%几率出现 1;
			//Math.random() 返回一个伪随机数 n,其中 0 <= n < 1
			var n :int;//随机数字  
			var m :int;//结果数字  
			var resArr :Array = [0,0,0];//结果数组统计
			for(var i :int = 0;i < 1000;i++)
			{
				n = Math.random() * 100;
				if(n < 50)////50个数字的区间,50%的几率  
				{
					m = 10;
					resArr[0]++;
				}
				else if(n < 90)//[50,90),40个数字的区间,40%的几率
				{
					m = 5;
					resArr[1]++
				}
				else//其他
				{
					m = 1;
					resArr[2]++
				}
			}
			trace(resArr);
		}
	}
}


通过测试可以看出,10,5,1 出现的几率基本上与预想的500,400,100很接近,基本可以达到了要求.


有时候当我们的游戏人物遇敌时,我们需我怪物随机根据概率选择处理方式,如下:

1、50%的机会友好的问候

2、25%的几率走开

3、10%的机会立即攻击

4、10%的机会提供金钱作为礼物

5、5%的机会跳钢管舞


下面的这个算法就是跟据概率数组,返回选择的概率索引号。

(as3 实现)


package
{
	
	import flash.display.Sprite;
	
	public class Test extends Sprite
	{
		public function Test()
		{
			var probs :Array = [50,25,10,10,5];
			for(var i:int = 0;i<10;i++)
			{
				var resI :int = Choose(probs);
				trace(resI);
			}
		}
		private function Choose(probs :Array):int
		{
			var total :int = 0;
			//首先计算出概率的总值,用来计算随机范围
			
			for(var i:int=0;i



你可能感兴趣的:(大话技术)