根据权重做随机选择的算法

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 .... 这里就选着出来了
      }

  }

以上代码是有些案列。

猜你喜欢

转载自blog.csdn.net/qq_46063425/article/details/127890319