一切福田,不離方寸,從心而覓,感無不通。

随机物品权重算法设计

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

2、功能

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

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

3、实现

  1. public int weightRandom(BitSet exclude, int… weights) {
  2.         if (weights == null) {
  3.             //安全性验证
  4.         }
  5.         int length = weights.length;
  6.         if (length == 0) {
  7.             return –1;
  8.         }
  9.         if (len == 1) {
  10.             int w = weights[0];
  11.             if (w < 0) {
  12.                 //安全性验证
  13.             } else if (w == 0) {
  14.                 return –1;
  15.             } else {
  16.                 return 0;
  17.             }
  18.         }
  19.         int total = 0;
  20.         for (int i = 0; i < len; i++) {
  21.             if (exclude != null && exclude.get(i)) {
  22.                 continue;
  23.             }
  24.             int w = weights[i];
  25.             total += w;
  26.         }
  27.         if (total <= 0) {
  28.             return –1;
  29.         }
  30.         int randomNum = random(1, total), hitIndex = –1, partNum = 0;
  31.         for (int i = 0; i < len; i++) {
  32.             if (exclude != null && exclude.get(i)) {
  33.                 continue;
  34.             }
  35.             int w = weights[i];
  36.             partNum += w;
  37.             if (partNum >= randomNum) {
  38.                 hitIndex = i;
  39.                 break;
  40.             }
  41.         }
  42.         return hitIndex;
  43. }

from:http://blog.csdn.net/zeus_9i/article/details/11900015