有一需求是这样的:

游戏当中有3中类型的boss,分别为:紫色boss(boss1)刷出的概率为0.7,金色boss(boss2)刷出的概率0.2,红色boss(boss3)刷出的概率0.1,如何使用代码实现这三种boss出现的概率。

配置表如下:

{
	0:{probability:7},
	1:{probability:2},
	2:{probability:1}
}

通过分析上面的需求,可以用如下简单的代码实现(demo):

// 生成随机数包含边界
function randRange(from, to) {
  return from + Math.floor(Math.random() * (to - from + 1));
}

var odds = randRange(1,10);
if(odds >= 1 && odds <= 7) // boss1
if(odds >= 8 && odds <= 9) // boss2
if(odds == 10) //boss3

但是这种方式很局限,万一需求改变了怎么办(比如多了一种类型的boss,或则boss1的概率改变了)。

// 生成随机数包含边界
function randRange(from, to) {
  return from + Math.floor(Math.random() * (to - from + 1));
}

function randomBoss(){
	// bossList为配置表
	// 计算随机范围
	var max = 0;
	for(var i in bossList){
	 max += bossList[i].probability;
	}
	var odds = randRange(1,max);

	var sum = 0;
	var bossType = "";// 最后随机出来的boss
	for (var i in bossList) {
		sum += parseInt(bossList[i].probability);
		if (odds <= sum && !boss) {
			bossType = i;
		}
	}
	return bossType;
}

这样无论配置表如何变化,以上代码都能满足要求!

文章只是用来记录自己的程序人生,很多想法可能还很稚嫩,请多包容!