Поместите ваш sides
в массив и используйте arc4random_uniform
для выполнения броска:
let sides = [1, 2, 3, 4, 8]
let roll = sides[Int(arc4random_uniform(UInt32(sides.count)))]
если возможно, мне нужно 4 и 8 номеров, чтобы они приходили на 20% чаще
Это означает, что 4
и 8
должны появляться 6 раз при каждом появлении других 5. Поэтому поместите 5 каждого из 1
- 3
в ваш массив и 6 каждого из 4
и 8
:
let sides = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8]
let roll = sides[Int(arc4random_uniform(UInt32(sides.count)))]
Кроме того, проверьте Функция MartinR's randomNumber(probabilities:)
.
Вы бы использовали его функцию так:
let sides = [1, 2, 3, 4, 8]
let probabilities = [1.0, 1.0, 1.0, 1.2, 1.2]
let rand = randomNumber(probabilities: probabilities)
let roll = sides[rand]