利用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<probs.length;i++)
			{
				total+=probs[i];
				
			}
			var rd :int = Math.random() * total;
			for(var j:int=0;j<probs.length;j++)
				
			{
				if(rd<probs[j])
				{
					return j;
				}
				else
				
				{
					rd-=probs[j];
				}
			}
			return probs.length-1;
		}
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值