随机物品权重算法设计

1、前言
在游戏开发中很多功能按权重随机给东西,比如:掉落、奖励、抽奖等等.....

2、功能

*)支持多个权重进行随机

*)能屏蔽指定权重,防止再次随机到

3、实现

 

public int weightRandom(BitSet exclude, int... weights) {

        if (weights == null) {

            //安全性验证

        }

        int length = weights.length;

        if (length == 0) {

            return -1;

        }



        if (len == 1) {

            int w = weights[0];

            if (w < 0) {

                //安全性验证

            } else if (w == 0) {

                return -1;

            } else {

                return 0;

            }

        }



        int total = 0;

        for (int i = 0; i < len; i++) {

            if (exclude != null && exclude.get(i)) {

                continue;

            }

            int w = weights[i];

            total += w;

        }

        if (total <= 0) {

            return -1;

        }

        int randomNum = random(1, total), hitIndex = -1, partNum = 0;

        for (int i = 0; i < len; i++) {

            if (exclude != null && exclude.get(i)) {

                continue;

            }

            int w = weights[i];

            partNum += w;

            if (partNum >= randomNum) {

                hitIndex = i;

                break;

            }

        }

        return hitIndex;

}

 

 

 

你可能感兴趣的:(算法)