1、随机选择算法。
要求是根据不同的权重值随机出现对应的气泡。
思路:
将所有的权重值相加,形成一个整体的区间[W1,W2],将每个权重都划分为小到子区间[w1,w2]。 每次做随机选择时,在整体的大区间[W1,W2]中随机选择一个数 s。查看s是在哪个子区间中就出现对应的气泡物体。
实现:(typeScript)
// 每一个东西的权重值,这里使用的数值来存储的
const DreamType = [
{
name:"dianzan",
type:"GoodDream",
value:150,
weight:1,
},{
name:"kaoshenghao",
type:"GoodDream",
value:100,
weight:3,
},{
name:"dangao",
type:"GoodDream",
value:100,
weight:3
},{
name:"lianggao",
type:"GoodDream",
value:50,
weight:5,
},{
name:"kele",
type:"GoodDream",
value:20,
weight:10,
},{
name:"zhawu",
type:"BadDream",
value:-50,
weight:8
},{
name:"meiqiguan",
type:"BadDream",
value:-80,
weight:4,
},{
name:"shaojiaodejianbing",
type:"BadDream",
weight:2,
value:-100,
}
]
// 随机位置
/**
*
* @param arr 整个美梦泡泡配置数组
* @param curIndex 当前截取的长度
* @returns 返回当前长度内中weight的数值
*/
// 获取数值
private _getWeight(
arr: Array<{
name: string; type: string; value: number; weight: number }>,
curIndex: number
): number {
if (arr.length <= curIndex) {
throw new Error(
"出入数值大于了当前的数值" + curIndex + "----arr.length:" + arr.length
);
}
let weights: number = 0;
arr.slice(0, curIndex + 1).forEach((item) => {
weights += item.weight;
});
return weights;
}
private _createDreamBubbles(): void {
let allWeight: number;
allWeight = this._getWeight(DreamType, DreamType.length - 1); //总的区间
let num = Math.round(Math.random() * allWeight); //生成随机数
if (num >= allWeight - this._getWeight(DreamType, i)) {
//以此查找区间
// TODO .... 这里就选着出来了
}
}
以上代码是有些案列。