
Код AS3:
var mass:Array = [10,10,20,10,10,10,100,10,10,10];
var variant:Array = [1,2,3,4,5,6,7,8,9,0];
function Chance(arr:Array):int {
var len:uint = arr.length;
var sum:Number = 0;
for (var i:uint = 0; i<len; i++) {
sum += arr[i];
}
var rand:Number = Math.random();
var sum2:Number = 0;
var num:int = 0;
for (var k:uint = 0; k<len; k++) {
sum2 += arr[k] / sum;
if (rand<=sum2) {
num = k;
break;
}
}
return num;
}
//test
var test:Object = {}
for (var n = 0; n<10000; n++){
var num:int = Chance(mass)
if(!test[num]){
test[num] = 0;
}
test[num]++;
}
for (var names in test){
trace(variant[names]+" "+test[names]);
}
/*
1 562
2 552
3 977
4 532
5 466
6 514
7 4937
8 511
9 502
0 447
*/
Суммируем всё = это будет 100% (т.е. еденица);
делаем рандом
перебираем всё в цикле и плюсуем в переменную пока переменная не достигнет рандома. то что будет достигнуто рандомом и будет индексом в массиве чисел по шансу