Показать сообщение отдельно
Старый 22.05.2011, 13:37
kseniya вне форума Посмотреть профиль Отправить личное сообщение для kseniya Найти все сообщения от kseniya
  № 18  
Ответить с цитированием
kseniya
 
Аватар для kseniya

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
Код 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% (т.е. еденица);
делаем рандом
перебираем всё в цикле и плюсуем в переменную пока переменная не достигнет рандома. то что будет достигнуто рандомом и будет индексом в массиве чисел по шансу


Последний раз редактировалось kseniya; 22.05.2011 в 14:53.